Files
SecondBrain/99 System/Archive/Обратное распространение ошибки - вывод.md
T
2026-05-31 10:18:48 +03:00

4.9 KiB
Raw Blame History

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 к скрытому нейрону 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)} для каждого скрытого нейрона.