Files
SecondBrain/90 Library/Machine Learning/Backpropagation для многослойной нейронной сети.md
T
2026-05-24 15:03:28 +03:00

5.6 KiB

status, type, tags, created, updated, title
status type tags created updated title
stable concept
machine-learning
neural-networks
backpropagation
gradient-descent
2025-12-17 2026-05-07 Backpropagation для многослойной нейронной сети

Backpropagation для многослойной нейронной сети

Эта заметка обобщает Обратное распространение ошибки на Нейронные сети с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: Backpropagation для однослойного перцептрона.

Обозначения

Пусть сеть имеет N слоёв с обучаемыми весами.

  • r - номер слоя, r=1,\dots,N;
  • i - номер нейрона в предыдущем слое;
  • j - номер нейрона в текущем слое;
  • y_i^{(r)} - выход нейрона i слоя r;
  • s_j^{(r)} - взвешенная сумма на входе нейрона j слоя r;
  • w_{ij}^{(r)} - вес от нейрона i слоя r-1 к нейрону j слоя r;
  • \delta_j^{(r)} - локальная ошибка нейрона j слоя r;
  • \eta - скорость обучения (learning rate);
  • d_j - целевое значение для выходного нейрона j.

Для входного слоя можно считать:


y_i^{(0)}=x_i

Шаг 1. Прямой проход

На вход сети подаётся один обучающий пример. Сигналы распространяются от входного слоя к выходному.

Для каждого слоя:


s_j^{(r)}=\sum_i w_{ij}^{(r)}y_i^{(r-1)}

y_j^{(r)}=F(s_j^{(r)})

На выходе получаем предсказание сети:


y_j^{(N)}

Шаг 2. Локальная ошибка выходного слоя

Для квадратичной ошибки:


E=\frac{1}{2}\sum_j(y_j^{(N)}-d_j)^2

Локальная ошибка выходного слоя:


\delta_j^{(N)}
=
(y_j^{(N)}-d_j)F'(s_j^{(N)})

Если в конспекте уже используется запись y_j', то это то же самое:


y_j'=F'(s_j^{(N)})

Тогда:


\delta_j^{(N)}=(y_j^{(N)}-d_j)y_j'

Шаг 3. Локальная ошибка скрытых слоёв

Для всех скрытых слоёв ошибка считается справа налево:


r=N-1,N-2,\dots,1

Формула:


\delta_i^{(r)}
=
F'(s_i^{(r)})
\sum_j
\delta_j^{(r+1)}w_{ij}^{(r+1)}

Смысл: ошибка нейрона слоя r складывается из ошибок следующего слоя, взвешенных весами связей, и умножается на производную активации текущего нейрона.

Шаг 4. Градиенты по весам

Градиент веса слоя r:


\frac{\partial E}{\partial w_{ij}^{(r)}}
=
\delta_j^{(r)}y_i^{(r-1)}

То есть градиент веса равен локальной ошибке нейрона, в который входит вес, умноженной на выход предыдущего нейрона.

Шаг 5. Изменение весов

Изменение веса:


\Delta w_{ij}^{(r)}
=
-\eta\delta_j^{(r)}y_i^{(r-1)}

Обновление веса:


w_{ij}^{(r)}(t+1)
=
w_{ij}^{(r)}(t)
+
\Delta w_{ij}^{(r)}(t)

Или сразу через градиентный спуск:


w_{ij}^{(r)}(t+1)
=
w_{ij}^{(r)}(t)
-
\eta
\frac{\partial E}{\partial w_{ij}^{(r)}}

Шаг 6. Проверка сходимости

После обновления весов алгоритм повторяется для следующих обучающих примеров.

Типовые условия остановки:

  • достигнут лимит эпох;
  • ошибка стала меньше заданного порога;
  • ошибка перестала заметно уменьшаться;
  • норма градиента стала достаточно малой.

Короткая схема

  1. Прямой проход: посчитать все s^{(r)} и y^{(r)}.
  2. Посчитать \delta^{(N)} для выходного слоя.
  3. Для r=N-1,\dots,1 посчитать \delta^{(r)}.
  4. Для каждого слоя найти \frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_j^{(r)}y_i^{(r-1)}.
  5. Обновить веса.
  6. Повторять до остановки.

Интерпретация

Ошибка течёт от выхода к входу. На каждом слое она:

  • проходит назад через веса следующего слоя;
  • суммируется по всем путям влияния;
  • умножается на производную функции активации текущего нейрона.

Так для каждого слоя получается своя локальная ошибка \delta^{(r)}, а дальше градиент каждого веса считается локально: ошибка принимающего нейрона умножается на выход отправляющего нейрона.

Связанные заметки

  • Обратное распространение ошибки
  • Backpropagation для однослойного перцептрона
  • Нейронные сети
  • Линейные модели