移动平均法
移动平均法,它的思想是根据时间序列资料,逐项递推,依次计算包含一定项数的平均值,用以反应长期趋势,即用一组最近的实际数据值来预测未来的值的一种方法。
简单移动平均各个元素的权重相等,计算公式如下:
F t = A t − 1 + A t − 2 + ⋯ A t − n n {F_t} = \frac{{{A_{{\rm{t}} - 1}} + {A_{{\rm{t}} - 2}} + \cdots {A_{{\rm{t}} - n}}}}{n} Ft=nAt−1+At−2+⋯At−n
加权移动平均
通过赋予不同时间线上的点以不同的权重,来刻画其影响当前时刻值的影响力。计算公式如下:
F t = w 1 A t − 1 + w n A t − 2 + ⋯ w n A t − n {F_t} = {w_1}{A_{{\rm{t}} - 1}} + {w_n}{A_{{\rm{t}} - 2}} + \cdots {w_n}{A_{{\rm{t}} - n}} Ft=w1At−1+wnAt−2+⋯wnAt−n
指数加权移动平均
演化
- 算数平均(权重相等) → \to →加权平均(权重不等) → \to →移动平均(大约取最近的N次数据计算)
- EMA指数加权移动平均:以指数递减的形式加权的平均移动。各数值的加权影响力随时间呈指数式递减,时间越靠近当前,权重影响力越大。相较于传统的平均法来说,优势在于不需要保存过去所有的数值,且计算量显著减少。
其公式为: V t = β V t − 1 + ( 1 − β ) θ t {V_t} = \beta {V_{t - 1}} + \left( {1 - \beta } \right){\theta _t} Vt=βVt−1+(1−β)θt
其含义为,给定超参数β,当前时间步的变量Vt是上一步时间变量V{t-1}和当前时间步另一变量的线形组合。
使用β=0.9,来展开上式,假设V0=0:
V 100 = 0.9 V 99 + 0.1 θ 100 {V_{100}} = 0.9{V_{99}} + 0.1{\theta _{100}} V100=0.9V99+0.1θ100
V 99 = 0.9 V 98 + 0.1 θ 99 {V_{99}} = 0.9{V_{98}} + 0.1{\theta _{99}} V99=0.9V98+0.1θ99
⋯ \cdots ⋯
V 100 = 0.1 θ 99 + 0.1 ∗ 0.9 θ 99 + 0.1 ∗ 0.9 ∗ 0.9 θ 98 + 0.1 ∗ 0. 9 99 θ 1 {V_{100}} = 0.1{\theta _{99}} + 0.1*0.9{\theta _{99}} + 0.1*0.9*0.9{\theta _{98}} + 0.1*{0.9^{99}}{\theta _1} V100=0.1θ99+0.1∗0.9θ99+0.1∗0.9∗0.9θ98+0.1∗0.999θ1
可以看出,对于求 V 100 {V_{100}} V100的值,可以看作是对 θ 1 {\theta _{1}} θ1至 θ 99 {\theta _{99}} θ99的加权平均,这里权值是随着指数项在不断衰减。
我们认为,上述操作实际上是平均了10天的结果,因为到0.1*0.9^10的时候,其值已经非常小了,后续的可以近似为0.
这里,平均的天数可以通过下式计算出来:
n = 1 1 − β n = \frac{1}{{1 - \beta }} n=1−β1
更一般的,我们将指数移动加权平均公式展开得:
V t = β V t − 1 + ( 1 − β ) θ t = ( 1 − β ) θ t + ( 1 − β ) β θ t − 1 + β 2 V t − 2 = ( 1 − β ) θ t + ( 1 − β ) β θ t − 1 + ( 1 − β ) β 2 θ t − 2 + β 3 V t − 3 = ( 1 − β ) ( θ t + β θ t − 1 + β 2 θ t − 2 + ⋯ + β k θ t − k ) + β k + 1 V t − ( k + 1 ) \begin{array}{l} {V_t} = \beta {V_{t - 1}} + \left( {1 - \beta } \right){\theta _t}\\ {\rm{ = }}\left( {1 - \beta } \right){\theta _t} + \left( {1 - \beta } \right)\beta {\theta _{t - 1}} + {\beta ^2}{V_{t - 2}}\\ {\rm{ = }}\left( {1 - \beta } \right){\theta _t} + \left( {1 - \beta } \right)\beta {\theta _{t - 1}} + \left( {1 - \beta } \right){\beta ^2}{\theta _{t - 2}} + {\beta ^3}{V_{t - 3}}\\ {\rm{ = }}\left( {1 - \beta } \right)\left( {{\theta _t} + \beta {\theta _{t - 1}} + {\beta ^2}{\theta _{t - 2}} + \cdots + {\beta ^k}{\theta _{t - k}}} \right) + {\beta ^{k + 1}}{V_{t - (k + 1)}} \end{array} Vt=βVt−1+(1−β)θt=(1−β)θt+(1−β)βθt−1+β2Vt−2=(1−β)θt+(1−β)βθt−1+(1−β)β2θt−2+β3Vt−3=(1−β)(θt+βθt−1+β2θt−2+⋯+βkθt−k)+βk+1Vt−(k+1)
从上述公式可以看到,θ的权重以指数形式等比例的在衰减,且越靠近当前时间,权重越大。
我们令 n = 1 1 − β n = \frac{1}{{1 - \beta }} n=1−β1,变换一下形式,有, ( 1 − 1 n ) n = β 1 1 − β {\left( {1 - \frac{1}{n}} \right)^n} = {\beta ^{\frac{1}{{1 - \beta }}}} (1−n1)n=β1−β1。又因为: lim n → ∞ ( 1 − 1 n ) n = e − 1 ≈ 0.3679 {\lim _{n \to \infty }}{\left( {1 - \frac{1}{n}} \right)^n} = {e^{ - 1}} \approx 0.3679 limn→∞(1−n1)n=e−1≈0.3679,
所以,当n趋于无穷时,此时β是趋于1的,因为上面的变换形式,此时有 β 1 1 − β {\beta ^{\frac{1}{{1 - \beta }}}} β1−β1= e − 1 {e^{ - 1}} e−1
在优化算法中,常取β=0.9,这时 β n = β 1 1 − β ≈ {\beta ^n}={\beta ^{\frac{1}{{1 - \beta }}}} \approx βn=β1−β1≈ 0.36,也就是说,当过了 n = 1 1 − β n = \frac{1}{{1 - \beta }} n=1−β1后,曲线的高度下降到了原来的大概三分之一处,且时间步越往前推,权重越小,值越小,所以每次只考虑最近的 n = 1 1 − β n = \frac{1}{{1 - \beta }} n=1−β1天的数据来计算当前时刻的平均值,这也是移动平均的由来。
我们对指数部分求和可以知道,
1 + β + β 2 + β k = 1 − β k 1 − β 1 + \beta + {\beta ^2} + {\beta ^k} = \frac{{1 - {\beta ^k}}}{{1 - \beta }} 1+β+β2+βk=1−β1−βk,当k趋于无穷, β k {\beta ^k} βk为0,这就是严格意义上的指数加权移动平均。
动量法
下面通过指数移动加权平均理解动量法:
动量法更新公式:
v t = β v t − 1 + η g t x t = x t − 1 − v t \begin{array}{l} {{\bf{v}}_t} = \beta {{\bf{v}}_{t - 1}} + \eta {{\bf{g}}_{\bf{t}}}\\ {{\bf{x}}_t} = {{\bf{x}}_{t - 1}} - {{\bf{v}}_t} \end{array} vt=βvt−1+ηgtxt=xt−1−vt
现在我们对动量法的速度变量做变形,
v t ← β v t − 1 + ( 1 − β ) ( η t 1 − β g t ) {{\bf{v}}_t} \leftarrow \beta {{\bf{v}}_{t - 1}} + \left( {1 - \beta } \right)\left( {\frac{\eta_t }{{1 - \beta }}{{\bf{g}}_{\bf{t}}}} \right) vt←βvt−1+(1−β)(1−βηtgt)
由指数加权移动平均的形式可知,速度变量Vt实际上是对序列{ ( η t 1 − β g t ) \left( {\frac{\eta_t }{{1 - \beta }}{{\bf{g}}_{\bf{t}}}} \right) (1−βηtgt)}做了指数移动加权平均。
换句话说,动量法在每个时间步的自变量更新量近似于将最近的时间步 n = 1 1 − β n = \frac{1}{{1 - \beta }} n=1−β1的(学习率乘以梯度)做了指数加权移动平均后再除以(1-β)。所以说,在动量法中,自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于过去时刻的各个梯度在各个方向上是否一致。
这里放上博客中的一张图:深度学习优化函数详解(4)-- momentum 动量法
上面博客解释动量法特别形象,可以参考。
参考:吴恩达深度学习
动手学深度学习,李沐