一、指数加权平均(先说用途:抗噪声拟合)
假设我们有一年365天的气温数据θ1,θ2,...,θ365\theta_1,\theta_2,...,\theta_{365}θ1​,θ2​,...,θ365​,把他们化成散点图,如下图所示:

这些数据有些杂乱,我们想画一条曲线,用来表征这一年气温的变化趋势,那么我们需要把数据做一次平滑处理。最常见的方法是用一个华东窗口滑过各个数据点,计算窗口的平均值,从而得到数据的滑动平均值。但除此之外,我们还可以使用指数加权平均来对数据做平滑。其公式如下:
{v0=0vk=βvk−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,平滑后的曲线如下图所示:

对于vk=βvk−1+(1−β)θkv_k=\beta v_{k-1}+(1-\beta)\theta_kvk​=βvk−1​+(1−β)θk​,我们把它展开,可以得到如下形式:

可见,平滑后的气温,是以往每一天原始气温的加权平均值,只是这个权值是随时间的远近而变化的,离今天越远,权值越小,且呈指数衰减。从今天往前数kkk天,它的权值为βk(1−β)\beta^k(1-\beta)βk(1−β)。

当β=11−β\beta=\frac{1}{1-\beta}β=1−β1​时,由于limβ→1βk(1−β)=e−1\underset{\beta \rightarrow 1}{lim}\beta^k(1-\beta)=e^{-1}β→1lim​βk(1−β)=e−1,权重已经非常小,更久远一些的气温数据权重更小,可以认为对今天的气温没有影响。
因此,可以认为指数加权平均计算的是最近11−β\frac{1}{1-\beta}1−β1​个数据的加权平均值。通常β\betaβ取值为0.9,相当于计算10个数的加权平均值。

但是按照原始的指数加权平均公式,还有一个问题,就是当k比较小时,其最近的数据太少,导致估计误差比较大。
例如v1=0.9v0+(1−0.9)θ1=0.1θ1v_1=0.9 v_0 + (1-0.9)\theta_1=0.1\theta_1v1​=0.9v0​+(1−0.9)θ1​=0.1θ1​。
为了减小最初几个数据的误差,通常对于k比较小时,需要做如下修正:

vk=βvk−1+(1−β)θk1−βkv_k=\frac{\beta v_{k-1}+(1-\beta)\theta_k}{1-\beta^k}vk​=1−βkβvk−1​+(1−β)θk​​

1−βk1-\beta^k1−βk是所有权重的和,这相当于对权重做了一个归一化处理。下面的图中,紫色的线就是没有做修正的结果,修正之后就是绿色曲线。二者在前面几个数据点之间相差较大,后面则基本重合了。

二、
RMSprop算法
对于上面的这个椭圆形的抛物面(图中的椭圆代表等高线),沿着横轴收敛速度是最快的,所以我们希望在横轴(假设记为w1)方向步长大一些,在纵轴(假设记为w2)方向步长小一些。这时候可以通过RMSprop实现,迭代更新公式如下:

{s1=β1s1+(1−β1)dw12s2=β2s2+(1−β2)dw22\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​=β1​s1​+(1−β1​)dw12​s2​=β2​s2​+(1−β2​)dw22​​

{w1=w1−αdw1s1+ϵw2=w2−αdw2s2+ϵ\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​+ϵ​dw1​​w2​=w2​−αs2​+ϵ​dw2​​​

稍微吐槽下,这里就是用的符号点奇怪,其实没啥,下面说下上面的定义:
s1这里利用了加权指数平均,dw就是以前常见的导数g,这里用了平方是因为想在后面一步的根号里面当做方差来用,所以这里有归一的效果。s_1这里利用了加权指数平均,dw就是以前常见的导数g,这里用了平方是因为想在后面一步的根号里面当做方差来用,所以这里有归一的效果。s1​这里利用了加权指数平均,dw就是以前常见的导数g,这里用了平方是因为想在后面一步的根号里面当做方差来用,所以这里有归一的效果。

观察上面的公式可以看到,s是对梯度的平方做了一次平滑。
在更新w时,先用梯度除以s1+ϵ\sqrt{s_1+\epsilon}s1​+ϵ​,相当于对梯度做了一次归一化。
如果某个方向上梯度震荡很大,应该减小其步长;
而震荡大,则这个方向的s也较大,除完之后,归一化的梯度就小了;
如果某个方向上梯度震荡很小,应该增大其步长;
而震荡小,则这个方向的s也较小,归一化的梯度就大了。

因此,通过RMSprop,我们可以调整不同维度上的步长,加快收敛速度。把上式合并后,RMSprop迭代更新公式如下:
{s=βs+(1−β)dw2w=w−αdws+ϵ\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ϵ,这是一个很小的数,典型值是10−810^{-8}10−8。

{s1=β1s1+(1−β1)dw12s2=β2s2+(1−β2)dw22\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​=β1​s1​+(1−β1​)dw12​s2​=β2​s2​+(1−β2​)dw22​​

{w1=w1−αdw1s1+ϵw2=w2−αdw2s2+ϵ\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​+ϵ​dw1​​w2​=w2​−αs2​+ϵ​dw2​​​

观察上面的公式可以看到,s是对梯度的平方做了一次平滑。

在更新w时,先用梯度除以s1+ϵ\sqrt{s_1+\epsilon}s1​+ϵ​,相当于对梯度做了一次归一化。

如果某个方向上梯度震荡很大,应该减小其步长;而震荡大,则这个方向的s也较大,除完之后,归一化的梯度就小了;如果某个方向上梯度震荡很小,应该增大其步长;而震荡小,则这个方向的s也较小,归一化的梯度就大了。
因此,通过RMSprop,我们可以调整不同维度上的步长,加快收敛速度。把上式合并后,RMSprop迭代更新公式如下:
{s=βs+(1−β)dw2w=w−αdws+ϵ\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ϵ,这是一个很小的数,典型值是10−810^{-8}10−8。
上面都是转载,说下自己的理解:
w等式右侧的第二项变成了归一项,那么在快要衰减至稳定值时,肯定相对于其他算法而言更快。例如w=0.5,wterminal=0.51,这个时候RMSprop由于振荡幅度小,迭代至误差容忍范围内(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缺点是什么呢?
如果我的初始值w1=0.1,假如w1的最终值是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非常适合处理稀疏数据。

我们设gt,ig_{t,i}gt,i​为第t轮第i个权重参数的梯度,即:
gt,i=▽θJ(θi)g_{t,i}=\triangledown _{\theta}J(\theta_i)gt,i​=▽θ​J(θi​).
因此,SGD中参数更新的过程可写为:
θt+1,i=θt,i−α⋅gt,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−αGt,ii+ϵgt,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​
其中:
Gt∈Rd×dG^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

指数加权平均与RmsProp(转载+自己总结)以及Adagrad相关推荐

  1. 指数加权平均、动量梯度下降法、RMSprop、Adam优化算法

    目录 1.指数加权平均(exponentially weighted averages) 这里有一年的温度数据. 如果想计算温度的趋势,也就是局部平均值(local average),或者说移动平均值 ...

  2. 移动指数加权平均笔记

    转载于:https://www.cnblogs.com/cloud-ken/p/7723755.html 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值(Moving average ...

  3. 移动指数加权平均与修正

    转载:博客园:https://www.cnblogs.com/cloud-ken/p/7723755.html 指数加权平均 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值(Movi ...

  4. 优化算法:指数加权平均

    在学习吴恩达的深度学习系列课程,优化算法部分,权重更新部分讲到指数加权平均,查找到下面博文.此博文看配图,举例,也是吴恩达课程的总结,故此转载. 原作:cloud&ken 发表于:博客园 链接 ...

  5. 机器学习经典算法(三)--指数加权平均

    机器学习经典算法(三)–指数加权平均 指数加权平均(Exponentially Weighted Averages)是一些改进梯度下降法重要理论,如上篇博文梯度下降法(2)提到的动量梯度下降法,RMS ...

  6. 深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

    接下来介绍一些比梯度下降法计算速度更快的优化算法. 2.3  指数加权平均 为了更好地介绍这些优化算法,这里先介绍一个概念----指数加权平均(exponentially weighted avera ...

  7. 通俗解释指数加权平均

    前言 在深度学习优化算法中,我们会涉及到指数加权平均这个概念,下面我将通过例子来一步一步引出这个概念. 平均数求法 比如我们现在有100天的温度值,要求这100天的平均温度值. 24,25,24,26 ...

  8. 2.2.2 指数加权平均

    指数加权平均 下面介绍一下比梯度下降更快的算法,不过在这之前,你要了解指数加全平均. 如1和2所示,指数加权实际上就是设置一个权值.就像下图所示 通过 11−β11−β \frac{1}{1-\bet ...

  9. 2.5 指数加权平均的偏差修正-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.4 理解指数加权平均 回到目录 2.6 动量梯度下降法 指数加权平均的偏差修正 (Bias Correction in Exponentially Weighted Av ...

最新文章

  1. 在MAPGIS中,怎么投影多条线段?
  2. 计算机专业和文秘专业哪个好,文秘类包括哪些专业
  3. 转:靠谱的代码和DRY
  4. 【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程
  5. #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
  6. php中求10递归算法,PHP递归算法的应用(含示例)
  7. 逻辑回归(logistics regression)
  8. WannaCrypt0r分析报告
  9. 阿里云天池龙珠计划 sql篇---stack06
  10. js弹幕脚本(基于油猴)
  11. 我们的征途是星辰大海
  12. Docker下ELK三部曲之三:K8S上的ELK和应用日志上报
  13. Python定时获取外网IP地址并发送邮件
  14. JavaScript实现分页显示
  15. 前端做一个简单的随机气泡(随机大小,随机颜色,随机方向,随机速度,透明度改变)的静态网页
  16. 数据结构 深入理解二叉树的实现
  17. C语言实现一个走迷宫小游戏(深度优先算法)
  18. 发明专利申请的必要条件
  19. 根据域名反向查询ip地址服务器
  20. 西门子标准报文1常用_西门子S7-1200 V90 扭矩控制,750附加报文

热门文章

  1. Printk与sched_clock_init的一点分析
  2. 如何用C#代码查找某个路径下是否包含某个文件
  3. 开发高性能的ADO.NET应用
  4. Classes in JScript – Part III 类的继承与封装
  5. mpvue初体验-用vue开发小程序
  6. WEB前端学习一 JS预解释
  7. git基于tag创建分支
  8. 解决上传apk文件后为vnd.android.package-archive格式的问题
  9. VTK:VTK嵌入MFC成功
  10. java异常类型 数组越界_java数组中的异常类型整理