滑动平均
在对于数据做统计的时,数据抖动是一个很常见的现象,如何防止这种抖动是我们感兴趣的。滑动平均就是这样一种技术,其本质是借助历史记录来创造可以替代原始数据的数据。
举个例子,下图是伦敦一年四季温度变化的图片,横轴为时间(天为单位),纵轴为一天的平均温度:
温度记录theta为如下所示:
我们使用以下公式来计算加权平均温度vt:
(1)
其中v0 = 0。我们把beta称为衰减率,设beta = 0.9,则数据转为下图红点所示:

是不是数据平稳了很多?
滑动平均的原理
可以对公式
做一下展开:
(2)
可以发现,当前的滑动平均值受前面所有温度的影响,其中时间点越近影响越大。这也说明了为什么滑动平均值比较平稳,因为其实综合之前所有历史记录的值。

参数beta起到了调节作用,beta增大说明历史值的影响也比较大,反之则当前值占主导地位。
滑动平均值修改
滑动平均值存在一个问题,
但v_0为0,所以v1相比较theta_1是比较小的,同理初阶段的滑动平均值也有这样的问题( beta较大时尤为明显),如图的紫色曲线:

为了解决这个问题,我们对于滑动品均值做进一步的调整:
(3)
这样,即使初期的滑动平均值也不会低于原始值很多,而随着跌打的增加分母的影响也将越来越小。
Tensorflow中的滑动平均
tensorflow中的滑动平均衰减率并不是一个固定值。请看下面的函数,我们发现它是一个增函数,且以MOVING_AVERAGE_DECAY为最大值。

# decay为衰减率 MOVING_AVERAGE_DECAY,num_updates为实施滑动平均的步数,默认不填 ema = tf.train.ExponentialMovingAverage(decay=, num_updates=) # ema.apply 返回滑动平均操作对象,其参数为可训练变量 # 实际应用中会使用 tf.trainable_variables()自动将所有等待训练的参数汇总成列表 ema_op = ema.apply(tf.trainable_variables()) # 以下步骤将滑动平均和训练步骤合并在一起 with tf.control_dependencies([train_step, ema_op]): train_op = tf.no_op(name='train')
讯享网
参考文献:
[1] 吴恩达深度学习
[2] 【北京大学】人工智能实践:Tensorflow笔记

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11776.html