machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Расширение PyTorch с помощью пользовательских функций активации

Дата публикации Jun 27, 2019

Введение

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

Функции активации

Функция активацииявляется важным строительным блоком для каждой нейронной сети. Мы можем выбрать из огромного списка популярных функций активации из популярных сред глубокого обучения, таких какРЕЛУ,сигмоид,Tanh, и многие другие.

Однако для создания современной модели, настроенной специально для вашей задачи, вам может понадобиться использовать пользовательскую функцию активации, которая отсутствует в используемой вами платформе Deep Learning. Функции активации можно условно разделить на следующие группы:

  1. Простые функции активациинравитсяSilu,Обратный квадратный корень (ISRU), Вы можете быстро реализовать эти функции, используя любую среду глубокого обучения.
  2. Функции активации с настраиваемыми параметраминравитсяМягкая Экспонентаактивация илиS-образный выпрямленный линейный блок (SReLU),
  3. Функции активации, которые не дифференцируемы в некоторых точкахи требуют пользовательской реализации обратного шага, например,Биполярный выпрямленный линейный блок (BReLU),

В этом уроке я рассмотрю примеры реализации и демонстрационные примеры для всех этих типов функций сPyTorchфреймворк. Вы можете найти весь код для этой статьина GitHub,

Настройка

Чтобы просмотреть примеры реализации функций активации, вам потребуется:

  • УстановитьPyTorch,
  • Чтобы добавить необходимый импорт в ваш скрипт,
Необходимый импорт
Подготовить набор данных

Последнее, что нужно сделать, - настроить функцию выборки, которая запускает процесс обучения модели и распечатывает потерю тренировки для каждой эпохи:

Типовая модель обучения

Теперь все готово для создания моделей с пользовательскими функциями активации.

Реализация простых функций активации

Самые простые общие функции активации

  • различимыи не нужно ручное выполнение обратного шага,
  • не имеют обучаемых параметров, Все их параметры должны быть установлены заранее.

Одним из примеров таких простых функций являетсяСигмовидная линейная единица или просто SiLUтакже известный как Swish-1:

Silu

Такая простая функция активации может быть реализована так же просто, как и функция Python:

Теперь SiLU можно использовать в моделях, созданных с помощью nn.Sequential:

Или в простой модели, которая расширяет класс nn.Module:

Реализация функции активации с обучаемыми параметрами

Существует множество функций активации с параметрами, которые можно тренировать с градиентным спуском во время тренировки модели. Отличным примером для одного из них являетсяМягкая Экспонентафункция:

Мягкая Экспонента

Для реализации функции активации с обучаемыми параметрами нам необходимо:

  • получить класс из nn.Module и сделать параметр одним из его членов,
  • оберните параметр как параметр PyTorch и установите для атрибута requireGrad значение True.

Вот пример для Soft Exponential:

И теперь мы можем использовать Soft Exponential в наших моделях следующим образом:

Реализация функции активации с пользовательским шагом назад

Прекрасный пример функции активации, которая требует реализации собственного шага назадBReLU(Биполярная выпрямленная линейная единица):

BReLU

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

Чтобы препятствовать пользовательской функции активации обратным шагом, мы должны:

  • создать класс, который наследует функцию от torch.autograd,
  • переопределить статический прямой и обратный методы. Прямой метод просто применяет функцию к вводу. Обратный метод вычисляет градиент функции потерь относительно входных данных, учитывая градиент функции потерь относительно выходных данных.

Давайте посмотрим на пример для BReLU:

Теперь мы можем использовать BReLU в наших моделях следующим образом:

Вывод

В этом уроке я рассмотрел:

  • Как создатьпростая пользовательская функция активациис PyTorch,
  • Как создатьфункция активации с настраиваемыми параметрами, который может быть обучен с использованием градиентного спуска,
  • Как создатьфункция активации с пользовательским шагом назад,

Весь код из этого урока доступен наGitHub, Другие примеры реализованных пользовательских функций активации дляPyTorchа такжеKerasвы можете найти вэтот репозиторий GitHub,

улучшение

При создании многих пользовательских функций активации я заметил, что они часто потребляют гораздо больше памяти GPU. Созданиена месте реализациипользовательских активаций с использованием методов PyTorch на месте улучшает эту ситуацию.

Дополнительные ссылки

Вот несколько ссылок на дополнительные ресурсы и дальнейшее чтение:

  1. Активация функций вики-страницы
  2. Учебник по расширению PyTorch

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map