一、指数加权平均(先说用途:抗噪声拟合)
假设我们有一年365天的气温数据 θ 1 , θ 2 , . . . , θ 365 \theta_1,\theta_2,...,\theta_{365} θ1,θ2,...,θ365,把他们化成散点图,如下图所示:
这些数据有些杂乱,我们想画一条曲线,用来表征这一年气温的变化趋势,那么我们需要把数据做一次平滑处理。最常见的方法是用一个华东窗口滑过各个数据点,计算窗口的平均值,从而得到数据的滑动平均值。但除此之外,我们还可以使用指数加权平均来对数据做平滑。其公式如下:
{ v 0 = 0 v k = β v k − 1 + ( 1 − β ) θ k , k = 1 , 2 , . . . , 365 \begin{cases} v_0=0 \\ v_k=\beta v_{k-1}+(1-\beta)\theta_k, \quad k=1,2,...,365 \end{cases} {v0=0vk=βvk−1+(1−β)θk,k=1,2,...,365
v就是指数加权平均值,也就是平滑后的气温。 β \beta β的典型值是0.9,平滑后的曲线如下图所示:
对于 v k = β v k − 1 + ( 1 − β ) θ k v_k=\beta v_{k-1}+(1-\beta)\theta_k vk=βvk−1+(1−β)θk,我们把它展开,可以得到如下形式:
可见,平滑后的气温,是以往每一天原始气温的加权平均值,只是这个权值是随时间的远近而变化的,离今天越远,权值越小,且呈指数衰减。从今天往前数 k k k天,它的权值为 β k ( 1 − β ) \beta^k(1-\beta) βk(1−β)。
当 β = 1 1 − β \beta=\frac{1}{1-\beta} β=1−β1时,由于 l i m β → 1 β k ( 1 − β ) = e − 1 \underset{\beta \rightarrow 1}{lim}\beta^k(1-\beta)=e^{-1} β→1limβk(1−β)=e−1,权重已经非常小,更久远一些的气温数据权重更小,可以认为对今天的气温没有影响。
因此,可以认为指数加权平均计算的是最近 1 1 − β \frac{1}{1-\beta} 1−β1个数据的加权平均值。通常 β \beta β取值为0.9,相当于计算10个数的加权平均值。
但是按照原始的指数加权平均公式,还有一个问题,就是当k比较小时,其最近的数据太少,导致估计误差比较大。
例如 v 1 = 0.9 v 0 + ( 1 − 0.9 ) θ 1 = 0.1 θ 1 v_1=0.9 v_0 + (1-0.9)\theta_1=0.1\theta_1 v1=0.9v0+(1−0.9)θ1=0.1θ1。
为了减小最初几个数据的误差,通常对于k比较小时,需要做如下修正:
v k = β v k − 1 + ( 1 − β ) θ k 1 − β k v_k=\frac{\beta v_{k-1}+(1-\beta)\theta_k}{1-\beta^k} vk=1−βkβvk−1+(1−β)θk
1 − β k 1-\beta^k 1−βk是所有权重的和,这相当于对权重做了一个归一化处理。下面的图中,紫色的线就是没有做修正的结果,修正之后就是绿色曲线。二者在前面几个数据点之间相差较大,后面则基本重合了。
二、
RMSprop算法
对于上面的这个椭圆形的抛物面(图中的椭圆代表等高线),沿着横轴收敛速度是最快的,所以我们希望在横轴(假设记为w1)方向步长大一些,在纵轴(假设记为w2)方向步长小一些。这时候可以通过RMSprop实现,迭代更新公式如下:
{ s 1 = β 1 s 1 + ( 1 − β 1 ) d w 1 2 s 2 = β 2 s 2 + ( 1 − β 2 ) d w 2 2 \begin{cases} s_1=\beta_1 s_1+(1-\beta_1)dw_1^2 \\ s_2=\beta_2 s_2+(1-\beta_2)dw_2^2 \end{cases} {s1=β1s1+(1−β1)dw12s2=β2s2+(1−β2)dw22
{ w 1 = w 1 − α d w 1 s 1 + ϵ w 2 = w 2 − α d w 2 s 2 + ϵ \begin{cases} w_1=w_1-\alpha \frac{dw_1}{\sqrt{s_1+\epsilon}} \\ w_2=w_2-\alpha \frac{dw_2}{\sqrt{s_2+\epsilon}} \end{cases} {w1=w1−αs1+ϵdw1w2=w2−αs2+ϵdw2
稍微吐槽下,这里就是用的符号点奇怪,其实没啥,下面说下上面的定义:
s 1 这 里 利 用 了 加 权 指 数 平 均 , d w 就 是 以 前 常 见 的 导 数 g , 这 里 用 了 平 方 是 因 为 想 在 后 面 一 步 的 根 号 里 面 当 做 方 差 来 用 , 所 以 这 里 有 归 一 的 效 果 。 s_1这里利用了加权指数平均,dw就是以前常见的导数g,这里用了平方是因为想在后面一步的根号里面当做方差来用,所以这里有归一的效果。 s1这里利用了加权指数平均,dw就是以前常见的导数g,这里用了平方是因为想在后面一步的根号里面当做方差来用,所以这里有归一的效果。
观察上面的公式可以看到,s是对梯度的平方做了一次平滑。
在更新w时,先用梯度除以 s 1 + ϵ \sqrt{s_1+\epsilon} s1+ϵ,相当于对梯度做了一次归一化。
如果某个方向上梯度震荡很大,应该减小其步长;
而震荡大,则这个方向的s也较大,除完之后,归一化的梯度就小了;
如果某个方向上梯度震荡很小,应该增大其步长;
而震荡小,则这个方向的s也较小,归一化的梯度就大了。
因此,通过RMSprop,我们可以调整不同维度上的步长,加快收敛速度。把上式合并后,RMSprop迭代更新公式如下:
{ s = β s + ( 1 − β ) d w 2 w = w − α d w s + ϵ \begin{cases} s=\beta s+(1-\beta)dw^2 \\ w=w-\alpha\frac{dw}{\sqrt{s+\epsilon}} \end{cases} {s=βs+(1−β)dw2w=w−αs+ϵdw
β \beta β的典型值是0.999。公式中还有一个
ϵ \epsilon ϵ,这是一个很小的数,典型值是 1 0 − 8 10^{-8} 10−8。
{ s 1 = β 1 s 1 + ( 1 − β 1 ) d w 1 2 s 2 = β 2 s 2 + ( 1 − β 2 ) d w 2 2 \begin{cases} s_1=\beta_1 s_1+(1-\beta_1)dw_1^2 \\ s_2=\beta_2 s_2+(1-\beta_2)dw_2^2 \end{cases} {s1=β1s1+(1−β1)dw12s2=β2s2+(1−β2)dw22
{ w 1 = w 1 − α d w 1 s 1 + ϵ w 2 = w 2 − α d w 2 s 2 + ϵ \begin{cases} w_1=w_1-\alpha \frac{dw_1}{\sqrt{s_1+\epsilon}} \\ w_2=w_2-\alpha \frac{dw_2}{\sqrt{s_2+\epsilon}} \end{cases} {w1=w1−αs1+ϵdw1w2=w2−αs2+ϵdw2
观察上面的公式可以看到,s是对梯度的平方做了一次平滑。
在更新w时,先用梯度除以 s 1 + ϵ \sqrt{s_1+\epsilon} s1+ϵ,相当于对梯度做了一次归一化。
如果某个方向上梯度震荡很大,应该减小其步长;而震荡大,则这个方向的s也较大,除完之后,归一化的梯度就小了;如果某个方向上梯度震荡很小,应该增大其步长;而震荡小,则这个方向的s也较小,归一化的梯度就大了。
因此,通过RMSprop,我们可以调整不同维度上的步长,加快收敛速度。把上式合并后,RMSprop迭代更新公式如下:
{ s = β s + ( 1 − β ) d w 2 w = w − α d w s + ϵ \begin{cases} s=\beta s+(1-\beta)dw^2 \\ w=w-\alpha\frac{dw}{\sqrt{s+\epsilon}} \end{cases} {s=βs+(1−β)dw2w=w−αs+ϵdw
β \beta β的典型值是0.999。公式中还有一个 ϵ \epsilon ϵ,这是一个很小的数,典型值是 1 0 − 8 10^{-8} 10−8。
上面都是转载,说下自己的理解:
w 等 式 右 侧 的 第 二 项 变 成 了 归 一 项 , 那 么 在 快 要 衰 减 至 稳 定 值 时 , 肯 定 相 对 于 其 他 算 法 而 言 更 快 。 例 如 w = 0.5 , w t e r m i n a l = 0.51 , 这 个 时 候 R M S p r o p 由 于 振 荡 幅 度 小 , 迭 代 至 误 差 容 忍 范 围 内 ( 0.51 ± 0.05 ) 肯 定 比 其 他 优 化 算 法 更 快 , 因 为 其 他 算 法 的 振 荡 幅 度 大 啊 , 所 以 其 他 算 法 不 好 收 敛 啊 。 w等式右侧的第二项变成了归一项,那么在快要衰减至稳定值时,肯定相对于其他算法而言更快。例如w=0.5,w_{terminal}=0.51,这个时候RMSprop由于振荡幅度小,迭代至误差容忍范围内(0.51±0.05)肯定比其他优化算法更快,因为其他算法的振荡幅度大啊,所以其他算法不好收敛啊。 w等式右侧的第二项变成了归一项,那么在快要衰减至稳定值时,肯定相对于其他算法而言更快。例如w=0.5,wterminal=0.51,这个时候RMSprop由于振荡幅度小,迭代至误差容忍范围内(0.51±0.05)肯定比其他优化算法更快,因为其他算法的振荡幅度大啊,所以其他算法不好收敛啊。
所谓:有招必有破绽,RmsProp缺点是什么呢?
如 果 我 的 初 始 值 w 1 = 0.1 , 假 如 w 1 的 最 终 值 是 0.9 如果我的初始值w_1=0.1,假如w_1的最终值是0.9 如果我的初始值w1=0.1,假如w1的最终值是0.9,由于振荡幅度小,所以RMSprop迭代的速度就会比其他算法慢,这个时候,就需要调整 α \alpha α以及 β \beta β的数值了。
#-------------------------------------------------Adagrad算法-------------------------------------------------------------------------
Adagrad
Adagrad算法能够在训练中自动的对learning rate 进行调整,对于出现频率较低参数采用较大的 α \alpha α更新;
相反,对于出现频率较高的参数采用较小的 α \alpha α更新。因此,Adagrad非常适合处理稀疏数据。
我们设 g t , i g_{t,i} gt,i为第t轮第i个权重参数的梯度,即:
g t , i = ▽ θ J ( θ i ) g_{t,i}=\triangledown _{\theta}J(\theta_i) gt,i=▽θJ(θi).
因此,SGD中参数更新的过程可写为:
θ t + 1 , i = θ t , i − α ⋅ g t , i \theta_{t+1,i}=\theta_{t,i}-\alpha·g_{t,i} θt+1,i=θt,i−α⋅gt,i
Agagrad在每轮训练中对每个参数 θ i \theta_i θi的学习率进行更新,参数更行公式如下:
θ t + 1 , i = θ t , i − α G t , i i + ϵ g t , i \theta_{t+1},i=\theta_{t,i}-\frac{\alpha}{\sqrt{G_{t,ii}+\epsilon}}g_{t,i} θt+1,i=θt,i−Gt,ii+ϵαgt,i
其中:
G t ∈ R d × d G^t∈\mathbb{R}^{d \times d} Gt∈Rd×d为对角阵,
每个对角线位置(i,i)为对应参数 θ i \theta_i θi
从第1轮到第t轮梯度的平方和。
ϵ \epsilon ϵ是平滑项,用于避免分母为0,一般取值1e-8.
Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,
使得训练提前结束。
Reference:
[1]神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam
[2]优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam