vault backup: 2026-05-07 15:27:12

This commit is contained in:
Dmitry
2026-05-07 15:27:12 +03:00
parent dd141591a7
commit 0defa25df0
6 changed files with 169 additions and 12 deletions
@@ -1,152 +0,0 @@
---
status: seed
type: concept
tags: []
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$ в слое *1*
> $u_{i}$ - выход нейрона $i$ слоя *1* (после активации)
> $S_{l}^{(2)}$ - взвешенная сумма на входе нейрона $l$ слоя *2*
> $y_{l}$ - выход нейрона $l$ слоя *2* (предсказание)
> $d_{l}$ - истинное значение
> $F$ - функция активации (напр. сигмоида)
## Прямой проход
$$\begin{align*}
&S_{i}^{(1)} = \sum\limits_{j=1}^{n}w_{ij}^{(1)}x_{j} \text{ - взвешенная сумма на первом слое}\\
&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*}$$
## Обратный проход (выходной слой)
*Цепное правило:*
$$\begin{align*}
\frac{dE}{dw_{li}^{(2)}}&=\frac{dE}{dy_{l}}* \frac{dy_{l}}{dS_{l}^{(2)}}*\frac{dS_{l}^{(2)}}{dw_{li}^{(2)}}\\
\end{align*}$$
Отдельно вычисляем каждую часть:
$$\frac{dE}{dy_{l}} = y_{l}-d_{l}$$
(производная MSE):$$\frac{dy_{l}}{dS_{l}^{(2)}}=f^{'}(s_{l}^{(2)})=\frac{df(s_{l}^{(2)})}{ds_{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)}$:
$$\delta_{l}^{(2)}=(y_{l}-d_{l})*f^{'}(s_{l}^{(2)})$$
Тогда:$$\frac{dE}{dw_{li}^{(2)}}=\delta_{l}^{(2)}*u_{i}$$
**Интерпретация:** $\delta_{l}^{(2)}$ — это "ошибка" на выходном нейроне $l$ (разница между предсказанием и истиной), помноженная на крутизну функции активации.
### Обратный проход (скрытый слой)
Теперь нужна производная ошибки по весу первого слоя:
$$\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}
*
\frac{\partial y_l}{\partial u_i}
*
\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)}}
*
\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)}}
*
\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)}$:
$$
\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)}$ для каждого скрытого нейрона.