Files
SecondBrain/01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md
T
2026-05-07 15:57:15 +03:00

6.2 KiB

status, type, tags, created, updated, title
status type tags created updated title
stable concept
machine-learning
neural-networks
backpropagation
2025-12-17 2026-05-07 Обратное распространение ошибки - вывод

Обратное распространение ошибки - вывод

Эта заметка фиксирует математический вывод градиентов для алгоритма Обратное распространение ошибки. Общий контекст нейронных сетей находится в Нейронные сети.

Рассматривается сеть с одним скрытым слоем. Bias для краткости не записан: его градиент считается так же, как градиент веса при входе, равном 1.

Обозначения

[!note] Обозначения x_{j} — $j$-й вход
w_{ij}^{(1)} — вес от входа j к скрытому нейрону i
w_{li}^{(2)} — вес от скрытого нейрона i к выходу l
S_{i}^{(1)} — взвешенная сумма на входе нейрона i в первом слое
u_{i} — выход нейрона i первого слоя после активации
S_{l}^{(2)} — взвешенная сумма на входе нейрона l во втором слое
y_{l} — выход нейрона l второго слоя
d_{l} — истинное значение
F — функция активации
\delta — локальная ошибка нейрона

Прямой проход


\begin{align*}
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)}) \\
E &= \frac{1}{2}\sum\limits_{l=1}^{m}(y_{l}-d_{l})^{2}
\end{align*}

Обратный проход для выходного слоя

Для веса w_{li}^{(2)} используется правило цепочки:


\begin{align*}
\frac{\partial E}{\partial w_{li}^{(2)}} &=
\frac{\partial E}{\partial y_{l}}
\cdot
\frac{\partial y_{l}}{\partial S_{l}^{(2)}}
\cdot
\frac{\partial S_{l}^{(2)}}{\partial w_{li}^{(2)}}
\end{align*}

Компоненты производной:


\frac{\partial E}{\partial y_l}=y_l-d_l

\frac{\partial y_l}{\partial S_l^{(2)}}=F'(S_l^{(2)})

\frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}=u_i

Итог:


\frac{\partial E}{\partial w_{li}^{(2)}}=(y_l-d_l)F'(S_l^{(2)})u_i

Введём локальную ошибку выходного нейрона:


\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})

Тогда:


\frac{\partial E}{\partial w_{li}^{(2)}}=\delta_l^{(2)}u_i

Обратный проход для скрытого слоя

Теперь нужна производная ошибки по весу первого слоя:


\frac{\partial E}{\partial w_{ij}^{(1)}}

Вес w_{ij}^{(1)} влияет на E не напрямую, а через все выходные нейроны:


w_{ij}^{(1)} \rightarrow u_i \rightarrow y_l \rightarrow E

По правилу цепочки нужно просуммировать вклады всех путей от скрытого нейрона i к выходным нейронам:


\frac{\partial E}{\partial w_{ij}^{(1)}} =
\sum\limits_{l=1}^{m}
\frac{\partial E}{\partial y_l}
\cdot
\frac{\partial y_l}{\partial u_i}
\cdot
\frac{\partial u_i}{\partial w_{ij}^{(1)}}

Первый множитель:


\frac{\partial E}{\partial y_l}=y_l-d_l

Производная выхода y_l по выходу скрытого нейрона u_i:


\frac{\partial y_l}{\partial u_i}
=
\frac{\partial y_l}{\partial S_l^{(2)}}
\cdot
\frac{\partial S_l^{(2)}}{\partial u_i}

Так как:


S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i

То:


\frac{\partial y_l}{\partial u_i}
=
F'(S_l^{(2)})w_{li}^{(2)}

Производная выхода скрытого нейрона u_i по весу w_{ij}^{(1)}:


\frac{\partial u_i}{\partial w_{ij}^{(1)}}
=
\frac{\partial u_i}{\partial S_i^{(1)}}
\cdot
\frac{\partial S_i^{(1)}}{\partial w_{ij}^{(1)}}

Так как:


S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j

То:


\frac{\partial u_i}{\partial w_{ij}^{(1)}}
=
F'(S_i^{(1)})x_j

Собираем:


\frac{\partial E}{\partial w_{ij}^{(1)}} =
\sum\limits_{l=1}^{m}
(y_l-d_l)
F'(S_l^{(2)})
w_{li}^{(2)}
F'(S_i^{(1)})
x_j

Вводим локальную ошибку скрытого нейрона:


\delta_i^{(1)}
=
\sum\limits_{l=1}^{m}
(y_l-d_l)
F'(S_l^{(2)})
w_{li}^{(2)}
F'(S_i^{(1)})

Или через ошибку выходного слоя \delta_l^{(2)}:


\delta_i^{(1)}
=
F'(S_i^{(1)})
\sum\limits_{l=1}^{m}
\delta_l^{(2)}
w_{li}^{(2)}

Тогда:


\frac{\partial E}{\partial w_{ij}^{(1)}}
=
\delta_i^{(1)}x_j

Ошибка выходного слоя \delta_l^{(2)} проходит назад через вес w_{li}^{(2)}, суммируется по всем выходным нейронам и умножается на крутизну активации скрытого слоя. Так получается локальная ошибка \delta_i^{(1)} для каждого скрытого нейрона.

Итоговые формулы

Для слоя r общий шаблон такой:


\frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_i^{(r)}a_j^{(r-1)}

где a_j^{(r-1)} - выход предыдущего слоя. Для первого слоя a_j^{(0)}=x_j, для второго слоя a_i^{(1)}=u_i.

Для выходного слоя:


\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)}

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

  • Обратное распространение ошибки
  • Обратное распространение ошибки для произвольного числа слоев НС
  • Нейронные сети
  • Линейные модели