第二周:优化算法
2.1Mini-batch梯度下降
使用 batch 梯度下降法,一次遍历训练集只能让你做一个梯度下降,使用 mini-batch 梯度下降法,一次遍历训练集,能让你做 5000 个梯度下降。当然正常来说你想要多次遍历训练集,还需要为另一个 while 循环设置另一个 for 循环。所以你可以一直处理遍历训练集,直到最后你能收敛到一个合适的精度。
2.2理解mini-batch梯度下降算法
mini-batch,如果你要作出成本函数????的图,你很可能会看到这样的结果,走向朝下,但有更多的噪声,所以如果你作出????{????}的图,
你需要决定的变量之一是 mini-batch 的大小,????就是训练集的大小,极端情况下:如果 mini-batch 的大小等于????,其实就是 batch 梯度下降法。
另一个极端情况,假设 mini-batch 大小为 1,就有了新的算法,叫做随机梯度下降法,每个样本都是独立的 mini-batch,
因此随机梯度下降法是有很多噪声的,平均来看,它最终会靠近最小值,不过有时候也会方向错误,因为随机梯度下降法永远不会收敛,而是会一直在最小值附近波动,但它并不会在达到最小值并停留在此。实际上你选择的 mini-batch 大小在二者之间,
用 mini-batch 梯度下降法,我们从这里开始,一次迭代这样做,两次,三次,四次,它不会总朝向最小值靠近,但它比随机梯度下降要更持续地靠近最小值的方向,它也不一定在很小的范围内收敛或者波动,如果出现这个问题,可以慢慢减少学习率,
首先,如果训练集较小,直接使用 batch 梯度下降法,小于 2000 个样本,这样比较适合使用 batch 梯度下降法。不过还有个更高效的算法,比梯度下降法和 mini-batch 梯度下降法都要高效的多,
2.3指数加权平均数
你得到的曲线要平坦一些,原因在于你多平均了几天的温度,数加权平均公式在温度变化时,适应地更缓慢一些,所以会出现一定延迟,因为当???? = 0.98,相当于给前一天的值加了太多权重,只有 0.02 的权重给了当日的值,如果????是另一个极端值,比如说 0.5。
由于仅平均了两天的温度,平均的数据太少,所以得到的曲线有更多的噪声,有可能出现异常值,但是这个曲线能够更快适应温度变化。
2.4理解指数加权平均数
最后讲讲如何在实际中执行,还记得吗?我们一开始将????0设置为 0,然后计算第一天????1,然后????2,以此类推。
指数加权平均数公式的好处之一在于,它占用极少内存,电脑内存中只占用一行数字。
当然它并不是最好的,也不是最精准的计算平均数的方法。
2.5指数加权平均的偏差修正
所以????2不能很好估测出这一年前两天的温度。
2.6动量梯度下降法
慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,你就无法使用更大的学习率,如果你要用较大的学习率(紫色箭头),结果可能会偏离函数的范围,为了避免摆动过大,你要用一个较小的学习率。
另一个看待问题的角度是,在纵轴上,你希望学习慢一点,因为你不想要这些摆动,但是在横轴上,你希望加快学习,你希望快速从左向右移,移向最小值,移向红点。所以使用动量梯度下降法,
你要做的是计算???????????? = ???????????????? +(1 − ????)????W
你会发现这些纵轴上的摆动平均值接近于零,所以在纵轴方向,你希望放慢一点,平均过程中,正负数相互抵消,所以平均值接近于零。
你发现动量梯度下降法,最终纵轴方向的摆动变小了,横轴方向运动更快,因此你的算法走了一条更加直接的路径,在抵达最小值的路上减少了摆动.
????最常用的值是0.9,我们之前平均了过去十天的温度,所以现在平均了前十次迭代的梯度。
实际中,在使用梯度下降法或动量梯度下降法时,人们不会受到偏差修正的困扰。当然????????????初始值是 0,v????????的初始值也是向量零,所以和????????拥有相同的维数,也就是和????是同一维数。
向于使用左边的公式,也就是有1 − ????的这个公式,但是两个公式都将????设置为 0.9,是超参数的常见选择,只是在这两个公式中,学习率????的调整会有所不同。
2.7RMSprop
我们希望????????????会相对较小,所以我们要除以一个较小的数,而希望????????????又较大,所以这里我们要除以较大的数字,这样就可以减缓纵轴上的变化。
结果就是纵轴上的更新要被一个较大的数相除,就能消除摆动,而水平方向的更新则被较小的数相除。
RMSprop 的影响就是你的更新最后会变成这样(绿色线)
2.8Adam优化算法
所以 Adam 算法结合了 Momentum 和 RMSprop 梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
Adam 论文的作者建议????为10−8
2.9学习率衰减
所以慢慢减少????的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些。
比如,这个叫做指数衰减,其中????相当于一个小于 1 的值,如???? = 0.95epoch−num????0,所以你的学习率呈指数下降。
2.10局部最优问题
事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
而不会碰到局部最优。导数为 0 的点,这个点叫做鞍点。
结果是平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于 0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近 0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点。
所以此次视频的要点是,首先,你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数????被定义在较高的维度空间。
第二点,平稳段是一个问题,这样使得学习十分缓慢,这也是像 Momentum 或是RMSprop,Adam 这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如 Adam 算法,能够加快速度,让你尽早往下走出平稳段。