指数加权平均

整理自吴恩达深度学习系列视频
https://mooc.study.163.com/learn/2001281003?tid=2001391036#/learn/content?type=detail&id=2001701051
Also called exponentially weighted moving averages in statistics.

指数加权平均,是一种计算平均值的一种方法,起源于对伦敦气温的研究。

计算平均值最直观的方法,求和除以值的数目。比如求伦敦一个月的气温平均值,你把所有的温度加起来除以一个月的天数即可。下面我们介绍另一种求每一天平均气温的方法,即指数加权平均。

指数加权平均计算方法

V t = β V t − 1 + ( 1 − β ) θ t V_{t}=\beta V_{t-1}+(1-\beta)\theta_{t} Vt=βVt1+(1β)θt

V t V_{t} Vt表示计算的当天平均气温, V t − 1 V_{t-1} Vt1表示计算的前一天平均气温, θ t \theta_{t} θt表示数据里当天气温值。

β \beta β表示权值,一般取0.9.

V t V_{t} Vt即计算的当天平均气温, β \beta β取0.9时,它近似了 1 1 − β = 10 \frac{1}{1-\beta}=10 1β1=10 天的平均气温。

如何理解

在这里插入图片描述

如图所示,计算v100时,每一个i小于100的vi值都参与了计算,但因为前项系数的不同,它们的贡献不同且随着离100越远贡献越小,所以这是一种比较科学的求平均值的方法。

在这里插入图片描述
这跟把10天的气温加起来除以10的区别在于,前者需要保存所有温度值并求和,实现起来更复杂,计算量更大。

指数加权平均占用很少一部内存,并且实现起来只需要一两行代码,在数据量很大的时候优势明显。

### 指数加权平均的定义 指数加权平均是一种通过对历史数据赋予递减重的方法来算平均值的技术。在该方法中,最近的数据点被赋予更高的重,而较远的数据点则被赋予逐渐降低的重。其数学形式可以表示为: $$ S_t = \alpha x_t + (1-\alpha) S_{t-1} $$ 其中 $S_t$ 表示当前时刻的指数加权平均值,$\alpha \in [0, 1]$ 是平滑因子,$x_t$ 是当前时刻的实际值[^4]。 ### 指数加权平均与广义优势估(GAE)的关系 广义优势估(GAE)利用了指数加权平均的思想,通过结合多步时间差分(TD)估量来平衡优势函数估的偏差和方差。具体来说,GAE 的定义为这些 $k$ 步估量的指数加权平均: $$ A_t^{\text{GAE}(\gamma, \lambda)} = (1-\lambda) \sum_{n=1}^\infty \lambda^{n-1} A_t^{(n)} $$ 其中 $\lambda \in [0, 1]$ 是控制不同步数的优势估重的超参数[^4]。 当 $\lambda = 0$ 时,GAE 等价于单步优势估,即只考虑一步差分得到的优势值。这种情况下,估具有较低的方差但可能存在较大的偏差。相反,当 $\lambda \to 1$ 时,GAE 考虑更多步差分的平均值,从而接近无偏估,但可能导致较高的方差。 通过调整 $\lambda$,可以在偏差和方差之间找到一个折中方案。指数加权平均的形式允许对较近的时间步赋予更高的重,而对较远的时间步赋予逐渐降低的重,从而有效地结合了短视和长视的优势估[^2]。 ### GAE 的递归形式及其实现 GAE 可以通过递归形式进行高效算。将公式展开后,可以得到以下递归关系: $$ A_t^{\text{GAE}(\gamma, \lambda)} = \delta_t + \gamma\lambda A_{t+1}^{\text{GAE}(\gamma, \lambda)} $$ 其中 $\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$ 是时序差分误差[^1]。 在实际实现中,可以通过从轨迹末端向前算的方式高效地估每个时间步的优势值。以下是基于 Python 的实现代码: ```python def compute_gae(rewards, values, last_value, gamma, lambd): advantages = [] gae = 0 for t in reversed(range(len(rewards))): delta = rewards[t] + gamma * last_value - values[t] gae = delta + gamma * lambd * gae advantages.append(gae) last_value = values[t] return list(reversed(advantages)) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值