Изменения

Перейти к: навигация, поиск

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

2495 байт добавлено, 23:47, 5 марта 2020
м
Нет описания правки
|definition= '''Аугментация данных''' (англ. ''data augmentation'') {{---}} это методика создания дополнительных данных из имеющихся данных.}}
Чаще всего, проблема ограниченного набора данных возникает при решении задач, связанных с обработкой изображений. Следующие способы аугментации изображений являются самыми популярными:
[[Файл:BasicAugmentationAugmentation.png|500px400px|thumb|right|Рис 1. Пример аугментации изображенияa) Исходное изображение. b) Отображение по горизонтали. c) Вращение. d) Отступ. <br> e) Увеличение яркости и контрастности. f) Вырезание. <br> g) Добавление шума. h) Изменение RGB каналов.]]
*Отображение по вертикали или горизонтали (англ. ''flipping'').
*Поворот изображения на определенный угол (англ. ''rotation'').
В обычной нейронной сети явление переобучения появляется из-за так называемой совместной адаптации (англ. ''co-adaptation''), то есть при обновлении весов нейрона, во время обучения [[Обратное распространение ошибки | методом обратного распространения ошибки]], учитывается деятельность остальных нейронов с целью минимизировать функцию потерь. Поэтому веса нейронов могут меняться, исправляя при этом ошибки других нейронов. Метод дропаута как раз предотвращает эту адаптацию.
[[Файл:DropoutExampleNewDropoutExample.jpeg|400px|thumb|right|Рис 2. Пример a) Стандартная нейронная сеть. <br> b) Нейронная сеть после применения метода дропаутдропаута.]]
===Алгоритм дропаут===
Рассмотрим слой нейронной сети состоящий из <tex>H</tex> нейронов. Метод дропаут выключает нейрон с вероятностью <tex>p</tex>, соответственно, оставляет включенным с вероятностью <tex>q = 1 - p</tex>, причем вероятность выключения любого нейрона сети одинакова.
# Невозможность использования метода обратного распространения ошибки. Так как в основе этого метода обучения лежит [[Стохастический градиентный спуск | градиентный спуск]], а для того чтобы его найти, нужно взять производную, которая для данной функции активации {{---}} константа и не зависит от входных значений. То есть при обновлении весов нельзя сказать улучшается ли эмпирический риск на текущем шаге или нет.
# Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результатом которой является линейная функция. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. А это значит, что любое количество слоев может быть заменено всего одним слоем, и, следовательно, нет смысла создавать многослойную сеть.
 
Главное отличие линейной функции от остальных в том, что ее область определения не ограничена: <tex>(-\infty; +\infty)</tex>. Следовательно, ее нужно использовать, когда выходное значение нейрона должно <tex>\in \mathbb R</tex>, а не ограниченному интервалу.
[[Файл:SigmoidFunction.jpg|200px|thumb|right|Рис 5. Сигмоидная функция]]
Несмотря на множество сильных сторон сигмоидной функции, у нее есть значительный недостаток. Производная такой функции крайне мала во всех точках, кроме сравнительно небольшого промежутка. Это сильно усложняет процесс улучшения весов с помощью градиентного спуска. Более того, эта проблема усугубляется в случае, если модель содержит много слоев. Данная проблема называется проблемой исчезающего градиента.<ref>[https://en.wikipedia.org/wiki/Vanishing_gradient_problem Vanishing gradient problem, Wikipedia]</ref>
 
Что касается использования сигмоидной функции, то ее преимущество над другими {{---}} в нормализации выходного значения. Иногда, это бывает крайне необходимо. К примеру, когда итоговое значение слоя должно представлять вероятность случайной величины. Кроме того, эту функцию удобно применять при решении задачи классификации, благодаря свойству "прижимания" к асимптотам.
[[Файл:TanhFunction.jpg|200px|thumb|right|Рис 6. Функция гиперболического тангенса]]
===Функция гиперболического тангенса===
Функция гиперболического тангенса (англ. ''hyperbolic tangent'') имеет вид: <tex>tanh(z) = \dfrac2{1+e^{-2z}} - 1</tex>. Эта функция является скорректированной сигмоидной функцей <tex>tanh(z) = 2 \cdot sigma(2z) - 1</tex>, то есть она сохраняет те же преимущества и недостатки, но уже для диапазона значений <tex>(-1; 1)</tex>. Основное отличие тангенциальной функции от  Обычно, <tex>tanh</tex> является предпочтительнее сигмоиды состоит в томслучаях, когда нет необходимости в нормализации. Это происходит из-за того, что область определения данной функции активации центрирована относительно нуля, что снимает ограничение при подсчете градиента для перемещения в определенном направлении. Кроме того, производная гиперболического тангенса значительно выше вблизи нуля, что дает давая большую амплитуду градиентному спуску, а следовательно и более быструю сходимость.
[[Файл:ReLuFunction.jpg|200px|thumb|right|Рис 7. Функция ReLU]]
===Функция ReLU===
Rectified Linear Unit {{---}} это наиболее часто используемая активационная функция активации при глубоком обучении. Данная функция возвращает 0, если принимает отрицательный аргумент, в случае же положительного аргумента, функция возвращает само число. То есть она может быть записана как <tex>f(z)=max(0, z)</tex>. На первый взгляд может показаться, что она линейна и имеет те же проблемы что и линейная функция, но это не так и ее можно использовать в нейронных сетях с множеством слоев.
Функция ReLU обладает несколькими преимущества перед сигмоидой и гиперболическим тангенсом:
# Очень быстро и просто считается производная. Для отрицательных значений {{---}} 0, для положительных {{---}} 1.
# Разреженность активации. В сетях с очень большим количеством нейронов использование сигмоидной функции или гиперболического тангенса в качестве активационный функции влечет активацию почти всех нейронов, что может сказаться на производительности обучения модели. Если же использовать ReLU, то количество включаемых нейронов станет меньше, в силу характеристик функции, и сама сеть станет легче.
 
У данной функции есть один недостаток, называющийся проблемой умирающего ReLU<ref>[https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Potential_problems Dying ReLU problem, Wikipedia]</ref>. Так как часть производной функции равна нулю, то и градиент для нее будет нулевым, а то это значит, что веса не будут изменяться во время спуска и нейронная сеть перестанет обучаться.
 
Функцию активации ReLU следует использовать, если нет особых требований для выходного значения нейрона, вроде неограниченной области определения. Но если после обучения модели результаты получились не оптимальные, то стоит перейти к другим функциям, которые могут дать лучший результат.
==См. также==
113
правок

Навигация