Актуальные темы
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Вы на собеседовании на должность ML Engineer в Tesla.
Интервьюер: Нам нужно развернуть нейронную сеть на аппаратном обеспечении автомобиля, но она не помещается в память. Как бы вы с этим справились?
Вы: Я использую дистилляцию знаний, чтобы обучить меньшую модель.
Собеседование завершено.
Вот что вы пропустили:
Дистилляция знаний требует недель вычислений, потому что по сути вы обучаете новую модель.
Но решение уже внутри вашей обученной сети.
Большинство нейронов - это мертвый груз - они потребляют память, но едва способствуют предсказаниям.
Давайте посмотрим, как их идентифицировать!
Вот шаги:
Шаг 1) Обучите нейронную сеть как обычно.
Шаг 2) Пропустите валидационный набор через обученную сеть, и для каждого нейрона в скрытых слоях вычислите:
- Среднюю активацию
- Дисперсию активаций (если активации могут быть отрицательными)
Проверьте это👇

Шаг 3) Удалите нейроны, которые имеют почти нулевое среднее значение активации и дисперсию, так как они имеют небольшое влияние на выход модели.
В идеале, постройте график производительности при различных порогах обрезки, чтобы выбрать модель, которая соответствует вашим компромиссам между размером и точностью.
Проверьте это 👇

Давайте посмотрим на код.
Мы начинаем с определения простой нейронной сети и ее обучения.
Поскольку мы позже будем вычислять активации на уровне нейронов для обрезки, мы возвращаем все промежуточные активации в прямом проходе.
Проверьте это👇

Далее мы определяем два списка с тремя элементами:
- Один будет хранить среднее значение активаций
- Другой будет хранить стандартное отклонение активаций
Мы пропускаем валидационный набор через нашу модель, чтобы вычислить эти статистики для каждого скрытого слоя.
Проверьте это 👇

На этом этапе давайте создадим график распределения статистики на уровне нейронов, которую мы сгенерировали выше.
Как показано ниже, средние активации большинства нейронов и их стандартное отклонение сильно распределены вокруг значений, близких к нулю.
Давайте попробуем обрезать их дальше.

Для обрезки мы проходим по списку порогов и:
- Создаем новую сеть и переносим веса, которые проходят порог.
- Оцениваем новую сеть и вычисляем общее количество параметров.
- Добавляем результаты в список.
Проверьте это 👇

Эта таблица сравнивает точность и уменьшение размера обрезанной модели по нескольким порогам относительно оригинальной модели.
При mean=0.1 и std-dev=0.4:
- Точность модели снижается на 0.08%.
- Размер модели уменьшается на 62%.
Это огромное сокращение.
Проверьте это 👇

Вот еще один интересный результат.
При mean=0.5 и std-dev=1:
- Точность модели снижается на 0.5%.
- Размер модели уменьшается на 74%.
Таким образом, мы получаем почти аналогичную производительность при 1/4 параметров.
Проверьте это 👇

Конечно, существует компромисс между точностью и размером. По мере уменьшения размера его точность снижается (посмотрите видео).
Но в большинстве случаев точность не является единственным показателем, который мы оптимизируем.
Вместо этого несколько операционных метрик, таких как эффективность, память и т. д., являются ключевыми факторами.
381
Топ
Рейтинг
Избранное
