--- 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)}$ для каждого скрытого нейрона. ## Связанные заметки - [[Обратное распространение ошибки]] - [[Нейронные сети]]