码迷,mamicode.com
首页 > 编程语言 > 详细

反向传播算法推导

时间:2018-09-26 17:48:05      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:splay   反向   image   技术   tab   之间   计算   inf   head   

技术分享图片?

神经网络中权重 \(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*} \]

交叉熵损失函数推导

技术分享图片?

\(\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*} \]

反向传播算法推导

标签:splay   反向   image   技术   tab   之间   计算   inf   head   

原文地址:https://www.cnblogs.com/nowgood/p/backprop2.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!