前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习那些事 — 反向传播

深度学习那些事 — 反向传播

作者头像
木野归郎
发布2020-10-10 11:00:13
9550
发布2020-10-10 11:00:13
举报
文章被收录于专栏:share ai happinessshare ai happiness

这部分是深度学习的重点,掌握了反向传播算法就相当于掌握了一半的神经网络算法。其实就是将损失函数产生的误差通过边进行反向传播往回传播的过程,传播的过程当中会得到每个边的梯度,有了这个梯度,就可以沿着反方向更新参数,不断的迭代,最后让参数越来越好,越来越符合当前样本的结构,学习到更多样本的知识。

前面讲到的是前馈计算,前馈计算得到的是一个误差,也就是损失函数,下面讲怎么把损失函数计算出来的误差,反向传播更新参数。反向传播是神经网络最核心的部分。

反向传播,可以看成链式求导过程,一环套一环,通过对误差最终的损失函数求导,损失函数对每个参数进行求导,求导过程就是反向传播过程。

这个过程为什么叫反向传播呢?继续往后看。

反向传播——链式求导过程

在这里会通过上面画横线的链式部分进行求导,来演示。

整个思想:通过损失函数原始误差,我们可以计算出每个节点的误差,σ1^y和σ2^y两个节点的误差会通过边往下传,下层的误差还可以往下传,这个误差可以作为指导,参与到每个边的导数的计算。

进行求导之前回顾一下求导的对象,前面三个公式不陌生了,J(θ)对每个边每个参数求导的过程,它是从x开始计算,一直计算到y。sig激活函数的导数在这里也先给出来。

损失函数的误差乘当前这个节点的上层节点的激活函数的导数就是这个点的误差。

参考公式如下:

求导:

要算一条边的导数,可以用连接这个边的上层节点的误差值乘这个边相连下层节点的具体的值就行。

求导:

误差的反向传播大概思想是这样,首先第一步,要算出顶层损失函数的误差,通过这个误差可以得到输出层每个节点的误差,然后这个误差会通过它对应的边,乘以对应边的权重,会反向传播,往底层传播,完了把它加权和算出来之后再乘底层节点的对应的激活函数的导数值,就是激活函数的误差,底层节点的误差还可以往后传播,如果层数更深的话,还可以乘边的权重,往后传播...

求导:

前面是对权重矩阵进行求导,怎么对偏置进行求导呢?

偏置的导数计算要比权重矩阵的导数计算简单,也是由两个部分组成,我们只需要这个偏置相关的节点的误差值,后边是一个常数1。

现在有了这个输出,就能得到损失函数,就能得到误差值,得到这两个误差值,通过反向传播把误差往后传,可以计算出第二层的权重值,上层的误差乘下层的具体指得到导数。

通过反向传播能得到隐含层的误差,有了这个误差可以进一步计算输入层和隐含层之间每个边的权重,也是隐含层节点的误差值乘输入层节点的值。

反向传播算法——核心思想

下图右边红色画出来的部分,上面是对权重进行求导,下面是对偏置进行求导。

求导分为三部分,在下图左边部分。

前面说了那么多,就是通过反向传播求的导数,有了导数能做什么吗?

我们找到这个导数反方向的梯度,看下面更新参数值部分,黄色部分是旧的θ,红色部分是θ的导数,旧θ减去导数(θ导数有方向的,减去反方向的值),具体减多少,具体往左侧每次迈多大步子,取决于速率,求出新的θ,覆盖旧的θ。

更新参数值:

小结:

将误差通过边进行反向传播。

结合误差计算每个参数的梯度。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档