Практики реализации нейронных сетей — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Sigmoid function)
Строка 19: Строка 19:
 
# Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результат которой является линейной функцией. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. Это значит, что любое количество слоев может быть заменено всего одним слоем.
 
# Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результат которой является линейной функцией. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. Это значит, что любое количество слоев может быть заменено всего одним слоем.
  
===Сигмоида===
+
[[Файл:SigmoidFunction.jpg|300px|thumb|right|Рис 3. Sigmoid function]]
У ступенчатых функций есть определенное количество ограничений, связанных с ее линейностью. Если функция активации является линейной, то независимо от количества складываемых скрытых слоев в нейронной сети, конечный результат по-прежнему будет являться линейной комбинацией исходных входных данных. Эта линейность означает, что она не может реально охватить сложность нелинейных задач, таких как оператор XOR или различные паттерны, разделенные кривыми или кругами. Другой проблемой является то, что перцептрон со ступенчатой ​​функцией не очень «стабилен», то есть может перейти из состояния 0 в 1 и из 0 в 1 при небольших изменениях в любом из весов входного слоя.  
+
===Сигмоидная функция===
 +
Сигмоидная функция (англ. ''sigmoid function''), которую также называет логистической функцией (англ. ''logistic function''), является гладкой монотонно возрастающей нелинейной функцией {{---}} <tex>\sigma(z) = \frac1{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>
 
 
[[Файл:sigmoid_function.png|border|500px|thumb|center|Рис 3. Sigmoid function]]
 
 
 
Sigmoid функция, в отличие от ступенчатой ​​функции, вводит нелинейность в выбранную модель нейронной сети. Нелинейность означает, что выход, получаемый из нейрона произведением некоторых входов <math>x (x_1, x_2, ..., x_m)</math> и весов <math>w (w_1, w_2, ..., w_m)</math> плюс смещение, преобразованный сигмоидной функцией, не может быть представлен ​​линейной комбинацией его входных сигналов.
 
  
 
===ReLU===
 
===ReLU===
Несмотря на множество сильных сторон sigmoid функции, у нее есть значительные недостатки. Производная такой функции крайне мала во всех точках, кроме сравнительно небольшого промежутка. Это сильно усложняет процесс улучшения весов с помощью градиентного спуска. Эта проблема усугубляется в случае, если модель содержит больше слоев. Данная проблема называется проблемой исчезающего градиента.<ref>[https://en.wikipedia.org/wiki/Vanishing_gradient_problem Vanishing gradient problem, Wikipedia]</ref>
 
 
 
Функция ReLU имеет производную равную 0 для всех отрицательных значениях и 1 для положительных. Таким образом, когда обучение происходит на датасетах разумного размера, обычно находятся точки данных, дающие положительные значения для любого выбранного узла. Таким образом, средняя производная редко бывает близка к 0, что позволяет продолжать градиентный спуск.
 
Функция ReLU имеет производную равную 0 для всех отрицательных значениях и 1 для положительных. Таким образом, когда обучение происходит на датасетах разумного размера, обычно находятся точки данных, дающие положительные значения для любого выбранного узла. Таким образом, средняя производная редко бывает близка к 0, что позволяет продолжать градиентный спуск.
  

Версия 23:47, 27 февраля 2020

Аугментация данных

Дропаут

Функции активации

Одним из важнейших аспектов глубокой нейронной сети являются функции активации.

Определение:
Функция активации (англ. activation function) определяет выходной сигнал нейрона в зависимости от результата взвешенной суммы входов и порогового значения.

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

Рис 1. Binary step function

Ступенчатая функция

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

Рис 2. Linear function

Линейная функция

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

  1. Невозможность использования метода обратного распространения ошибки. Так как в основе этого метода обучения лежит градиентный спуск, а для того чтобы его найти, нужно взять производную, которая для данной функции активации — константа и не зависит от входных значений. То есть при обновлении весов нельзя сказать улучшается ли эмпирический риск на текущем шаге или нет.
  2. Рассмотрим нейронную сеть с несколькими слоями с данной функцией активации. Так как для каждого слоя выходное значение линейно, то они образуют линейную комбинацию, результат которой является линейной функцией. То есть финальная функция активации на последнем слое зависит только от входных значений на первом слое. Это значит, что любое количество слоев может быть заменено всего одним слоем.
Рис 3. Sigmoid function

Сигмоидная функция

Сигмоидная функция (англ. sigmoid function), которую также называет логистической функцией (англ. logistic function), является гладкой монотонно возрастающей нелинейной функцией — [math]\sigma(z) = \frac1{1+e^{-z}}[/math]. И так как эта функция нелинейна, то ее можно использовать в нейронных сетях с множеством слоев, а также обучать эти сети методом обратного распространения ошибки. Сигмоида ограничена двумя горизонтальными асимптотами [math]y = 1[/math] и [math]y = 0[/math], что дает нормализацию выходного значения каждого нейрона. Кроме того, для сигмоидной функции характерен гладкий градиент, который предотвращает "прыжки" при подсчете выходного значения. У этой функции есть еще одно преимущество, для значений [math]x \gt 2[/math] и [math]x \lt -2[/math], [math]y[/math] "прижимается" к одной из асимптот, что позволяет делать четкие предсказания классов.

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

ReLU

Функция ReLU имеет производную равную 0 для всех отрицательных значениях и 1 для положительных. Таким образом, когда обучение происходит на датасетах разумного размера, обычно находятся точки данных, дающие положительные значения для любого выбранного узла. Таким образом, средняя производная редко бывает близка к 0, что позволяет продолжать градиентный спуск.

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

Рис 2. Rectified Linear Units

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

Функция гиперболического тангенса

См. также

Примечания

Источники информации