1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
2.4 理解指数加权平均 Understanding exponentially weighted averages
指数加权平均数,是几个优化算法中的关键一环,这些优化算法能帮助你训练NN。
本节将进一步探讨指数加权平均的本质作用。
上节介绍过指数加权平均数的关键方程如下
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v_t=\beta v_{t-1}+(1-\beta)\theta_t
vt=βvt−1+(1−β)θt
下图是伦敦一年气温图
上图中, β = 0.9 \beta=0.9 β=0.9得到的结果是红线;如果它更接近于1,比如 β = 0.98 \beta=0.98 β=0.98,结果就是绿线;如果小一点,如果是 β = 0.5 \beta=0.5 β=0.5,结果就是黄线。
现在进一步地分析,来理解如何计算出每日温度的平均值。
根据公式 v t = β v t − 1 + ( 1 − β ) θ t v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt−1+(1−β)θt, β = 0.9 \beta=0.9 β=0.9,t值变化,可以得到以下公式
v
100
=
0.9
v
99
+
0.1
θ
100
v_{100}=0.9v_{99}+0.1\theta_{100}
v100=0.9v99+0.1θ100
v
99
=
0.9
v
98
+
0.1
θ
99
v_{99}=0.9v_{98}+0.1\theta_{99}
v99=0.9v98+0.1θ99
v
98
=
0.9
v
97
+
0.1
θ
98
v_{98}=0.9v_{97}+0.1\theta_{98}
v98=0.9v97+0.1θ98
…
首先看第一个公式,理解
v
100
v_{100}
v100是什么。
我们调换一下这两项
0.9
v
99
0.9v_{99}
0.9v99和
0.1
θ
100
0.1\theta_{100}
0.1θ100,得到
v
100
=
0.1
θ
100
+
0.9
v
99
v_{100}=0.1\theta_{100}+0.9v_{99}
v100=0.1θ100+0.9v99
同理,得到
v
99
=
0.1
θ
99
+
0.9
v
98
v_{99}=0.1\theta_{99}+0.9v_{98}
v99=0.1θ99+0.9v98。再代入
v
100
v_{100}
v100,得到
v
100
=
0.1
θ
100
+
0.9
(
0.1
θ
99
+
0.9
v
98
)
v_{100}=0.1\theta_{100}+0.9(0.1\theta_{99}+0.9v_{98})
v100=0.1θ100+0.9(0.1θ99+0.9v98)
同理,把
v
98
v_{98}
v98再代入,得到
v
100
=
0.1
θ
100
+
0.9
(
0.1
θ
99
+
0.9
(
0.1
θ
98
+
0.9
v
97
)
)
v_{100}=0.1\theta_{100}+0.9(0.1\theta_{99}+0.9(0.1\theta_{98}+0.9v_{97}))
v100=0.1θ100+0.9(0.1θ99+0.9(0.1θ98+0.9v97))
以此类推,把括号展开后,最终可以得到公式
v
100
=
0.1
θ
100
+
0.1
∗
0.9
θ
99
+
0.1
∗
(
0.9
)
2
θ
98
+
0.1
∗
(
0.9
)
3
θ
97
+
0.1
∗
(
0.9
)
4
θ
96
+
.
.
.
.
.
.
v_{100}=0.1\theta_{100}+0.1*0.9\theta_{99}+0.1*(0.9)^2\theta_{98}+0.1*(0.9)^3\theta_{97}+0.1*(0.9)^4\theta_{96}+......
v100=0.1θ100+0.1∗0.9θ99+0.1∗(0.9)2θ98+0.1∗(0.9)3θ97+0.1∗(0.9)4θ96+......
整个过程就是100天温度数据加和并平均的过程。
所有的这些系数(0.1, 0.1 ∗ 0.9 0.1*0.9 0.1∗0.9, 0.1 ∗ ( 0.9 ) 2 0.1*(0.9)^2 0.1∗(0.9)2,0.1*(0.9)^3, 0.1 ∗ ( 0.9 ) 4 0.1*(0.9)^4 0.1∗(0.9)4,…),相加起来为1或者逼近1,我们称之为偏差修正,以后会介绍的。因为有了偏差修正,上面的公式才是指数加权平均。
v
100
v_{100}
v100中100天的温度数据可以绘制类似下图,t是日期,
θ
t
\theta_t
θt是温度
然后我们构建一个指数衰减函数,从0.1开始,到
0.1
∗
0.9
0.1*0.9
0.1∗0.9,到
0.1
∗
(
0.9
)
2
0.1*(0.9)^2
0.1∗(0.9)2,以此类推,得到如下指数衰减函数。
计算 v 100 v_{100} v100就是把上面2个图对应的元素逐一相乘,然后求和的过程。
那么需要平均多少天的温度?
我们知道 ( 0.9 ) 10 ≈ 0.35 (0.9)^{10}\approx 0.35 (0.9)10≈0.35,大约为是 1 e \frac 1e e1,e是自然算法的基础之一。
本例中, β = 0.9 \beta=0.9 β=0.9,所以 β 1 1 − β ≈ 0.35 ≈ 1 e \beta^{\frac 1{1-\beta}}\approx 0.35\approx \frac1e β1−β1≈0.35≈e1。
换句话说,10天后,曲线的高度下降到大约
1
3
\frac 13
31,即0.35,相当于在峰值的
1
e
\frac 1e
e1。
我们可以说,当 β = 0.9 \beta=0.9 β=0.9的时候,你计算指数加权平均数,只关注了过去10天的温度。因为10天后,权重下降到不到当日权重的三分之一。
如果 β = 0.98 \beta=0.98 β=0.98需要多少次方才能达到这么小的数值( 1 e \frac1e e1)?
( 0.98 ) 50 ≈ 0.35 ≈ 1 e (0.98)^{50}\approx 0.35\approx \frac1e (0.98)50≈0.35≈e1,你可以看作平均了50天的温度。
总结一下,你会发现计算指数加权平均,大约平均了 1 1 − β \frac 1{1-\beta} 1−β1天温度。也就是上节课中提到过的近似公式,每日温度的指数加权平均值 v t ≈ 1 1 − β θ t v_t\approx \frac 1{1−β}θ_t vt≈1−β1θt。
现在你已经知道根据常数 β \beta β,就能大概知道能够平均多少日的温度。不过这只是思考的大致方向,并不是正式的数学证明。
上节课已经提到过每日温度的指数加权平均值数学公式如下
归纳一下, v : = β v + ( 1 − β ) θ t v:=\beta v+(1-\beta)\theta_t v:=βv+(1−β)θt。
有些人会把
v
v
v加下标,来表示
v
v
v是计算数据的指数加权平均数。
所以 v θ : = β v θ + ( 1 − β ) θ t v_\theta:=\beta v_\theta+(1-\beta)\theta_t vθ:=βvθ+(1−β)θt。
指数加权平均数公式的好处之一在于,它占用极少内存。电脑内存中只占用一行数字而已,然后把最新数据代入公式 v θ : = β v θ + ( 1 − β ) θ t v_\theta:=\beta v_\theta+(1-\beta)\theta_t vθ:=βvθ+(1−β)θt,不断覆盖就可以了。正因为这个原因,它基本上只占用一行代码,计算指数加权平均数也只占用单行数字的存储和内存。
当然它并不是最好的,也不是最精准的计算平均数的方法。如果你要计算移动窗,你直接算出过去10天的总和或者过去50天的总和,除以10和50就好,如此往往会得到更好的估测。但缺点是,如果保存所有最近每天的温度数据,和过去10天的总和,必须占用更多的内存,执行更加复杂,计算成本也更加高昂。
在接下来的课程中,我们会计算多个变量的平均值。从计算和内存效率来说,这是一个有效的方法,所以在ML中会经常使用,更不用说只要一行代码,这也是一个优势。
现在你学会了计算指数加权平均数,你还需要知道一个专业概念,叫做偏差修正。下一节课程会讲到它,接着你就可以用它构建更好的优化算法,而不是简单直接的梯度下降法。