Какая функция не является популярной для использования в качестве функции активации в нейросетях

0
19

Практики реализации нейронных сетей

Функция Leaky ReLU

На практике LReLU используется не так часто. Практический результат использования LReLU вместо ReLU отличается не слишком сильно. Однако в случае использования Leaky требуется дополнительно настраивать гиперпараметр (уровень наклона при отрицательных значениях), что требует определенных усилий. Еще одной проблемой является то, что результат LReLU не всегда лучше чем при использовании обычного ReLU, поэтому чаще всего такой подход используют как альтернатива. Довольно часто на практике используется PReLU (Parametric ReLU), который позволяет добиться более значительных улучшений по сравнению с ReLU и LReLU. Также, в случае параметрической модификации ReLU, угол наклона не является гиперпараметром и настраивается нейросетью.

Функция гиперболического тангенса (англ. hyperbolic tangent) имеет вид: [math]tanh(z) = \dfrac2> — 1[/math] . Эта функция является скорректированной сигмоидной функцей [math]tanh(z) = 2 \cdot sigma(2z) — 1[/math] , то есть она сохраняет те же преимущества и недостатки, но уже для диапазона значений [math](-1; 1)[/math] .

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

Одной из проблем стандартного ReLU является затухающий, а именно нулевой, градиент при отрицательных значениях. При использовании обычного ReLU некоторые нейроны умирают, а отследить умирание нейронов не просто. Чтобы решить эту проблему иногда используется подход ReLU с «утечкой» (leak) — график функции активации на отрицательных значениях образует не горизонтальную прямую, а наклонную, с маленьким угловым коэффициентом (порядка 0,01). То есть она может быть записана как [math]\begin f(x) = \begin 0.01x, & \text\ x \lt 0 \\ x, & \text \\ \end \end[/math] . Такое небольшое отрицательное значение помогает добиться ненулевого градиента при отрицательных значениях. Однако, функция Leaky ReLU имеет некоторые недостатки:

Рассмотрим нейрон, у которого взвешенная сумма входов: [math]z = \sum\limits_ w_x_ + b[/math] , где [math]w_[/math] и [math]x_[/math] — вес и входное значение [math]i[/math] -ого входа, а [math]b[/math] — смещение. Полученный результат передается в функцию активации, которая решает рассматривать этот нейрон как активированный, или его можно игнорировать.

У данной функции есть один недостаток, называющийся проблемой умирающего ReLU [2] . Так как часть производной функции равна нулю, то и градиент для нее будет нулевым, а то это значит, что веса не будут изменяться во время спуска и нейронная сеть перестанет обучаться.

Эти три функции достались нам еще от «отцов основателей» НС. Они вполне работоспособны при небольшом числе скрытых слоев: до 7-8. Кроме первой: она иногда применяется для нейронов выходного слоя в задачах классификации, независимо от числа слоев НС. Но почему гиперболический тангенс и логистическая функция не подходят для больших НС? Это связано, прежде всего, с алгоритмом обучения back propagation. Если вы вспомните наше занятие о нем, то локальный градиент следующих с конца нейронов вычисляется примерно так:

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

ЧИТАТЬ ТАКЖЕ:  Нейросеть которая рисует картинку по тексту

Алгоритм дропаут

Обратный дропаут (англ. inverted dropout) отличается от обычного тем, что умножение на коэффициент происходит на этапе обучения, причем этот коэффициент равен обратной вероятности того, что нейрон останется в сети: [math]\dfrac1[/math] . А на этапе тестирования выходное значение нейрона остается таким же, как и в методе обратного распространения ошибки.

Ступенчатая функция (англ. binary step function) является пороговой функцией активации. То есть если [math]z[/math] больше или меньше некоторого значения, то нейрон становится активированным. Такая функция отлично работает для бинарной классификации. Но она не работает, когда для классификации требуется большее число нейронов и количество возможных классов больше двух.

Линейная функция (англ. linear function) представляет собой прямую линию, то есть [math]a(x) = \sum\limits_ c_x_[/math] , а это значит, что результат этой функции активации пропорционален переданному аргументу. В отличии от предыдущей функции, она позволяет получить диапазон значений на выходе, а не только бинарные 0 и 1, что решает проблему классификации с большим количеством классов. Но у линейной функции есть две основных проблемы:

Данная формула применяется на этапе обучения модели. Но так как на этом этапе нейрон остается в сети с вероятностью [math]q[/math] , на этапе тестирования необходимо эмулировать поведение нейронной сети, использованного при обучении. Для этого результат выходного значения функции активации умножается на коэффициент [math]q[/math] , то есть на этапе тестирования: [math]U_ = qa(\sum\limits^_ w_x_ + b)[/math] .

Rectified Linear Unit — это наиболее часто используемая функция активации при глубоком обучении. Данная функция возвращает 0, если принимает отрицательный аргумент, в случае же положительного аргумента, функция возвращает само число. То есть она может быть записана как [math]f(z)=max(0, z)[/math] . На первый взгляд может показаться, что она линейна и имеет те же проблемы что и линейная функция, но это не так и ее можно использовать в нейронных сетях с множеством слоев. Функция ReLU обладает несколькими преимущества перед сигмоидой и гиперболическим тангенсом:

Стоит отметить, что помимо проблемы умирающих нейронов, у ReLU есть и другая — проблема затухающего градиента [на 03.01.20 не создан] . При слишком большом количестве слоев градиент будет принимать очень маленькое значение, постепенно уменьшаясь до нуля. Из-за этого нейронная сеть работает нестабильно и неправильно. Leaky ReLU (LReLU) решает первую проблему, но в по-настоящему глубоких сетях проблема затухания градиента все еще встречается и при использовании этого подхода.

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

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь