diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 92049a2..0df0006 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -14,7 +14,7 @@ "type": "markdown", "state": { "file": "00 Inbox/Обратное распространение ошибки - вывод.md", - "mode": "preview", + "mode": "source", "source": false, "backlinks": false }, diff --git a/00 Inbox/Обратное распространение ошибки - вывод.md b/00 Inbox/Обратное распространение ошибки - вывод.md index 9fc4638..0ed6729 100644 --- a/00 Inbox/Обратное распространение ошибки - вывод.md +++ b/00 Inbox/Обратное распространение ошибки - вывод.md @@ -37,4 +37,116 @@ $$\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)}$ для каждого скрытого нейрона.