反向传播公式推导


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

\(\color{red}{公式推导符号说明}\)

符号 说明
\(n_l\) 网络层数
\(y_j\) 输出层第 \(j\) 类 标签
\(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} \\ 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} \\ \\ \end{align*} \]

\(\color{red}{梯度反向传播初始条件}\)

\[ \begin{align*} \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 })\\ \end{align*} \]

\(\color{red}{递推公式}\)

\[ \begin{align*} \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) }_{ j }\frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { z^{ (l) }_{ i } } } \\ &=\sum_{ j=1 }^{ S_{ l+1 } } \delta^{ (l) }_{ j }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( b^{ (l) }_{ j }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }a^{ (l) }_{ k }) \right) \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ j }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( b^{ (l) }_{ j }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }g(z^{ (l) }_{ k }) \right) \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ j }\frac { \partial { } }{ \partial { z^{ (l) }_{ i } } } \left( w^{ (l) }_{ ji } g(z^{ (l) }_{ i }) \right) \\ &=\sum _{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ j }\left( w^{ (l) }_{ ji }g\prime (z^{ (l) }_{ i }) \right) \\ \\ \end{align*} \]

\(\color{red}{损失函数关于权重和偏置的导数}\)

\[ \begin{align*} \\ \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*} \]

Softmax + CrossEntropy 反向传播推导

屏幕快照 2018-08-20 下午9.36.01-w624

\(\color{red}{递推公式}\)

\[ \begin{align*} g(x) &= \frac{1}{1 + e^{-x}}\quad \quad 激活函数 \\ a^{(l)}_{i} &= g\left(z^{(l)}_{i}\right) \\ z^{(l)}_{i} &= \left( \sum^{S_l}_{j=1}{w^{(l-1)}_{ij}a^{(l-1)}_i} \right ) + b^{(l-1)}_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 { a^{ (l) }_{ i } } } \frac { \partial { a^{ (l) }_{i} } }{ \partial { z^{ (l) }_{ i } } }\\ \end{align*} \]

其中

\[ \begin{align*} \frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { a^{ (l) }_{ i } } } &= w^{(l)}_{kj} \\ \frac { \partial { a^{ (l) }_{i} } }{ \partial { z^{ (l) }_{ i } } } &= z^{ (l) }_{ i } \left(1- z^{ (l) }_{ i }\right) \end{align*} \]

初始条件

\[ \begin{align*} J \left( \theta \right ) &= -\sum^{s_l}_{i=1}y^t \space \ln \space y^p \\ y^p_j &= \frac{e^{a^N_j}}{\sum^{s_N}_{k=1}e^{a^L_k}} \\ \end{align*} \]

\[ \begin{align*} J \left( \theta \right ) &= -\sum^{s_l}_{i=1}y^t \space \ln \space y^p \\ y^p_j &= \frac{e^{a^N_j}}{\sum^{s_N}_{k=1}e^{a^L_k}} \\ \end{align*} \]

softmax偏导数计算

\[ \begin{align*} \frac{\partial y^p_j}{\partial a^N_i} = \begin{cases} -y^p_i \space y^p_j \quad \quad \quad\quad i \ne j\\ y^p_j \space (1-y^p_j) \quad \quad i =j \end{cases} \end{align*} \]

求导链式法则如下

\[ \begin{align*} \frac { \partial { J(\theta ) } }{ \partial { z^{ (N) }_{ i } } } &= \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } \frac { { \partial { a^{ (N) }_{ i } } } }{ \partial { z^{ (N) }_{ i } } } \\ \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } &=\sum _{ j=1 }^{ S_{ N } } \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } \frac { { \partial { y^{ (p) }_{ j } } } }{ \partial { a^{ (N) }_{ i } } } \\ \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } &= -\frac{y^t_j}{y^p_j} \end{align*} \]

由上可知:

\[ \begin{align*} \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } &= \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ i } } } \frac { { \partial { y^{ (p) }_{ i } } } }{ \partial { a^{ (N) }_{ i } } } + \sum _{ j \ne i }^{ S_{ N } } \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } \frac { { \partial { y^{ (p) }_{ j } } } }{ \partial { a^{ (N) }_{ i } } } \\ &= - \frac { y_{ i }^{ t } }{ y_{ i }^{ p } } y_{ i }^{ p }\left( 1-y_{ i }^{ p } \right) +\sum _{ j\ne i }^{ s_{ N } } -\frac { y_{ j }^{ t } }{ y_{ j }^{ p } } \left(- y_{ j }^{ p }y_{ i }^{ p } \right) \\ &= -y_{ i }^{ t }\left( 1-y_{ i }^{ p } \right) +\sum _{ j\ne i }^{ s_{ N } } \left( y_{ j }^{ t }y_{ i }^{ p } \right) \\ &= -y^t_i + \sum _{ j }^{ s_{ N } } \left( y_{ j }^{ t }y_{ i }^{ p } \right) \\ &=y^p_i - y^t_i \end{align*} \]

由此可知反向传播迭代算法的初始值

\[ \begin{align*} \frac { \partial { J(\theta ) } }{ \partial { z^{ (N) }_{ i } } } &= \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } \frac { { \partial { a^{ (N) }_{ i } } } }{ \partial { z^{ (N) }_{ i } } } \\ &=\left( y^p_i - y^t_i \right) \cdot z^{ (l) }_{ i } \left(1- z^{ (l) }_{ i }\right) \\ \end{align*} \]

猜你喜欢

转载自www.cnblogs.com/nowgood/p/backprop2.html