Изменения

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

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

3107 байт добавлено, 01:26, 2 марта 2020
dropout impl
|definition= '''Аугментация данных''' (англ. ''data augmentation'') {{---}} это методика создания дополнительных данных из имеющихся данных.}}
Чаще всего, проблема ограниченного датасета возникает при решении задач, связанных с обработкой изображений. Следующие способы аугментации изображений являются самыми популярными:
[[Файл:BasicAugmentation.png|500px|thumb|right|Рис 1. Data augmentation exampleПример аугментации изображения]]
*Отображение по вертикали или горизонтали (''flipping'').
*Поворот изображения на определенный угол (''rotation'').
|definition= '''Дропаут''' (англ. ''dropout'') {{---}} метод регуляризации нейронной сети для предотвращения переобучения.}}
В обычной нейронной сети явление переобучения появляется из-за так называемой совместной адаптации (англ. ''co-adaptation''), то есть при обновлении весов нейрона, во время обучения [[Обратное распространение ошибки | методом обратного распространения ошибки]], учитывается деятельность остальных нейронов с целью минимизировать функцию потерь. Поэтому веса нейронов могут меняться, исправляя при этом ошибки других нейронов. Метод дропаута как раз предотвращает эту адаптацию.
 
[[Файл:DropoutExample.jpeg|400px|thumb|right|Рис 2. Пример применения метода дропаут]]
===Как работает дропаут===
Рассмотрим слой нейронной сети состоящий из <tex>H</tex> нейронов. Метод дропаут выключает нейрон с вероятностью <tex>p</tex>, соответственно, оставляет включенным с вероятностью <tex>q = 1 - p</tex>, причем вероятность выключения любого нейрона сети одинакова.
 
Пусть <tex>a(x)</tex> {{---}} функция активации, тогда применение дропаута для <tex>i</tex>-ого нейрона выглядит так: <tex>U_{i} = \Theta_{i}a(\sum\limits^{H}_{k=1} w_{k}x_{k} + b)</tex>,
 
где вероятность <tex>P(\Theta_{i}</tex><tex>=</tex><tex>0)</tex> <tex>= p</tex>.
 
Данная формула применяется на этапе обучения модели. Но так как на этом этапе нейрон остается в сети с вероятностью <tex>q</tex>, на этапе тестирования необходимо эмулировать поведение нейронной сети, использованного при обучении. Для этого результат выходного значения функции активации умножается на коэффициент <tex>q</tex>, то есть
на этапе тестирования: <tex>U_{i} = qa(\sum\limits^{H}_{k=1} w_{k}x_{k} + b)</tex>.
===Обратный дропаут===
Обратный дропаут (англ. ''inverted dropout'') отличается от обычного тем, что умножение на коэффициент происходит на этапе обучения, причем этот коэффициент равен обратной вероятности того, что нейрон останется в сети: <tex>\dfrac1{q}</tex>. А на этапе тестирования выходное значение нейрона остается таким же, как и в методе обратного распространения ошибки.
 
Таким образом, выходное значение <tex>i</tex>-ого нейрона на этапе обучения: <tex>U_{i} = \dfrac1{q}\Theta_{i}a(\sum\limits^{H}_{k=1} w_{k}x_{k} + b)</tex>, на этапе тестирования: <tex>U_{i} = a(\sum\limits^{H}_{k=1} w_{k}x_{k} + b)</tex>.
 
