目录
转自:https://blog.csdn.net/qq_18888869/article/details/83009504
1. 神经网络优化中的滑动平均
Polyak平均会平均优化算法在参数空间访问中的几个点。如果t次迭代梯度下降访问了点,那么Polyak平均算法的输出是。
当应用Polyak平均于非凸问题时,通常会使用指数衰减计算平均值:
2. 滑动平均详解---用滑动平均估计局部均值
滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关(可以看成是变量过去一段时间取值的均值)。
2.1 三种参数更新方式的比较
2.1.1 滑动平均
变量在t时刻记为,为变量v在t时刻的取值,即在不使用滑动平均模型时,在使用滑动平均模型后,的更新公式如下:
(1)
上式中,。 相当于没有使用滑动平均。
例如: 取0.9
2.1.2 带偏差修正的滑动平均
Andrew Ng在Course 2 Improving Deep Neural Networks中讲到,t时刻变量v的滑动平均值大致等于过去个时刻θ值的平均。这个结论在滑动平均起始时相差比较大,所以有了Bias correction,将除以修正对均值的估计。
加入了Bias correction后,更新公式如下:
(2)
t越大,越接近1,则公式(1)和(2)得到的结果将越来越近。
当越大时,滑动平均得到的值越和θ的历史值相关。如果,则大致等于过去10个θ值的平均;如果,则大致等于过去100个θ值的平均。
假设起始,,之后每个时刻,依次对变量v进行赋值,不使用滑动平均和使用滑动平均结果如下:
图1. 三种变量更新方式
2.1.3 结论
相比对变量直接赋值而言,滑动平均得到的值在图像上更加平缓光滑,抖动性更小,不会因为某次的异常取值而使得滑动平均值波动很大
3. 滑动平均的好处
(1) 占内存少,不需要保存过去10个或者100个历史θ值,就能够估计其均值。(当然,滑动平均不如将历史值全保存下来计算均值准确,但后者占用更多内存和计算成本更高)
(2) 对于 mini-batch gradient decent,可以尝试滑动平均,毕竟 mini-batch gradient decent 对参数的更新也存在抖动。
例如,设,一个更直观的理解,在最后的1000次训练过程中,模型早已经训练完成,正处于抖动阶段,而滑动平均相当于将最后的1000次抖动进行了平均,这样得到的权重会更加robust。
4. 滑动平均在神经网络中的应用
(1) 优化器:RMSProp、AdaDelta、Adam、AmsGrad等使用衰减率、来利用历史梯度累积信息进行参数的更新(SGD、RMSProp、Adam中的参数更新方式对应于本文中的1/2/3种更新方式)
(2) BN:训练阶段的BN每次计算一个batch的均值作为进行这个batch的归一化
测试阶段使用全体样本的均值,但是无法计算出全体样本的均值,所以在训练阶段用滑动平均计算batch的累积均值来作为全体均值的估计,测试阶段直接使用训练阶段滑动平均得到的结果。