反向传播算法推导

神经网络中权重 \(w^{(l)}_{ij}\) 的改变将影响到一个个下一层,到达输出层,最终影响代价函数

\(\color{red}{公式推导符号说明}\)
符号 | 说明 |
---|---|
\(n_l\) | 网络层数 |
\(y_j\) | 输出层第 \(j\) 类 label |
\(S_l\) | 第 \(l\) 层神经元个数(不包括偏置) |
\(g(x)\) | 激励函数 |
\(w^{(l)}_{ij}\) | 第 \(l\) 层第 \(j\) 个单元与第 \(l+1\) 层第 \(i\) 个单元之间的链接参数 |
\(b^{(l)}_i\) | 第 \(l+1\) 层第 \(i\) 个单元的偏置 |
\(z^{(l)}_i\) | 第 \(l\) 层第 \(i\) 个单元的输入加权和(包含偏置) |
\(a^{(l)}_i\) | 第 \(l\) 层第 \(i\) 个单元的激活值(输出值) |
\(\delta^{(l)}_i\) | 第 \(l\) 层第 \(i\) 个单元的局部梯度(或称为残差) |
\(\color{red}{基本公式}\)
\[ \begin{align*} z^{(l)}_i &= b^{(l-1)}_i + \sum^{S_l}_{j=1}{w^{(l-1)}_{ij}a^{(l-1)}_i} \tag{1} \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \\ g(x) &= \frac{1}{1 + e^{-x}} \tag{2}\\ a^{(l)}_i &= g(z^{(l)}_i) \tag{3} \\ J(\theta) &= \frac12{{\sum^{S_l}_{j=1}\big ({y_j - a^{(l)}_j}}}\big)^2 \tag{4}\\ \delta^{(l)}_i &=\frac{\partial{J(\theta)}}{\partial{z^{(l)}_i}} \tag{5} \\ \\ \delta ^{ (n_{ l }) }_{ i }&=\frac { \partial { J(\theta ) } }{ \partial { z^{ (n_{ l }) }_{ i } } } \\ &=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \sum _{ j=1 }^{ S_{ n_l } } \left( y_{ j }-a^{ (n_{ l }) }_{ j } \right) ^{ 2 }\\ &=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \sum _{ j=1 }^{ S_{ n_l } } \left( y_{ j }-g(z^{ (n_{ l }) }_{ j }) \right) ^{ 2 }\\ &=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \left( y_{ i }-g(z^{ (n_{ l }) }_{ i }) \right) ^{ 2 }\\ &=-\left( y_{ i }-a^{ (n_{ l }) }_{ i } \right) g\prime (z^{ (n_{ l }) }_{ i })\\ \\\delta ^{ (l) }_{ i }&=\frac { \partial { J(\theta ) } }{ \partial { z^{ (l) }_{ i } } } \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ j } } } \frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { z^{ (l) }_{ i } } } \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }\frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { z^{ (l) }_{ i } } } \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( b^{ (l) }_{ i }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }a^{ (l) }_{ k }) \right) \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( b^{ (l) }_{ i }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }g(z^{ (l) }_{ k }) \right) \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( w^{ (l) }_{ ji } g(z^{ (l) }_{ i }) \right) \\&=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }\left( w^{ (l) }_{ ji }g\prime (z^{ (l) }_{ i }) \right) \\ &=g\prime (z^{ (l) }_{ i })\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ i }w^{ (l) }_{ ji }\\\\\frac { \partial { J(\theta ) } }{ \partial { w^{ (l) }_{ ij } } } &=\frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ i } } } \frac { \partial { z^{ (l+1) }_{ i } } }{ \partial { w^{ (l) }_{ ij } } } \\ &=\delta ^{ (l+1) }_{ i }\frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { w^{ (l) }_{ ij } } } \\ &=\delta ^{ (l+1) }_{ i }\frac { \partial { } }{ \partial { w^{ (l) }_{ ij } } } \left( b^{ (l) }_{ i }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ ik }a^{ (l) }_{ k }) \right) \\ &=\delta ^{ (l+1) }_{ i }a^{ (l) }_{ j }\\\frac { \partial { J(\theta ) } }{ \partial { b^{ (l) }_{ i } } } &=\delta ^{ (l+1) }_{ i }\end{align*}\]