Обратная модификация дропаута на практике используется чаще обычной, потому что в ней не нужно изменять каждый раз модель для проведения этапа тестирования.
==Функции активации==
Рассмотрим нейрон Z с выходным значением <tex>Z = \sum\limits_{i} w_{i}x_{i} + bias</tex>, где <tex>w_{i}</tex> и <tex>x_{i}</tex> {{---}} вес и входное значение <tex>i</tex>-ого входа, а <tex>bias</tex> {{---}} смещение. Полученный результат передается в функцию активации, которая решает рассматривать этот нейрон как активированный, или его можно игнорировать.
[[Файл:BinaryStepFunction.jpg|300px|thumb|right|Рис 23. Binary step functionСтупенчатая функция]]
===Ступенчатая функция===
Ступенчатая функция (англ. ''binary step function'') является пороговой функцией активации.
Но она не работает, когда для классификации требуется большее число нейронов и количество возможных классов больше двух.
[[Файл:LinearFunction.jpg|300px|thumb|right|Рис 34. Linear functionЛинейная функция]]
===Линейная функция===
Линейная функция (англ. ''linear function'') представляет собой прямую линию, то есть <tex>Z = \sum\limits_{i} w_{i}x_{i}</tex>, а это значит, что выходное значение этой функции активации пропорционально входному. В отличии от предыдущей функции, она позволяет получить диапазон значений на выходе, а не только бинарные 0 и 1, что решает проблему классификации с большим количеством классов. Но у линейной функции есть две основных проблемы:
# Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результат которой является линейной функцией. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. Это значит, что любое количество слоев может быть заменено всего одним слоем.
[[Файл:SigmoidFunction.jpg|300px|thumb|right|Рис 45. Sigmoid functionСигмоидная функция]]
===Сигмоидная функция===
Сигмоидная функция (англ. ''sigmoid function''), которую также называет логистической функцией (англ. ''logistic function''), является гладкой монотонно возрастающей нелинейной функцией {{---}} <tex>\sigma(z) = \frac1dfrac1{1+e^{-z}}</tex>. И так как эта функция нелинейна, то ее можно использовать в нейронных сетях с множеством слоев, а также обучать эти сети методом обратного распространения ошибки. Сигмоида ограничена двумя горизонтальными асимптотами <tex>y = 1</tex> и <tex>y = 0</tex>, что дает нормализацию выходного значения каждого нейрона. Кроме того, для сигмоидной функции характерен гладкий градиент, который предотвращает "прыжки" при подсчете выходного значения. У этой функции есть еще одно преимущество, для значений <tex>x > 2</tex> и <tex>x < -2</tex>, <tex>y</tex> "прижимается" к одной из асимптот, что позволяет делать четкие предсказания классов.
Несмотря на множество сильных сторон сигмоидной функции, у нее есть значительные недостатки. Производная такой функции крайне мала во всех точках, кроме сравнительно небольшого промежутка. Это сильно усложняет процесс улучшения весов с помощью градиентного спуска. Более того, эта проблема усугубляется в случае, если модель содержит много слоев. Данная проблема называется проблемой исчезающего градиента.<ref>[https://en.wikipedia.org/wiki/Vanishing_gradient_problem Vanishing gradient problem, Wikipedia]</ref>
[[Файл:TanhFunction.jpg|300px|thumb|right|Рис 56. Tanh functionФункция гиперболического тангенса]]
===Функция гиперболического тангенса===
Функция гиперболического тангенса (англ. ''hyperbolic tangent'') имеет вид {{---}} <tex>tanh(z) = \frac2dfrac2{1+e^{-2z}} - 1</tex>. Эта функция является скорректированной сигмоидной функцей <tex>tanh(z) = 2 \cdot sigma(2z) - 1</tex>, то есть она сохраняет те же преимущества и недостатки, но уже для диапазона значений <tex>(-1; 1)</tex>.
[[Файл:ReLuFunction.jpg|300px|thumb|right|Рис 67. Функция ReLU]]===Функция ReLU===
Rectified Linear Unit {{---}} это наиболее часто используемая активационная функция при глубоком обучении. Данная функция возвращает 0, если принимает отрицательный вход, в случае же положительного входа, функция возвращает само число. То есть функция может быть записана как <tex>f(z)=max(0, z)</tex>. На первый взгляд может показаться, что она линейна и имеет те же проблемы что и линейная функция, но это не так и ее можно использовать в нейронных сетях с множеством слоев.
Функция ReLU обладает несколькими преимущества перед сигмоидой и гиперболическим тангенсом:
113
правок

Навигация