深度学习入门(二)-到底什么是反向传播算法

先给大家道个歉,上周末去参加了一个行业研讨会,没来得及更新。为表诚意,小编这周的文章全是干货,读后你就知道有多干了希望别掉粉吧!回头找机会跟大家分享一下小编参会后的一些体会。

上次跟大家聊了神经网络算法的基本单元和基本架构,相信大家对深度学习基本框架有了一定的了解。没看过的小伙伴建议先看看深度学习入门(一)。这次小编会深入介绍一下深度学习模型是如何得到的,帮助大家有个更清晰的认知。

之前的文章里小编提过机器学习在训练时的一般流程机器学习的一些概念:监督、训练、推理和标注。深度学习是机器学习的一个分支,因此神经网络的训练方法跟机器学习是类似的。深度学习模型的训练,本质上是一个优化的问题。做过目标优化的同学都知道:在确定目标函数后,我们要想办法让目标函数逐步减小。减小意味着模型和我们期望差距越来越小,越来越接近我们的预期,性能越来越好。神经网络的训练在优化过程中采用的是梯度下降法,公式如下,其中W代表网络的参数,是模型要学习的东西,J代表目标函数,η代表学习率,是程序员预先设定的超参数(Hyperparameter)。

这个式子表示待学习的参数需要沿着目标函数在该参数的梯度方向进行变化,变化幅度由超参数η来控制。关于梯度的理解,小编会在接下来的文章跟大家探讨,今天主要是讲清楚如何得到这个式子的计算结果。

从公式来看,如果要想进行参数W的更新,一定就要计算出。而计算出这个梯度参数的方法就是今天的主角,正向传播和反向传播算法。下图是一个两层神经网络,大家跟着小编一起看一下整个流程,这样能更好地理解训练的细节。下面会涉及到偏导数计算和矩阵的知识来进行一些公式推到。

上图中x为输入,W1,W2为要学习的参数,z、h为模型的中间变量,o为网络模型的计算结果,y为真实值,L为计算值和输出值的偏差,s是为了防止模型过拟合的L2正则项,J为目标函数,是我们最终优化的目标。关于过拟合和L2正则我们会在后面给大家介绍。

x经过z,h计算,是模型第一层的运算结果。这个结果再进入第二层完成函数o的计算,得到模型的输出。这就是一个多层感知机(MLP)的简单例子。

正向传播(forward-propagation)指的是对深度学习模型按照输入层、靠近输入层的隐层、靠近输出层的隐层和输出层的次序,依次计算并存储模型的中间变量的过程,计算流程如下:

关于上面的公式有几个地方说明一下:首先,φ是激活函数,l根据具体任务不同,有不同的计算方式,比如交叉熵,我们最关心的目标函数J为一个标量;其次,下标代表矩阵的大小,在后面的反向传播中会用到。通过上面模型一次由上到下的计算,完成了一次前向传播,模型的目标函数J会输出一个值。

反向传播(back-propagation)指的是依照微积分的链式法则,按照输出层、靠近输出层的隐层、靠近输入层的隐层和输入层的次序,依次计算并存储模型目标函数各层的中间变量和参数的梯度。

依照右侧公式依次进行依次运算,完成了左侧网络图中从下到到上的一次反向传播,得到了网络需要的

。将他们带入上面的梯度下降公式即可完成一次模型的更新了,实现模型能力的提升。这个过程反复多次就会训练出一个不错的网络。现在发现神秘的BP算法也没那么复杂了吧!

公式推到、输入很费力的,相信各位小伙伴看出小编的诚意了吧,不点赞转发心里不会痛么

回到正题,这个过程中有几个点需要强调一下:

1. 反向传播计算过程中,先算出的偏导数可以直接用到下个偏导数的计算中。只要把这个值存储下来就可以复用了,不需要重复计算。

2. 反向传播的计算中,会用到正向传播的计算结果,如上面的h,这两个过程是有先后顺序的。

经过上面的推导,相信有些小伙伴会对这个训练这个过程有更深入的了解,有些小伙伴怕是已经晕了。大家不用怕,现在主流的Framework针对常用的运算都已经为大家做好了,一行简单的语句即可完成反向传播的过程。但是这个过程仍然是非常重要的:很多研发人员在设计特殊层运算时,现有的Framework并没有支持。这需要研发人员自己编写特殊层的前向传播和反向传播算法,这样才能完成模型的训练。

今天给大家介绍了模型训练中非常重要的正向传播和反向传播算法,相信对大家深入了解网络训练有一定的帮助。下次我们会探讨跟多的细节,下次见

原创不易!欢迎大家关注,拍砖,留言,转发

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180330G0H6ZU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券