前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反向传播算法(Backpropagation)—-Gradient Descent的推导过程[通俗易懂]

反向传播算法(Backpropagation)—-Gradient Descent的推导过程[通俗易懂]

作者头像
全栈程序员站长
发布2022-06-29 10:59:39
3290
发布2022-06-29 10:59:39
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

BP算法是适用于多层神经网络的一种算法,它是建立在梯度下降法的基础上的。本文着重推导怎样利用梯度下降法来minimise Loss Function。

给出多层神经网络的示意图:

在这里插入图片描述
在这里插入图片描述

1.定义Loss Function

假设有一组数据样本 x 1 x^{1} x1, x 2 x^{2} x2,… ,每一个x都有很多个特征,输入x,会得到一个输出y,每一个输出都对应一个损失函数L,将所有L加起来就是total loss。 那么每一个L该如何定义呢?这里还是采用了交叉熵,如下所示:

在这里插入图片描述
在这里插入图片描述

这里的 y i y^{i} yi是真实输出, y ^ y\hat{} y^是y target,是人为定义的。最终Total Loss的表达式如下:

在这里插入图片描述
在这里插入图片描述

2.Gradient Descent

L对应了一个参数,即Network parameters θ(w1,w2…b1,b2…),那么Gradient Descent就是求出参数 θ ∗ \theta^{*} θ∗来minimise Loss Function,即:

在这里插入图片描述
在这里插入图片描述

梯度下降的具体步骤为:

图源:李宏毅机器学习讲稿
图源:李宏毅机器学习讲稿

3.求偏微分

从上图可以看出,这里难点主要是求偏微分,由于L是所有损失之和,因此我们只需要对其中一个损失求偏微分,最后再求和即可。 先抽取一个简单的神经元来解释:

在这里插入图片描述
在这里插入图片描述

先理一理各个变量之间的关系:我们要求的是Total Loss对参数w的偏导,而Total Loss是一个个小的l累加得到的,因此,我们只需要求得 ∂ l ∂ w \frac{\partial l}{\partial w} ∂w∂l​,而 l = − y ^ l n y l=-\hat{y}lny l=−y^​lny,其中 y ^ \hat{y} y^​是人为定义的,跟w没有关系,因此我们只需要知道 ∂ y ∂ w \frac{\partial y}{\partial w} ∂w∂y​。l跟z有关系,根据链式求导法则,我们需要求 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​和 ∂ z ∂ w \frac{\partial z}{\partial w} ∂w∂z​,其中 ∂ z ∂ w \frac{\partial z}{\partial w} ∂w∂z​的求解较为容易,如下图所示:

在这里插入图片描述
在这里插入图片描述

求 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​是一个难点,因为我们并不知道后面到底有多少层,也不知道情况到底有多复杂,我们不妨先取一种最简单的情况,如下所示:

在这里插入图片描述
在这里插入图片描述

4.反向传播

在第一张图里面,我们经过正向传播很容易求出了 ∂ z ∂ w \frac{\partial z}{\partial w} ∂w∂z​,而对于 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​,则并不是那么好求。上图其实就是运用了反向传播的思想, 对于上图中 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​最后的表达式,我们可以换一种结构,如下所示:

在这里插入图片描述
在这里插入图片描述

l对两个z的偏导我们假设是已知的,并且在这里是作为输入,三角形结构可以理解为一个乘法运算电路,其放大系数为 σ ′ ( z ) \sigma {}'(z) σ′(z)。但是在实际情况中,l对两个z的偏导是未知的。假设神经网络最终的结构就是如上图所示,那么我们的问题已经解决了:

在这里插入图片描述
在这里插入图片描述

其中:

在这里插入图片描述
在这里插入图片描述

但是假如该神经元不是最后一层,我们又该如何呢?比如又多了一层,如下所示:

在这里插入图片描述
在这里插入图片描述

那么我们只要知道 ∂ l ∂ z a \frac{\partial l}{\partial z_{a}} ∂za​∂l​和 ∂ l ∂ z b \frac{\partial l}{\partial z_{b}} ∂zb​∂l​,我们同样可以算出 ∂ l ∂ z ′ \frac{\partial l}{\partial z{}’} ∂z′∂l​以及 ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z{}”} ∂z′′∂l​,原理跟上面类似,如下所示:

在这里插入图片描述
在这里插入图片描述

∂ l ∂ z b \frac{\partial l}{\partial z_{b}} ∂zb​∂l​同样是l先对y求导,y再对 z b z_{b} zb​求导。

那假设我们再加一层呢?再加两层呢?再加三层呢?。。。,情况还是一样的,还是先求l对最后一层z的导数,乘以权重相加后最后再乘上 σ ′ ( z ′ ′ , z ′ ′ ′ , . . . ) \sigma {}'(z{}”,z{}”’,…) σ′(z′′,z′′′,...)即可。 最后给一个实例:

在这里插入图片描述
在这里插入图片描述

它的反向传播图长这样:

在这里插入图片描述
在这里插入图片描述

我们可以很轻松的算出 ∂ l ∂ z 5 \frac{\partial l}{\partial z_{5}} ∂z5​∂l​和 ∂ l ∂ z 6 \frac{\partial l}{\partial z_{6}} ∂z6​∂l​,算出这两个之后,根据上面我们找到的关系式,我们也可以轻易算出 ∂ l ∂ z 3 \frac{\partial l}{\partial z_{3}} ∂z3​∂l​和 ∂ l ∂ z 4 \frac{\partial l}{\partial z_{4}} ∂z4​∂l​,最后再算出 ∂ l ∂ z 1 \frac{\partial l}{\partial z_{1}} ∂z1​∂l​和 ∂ l ∂ z 2 \frac{\partial l}{\partial z_{2}} ∂z2​∂l​。然后 ∂ l ∂ z 1 \frac{\partial l}{\partial z_{1}} ∂z1​∂l​和 ∂ l ∂ z 2 \frac{\partial l}{\partial z_{2}} ∂z2​∂l​再分别乘上x1和x2,就是我们最终要找的 ∂ l ∂ w 1 \frac{\partial l}{\partial w_{1}} ∂w1​∂l​和 ∂ l ∂ w 2 \frac{\partial l}{\partial w_{2}} ∂w2​∂l​。 我们不难发现,这种计算方式很清楚明了地体现了“反向传播”四个字。 好了,目标达成!!

在这里插入图片描述
在这里插入图片描述

5.总结

通过Forward Pass我们求得 ∂ z ∂ w = a \frac{\partial z}{\partial w}=a ∂w∂z​=a,然后通过Backward Pass我们求得 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​,二者相乘,就是 ∂ l ∂ w \frac{\partial l}{\partial w} ∂w∂l​。利用上述方法求得所有参数的值之后,我们就可以用梯度下降法来更新参数,直至找到最优解。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132274.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.定义Loss Function
  • 2.Gradient Descent
  • 3.求偏微分
  • 4.反向传播
  • 5.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档