Дата публикации Jun 27, 2019
Сегодня глубокое обучение становится вирусным и применяется к различным проблемам машинного обучения, таким как распознавание изображений, распознавание речи, машинный перевод и другие. Существует широкий спектр настраиваемых архитектур нейронных сетей, которые могут удовлетворить практически любые проблемы при наличии достаточного количества данных. Каждая нейронная сеть должна быть разработана так, чтобы она достаточно хорошо подходила для данной проблемы Вы должны точно настроить гиперпараметры сети (скорость обучения, коэффициенты отсева, снижение веса и многие другие), а также количество скрытых слоев и количество единиц в каждом слое.Выбор правильной функции активации для каждого слоя также имеет решающее значение и может оказать существенное влияние на показатели метрик и скорость обучения модели.,
Функция активацииявляется важным строительным блоком для каждой нейронной сети. Мы можем выбрать из огромного списка популярных функций активации из популярных сред глубокого обучения, таких какРЕЛУ,сигмоид,Tanh, и многие другие.
Однако для создания современной модели, настроенной специально для вашей задачи, вам может понадобиться использовать пользовательскую функцию активации, которая отсутствует в используемой вами платформе Deep Learning. Функции активации можно условно разделить на следующие группы:
В этом уроке я рассмотрю примеры реализации и демонстрационные примеры для всех этих типов функций сPyTorchфреймворк. Вы можете найти весь код для этой статьина GitHub,
Чтобы просмотреть примеры реализации функций активации, вам потребуется:
Последнее, что нужно сделать, - настроить функцию выборки, которая запускает процесс обучения модели и распечатывает потерю тренировки для каждой эпохи:
Теперь все готово для создания моделей с пользовательскими функциями активации.
Самые простые общие функции активации
Одним из примеров таких простых функций являетсяСигмовидная линейная единица или просто SiLUтакже известный как Swish-1:
Такая простая функция активации может быть реализована так же просто, как и функция Python:
Теперь SiLU можно использовать в моделях, созданных с помощью nn.Sequential:
Или в простой модели, которая расширяет класс nn.Module:
Существует множество функций активации с параметрами, которые можно тренировать с градиентным спуском во время тренировки модели. Отличным примером для одного из них являетсяМягкая Экспонентафункция:
Для реализации функции активации с обучаемыми параметрами нам необходимо:
Вот пример для Soft Exponential:
И теперь мы можем использовать Soft Exponential в наших моделях следующим образом:
Прекрасный пример функции активации, которая требует реализации собственного шага назадBReLU(Биполярная выпрямленная линейная единица):
Эта функция не дифференцируется в 0, поэтому автоматическое вычисление градиента может завершиться неудачей. Вот почему мы должны предоставить собственный шаг назад для обеспечения стабильных вычислений.
Чтобы препятствовать пользовательской функции активации обратным шагом, мы должны:
Давайте посмотрим на пример для BReLU:
Теперь мы можем использовать BReLU в наших моделях следующим образом:
В этом уроке я рассмотрел:
Весь код из этого урока доступен наGitHub, Другие примеры реализованных пользовательских функций активации дляPyTorchа такжеKerasвы можете найти вэтот репозиторий GitHub,
При создании многих пользовательских функций активации я заметил, что они часто потребляют гораздо больше памяти GPU. Созданиена месте реализациипользовательских активаций с использованием методов PyTorch на месте улучшает эту ситуацию.
Вот несколько ссылок на дополнительные ресурсы и дальнейшее чтение:
© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map