Демонстрация обратного распространения
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$

Алгоритм обратного распространения

Алгоритм обратного распространения необходим для быстрого обучения больших нейронных сетей. В этой статье объясняется, как работает алгоритм.

Пожалуйста, прокрутите вниз...

Простая нейронная сеть

Справа вы видите нейронную сеть с одним входным, одним выходным узлом и двумя скрытыми слоями по два узла в каждом.

Узлы в соседних слоях связаны весами \(w_{ij}\), которые являются параметрами сети.

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

Каждый узел имеет общий вход \(\color{input}x\), функцию активации \(f(\color{input}x\color{black})\)и выход \(\color{output}y\color{black}=f(\color{input}x\color{black})\). \(f(\color{input}x\color{black})\) должна быть нелинейной функцией, иначе нейронная сеть сможет обучаться только линейным моделям.

Обычно используемой функцией активации является сигмовидная функция : \(f(\color{input}x\color{black}) = \frac{1}{1+e^{-\color{input}x}}\).

Функция ошибки

Цель состоит в том, чтобы автоматически узнать веса сети из данных, чтобы прогнозируемый выход \(\color{output}y_{output}\)был близок к целевому \(\color{output}y_{target}\) для всех входов \(\color{input}x_{input}\).

Чтобы измерить, насколько мы далеки от цели, мы используем функцию ошибок \(E\). Обычно используемая функция ошибок — \(E(\color{output}y_{output}\color{black},\color{output}y_{target}\color{black}) = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2 \).

Прямое распространение

Начнем с того, что возьмем входной пример \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) и обновим входной слой сети.

Для согласованности мы считаем входные данные такими же, как и любой другой узел, но без функции активации, поэтому его выходные данные равны входным, т. е. \( \color{output}y_1 \color{black} = \color{input} x_{input} \).

Прямое распространение

Теперь мы обновляем первый скрытый слой. Мы берем выходные \(\color{output}y\) узлов предыдущего слоя и используем веса для вычисления входных данных \(\color{input}x\) узлов следующего слоя.
$$ \color{input} x_j \color{black} = $$ $$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

Прямое распространение

Затем мы обновляем вывод узлов в первом скрытом слое. Для этого мы используем функцию активации \( f(x) \).
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

Прямое распространение

Используя эти 2 формулы, мы распространяемся на остальную часть сети и получаем окончательный результат сети.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$ $$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

Производная ошибки

Алгоритм обратного распространения решает, насколько обновить каждый вес сети после сравнения прогнозируемого результата с желаемым результатом для конкретного примера. Для этого нам нужно вычислить, как изменяется ошибка относительно каждого веса \(\color{dweight}\frac{dE}{dw_{ij}}\).
Получив производные ошибки, мы можем обновить веса, используя простое правило обновления:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
где \(\alpha\) — положительная константа, называемая скоростью обучения, которую нам необходимо точно настроить эмпирически.

[Примечание] Правило обновления очень простое: если ошибка уменьшается при увеличении веса (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), то увеличивайте вес, в противном случае, если ошибка увеличивается при увеличении веса (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), то уменьшайте вес. .

Дополнительные производные

Чтобы помочь вычислить \(\color{dweight}\frac{dE}{dw_{ij}}\), мы дополнительно храним для каждого узла еще две производные: как ошибка изменяется с:
  • общий ввод узла \(\color{dinput}\frac{dE}{dx}\) и
  • вывод узла \(\color{doutput}\frac{dE}{dy}\).

Обратное распространение

Давайте начнем обратное распространение производных ошибки. Поскольку у нас есть предсказанный результат этого конкретного примера ввода, мы можем вычислить, как ошибка изменится с этим выводом. Учитывая нашу функцию ошибки \(E = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2\) , мы имеем:
$$ \color{doutput} \frac{\partial E}{\partial y_{output}} \color{black} = \color{output} y_{output} \color{black} - \color{output} y_{target}$$

Обратное распространение

Теперь, когда у нас есть \(\color{doutput} \frac{dE}{dy}\) , мы можем получить \(\color{dinput}\frac{dE}{dx}\) , используя правило цепочки.
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
где \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) , когда \(f(\color{input}x\color{black})\) — функция активации сигмоида.

Обратное распространение

Как только у нас есть производная ошибки по отношению к общему входу узла, мы можем получить производную ошибки по весам, поступающим в этот узел.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

Обратное распространение

И с помощью цепного правила мы также можем получить \(\frac{dE}{dy}\) из предыдущего слоя. Мы сделали полный круг.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Обратное распространение

Все, что осталось сделать, это повторять предыдущие три формулы, пока мы не вычислим все производные ошибки.

Конец.

Компьютеры...