Обратное распостранение ошибки в нейроннонной сети и корректировка весовых коэффициентов по методу градиентного спуска
Ранее мы улучшали поведение простого линейного классификатора и рассмотрели, как по входу и матрицам весов нейросети вычислить её выход.
Теперь предположим, что имеется некий эталоный выход, к которому должен стремиться результат работы нейросети. Для достижения эталона нам потребуется что-то перенастраивать в сети. Это будут весовые коэффициенты.
Выясним, как мы будем обновлять матрицы весов.

Заготовка распределения ошибки. Изображение из (1)
Обратное распространение ошибки в нейронной сети
Воспользуемся методом ОРО, пропорционально распределяя ошибку между имеющимися узлами:

Простая сеть и ошибка на узлах. Изображение из (1)
Определим ошибку на выходном слое
Тогда, глядя на рисунок выше, заключим, что ошибка
Запишем эти доли в явном виде:
Итак, на основе отклонения текущего выхода от эталонного, мы будем обновлять весовые коэффициенты во всей нейросети, двигаясь с конца к её началу.

Распределение ошибки по слоям. Изображение из (1)
Но если сначала мы использовали ошибку выходного слоя, то какую ошибку использовать для узлов скрытого слоя? Ведь мы не можем указать очевидную ошибку для узла в таком слое.
Разберёмся, как определить ошибку для скрытого узла.
Ошибка скрытого слоя
Мы можем воссоединить ошибки, распределенные по связям следующим образом: ошибка на первом скрытом узле
или как показано на иллюстрации ниже:

Метод ОРО. Изображение из (1)
Применять данную методику мы будем до тех пор, пока не доберёмся до входного слоя:

Расчет ошибки на внутренних узлах. Изображение из (1)
Векторизация метода ОРО в нейросети
Опять, так как Scilab - матричный язык, адаптируем поэлементный процесс обратного распространения ошибки в нейросети под удобный нам.
Зададим эталонный вектор
Ошибка
Здесь
Это выражение можно переписать в более простом виде, отказавшись от знаменателей в первом множителе. Тогда получим связь с весовой матрицей на текущем шаге:
Итак, ошибка
Аналогично, для входного слоя ошибка
Обновление весовых коэффициентов
Для обновления весовых коэффициентов мы воспользуемся методом градиентного спуска (подробнее в (1)).
При подсчёте ошибки на каждом из слоёв, будем немного корректировать весовые коэффициенты соответвующей весовой матрицы на величину
где
А обновлённая матрица весов примет вид:
Осталось лишь собрать всё в программный код обучения нейросети 😁
Данная статья создана на основе чудесной книги (1) с реализацией автором приведённых примеров на Scilab.





