吴恩达深度学习笔记之改善神经网络(二)

来源:互联网 发布:网络网线接那几根线 编辑:程序博客网 时间:2024/05/18 22:47

2.1 mini-batch 梯度下降法(mini-batch gradient descent)

我们知道,向量化可以让我们有效的对所有的m个训练样例进行计算,允许我们处理整个训练集,而无需某个明确的公式,所以我们要把训练样本放到巨大的矩阵x当中去。向量化能够让我们相对较快的处理m个样本,但如果是很大的话,处理速度仍然缓慢。mini-batch要做的就是将整个训练集分割为小一点的子训练集。比如,我们的整个训练集有50万个样本,我们取1000个子训练集,如下图所示:

这里写图片描述

我们接下来用如下图的伪代码来解释其原理:

这里写图片描述

这就是使用mini-batch 梯度下降法训练的一步,一次遍历训练集只让我们做一次梯度下降。

2.2 理解mini-batch 梯度下降法

使用batch梯度下降法时,每次迭代都需要历遍整个训练集,可以预期每次迭代的成本都会下降,所以如果成本函数J是迭代的一个函数,它应该会随着每次迭代而减少,如果不是这样,那肯定出了问题。使用mini-batch梯度下降法时,成本函数并不是每次迭代都是下降的,这是因为每次丢带都在训练不同的样本集,或者说在训练不同的mini-batch。我们来看一下他们的成本函数图,如下:

这里写图片描述

噪声产生的原因在于也许x{1}y{1}是比较容易计算的mini-batch,而x{2}y{2}是比较难运算的mini-batch。
其次我们需要决定的变量之一是mini-batch的大小。m就是训练集的大小,如果mini-batch的大小为m,其实就是batch梯度下降法,如果mini-batch为1 就是随机梯度下降法。如下所示:

if mini-batch size=m :batch gradient descent
if mini-batch size=1 :stochastic gradient descent

我们再来看看这三种情况下的成本函数优化情况。如下所示:

这里写图片描述

stochastic gradient descent :

每次迭代只对一个样本进行梯度下降,大部分时候,向着全局最小值靠近,有时候会远离最小值。平均来看,它最终会靠近最小值。其次需要注意的是:随机梯度下降法永远不会收敛,他只会在最小值附近波动。而且随机梯度下降法会失去所有向量化所带来的加速。

mini-batch gradient descent:

一方面可以大量向量化,另一方面不需要等待整个训练集被处理完就可以开始进行后续工作。
mini-batch size指导性原则:如果样本集较小,没必要使用mini-batch梯度下降法,以2000为基准。如果太大,则mini-batch大小为2629之间。

2.3 指数加权平均(Exponentially weigthed averages)

我们先介绍一下指数加权平均的关键公式:

vt=βvt1+(1β)θt

接着我们以某一个地区一年的气温作为例子来讲解这个公式。
如下:

这里写图片描述

我们通过下面一组操作,也就是移动加权平均的操作,如下所示:

这里写图片描述

解释一下,v1表示经过计算后第一天的气温,而0.9是我设置的对应于公式中的超参数,θ1表示第一天的实际气温,后面以此类推。经过这样的计算后,我们就可以得出经过指数加权平均后的气温走势图,如下红线所示:

这里写图片描述

我们可以通过调整超参数β的值,得到不同的经过指数加权平均之后的气温走势图,如下所示:

这里写图片描述

2.4 指数加权平均的偏差修正(Bias correction in Exponentially weigthed averages)

偏差修正是为了解决早起预测不准确的问题,我们依然以气温预测为例,如下所示:

这里写图片描述

上图中,紫色是没有加上偏差修正的计算结果,绿色是经过偏差修正之后得到的计算结果。他们的超参数β=0.98。我们来看看偏差修正做了什么。我们知道指数加权平均公式如下:

vt=βvt1+(1β)θt

我们要在他的基础上再进行如下的计算:
vt1βt

由上可知,当t很小的时候,βt接近于1,vt会适当增大,当t很大的时候,分母接近于1,所以偏差修正几乎没什么用,故后面紫的线和绿色的线就重合了。这就是偏差修正。

2.5 动量梯度下降法(Gradient descent with momentum)

除了batch/mini-batch/stochastic gradient descent 梯度下降法,还有一种算法叫做momentum梯度下降法,运行速度几乎总是快于标准的梯度下降法,简而言之,基本的思想就是计算梯度的指数加权平均数,并利用该梯度更新权重 ,以下是batch/mini-batch gradient descent以及momentum梯度下降法优化走势图。

这里写图片描述

蓝线表示batch梯度下降法 ,红线是momentum梯度下降法 我们会发现梯度下降法需要很多计算步骤,慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,导致我们无法使用更大的学习率,结果可能会偏离函数的范围,为了避免摆动过大,我们需要使用较小的学习率,另一个看待问题的角度是在纵轴上,我们希望慢一点,但是在横轴上,我们希望快一点,所以使用momentum梯度下降法,我们需要做的是,在每次迭代中,确切的说是在第t次迭代中,我么要计算微分dw,db,注意是利用现有的mini-batch计算dw,db,如果使用batch梯度下降法,则现在的mini-batch就是全部的batch,对于batch梯度下降法的效果是一样的。
momentum的算法流程如下:
momentum
compute dw,db on current mini-batch

V_dw=βV_dw+(1β)dw
V_db=βV_db+(1β)db
w=wαVdw
b=bαVdb
在这里β相当于摩擦力,db,dw相当于加速度,这样就可以减缓梯度下降的幅度,如果平均这些梯度,就会发现这些纵轴上的摆动,平均值接近于零。因此用算法几次迭代之后,发现momentum梯度下降法,最终以纵轴方向摆动小了,横轴方向运动更快,因此算法走了一条更加直接的路径。 在上述算法中,有两个超参数,学习率α以及参数β,在这里β控制着指数加权平均数,β最常用的值是0.9。

2.6 RMSProp(root mean square prop)

除了momentum可以加快学习算法之外,均方根算法也可以加快学习算法。
算法流程如下:
on iteration t:
compute dw,db on current mini-batch

Sdw=βSdw+{1β}dw2
Sdb=βSdb+{1β}db2
w=wαdwSdw+ε
b=bαdbSdb+ε
这里需要说明的是,上面平方的操作是针对整个符号的,这样做能够保留微分平方的加权平均数。 我们来理解一下其原理,记得在w方向,我们希望学习速度快,而在垂直方向我们希望减小在纵轴上的摆动,所以有了Sdw和Sdb,我们希望Sdw相对较小,Sdb相对较大,所以我们要除以较大的数,从而减缓纵轴上的变化,在这里,另一个影响是可以用一个更大的学习率,然后加快学习,从而无须担心其在纵轴上的偏离。注意,这里选择加上ε,是为了防止分母为0,其实ε对算法的真正意义不大,我们一般将ε设置为108. Adam算法: RMSprop以及Adam优化算法是少有的经受住考验的两种算法,他们已被证明适用于不同的深度学习结构。

2.8 Adam 优化算法

Adam优化算法基本上就是将momentum和RMSprop结合在一起,我们来看看Adam算法的流程。
使用Adam算法首先需要初始化 vdw=0,Sdw=0,Vdb=0,Sdb=0
on iteration t: compute dw,db, using current mini-batch

V_dw=β1V_dw+(1β1)dw
V_db=β1V_db+(1β1)db
momentum更新了β1
Sdw=β2Sdw+{1β2}dw2
Sdb=β2Sdb+{1β2}db2
RMSprop更新了超参数β2 注意:一般计算Adam优化算法的时候要计算偏差修正。
Vdw=β1Vdw+(1β1)dw
Vdb=β1Vdb+(1β1)db
Vcorreteddw=Vdw(1βt1)
Vcorreteddb=Vdb(1βt1)
Scorreteddw=Sdw(1βt2)
Scorreteddb=Sdb(1βt2)
w=wαVcorrecteddwScorrecteddw+ε
b=bαVcorrecteddbScorrecteddb+ε
基本流程就是这样,这里有很多超参数,超参α很重要,经常需要调整,β1的常用缺省值为0.9,这是dw的移动平均数,这是momentum涉及的项,至于超参数β2,Adam论文的作者给出的推荐值是0.998. 最后谈谈为什么叫Adam算法,Adam代表的事Adaptive Moment Estimation。

2.8 学习率衰减(learning rate decay)

加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减,我们可以将学习率设置如下:

α=11+decay_rate×epoch_numα0

其中decay_rate为衰减率,epoch_num为迭代的轮数,α0为初始学习率。
还有下面的一些衰减公式:

这里写图片描述

也可以进行手动调试学习率。

阅读全文
0 0
原创粉丝点击