vault backup: 2026-05-07 22:58:05
This commit is contained in:
@@ -13,11 +13,12 @@ title: Обратное распространение ошибки
|
||||
|
||||
# Обратное распространение ошибки
|
||||
|
||||
**Обратное распространение ошибки** (*backpropagation*) - алгоритм вычисления градиентов функции ошибки по весам многослойной [[Нейронные сети|нейронной сети]]. После вычисления градиентов веса обновляются методом градиентного спуска.
|
||||
**Обратное распространение ошибки** (*backpropagation*) - алгоритм вычисления градиентов функции ошибки по весам многослойной [[Нейронные сети|нейронной сети]]. Само обновление весов выполняет градиентный спуск или его модификации, а backpropagation отвечает за эффективный расчёт производных.
|
||||
|
||||
Главная идея: сначала сеть делает прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, насколько изменение этого веса повлияло на итоговую ошибку.
|
||||
Главная идея: сначала сеть выполняет прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, как изменение этого веса повлияло бы на итоговую ошибку.
|
||||
|
||||
## Как выглядит
|
||||
|
||||
![[Pasted image 20260507214813.png]]
|
||||
|
||||
## Где используется
|
||||
@@ -29,6 +30,7 @@ X^{(p)} \rightarrow Y^{(p)} \approx D^{(p)}
|
||||
$$
|
||||
|
||||
где:
|
||||
|
||||
- $X^{(p)}$ - входной объект;
|
||||
- $Y^{(p)}$ - выход сети;
|
||||
- $D^{(p)}$ - целевой ответ;
|
||||
@@ -36,79 +38,39 @@ $$
|
||||
|
||||
Алгоритм применим к многослойным сетям, если функции активации дифференцируемы или хотя бы имеют используемую на практике производную почти всюду.
|
||||
|
||||
## Прямой проход
|
||||
## Базовый цикл
|
||||
|
||||
Для сети с одним скрытым слоем:
|
||||
1. Подать входной вектор $X$ на вход сети.
|
||||
2. Выполнить прямой проход и получить выходы всех слоёв.
|
||||
3. Посчитать ошибку $E$ между предсказанием $Y$ и целевым ответом $D$.
|
||||
4. Посчитать локальную ошибку выходного слоя.
|
||||
5. Распространить ошибку назад и посчитать локальные ошибки скрытых слоёв.
|
||||
6. Найти градиенты по весам.
|
||||
7. Обновить веса в направлении антиградиента.
|
||||
8. Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
|
||||
|
||||
$$
|
||||
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}}$ - производная ошибки по весу.
|
||||
|
||||
Если производная положительная, увеличение веса увеличивает ошибку, поэтому вес уменьшается. Если производная отрицательная, вес увеличивается.
|
||||
|
||||
## Алгоритм
|
||||
|
||||
1. Подать входной вектор $X$ на вход сети.
|
||||
2. Выполнить прямой проход и получить выходы всех слоёв.
|
||||
3. Посчитать ошибку $E$ между предсказанием $Y$ и целевым ответом $D$.
|
||||
4. Посчитать ошибку выходного слоя $\delta^{(2)}$.
|
||||
5. Распространить ошибку назад и посчитать ошибки скрытых слоёв $\delta^{(1)}$.
|
||||
6. Найти градиенты по весам.
|
||||
7. Обновить веса в направлении антиградиента.
|
||||
8. Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
|
||||
|
||||
## Локальная ошибка слоя
|
||||
## Локальная ошибка
|
||||
|
||||
Для выходного слоя:
|
||||
|
||||
@@ -126,16 +88,18 @@ F'(S_i^{(1)})
|
||||
\delta_l^{(2)}w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
То есть ошибка скрытого нейрона - это сумма ошибок следующего слоя, взвешенная связями с этим слоем, умноженная на производную активации скрытого нейрона.
|
||||
Смысл $\delta$: на выходном слое она показывает ошибку нейрона с учётом производной активации, а на скрытом слое собирает вклад ошибок следующего слоя, взвешенный связями.
|
||||
|
||||
## Что вынесено отдельно
|
||||
|
||||
- [[Backpropagation для сети с одним скрытым слоем]] - подробный математический вывод через правило цепочки.
|
||||
- [[Backpropagation для многослойной нейронной сети]] - общий алгоритм для произвольного числа слоёв.
|
||||
|
||||
## Интуиция
|
||||
|
||||
Backpropagation - это не отдельный способ оптимизации, а эффективный способ вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д.
|
||||
Backpropagation - это не отдельный способ оптимизации, а способ быстро вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д.
|
||||
|
||||
Смысл $\delta$:
|
||||
- на выходном слое $\delta$ показывает, насколько нейрон ошибся с учётом производной активации;
|
||||
- на скрытом слое прямого целевого ответа нет, поэтому ошибка собирается из всех нейронов следующего слоя;
|
||||
- градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса.
|
||||
Градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса. Поэтому после обратного прохода обновление всех весов становится локальной операцией.
|
||||
|
||||
## Иллюстрации
|
||||
|
||||
@@ -145,7 +109,7 @@ Backpropagation - это не отдельный способ оптимизац
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Обратное распространение ошибки - вывод]]
|
||||
- [[Обратное распространение ошибки для произвольного числа слоев НС]]
|
||||
- [[Backpropagation для сети с одним скрытым слоем]]
|
||||
- [[Backpropagation для многослойной нейронной сети]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
|
||||
Reference in New Issue
Block a user