Содержание статьи
Функции активации
Функция ReLU
В октябре 2017 года команда исследователей из Google Brain провела работу по автоматическому поиску функций активации. Результаты этой работы были представлены в статье Searching for Activation Functions. В статье приведены результаты тестирования целого ряда функций в сравнении с ReLU. Наилучшие показатели были достигнуты в нейросетях с функцией активации Swish. Только замена ReLU на Swish (без переобучения) позволила улучшить показатели нейронных сетей.
Данная формула применяется на этапе обучения модели. Но так как на этом этапе нейрон остается в сети с вероятностью [math]q[/math] , на этапе тестирования необходимо эмулировать поведение нейронной сети, использованного при обучении. Для этого результат выходного значения функции активации умножается на коэффициент [math]q[/math] , то есть на этапе тестирования: [math]U_ = qa(\sum\limits^_ w_x_ + b)[/math] .
Реализация линейной функции активации в виде программного кода MQL5 требует создания двух констант: a и b . По аналогии с реализацией предыдущей функции активации, при вызове функции в параметрах передадим предварительно посчитанную взвешенную сумму исходных данных. Внутри функции реализация расчетной части умещается в одну строчку.
Функцию активации ReLU следует использовать, если нет особых требований для выходного значения нейрона, вроде неограниченной области определения. Но если после обучения модели результаты получились не оптимальные, то стоит перейти к другим функциям, которые могут дать лучший результат.
Обратный дропаут (англ. inverted dropout) отличается от обычного тем, что умножение на коэффициент происходит на этапе обучения, причем этот коэффициент равен обратной вероятности того, что нейрон останется в сети: [math]\dfrac1[/math] . А на этапе тестирования выходное значение нейрона остается таким же, как и в методе обратного распространения ошибки.
Но и она не лишена недостатков. При входных значения меньше −6 и больше 6 значение функции прижимается к границам диапазона значений функции, а производная стремится к нулю. Как следствие, градиент ошибки также стремится к нулю. Это приводит к снижению скорости обучения нейронной сети, а порой и вовсе делает сеть практически необучаемой.
Swish #
Стоит отметить, что помимо проблемы умирающих нейронов, у ReLU есть и другая — проблема затухающего градиента [на 03.01.20 не создан] . При слишком большом количестве слоев градиент будет принимать очень маленькое значение, постепенно уменьшаясь до нуля. Из-за этого нейронная сеть работает нестабильно и неправильно. Leaky ReLU (LReLU) решает первую проблему, но в по-настоящему глубоких сетях проблема затухания градиента все еще встречается и при использовании этого подхода.
Если выше рассмотренные функции рассчитывались на данных исключительно отдельно взятого нейрона, то функция Softmax применяется ко всем нейронам отдельного слоя сети (как правило, последнего). Наряду с сигмоидой, вводится понятие вероятности в нейронные сети. Диапазон значений функции лежит между 0 и 1, а сумма всех выходных значений нейронов взятого слоя равна 1.
Наверное, одной из самых сложных задач, которая становится перед архитектором нейронной сети, является выбор функции активации нейронов. Ведь именно функция активации создает нелинейность в нейронной сети. Во многом от выбора функции активации зависит процесс обучения нейронной сети и финальный результат в целом.
Одной из проблем стандартного ReLU является затухающий, а именно нулевой, градиент при отрицательных значениях. При использовании обычного ReLU некоторые нейроны умирают, а отследить умирание нейронов не просто. Чтобы решить эту проблему иногда используется подход ReLU с «утечкой» (leak) — график функции активации на отрицательных значениях образует не горизонтальную прямую, а наклонную, с маленьким угловым коэффициентом (порядка 0,01). То есть она может быть записана как [math]\begin f(x) = \begin 0.01x, & \text\ x \lt 0 \\ x, & \text \\ \end \end[/math] . Такое небольшое отрицательное значение помогает добиться ненулевого градиента при отрицательных значениях. Однако, функция Leaky ReLU имеет некоторые недостатки:
Что касается использования сигмоидной функции, то ее преимущество над другими — в нормализации выходного значения. Иногда, это бывает крайне необходимо. К примеру, когда итоговое значение слоя должно представлять вероятность случайной величины. Кроме того, эту функцию удобно применять при решении задачи классификации, благодаря свойству «прижимания» к асимптотам.
Еще одна широко используемая функция активации нейронов — ReLU (выпрямленный линейный блок). При входящих значениях больше нуля функция возвращает само значение, подобно линейной функции активации. При значениях меньше или равном нулю функция всегда возвращает 0. Математически данная функция выражается формулой:
При глубоком обучении иногда можно столкнуться с ситуацией, когда набор данных имеет ограниченный размер. Но чтобы получить лучшие результаты обобщение модели, необходимо иметь больше данных, в том числе и различные их вариации. То есть необходимо увеличить размер исходного набора искусственным образом, и это можно сделать с помощью аугментации данных.
Рассмотрим нейрон, у которого взвешенная сумма входов: [math]z = \sum\limits_ w_x_ + b[/math] , где [math]w_[/math] и [math]x_[/math] — вес и входное значение [math]i[/math] -ого входа, а [math]b[/math] — смещение. Полученный результат передается в функцию активации, которая решает рассматривать этот нейрон как активированный, или его можно игнорировать.