指数加权平均数 (Exponentially weighted average)
例如温度计算
是前一天的温度,是今天的温度
如果给定为0.9,则图像为下图红线的结果
由于以后我们要考虑的原因,在计算时可视𝑣𝑡大概是 的每日温度,如果𝛽是 0.9,为十天的平均值,则图像为下图的红线部分,如果增加给定为0.98,也就是五十天的温度,则图像为下图的绿线。
因为多平均了几天的温度,所以这个曲线的波动更小,曲线整体要平坦一些,缺点是曲线进一步右移
当为0.98时,相当于给前一天的值加了太多的权重,只有0.02加给了当日的权重,所以温度变化时,温度上下起伏,当较大时,指数加权平均值适应地更缓慢一些。
当为0.5时,仅做了两天的平均值,为途中黄线
由于仅平均了两天的温度,平均的数据太少,所以得到的曲线有更多的噪声,有可能出
现异常值,但是这个曲线能够更快适应温度变化。
总结:往往中间有某个值效果最好,为中间值时得到的红色曲线,比起绿线和黄线更好地平均了温度
指数加权平均数公式的好处之一在于,它占用极少内存,电脑内存中只占用一行数字而已,然后把最新数据代入公式,不断覆盖就可以了,正因为这个原因,其效率,它基本上只占用一行代码,计算指数加权平均数也只占用单行数字的存储和内存,当然它并不是最好的,也不是最精准的计算平均数的方法。如果你要计算移动窗,你直接算出过去 10 天的总和,过去 50 天的总和,除以 10 和 50 就好,如此往往会得到更好的估测。但缺点是,如果保存所有最近的温度数据,和过去 10 天的总和,必须占用更多的内存,执行更加复杂,计算成本也更加高昂。
指 数 加 权 平 均 的 偏 差 修 正 ( Bias correction in exponentially weighted averages)
通过修正偏差可以让平均数运算更加准确。
此图中等于0.9为红色的线,等于0.98为绿色的线,如果当0.98时不为绿色,反而为紫色的线该如何处理
计算移动平均数的时候,初始化,但是,所以这部
分没有了(),所以,所以如果一天温度是 40 华氏度,那么,因此得到的值会小很多,所以第一天温度的估测不准。
,如果代入𝑣1,然后相乘,所以,假设和都是正数,计算后要远小于和,所以不能很好估测出这一年前两天的温度。
有个办法可以修改这一估测,让估测变得更好,更准确,特别是在估测初期,也就是不,而是用 ,t 就是现在的天数。举个具体例子,当𝑡 = 2时,,因此对第二天温度的估测变成了 ,也就是和的加权平均数,并去除了偏差。你会发现随着𝑡增加,接近于 0,所以当𝑡很大的时候,偏差修正几乎没有作用,因此当𝑡较大的时候,紫线基本和绿线重合了。不过在开始学习阶段,你才开始预测热身练习,偏差修正可以帮助你更好预测温度,偏差修正可以帮助你使结果从紫线变成绿线。
在机器学习中,在计算指数加权平均数的大部分时候,大家不在乎执行偏差修正,因为大部分人宁愿熬过初始时期,拿到具有偏差的估测,然后继续计算下去。如果你关心初始时期的偏差,在刚开始计算指数加权移动平均数的时候,偏差修正能帮助你在早期获取更好的估测。
动量梯度下降法(Gradient descent with Momentum)
该算法的运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重,
例如,如果你要优化成本函数,函数形状如图,红点代表最小值的位置
其中梯度下降法要很多计算步骤,慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,无法使用更大的学习率,如果要用较大的学习率(紫色箭头),结果可能会偏离函数的范围,为了避免摆动过大,要用一个较小的学习率。
如果因为想消除纵轴上的这些摆动使得学习慢一点,但是在横轴上希望加快学习,加速从左向右移动,移到最小值。就要使用动量梯度下降法,需要在每次迭代中,换句话说在第t次迭代的过程中计算微分dW,db。也就是计算,也就是之前的,dW的移动平均数,接着同样的计算,,然后重新赋值权重,同样的,这样就可以减缓梯度下降的幅度。
动量梯度下降法的一个本质,能够最小化碗状函数,这些微分项,提供了加速度。想象你有一个碗,你拿一个球,微分项给了这个球一个加速度,此时球正向山下滚,球因为加速度越滚越快,而因为𝛽 稍小于 1,表现出一些摩擦力,所以球不会无限加速下去,所以不像梯度下降法,每一步都独立于之前的步骤,你的球可以向下滚,获得动量,可以从碗向下加速获得动量。
RMSprop(root mean square prop)
该方法也可以加速梯度下降。
上图回忆,梯度下降过程中横轴正在推荐,但是纵轴方向会有大幅度摆动,假设纵轴代表参数𝑏,横轴代表参数𝑊,可能有, 或者其它重要的参数,为了便于理解,被称为𝑏和W
想减缓𝑏方向的学习,即纵轴方向,同时加快,至少不是减缓横轴方向的学习,RMSprop 算法可以实现这一点.
在第𝑡次迭代中,该算法会照常计算当下 mini-batch 的微分𝑑𝑊,𝑑𝑏,所以我会保留这个指数加权平均数,我们用到新符号,而不是,因此,这个平方的操作是针对这一整个符号的,这样做能够保留微分平方的加权平均数,同样,再说一次,平方是针对整个符号的操作。
接着 RMSprop 会这样更新参数值,,. 因为我们希望学习速度快,在垂直方向也就是图中b方向,同时虚妄减缓纵轴的拍动,所以有了和我们希望会相对较小,所以我们要除以一个较小的数,而希望$S_{db}又较大,所以这里我们要除以较大的数字,这样就可以减缓纵轴上的变化。
这些微分,垂直方向的要比水平方向的大得多,所以斜率在𝑏方向特别大,所以这些微分中,较大,𝑑𝑊较小,因为函数的倾斜程度,在纵轴上,也就是 b 方向上要大于在横轴上,也就是𝑊方向上。𝑑𝑏的平方较大,所以也会较大,而相比之下,𝑑𝑊会小一些,亦或𝑑𝑊平方会小一些,因此会小一些,结果就是纵轴上的更新要被一个较大的数相除,就能消除摆动,而水平方向的更新则被较小的数相除。
RMSprop 的影响就是你的更新最后会变成这样(绿色线),纵轴方向上摆动较小,而横轴方向继续推进。还有个影响就是,你可以用一个更大学习率𝑎,然后加快学习,而无须在纵轴上垂直方向偏离。
RMSprop 跟 Momentum 有很相似的一点,可以消除梯度下降中的摆动,包括mini-batch 梯度下降,并允许你使用一个更大的学习率𝑎,从而加快你的算法学习速度。
网友评论