1. Mini-batch gradient descent
1)是什么?
在Batch gradient descent时,每次迭代都要遍历整个训练集,当训练集数目过大时,会导致学习速度很慢。
如果训练集巨大,将训练集分为t个子集,即mini-batch(如1000个样本),用每一个子集对神经网络进行训练,这样一个训练集就可以对神经网络训练t次,加上对神经网络迭代的次数s,所以总的训练次数为s*t。
上图假设训练集大小为5000000,mini-batch大小为size=1000,那么t=5000,对每一个子集进行前向传播和反向传播计算,注意计算时m=1000.
2)理解mini-batch
如果size=m,就是batch gradient descent
如果size=1,就是stochastic gradient descent随机梯度下降,随机梯度下降噪声比较大,在学习的过程中,会不断的向最小值靠近,最终在最小值附近波动,但是无法收敛到最小值,而且学习的过程很曲折(噪声大),虽然其可以通过减小学习速率来降低噪声的影响,但是依旧不推荐此方法,因为这种方法没能利用向量计算来节约时间
mini-batch的size应该在1~m之间,mini-batch是学习速度最快的一个,有两个突出的优点:一,能利用大量的向量计算加快速度,二,不需要等整个训练集都处理完就能进行后续工作。它也会像随机梯度那样不能每次都向最小值靠近,但是其比随机梯度能更持续地靠近最小值的方向,它也不一定收敛或在一个很小的范围波动,出现这样的情况可以通过减小学习速率来改善。
如何选择mini-batch大小?
如果训练集较小(<2000),直接采用batch gradient descent。
如果训练集较大,子集大小一般为64~512,考虑到电脑内存的设置和使用方式,如果size是2的次方,运行会快一些,所以一般取{64,128,256,512},也可以尝试1024,不过用的比较少
注意:子集mini-batch要符合GPU/CPU的内存,取决于应用目的以及训练集大小。
2. 指数加权平均
还有很多比梯度下降更优秀的优化算法,但是讲到其他优化算法之前,需要先介绍一下指数加权平均
1)指数加权移动平均值
在统计学中被称为指数加权移动平均值,我们一般简称为指数加权平均数。
以伦敦的气温为例:
有了这些数据,如何计算趋势?也就是温度的局部平均值/移动平均值。设V0=0,第一天的加权平均数为:V1=0.9V0+0.1θ1即由前一天的加权平均数和当天的气温来决定。最终得到图中红色曲线。
这种滑动平均算法称为指数加权平均(exponentially weighted average)。根据之前的推导公式,其一般形式为:
Vt=βVt−1+(1−β)θt
上面的例子中,β=0.9。β值决定了指数加权平均的天数,即Vt大约为1/(1-β)天的每日平均温度。
我们将指数加权平均公式的一般形式写下来:
两边取ln得 n*lnβ=-1 (1)
对lnβ做泰勒展开(令x0=1,lnβ=ln1+1*(β-1)=β-1,带入(1)式得:
n=1/(1-β)
2)如何执行指数加权平均?
这样做的好处是电脑内存中只保存一个实数,然后把最新数据带入公式,不断更新覆盖就可以了,代码也只有一行。虽然这种做法不是最精确的做法,但是其计算以及内存效率都很高。
3)Bias Correction指数加权平均的偏差修正
RMSprop是另外一种优化梯度下降速度的算法。每次迭代训练过程中,其权重W和常数项b的更新表达式为:
SW=βSdW+(1−β)dW2
Sb=βSdb+(1−β)db2
原理:理想的优化算法是尽可能的沿着起始点到最小值的方向下降,如上图中的水平方向,但实际中又总会出现一些震荡,如图垂直方向的震荡,为了便于分析,假设水平方向为W,垂直方向为b,通过观察斜率可以得到,函数在垂直方向的斜率要大,在水平方向的斜率要小,也就是垂直方向梯度db较大,水平方向梯度dw相对较小,于是Sw相对Sb较小,那么相对来讲,最终导致,W变化的步长增加,b变化的步长减小,也就是震荡剧烈的方向步长减小,而震荡平缓的方向步长增加,从而达到减少震荡快速收敛的目的。
注:需要注意的是为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数ε:
ε=10−8,或者其它较小值。
5. 优化算法之 ---- Adam(Adaptive Moment Estimation)
将momentum和RMSprop结合起来,并加入偏差修正。这是一种极为常用的优化算法,且被证明有效适用于不同结构的神经网络.
其算法流程为:
VdW=0, SdW, Vdb=0, Sdb=0
On iteration t:
Compute dW, db with current mini-batch gradient descent
VdW=β1VdW+(1−β1)dW, Vdb=β1Vdb+(1−β1)db
SdW=β2SdW+(1−β2)dW2, Sdb=β2Sdb+(1−β2)db2
Adam算法包含了几个超参数,分别是:α,β1,β2,ε。其中,β1通常设置为0.9,β2通常设置为0.999,ε通常设置为10−8。一般只需要对α进行调试。
6. 学习率衰减 Learning Rate Decay
假设使用mini-batch梯度下降,在迭代的过程中会有噪声,迭代的过程中会朝着最小值的方向下降,但是不会精确收敛,最终会在最小值附近震荡,这是因为我们使用的学习率α是固定的,如果能够缓慢的减小学习率,那么初期的时候,学习率还比较大,所以学习速度依旧相对较快,但是随着学习率的减小,学习的步伐越来越小,最后会在最小值附近的一小块区域摆动,而不是原来的在最小值附近大幅震荡
其中,k为可调参数,t为mini-bach number。
除此之外,还可以设置α为关于t的离散值,随着t增加,α呈阶梯式减小。当然,也可以根据训练情况手动调整α值,对于大数据来说不太实用。
7. 局部最优问题Local Optima
在低维空间中我们经常担心被困在局部最优解中,但是在高维空间中,几乎不会存在这个问题,在高维空间中,导数为0的点通常是鞍点。
对于高维空间来说,其问题是在平缓区,学习将会十分的缓慢,这时利用优化算法如Adam将会大大提高学习速度。