反向传播公式推导

神经网络中权重 \(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\) 个单元的梯度值

MSE 损失函数推导

\(\color{red}{基本公式}\)

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

交叉熵损失函数推导

屏幕快照 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_i \space (1-y^p_i) \quad \quad \space 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*} \]

posted @ 2018-09-26 17:32  nowgood  阅读(2822)  评论(0编辑  收藏  举报