滑动平均原理

滑动平均算法的原理

举个例子,这个例子来自吴恩达老师的deep learning课程中。给出一个连续365天的温度数据,如图所示,横坐标为天数,纵坐标是温度。在这里插入图片描述
可以看到这些数据是很不平滑的,会让拟合出来的模型难以具有泛化性,因此,可以采用滑动平均的方式处理。假设某一天经过滑动平均处理后的温度数据为vt,实际的温度数据是at,假定第一天的数据v0是已知的,设β为0.9,那么可以得到
v1 = v00.9 + a1(1-0.9)
v2 = v10.9 + a2(1-0.9)
v3 = v20.9 + a3(1-0.9)

即某一天的滑动平均处理后的温度数据为前一天滑动平均处理后的温度数据x0.9加上今天实际的温度数据x(1-0.9),计算后得到数据如下在这里插入图片描述
红色的就是经过滑动平均后得到的数据结果,可以发现数据更加平滑,拟合出来的模型也将更有泛化性,由此我们可以总结得到滑动平均的计算公式就是:
vt = vt-1β + at(1-β)
那么β这个值又有什么含义呢,实际上,vt≈1/(1-β)天的平均温度,假设β等于0.9,那么vt约等于前10天温度的平均。假设β = 0.98,那么vt就是前五十天的温度的平均值,下面的绿线就是β等于0.98时的曲线
在这里插入图片描述
可以看到,绿线很明显比红线还要平滑,同时绿线比红线变化要延迟,红线达到某一温度,绿线要过一阵子才能达到相同温度。因为绿线是前50天的平均温度,变化就会更加缓慢,而红线是最近十天的平均温度,只要最近十天的温度都是上升,红线很快就能跟着变化。所以直观的理解就是,vt是前1/(1-β)天的平均温度。
再假设β等于0.5,再画出相应曲线如下图:
在这里插入图片描述
也就是某一天温度为前两天温度的平均,可以发现数据与原本蓝色的数据相当拟合,但是温度的变化也非常陡峭。
分析:
一般来说,我们的数据也像上面的温度一样,是有噪声的,如果用滑动平均算法,就可以使数据变化更加平滑,训练出来的模型更具有泛化性,较小的β值会导致数据噪声降低的不够,较大的β值又会导致数据过分右移,与真实数据取别太大,因此需要找到一个合适的β值,使模型泛化的更好。同时滑动平均模型在深度学习中只占用较少的内存,解释如下:
假设β为0.9,如果说用vt = 1/(1-β)天的平均值,我们需要提供前十天的温度,但是如果用vt = vt-1β + at(1-β)我们则只需提供两个值即可,大大降低内存使用量

偏差修正

实际上,当β = 0.98时,例子中的温度曲线如下紫色所示,而并不是实际的绿线
在这里插入图片描述
你可以注意到在紫线刚刚开始的时候,曲线的值相当的低,这是因为在一开始的时候并没有50天(1/(1-β)为50)的数据,而是只有寥寥几天的数据,相当于少加了几十天的数据,所以vt的值很小,这和实际情况的差距是很大的,也就是出现的偏差。
而在TensorFlow中的ExponentialMovingAverage()采取的偏差修正方法是:使用num_updates来动态设置β的大小
在这里插入图片描述
在数据迭代的前期,数据量比较少的时候,(1+num_updates)/(10+num_updates)的值比较小,使用这个值作为β来进行vt的计算,所以在迭代前期就会像上面的红线一样,和原数据更加接近。举个例子,当天数是第五天,β为0.98,那么(1+num_updates)/(10+num_updates) = 6/15 = 0.4,相当于最近1.6天的平均温度,而不是β=0.98时候的50天,这样子就做到了偏差修正。

tensorflow中的滑动平均

tensorflow中的滑动平均是针对参数w和b的,而非针对训练集的
为什么要针对参数进行滑动平均呢,这是因为在神经网络训练中,参数更新不能太大,也不能太小,更新的参数和之前的参数有联系,不能发生突变,一旦遇到某个疯狂的参数,有了滑动平均就能将其抑制下来,这种抑制作用,用专业术语叫做鲁棒性好(rubust)。鲁棒性就是对突变的抵抗能力,鲁棒性越好,这个模型对恶性参数的提抗能力就越强。

参考文献:https://blog.csdn.net/m0_38106113/article/details/81542863

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值