Алгоритм обратного распространения
Алгоритм обратного распространения необходим для быстрого обучения больших нейронных сетей. В этой статье объясняется, как работает алгоритм.
Пожалуйста, прокрутите вниз... Простая нейронная сеть
Справа вы видите нейронную сеть с одним входным, одним выходным узлом и двумя скрытыми слоями по два узла в каждом.
Узлы в соседних слоях связаны весами wij, которые являются параметрами сети. Функция активации
Каждый узел имеет общий вход x, функцию активации f(x)и выход y=f(x). f(x) должна быть нелинейной функцией, иначе нейронная сеть сможет обучаться только линейным моделям.
Обычно используемой функцией активации является сигмовидная функция : f(x)=11+e−x. Функция ошибки
Цель состоит в том, чтобы автоматически узнать веса сети из данных, чтобы прогнозируемый выход youtputбыл близок к целевому ytarget для всех входов xinput.
Чтобы измерить, насколько мы далеки от цели, мы используем функцию ошибок E. Обычно используемая функция ошибок — E(youtput,ytarget)=12(youtput−ytarget)2. Прямое распространение
Начнем с того, что возьмем входной пример (xinput,ytarget) и обновим входной слой сети.
Для согласованности мы считаем входные данные такими же, как и любой другой узел, но без функции активации, поэтому его выходные данные равны входным, т. е. y1=xinput. Прямое распространение
Теперь мы обновляем первый скрытый слой. Мы берем выходные y узлов предыдущего слоя и используем веса для вычисления входных данных x узлов следующего слоя. Прямое распространение
Затем мы обновляем вывод узлов в первом скрытом слое. Для этого мы используем функцию активации f(x).Прямое распространение
Используя эти 2 формулы, мы распространяемся на остальную часть сети и получаем окончательный результат сети. Производная ошибки
Алгоритм обратного распространения решает, насколько обновить каждый вес сети после сравнения прогнозируемого результата с желаемым результатом для конкретного примера. Для этого нам нужно вычислить, как изменяется ошибка относительно каждого веса dEdwij.
Получив производные ошибки, мы можем обновить веса, используя простое правило обновления: где α — положительная константа, называемая скоростью обучения, которую нам необходимо точно настроить эмпирически.
[Примечание] Правило обновления очень простое: если ошибка уменьшается при увеличении веса (dEdwij<0), то увеличивайте вес, в противном случае, если ошибка увеличивается при увеличении веса (dEdwij>0), то уменьшайте вес. .
Дополнительные производные
Чтобы помочь вычислить dEdwij, мы дополнительно храним для каждого узла еще две производные: как ошибка изменяется с:- общий ввод узла dEdx и
- вывод узла dEdy.
Обратное распространение
Давайте начнем обратное распространение производных ошибки. Поскольку у нас есть предсказанный результат этого конкретного примера ввода, мы можем вычислить, как ошибка изменится с этим выводом. Учитывая нашу функцию ошибки E=12(youtput−ytarget)2 , мы имеем: Обратное распространение
Теперь, когда у нас есть dEdy , мы можем получить dEdx , используя правило цепочки. где ddxf(x)=f(x)(1−f(x)) , когда f(x) — функция активации сигмоида. Обратное распространение
Как только у нас есть производная ошибки по отношению к общему входу узла, мы можем получить производную ошибки по весам, поступающим в этот узел. Обратное распространение
И с помощью цепного правила мы также можем получить dEdy из предыдущего слоя. Мы сделали полный круг. Обратное распространение
Все, что осталось сделать, это повторять предыдущие три формулы, пока мы не вычислим все производные ошибки.