滑动平均基本知识点

滑动平均

在对于数据做统计的时,数据抖动是一个很常见的现象,如何防止这种抖动是我们感兴趣的。滑动平均就是这样一种技术,其本质是借助历史记录来创造可以替代原始数据的数据。

举个例子,下图是伦敦一年四季温度变化的图片,横轴为时间(天为单位),纵轴为一天的平均温度:

温度记录theta为如下所示:

我们使用以下公式来计算加权平均温度vt:

                                                                                                  (1)

其中v0 = 0。我们把beta称为衰减率,设beta = 0.9,则数据转为下图红点所示:

是不是数据平稳了很多?

滑动平均的原理

可以对公式做一下展开:

                                                v_t = (1-\beta) \beta^0 \theta_t + (1-\beta) \beta^1 \theta_{t-1} + ... + (1 - \beta) \beta^{t-1} \theta_1            (2)

可以发现,当前的滑动平均值受前面所有温度的影响,其中时间点越近影响越大。这也说明了为什么滑动平均值比较平稳,因为其实综合之前所有历史记录的值。

参数beta起到了调节作用,beta增大说明历史值的影响也比较大,反之则当前值占主导地位。

滑动平均值修改

滑动平均值存在一个问题,v1 = \beta v_0 + (1 - \beta) \theta_1 但v_0为0,所以v1相比较theta_1是比较小的,同理初阶段的滑动平均值也有这样的问题( beta较大时尤为明显),如图的紫色曲线:

为了解决这个问题,我们对于滑动品均值做进一步的调整:

                                                                            v_t := \frac{v_t}{1 - \beta^t}                                              (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笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值