4.9 KiB
status, type, tags, created, updated, aliases
| status | type | tags | created | updated | aliases | |
|---|---|---|---|---|---|---|
| seed | concept | 2025-12-17 | 2026-05-07 |
|
Обратное распространение ошибки - вывод
[!note] Обозначения
x_{j}- $j$-ый входw_{ij}^{(1)}- вес от входаjк скрытому нейронуiw_{li}^{(2)}- вес от скрытого нейронаiк выходуlS_{i}^{(1)}- взвешенная сумма на входе нейронаiв слое 1u_{i}- выход нейронаiслоя 1 (после активации)S_{l}^{(2)}- взвешенная сумма на входе нейронаlслоя 2y_{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)} для каждого скрытого нейрона.