吴恩达深度学习笔记6-Course2-Week2【优化算法】

优化算法


一、Mini-batch gradient descent(小批量梯度下降法)

Mini-batch: 把整个训练数据集分成若干个小的训练集,即为Mini-batch。

为什么要分?梯度下降法必须处理整个训练数据集,才能进行下一次迭代。当训练数据集很大时,对整个训练集进行一次处理,处理速度较慢。但是如果每次迭代只使用一部分训练数据进行梯度下降法,处理速度就会变慢。而处理的这些一小部分训练子集即称为Mini-batch。另一方面,每次迭代处理更少的数据,使所需的内存空间相应的减小。

Mini-batch梯度下降的cost function会有噪声:
因为每次的训练集都不一样,可能遇到比较好分的训练数据,cost就较小。也可能是不好分的,cost就会变大。
这里写图片描述

Mini-batch 的 size:
size=m: batch梯度下降
对所有m个训练样本执行一次梯度下降,每一次迭代时间较长; Cost function 总是向减小的方向下降。

size=1: 随机梯度下降
对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速; Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。

size=(1,m): Mini-batch梯度下降
实现快速学习,也应用了向量化带来的好处; Cost function的下降处于前两者之间。通常选择2的整数次方:64,128,256,512。


二、指数加权平均(Exponentially weighted averages)

指数加权平均:这里写图片描述
其中vt表示加权平均值; v(t-1)表示前一个加权平均值; θt表示当前值; β越大平均的个数越多。
下图表示某些天的气温的散点图。其中黄、红、绿线分别是β=0.98,0.9,0.5的指数加权平均线(50天、10天、2天的加权平均值)。
这里写图片描述

作用: 虽然平均值不准确,但是只需要一行代码和一次计算就能够算出任意多个数的平均值。提高运行速度,节省内存空间。

指数加权平均的理解:
当β=0.9时,v100展开成:式中所有θ的系数相加等于1或者接近于1。
这里写图片描述
我们忽略系数小于系数峰值(0.1)的1/e的项,因为1-ε=β; 这里写图片描述,所以我们只关注1/ε个值。例如:β=0.9时,ε=0.1,1/ε=10,即10天。

指数加权平均的偏差修正(bias correction):
当β=0.98,我们得到的并不是图中的绿色曲线,而是下图中的紫色曲线,其起点比较低。因为我们设v0=0,v1=0.98*v0+0.02*θ1=0.02*θ1变得非常小。
这里写图片描述
修正公式:这里写图片描述
开始阶段分母会比较小,可以修正起点偏低;当t增大时分母趋于1对结果没影响。实际使用中,可以不修正,直接忽略前期的均值。


三、动量梯度下降法(gradient descent with momentum)

以下图是三维转二维 cost function contour 为例:
横轴(horizontal axis)梯度小,纵轴(horizontal vertical axis)梯度大,在相同的learning rate 梯度下降中横步长小(下降很慢)、纵步长很大(可能不收敛,波动大)。为了不收敛,learning rate 只能被设得较小,因此迭代速度慢。
这里写图片描述
我们想加快训练速度,就得抑制纵向减少波动。这样我们就可以设置更大的learning rate加大横向步长进而加快迭代。

动量梯度下降的核心思想就是在更新参数时使用梯度的指数加权平均数代替只使用当前mini-batch计算出的梯度进行更新,这样可以减小纵轴的波动(因为被平均了,平均值波动较小且约等于0)。

算法的理解: 把Cost function想象为一个碗状,顶部有一颗球往下滚,其中的微分项 dw,db 可以看做是加速度、动量项 Vdw,Vdb 相当于速度。小球在向下滚动的过程中,因为加速度的存在速度会变快,但是由于β的存在且小于1,可以看做是摩擦力,所以球不会无限加速下去。

动量梯度下降的公式:β通常设为0.9,该参数正常不用调参。
这里写图片描述


四、RMSprop (root mean square prop: 均方根)

这里写图片描述
在 learning rate不变的情况下,即减小梯度大(例中为纵轴)的步长又增大梯度小的(横轴)步长。因为dw小S就小,除以根号S的项也就大了,即步长变大。为了保证算法不会除以远小于0的数,平方根分母中通常加上一个很小的值ε=10^−8,该参数正常不用调参。


五、Adam 优化算法(Adaptive Moment Estimation)

Adam 优化算法就是融合了 Momentum 和 RMSprop 算法的一种经受住考验的通用深度学习优化算法,在很多网络中都很有效。需要进行指数加权平均的偏差修正。
这里写图片描述
其中的超参数(hyper parameter):
α :需要进行调参;
β1:通常使用缺省值0.9,用于dw的加权平均;
β2:论文作者推荐使用0.999,用于dw2的加权平均值;
ε:推荐使用10^−8。


六、学习率衰减(learning rate decay)

学习率衰减:训练过程中逐渐减小 learning rate
下图蓝色线表示训练中α固定的梯度下降,绿色线表示α逐渐减小的梯度下降:
这里写图片描述
使用Mini-batch训练且learning rate 固定时,梯度下降到达最小值点附近后,因为不同batch存在一定的噪声,使得不会精确收敛,而是会在最小值点较大的范围内波动。但是如果我们使用学习率衰减,逐渐减小learning rate,开始的时学习速率还是比较快,随着迭代次数增多α逐渐减小,最终会在最小值附近的一块更小的区域里波动。

学习率衰减的几种策略:
epoch表示完整的数据集,epoch_num表示训练整个数据集的次数,α0表示初始的learning rate。
这里写图片描述
这里写图片描述
这里写图片描述
分段函数:隔一段设置一个不同的 learning rate


七、局部最优问题(local optimal)

左图为三维 cost function, 右图为高维的cost function 的一部分。
这里写图片描述
**局部最优点:**cost function 中这点的所有维的导数为0,即所有维都应同时为凸函数,或同时是凹函数。
**鞍点:**cost function 中这点的某一维或某几维的导数为0,这么叫是因为类似马鞍的最低点。

低维时,cost function 有 local optimal 概率很高,但在高维时有 local optimal 概率就很低了,维度越高概率越低。所以高维时正常不用担心出现局部最优的情况,而是应该考虑出现鞍点的情况,因为鞍点附近的某一维的梯度可能很小,迭代就会变慢,可以用Adam算法来处理。


猜你喜欢

转载自blog.csdn.net/wang_jiankun/article/details/80253713