--- status: stable type: concept tags: - machine-learning - neural-networks - backpropagation created: 2025-12-17 updated: 2026-05-07 title: Обратное распространение ошибки - вывод --- # Обратное распространение ошибки - вывод Эта заметка фиксирует математический вывод градиентов для алгоритма [[Обратное распространение ошибки]]. Общий контекст нейронных сетей находится в [[Нейронные сети]]. Рассматривается сеть с одним скрытым слоем. 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)} $$ ## Связанные заметки - [[Обратное распространение ошибки]] - [[Нейронные сети]] - [[Линейные модели]]