5.6 KiB
status, type, tags, created, updated, aliases
| status | type | tags | created | updated | aliases | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| stable | concept |
|
2025-12-17 | 2026-05-07 |
|
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. Проверка сходимости
После обновления весов алгоритм повторяется для следующих обучающих примеров.
Типовые условия остановки:
- достигнут лимит эпох;
- ошибка стала меньше заданного порога;
- ошибка перестала заметно уменьшаться;
- норма градиента стала достаточно малой.
Короткая схема
- Прямой проход: посчитать все
s^{(r)}иy^{(r)}. - Посчитать
\delta^{(N)}для выходного слоя. - Для
r=N-1,\dots,1посчитать\delta^{(r)}. - Для каждого слоя найти
\frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_j^{(r)}y_i^{(r-1)}. - Обновить веса.
- Повторять до остановки.
Интерпретация
Ошибка течёт от выхода к входу. На каждом слое она:
- проходит назад через веса следующего слоя;
- суммируется по всем путям влияния;
- умножается на производную функции активации текущего нейрона.
Так для каждого слоя получается своя локальная ошибка \delta^{(r)}, а дальше градиент каждого веса считается локально: ошибка принимающего нейрона умножается на выход отправляющего нейрона.
Связанные заметки
- Обратное распространение ошибки
- Backpropagation для однослойного перцептрона
- Нейронные сети
- Линейные модели