Содержание статьи
Функции активации
Swish #
Классический вариант ReLU удобно реализовать с помощью функции max () . Реализация ее вариантов потребует создания константы или переменной a . Вариант инициализации будет зависеть от выбранной функции ( LReLU / PReLU / RReLU ). А внутри нашей функции активации создадим логическое разветвление, в зависимости от значение получаемого параметра.
Несмотря на множество сильных сторон сигмоидной функции, у нее есть значительный недостаток. Производная такой функции крайне мала во всех точках, кроме сравнительно небольшого промежутка. Это сильно усложняет процесс улучшения весов с помощью градиентного спуска. Более того, эта проблема усугубляется в случае, если модель содержит много слоев. Данная проблема называется проблемой исчезающего градиента. [1]
Альтернативой логистической функции активации является гиперболический тангенс ( Tanh ). Он так же, как и логистическая функция, имеет S -образный график, а значения функции нормализованы. Но они принадлежат диапазону от −1 до 1, и изменение состояния нейрона осуществляется в 2 раза быстрее. График функции также асимметричен, но в отличие от логистической функции центр асимметрии находится в центре координат.
Логистическая функция активации, наверное, самая распространенная S -образная функция. Значения функции находятся в диапазоне от 0 до 1, они асимметричны относительно точки [0, 0.5]. График функции напоминает пороговую функцию, но с плавным переходом между состояниями.
Следует отметить, что вычисление взвешенной суммы входов нейрона является линейной функцией. Применение линейной функции активации дает линейную функцию всего нейрона и нейронной сети. Данное свойство не позволяет использовать линейную функцию активации для решения нелинейных задач.
У данной функции есть один недостаток, называющийся проблемой умирающего ReLU [2] . Так как часть производной функции равна нулю, то и градиент для нее будет нулевым, а то это значит, что веса не будут изменяться во время спуска и нейронная сеть перестанет обучаться.
См. также
Функцию активации ReLU следует использовать, если нет особых требований для выходного значения нейрона, вроде неограниченной области определения. Но если после обучения модели результаты получились не оптимальные, то стоит перейти к другим функциям, которые могут дать лучший результат.
При глубоком обучении иногда можно столкнуться с ситуацией, когда набор данных имеет ограниченный размер. Но чтобы получить лучшие результаты обобщение модели, необходимо иметь больше данных, в том числе и различные их вариации. То есть необходимо увеличить размер исходного набора искусственным образом, и это можно сделать с помощью аугментации данных.
Реализовать данную функцию в виде программного кода MQL5 довольно легко. Константа theta определяет уровень, при достижении которого нейрон будет активирован. При вызове функции активации в параметрах передадим предварительно посчитанную взвешенную сумму исходных данных. Внутри функции сравним полученное в параметрах значение с уровнем активации theta и вернем значение активации нейрона.
Еще одна широко используемая функция активации нейронов — ReLU (выпрямленный линейный блок). При входящих значениях больше нуля функция возвращает само значение, подобно линейной функции активации. При значениях меньше или равном нулю функция всегда возвращает 0. Математически данная функция выражается формулой:
В октябре 2017 года команда исследователей из Google Brain провела работу по автоматическому поиску функций активации. Результаты этой работы были представлены в статье Searching for Activation Functions. В статье приведены результаты тестирования целого ряда функций в сравнении с ReLU. Наилучшие показатели были достигнуты в нейросетях с функцией активации Swish. Только замена ReLU на Swish (без переобучения) позволила улучшить показатели нейронных сетей.
Одной из проблем стандартного ReLU является затухающий, а именно нулевой, градиент при отрицательных значениях. При использовании обычного ReLU некоторые нейроны умирают, а отследить умирание нейронов не просто. Чтобы решить эту проблему иногда используется подход ReLU с «утечкой» (leak) — график функции активации на отрицательных значениях образует не горизонтальную прямую, а наклонную, с маленьким угловым коэффициентом (порядка 0,01). То есть она может быть записана как [math]\begin f(x) = \begin 0.01x, & \text\ x \lt 0 \\ x, & \text \\ \end \end[/math] . Такое небольшое отрицательное значение помогает добиться ненулевого градиента при отрицательных значениях. Однако, функция Leaky ReLU имеет некоторые недостатки:
Что касается использования сигмоидной функции, то ее преимущество над другими — в нормализации выходного значения. Иногда, это бывает крайне необходимо. К примеру, когда итоговое значение слоя должно представлять вероятность случайной величины. Кроме того, эту функцию удобно применять при решении задачи классификации, благодаря свойству «прижимания» к асимптотам.
В теле функции сначала проверяем размер массива исходных данных X . Полученный массив должен быть не нулевой длины. Затем изменяем размер массива для записи результатов Y . При неудачном выполнении какой-либо из операций выходим из функции с результатом false .