5.9 KiB
status, type, tags, created, updated, title
| status | type | tags | created | updated | title | ||||
|---|---|---|---|---|---|---|---|---|---|
| stable | concept |
|
2025-12-17 | 2026-05-07 | Обратное распространение ошибки |
Обратное распространение ошибки
Обратное распространение ошибки (backpropagation) - алгоритм вычисления градиентов функции ошибки по весам многослойной Нейронные сети. После вычисления градиентов веса обновляются методом градиентного спуска.
Главная идея: сначала сеть делает прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, насколько изменение этого веса повлияло на итоговую ошибку.
Где используется
Backpropagation нужен при обучении сетей с учителем:
X^{(p)} \rightarrow Y^{(p)} \approx D^{(p)}
где:
X^{(p)}- входной объект;Y^{(p)}- выход сети;D^{(p)}- целевой ответ;p- номер обучающего примера.
Алгоритм применим к многослойным сетям, если функции активации дифференцируемы или хотя бы имеют используемую на практике производную почти всюду.
Прямой проход
Для сети с одним скрытым слоем:
S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j
u_i=F(S_i^{(1)})
S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i
y_l=F(S_l^{(2)})
В развёрнутом виде:
y_l=
F\left(
\sum\limits_{i=1}^{k}
w_{li}^{(2)}
F\left(
\sum\limits_{j=1}^{n}
w_{ij}^{(1)}x_j
\right)
\right),
\quad l=\overline{1,m}
Функция ошибки
Для одного обучающего примера часто используют квадратичную ошибку:
E=\frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
Коэффициент \frac{1}{2} нужен только для удобства производной: при дифференцировании квадрат даёт множитель 2, который сокращается.
Обновление весов
Минимизация ошибки происходит через градиентный спуск:
w_{ij}(t+1)=w_{ij}(t)-\alpha\frac{\partial E}{\partial w_{ij}(t)}
где:
w_{ij}- вес связи;t- номер шага обучения;\alpha- скорость обучения (learning rate);\frac{\partial E}{\partial w_{ij}}- производная ошибки по весу.
Если производная положительная, увеличение веса увеличивает ошибку, поэтому вес уменьшается. Если производная отрицательная, вес увеличивается.
Алгоритм
- Подать входной вектор
Xна вход сети. - Выполнить прямой проход и получить выходы всех слоёв.
- Посчитать ошибку
Eмежду предсказаниемYи целевым ответомD. - Посчитать ошибку выходного слоя
\delta^{(2)}. - Распространить ошибку назад и посчитать ошибки скрытых слоёв
\delta^{(1)}. - Найти градиенты по весам.
- Обновить веса в направлении антиградиента.
- Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
Локальная ошибка слоя
Для выходного слоя:
\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})
Для скрытого слоя:
\delta_i^{(1)}
=
F'(S_i^{(1)})
\sum\limits_{l=1}^{m}
\delta_l^{(2)}w_{li}^{(2)}
То есть ошибка скрытого нейрона - это сумма ошибок следующего слоя, взвешенная связями с этим слоем, умноженная на производную активации скрытого нейрона.
Интуиция
Backpropagation - это не отдельный способ оптимизации, а эффективный способ вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д.
Смысл \delta:
- на выходном слое
\deltaпоказывает, насколько нейрон ошибся с учётом производной активации; - на скрытом слое прямого целевого ответа нет, поэтому ошибка собирается из всех нейронов следующего слоя;
- градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса.
Иллюстрации
!Pasted image 20260417105754.png
!Pasted image 20260417105833.png
Связанные заметки
- Обратное распространение ошибки - вывод
- Нейронные сети
- Линейные модели