Изменения

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

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

Нет изменений в размере, 00:55, 3 марта 2020
м
Нет описания правки
Рассмотрим нейрон, у которого взвешенная сумма входов: <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|300px200px|thumb|right|Рис 3. Ступенчатая функция]]
===Ступенчатая функция===
Ступенчатая функция (англ. ''binary step function'') является пороговой функцией активации.
Но она не работает, когда для классификации требуется большее число нейронов и количество возможных классов больше двух.
[[Файл:LinearFunction.jpg|300px200px|thumb|right|Рис 4. Линейная функция]]
===Линейная функция===
Линейная функция (англ. ''linear function'') представляет собой прямую линию, то есть <tex>a(x) = \sum\limits_{i} c_{i}x_{i}</tex>, а это значит, что результат этой функции активации пропорционален переданному аргументу. В отличии от предыдущей функции, она позволяет получить диапазон значений на выходе, а не только бинарные 0 и 1, что решает проблему классификации с большим количеством классов. Но у линейной функции есть две основных проблемы:
# Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результатом которой является линейная функция. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. А это значит, что любое количество слоев может быть заменено всего одним слоем, и, следовательно, нет смысла создавать многослойную сеть.
[[Файл:SigmoidFunction.jpg|300px200px|thumb|right|Рис 5. Сигмоидная функция]]
===Сигмоидная функция===
Сигмоидная функция (англ. ''sigmoid function''), которую также называет логистической (англ. ''logistic function''), является гладкой монотонно возрастающей нелинейной функцией: <tex>\sigma(z) = \dfrac1{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|300px200px|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>. Основное отличие тангенциальной функции от сигмоиды состоит в том, что производная гиперболического тангенса значительно выше вблизи нуля, что дает большую амплитуду градиентному спуску.
[[Файл:ReLuFunction.jpg|300px200px|thumb|right|Рис 7. Функция ReLU]]
===Функция ReLU===
Rectified Linear Unit {{---}} это наиболее часто используемая активационная функция при глубоком обучении. Данная функция возвращает 0, если принимает отрицательный аргумент, в случае же положительного аргумента, функция возвращает само число. То есть она может быть записана как <tex>f(z)=max(0, z)</tex>. На первый взгляд может показаться, что она линейна и имеет те же проблемы что и линейная функция, но это не так и ее можно использовать в нейронных сетях с множеством слоев.
113
правок

Навигация