Процесс обучения искусственной нейронной сети можно представить в виде следующей схемы (рисунок 2.10):


Рисунок 2.10. Итеративный процесс обучения искусственной нейронной сети


Рассмотрим пошаговый пример расчета прямого распространения сигнала, обратного распространения ошибки и коррекции весов.


Пошаговый пример расчета алгоритма обратного распространения ошибки


В этом примере (рисунок 2.11) веса нейронной сети будем обозначать символом w, смещения b. Номер слоя, как и ранее, указываем верхним индексом в квадратных скобках для того, чтобы не путать с индексом обучающего примера, номер нейрона в слое – нижним индексом. Выход нейрона по-прежнему обозначаем символом а.


Рисунок 2.11. Пример нейронной сети с одним скрытым слоем


Входной слой с его входами x для единообразия последующих матричных операций обозначаем как нулевой слой – a>[0]. В нашем примере x1 = 0, x2 = 1, тогда a>1>[0] = x1 = 0 и a>2>[0] = x2 = 1. Смещение (bias) во всех слоях a>1>[l] = 1.


На вход сети, таким образом, подается вектор [1,0,1], а на выходе сети необходимо получить y=1.

Шаг 1. Прямое прохождение сигнала.

Рассмотрим прямое прохождение сигнала от входа к выходу:



Выход нейронной сети:



Шаг 2. Расчет ошибки выходного слоя.

Сеть должна давать значение y>(1) = 1, однако получена величина 0.78139. Ошибка, c которой сеть «предсказывает» наш единственный пример, равна разнице между ожидаемым значением и полученным результатом.



Шаг 3. Обратное распространение ошибки.

Полученную ошибку нужно «распространить обратно» для того, чтобы скорректировать веса сети. Для этого рассчитаем градиенты ошибок нейронов скрытого слоя, используя выражение



Получим



Теперь у нас все готово для того, чтобы, используя градиенты ошибок, пересчитать веса нейронной сети.

Шаг 4. Коррекция весов нейронной сети.

Установим для нашего учебного примера большой коэффициент обучения (learning rate) ro = 0.5. Отметим, что в реальных случаях ro редко превышает 0.1. Здесь мы использовали относительно большое значение, чтобы увидеть значимые изменения весов уже на первой итерации.

Используем выражение (Eq. 2.18) для расчета измененных весов сети:



для скрытого слоя:



Используя скорректированные значения весов, повторим расчет прямого прохождения сигнала и получим значение ошибки выходного слоя:



Видно, что ошибка стала значительно меньше.

После третьей итерации dz>1>[2] = 0.14184

Примечание. Расчет двух итераций алгоритма BPE с применением Python-numpy приведен в MLF_Example_Of_BPE – https://www.dropbox.com/s/tw6zwht3d5pd4zf/MLF_Example_Of_BPE.html?dl=0

Пример, приведенный выше, является иллюстрацией прямого и обратного хода алгоритма так, что каждый обучающий пример и каждый синаптический коэффициент рассчитываются по отдельности. На практике этапы алгоритма для сети из L-слоев реализуются в матричном виде следующим образом:





где W>[i] – матрица весов i-го слоя нейронной сети; X – матрица обучающих примеров размерностью n x m (n – число параметров, m – количество обучающих примеров).

Расчет алгоритма градиентного спуска для нейронной сети в матричном виде:





Примечание. Важно отметить, что алгоритм обратного распространения «требует», чтобы начальные значения весов были небольшими случайными величинами. То есть начальная инициализация требует нарушения «симметрии» для того, чтобы нейроны сети изменяли свои веса «индивидуально». Нулевые значения неприемлемы, поскольку градиент ошибки также будет нулевым и веса не будут корректироваться. Большие значения, сравнимые по величине со значениями, подаваемыми на вход сети, приведут к тому, что алгоритм не будет сходиться. Приведенный выше пример начальных значений весов и смещений является исключительно учебным.