Источник: Matt Mazur. A Step by Step Backpropagation Example
Алгоритм обратного распространения ошибки (BackPropagation) - это один из самых распространенных методов обучения нейронной сети. В Интернете можно найти много ресурсов с изложением данного алгоритма, но мало тех, где дан простой числовой пример.
Поэтому в этом разделе алгоритм обратного распространения будет рассмотрен на примере простейшей нейронной сети с двумя входами (I1, I2), двумя скрытыми (h1, h2) и двумя выходными (o1, o2) нейронами. При этом, на скрытые и выходные нейроны еще действуют и смещения (b1 и b2), которые в англоязычном варианте называют bias.
Основной целью backpropagation применительно к нейронным сетям является оптимизация весов связей между нейронами для того, чтобы проектируемая нейронная сеть смогла обучиться правильно отображать произвольные входные данные в нужные значения выходов. В данном примере обучающая выборка будет состоять всего из одного набора данных, при входных значения которого 0.05 и 0.10 требуется, чтобы нейронная сеть выдавала значения 0,01 и 0,99, соответственно.
Настройка любой нейронной сети всегда начинается с прямого распространения входных сигналов по слоям нейронной сети. При этом на первом этапе требуется выяснить, а на что в данный момент способна нейронная сеть, и какие значения выходов она может предсказать для входных сигналов x1 = 0.05 и x2 = 0.10 с учетом сгенерированных случайным образом значений весовых коэффициентов и смещений. Для этого требуется поступившие входные значения передать вперед по слоям сети: от входного слоя к скрытому, и от скрытого к выходному.
Вычислив предсказанные нейронной сетью значения ее выходов (output), и зная их желаемые целевые значения (target), можно вычислить ошибку предсказания каждым из выходных нейронов. А затем, используя квадратичную функцию ошибки, суммировать их для получения обобщенной ошибки настройки сети на данном этапе расчета:
На данный момент выход нейрона o1 равен 0,75136507, а его желаемое (целевое) значение должно быть 0.01. Поэтому ошибка предсказания нейрона o1 будет:
Вспоминая, что желаемое (целевое) значение выхода o2 должно быть 0.99, а текущее значение равно 0.772928465, можно вычислить ошибку предсказания нейрона o2, которая будет равна:
Общая ошибка предсказания нейронной сети представляет собой сумму ошибок предсказания всех выходных нейронов, и равна:
Целью обратного распространения ошибки (backpropagation) является обновление весов связи между всеми нейронами сети так, чтобы они привели к тому, чтобы фактический результат стал ближе к желаемому (целевому) результату, минимизировав тем самым ошибку предсказания, как для каждого выходного нейрона, так и сети в целом. Работа алгоритма backpropagation идет в обратном направлении: сначала на выходном слое, а затем на скрытом.
На выходном слое нейронной сети присутствуют связи с весами w5 и w6 к нейрону o1, а также связи с весами w7 и w8 к нейрону o2. Они поступают с выходов нейронов скрытого слоя. Кроме этого на оба выходных нейрона оказывает влияние связь от смещения b2.
Процесс изменения весов начнем с w5. Чтобы знать как изменение w5 влияет на общую ошибку сети, надо вычислить частную производную от Etotal по w5. Если функцию ошибки представить как сложную функцию, то тогда, используя правило дифференцирования сложных функций (так называемое "цепное правило "), можно получить:
Визуально, это можно представить следующим образом:Для того, чтобы решить поставленную задачу по обновлению значения w5, нам предстоить определить каждую из составлящих данного выражения. Для этого надо выполнить следующую последовательность действий:
Выполнив все, приведенные выше вычисления, появляется возможность объединить их в одно выражение и провести расчет, а именно:
Но вернемся к настройке весов, а именно коэффициенту w5. Чтобы уменьшить его воздействие на общую ошибку сети, мы должны вычесть полученное значение из текущего веса. Возможно, это значение будет умножено на некоторую скорость обучения η.
Выбор величиеы этого параметра представляет собой отдельную задачу, так как он влияет на качество и сходимость процедуры настройки нейронной сети. Принимая значения η равным 0.5, скоректированное на этом шаге значение w5 будет:
Выполняя аналогичные операции, можно получит скоррктированные значения для всех других весов выходного слоя:
!!!! Мы выполняем фактические обновления в нейронной сети после того, как у нас появились новые веса, ведущие к нейронам скрытого слоя (т. Е. Мы используем исходные веса, а не обновленные веса, когда мы продолжаем алгоритм backpropagation ниже).
Сделав шаг назад, мы от выходного слоя перейдем к скрытому с целью обновления значений весов w1, w2, w3 и w4. Остановимся на рассмотрении процесса обновления веса w1 и выясним степень его влияния на общую ошибку настройки сети:
Визуально это может быть представлено следующим образом:Используем подход, аналогичный выходному слою, но его отличие будет в том, что выходы каждого нейрона скрытого слоя влияют сразу на несколько нейронов выходного слоя. Так, нейрон h1 влияет на ошибку предсказания нейронов o1 и o2, а это сказывается и на общей ошибке сети.
Так как изменение сигнала outh1 вызывает изменение, как outo1, так и outo2, то для оценки степени его влияния на общую ошибку сети необходимо вычислить
Вспомним, что мы рассмотриваем процесс обновления веса w1 и выясням степень его влияния на общую ошибку настройки сети:
Теперь, когда мы разобрались с первым сомножителем этого выражения требуется разобраться и с двумя оставшимися.
Объединяя все полученные выше соотношения, можно получить окончательное выражение для частной производной от общей ошибки сети по весовому коэффициенту w1:
В общем случае данное выражение может быть записано в виде:
После выполнения всех этих преобразований и расчетов, у нас появляется реальная возможность обновить значения весового коэффициента w1:
Повторяя все проведенные выше расчеты для w2, w3 и w4, можно получить:
Наконец, мы обновили все наши веса! При подачи на вход сети вектора исходных данных (0.05; 0.10), ошибка сети
в результате прямого распространения составляла 0.298371109. В результате одной итерации алгоритма backpropagation
общая ошибка предсказания сети теперь составляет 0.291027924. Это может показаться не очень много, но после повторения
этого процесса, например, 10 000 раз ошибка падает до 0,0000351085.