На рисунке входные нейроны обозначены символом х, нейроны скрытого слоя – символами a>1>[1], a>1>[1], a>2>[1], a>3>[1], a>0>[1] и выходного слоя – символом a>1>[2]. Если нейронная сеть имеет несколько слоев, то первый слой называют входным, а последний – выходным. Все слои между ними называются скрытыми. Для нейронной сети с L-слоями выход входного или нулевого слоя нейронов определяется выражением a>[0] = x.

На входе следующего или первого скрытого слоя имеем



Выход первого слоя:



Для любого нейрона j, находящегося в скрытом слое i:



В этом выражении значение bias и его вес упомянуты отдельно как произведение

,

где w>j>[i] – вектор весов нейрона j.

Для выходного слоя:



Например, для сети на рисунке 2.8 выход каждого нейрона скрытого слоя можно рассчитать так же, как и для одиночного нейрона:



Выход нейронной сети определяется выражением:



Рисунок 2.8. Схема многослойной сети с одним скрытым слоем


Для настройки весов w нейронной сети (обучения сети) используют функцию стоимости, напоминающую функцию стоимости для логистической регрессии (Eq. 2.12).



где L – количество слоев нейронной сети; s>l – количество нейронов в слое l; K – количество классов (равно количеству нейронов в выходном слое); W – матрица весов.

Достоинством нейронной сети является возможность классификации c несколькими классами. В случае классификации объектов одного класса, то есть тогда, когда мы должны отделить условно «положительные» объекты от всех остальных, количество нейронов в выходном слое может быть равным и 1 (рисунок 1.5). В этом случае принадлежность объекта к классу «положительных» определяется значением функции гипотезы, то есть если h(x>(i)) > 0.5, то объект принадлежит к искомому классу. Однако чаще, в том числе с целью унификации, используется метод голосования («победитель забирает все»), когда сеть имеет в выходном слое 2 нейрона для двух классов объектов (рисунок 1.6), три для трех и т.д.


Рисунок 2.9. Схема многослойной сети с двумя выходами


Для обучения, то есть минимизации функции ошибки многослойной ИНС, используют алгоритм обратного распространения ошибки (Backpropagation of errors – BPE) [[55]] и его модификации, направленные на ускорение процесса обучения.

2.6.3. Алгоритм обратного распространения ошибки

Суть алгоритма BPE заключается в следующем. Для тренировочного набора примеров



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



Шаг 1. Выполняем этап прямого распространения сигнала по слоям сети, то есть вычисляем сигнал на выходе сети, выполняя расчет для каждого нейрона в каждом слое, как показано в выражениях 1.4, 1.5. Результаты в виде выходных значений нейронов сети a>[0],a>[1],…,a>[L] сохраняем в промежуточном хранилище (кэш).

Шаг 2. Используя полученный результат на выходе сети a>[L] = h>w>(>i>) (x), и необходимое для данного примера выходное значение y>(i), рассчитываем ошибку выходного слоя:



где L – номер выходного слоя нейронной сети.

Шаг 3. «Возвращаем» ошибку, распространяя ее обратно по сети с учетом значения производной:



где знак * – символ поэлементного умножения; g' – производная.


Производная сигмоидальной активационной функции:



Для любого скрытого слоя сети:



В случае сигмоидальной активационной функции:



Рассчитанное значение градиентов ошибки dz>[1], dz>[2], … , dz>[L] также сохраняем в кэше.

Шаг 4. Модифицируем веса сети с учетом значения ошибки для всех слоев I ∈ L:



где i – номер слоя сети; ρ – параметр обучения (learning rate) (0 < ρ < 1); Θ>(i) – матрица весов слоя i; dz>[i] – рассчитанное значение ошибки i-го слоя (точнее говоря, градиент ошибки).


Получив измененные значения весов, повторяем шаги 1–4 до достижения некоторого минимального значения ошибки либо заданное количество раз.