217 lines
5.0 KiB
Markdown
217 lines
5.0 KiB
Markdown
---
|
|
status: seed
|
|
type: concept
|
|
tags:
|
|
- machine-learning
|
|
- neural-networks
|
|
- backpropagation
|
|
created: 2025-12-17
|
|
updated: 2026-05-07
|
|
title: Обратное распространение ошибки - вывод
|
|
---
|
|
|
|
# Обратное распространение ошибки - вывод
|
|
|
|
Эта заметка фиксирует математический вывод градиента для алгоритма [[Обратное распространение ошибки]]. Общий контекст нейронных сетей находится в [[Нейронные сети]].
|
|
|
|
## Обозначения
|
|
|
|
> [!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$ — функция активации
|
|
|
|
## Прямой проход
|
|
|
|
$$
|
|
\begin{align*}
|
|
S_{i}^{(1)} &= \sum\limits_{j=1}^{n}w_{ij}^{(1)}x_{j} \\
|
|
u_{i} &= F(S_{i}^{(1)}) \\
|
|
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{dE}{dw_{li}^{(2)}} &=
|
|
\frac{dE}{dy_{l}}
|
|
\cdot
|
|
\frac{dy_{l}}{dS_{l}^{(2)}}
|
|
\cdot
|
|
\frac{dS_{l}^{(2)}}{dw_{li}^{(2)}}
|
|
\end{align*}
|
|
$$
|
|
|
|
Компоненты производной:
|
|
|
|
$$
|
|
\frac{dE}{dy_l}=y_l-d_l
|
|
$$
|
|
|
|
$$
|
|
\frac{dy_l}{dS_l^{(2)}}=F'(S_l^{(2)})
|
|
$$
|
|
|
|
$$
|
|
\frac{dS_l^{(2)}}{dw_{li}^{(2)}}=u_i
|
|
$$
|
|
|
|
Итог:
|
|
|
|
$$
|
|
\frac{dE}{dw_{li}^{(2)}}=(y_l-d_l)F'(S_l^{(2)})u_i
|
|
$$
|
|
|
|
Введём локальную ошибку выходного нейрона:
|
|
|
|
$$
|
|
\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})
|
|
$$
|
|
|
|
Тогда:
|
|
|
|
$$
|
|
\frac{dE}{dw_{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 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 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)}$ для каждого скрытого нейрона.
|
|
|
|
## Связанные заметки
|
|
|
|
- [[Обратное распространение ошибки]]
|
|
- [[Нейронные сети]]
|