0 - 引入

简单的梯度下降等优化算法存在一个问题:目标函数自变量的每一个元素在相同时间步都使用同一个学习率来迭代,如果存在如下图的情况(不同自变量的梯度值有较大差别时候),存在如下问题:

选择较小的学习率会使得梯度较大的自变量迭代过慢

选择较大的学习率会使得梯度较小的自变量迭代发散

  因此,自然而然想到,要解决这一问题,不同自变量应该根据梯度的不同有不同的学习率。本篇介绍的几种优化算法都是基于这个思想的。

1 - AdaGrad算法

使用一个小批量随机梯度$g_t$按元素平方的累加变量$s_t$,在时间步0,AdaGrad将$s_0$中每个元素初始化为0,其更新公式为:

$$s_t\leftarrow s_{t-1}+g_t\odot g_t$$

$$x_t\leftarrow x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}}\odot g_t$$

其中$\odot$是按元素相乘,$\eta$是学习率,$\epsilon$是为了维持数值稳定性而添加的常数(如$10^{-6}$)。

2 - RMSProp算法

由于AdaGrad算法的机制,导致每个元素的学习率在迭代过程中只能降低或者不变,因此很可能出现早期迭代到不好的极值点之后,由于学习率太小而无法冲出这个极值点导致最后收敛到的解不优,为了解决这一问题,RMSProp是基于AdaGrad算法做了一点小修改,其更新公式为:

$$s_t\leftarrow \gamma s_{t-1}+(1-\gamma)g_t\odot g_t$$

$$x_t\leftarrow x_{t-1}-\frac{\eta}{\sqrt{s_t+\epsilon}}\odot g_t$$

其中,$\eta$是学习率,$\epsilon$是为了维持数值稳定性而添加的常数(如$10^{-6}$)。另外,比AdaGrad多了超参数$\gamma\in [0, 1)$,$s_t$可以看作是最近$\frac{1}{(1-\gamma)}$个时间步的小批量随机梯度平方项的加权平均,从而使得每个元素的学习率在迭代过程中不再一直降低或者不变。具体可以理解为:

如果最近的时间步梯度平方加权累积较小,说明梯度较小,那么学习率会增加

如果最近的时间步梯度平方加权累计较大,说明梯度较大,那么学习率会减小

有了如上机制,可以使得收敛稳定的同时,有一定几率冲出不优解,而使得最后收敛结果和开始的迭代表现相关性降低。

3 - AdaDelta算法

AdaDelta算法和RMSProp算法一样,使用小批量随机梯度$g_t$按元素平方的指数加权移动平均变量$s_t$,在时间步为0时,所有元素被初始化为0,其更新公式为:

$$s_t\leftarrow \rho s_{t-1}+(1-\rho)g_t\odot g_t$$

$$g_{t}^{'} \leftarrow \sqrt{\frac{\Delta x_{t-1}+\epsilon }{s_t+\epsilon}}\odot g_t$$

$$x_t\leftarrow t_{t-1}-g_{t}^{'}$$

$$\Delta x_t\leftarrow \rho \Delta x_{t-1} + (1-\rho)g_{t}^{'}\odot g_{t}^{'}$$

其中,$\epsilon$是为了维持数值稳定性而添加的常数(如$10^{-5}$)。另外,AdaDelta算法没有学习率这个超参,而是通过$\Delta x_t$来记录自变量变化量$g_t^{'}$按元素平方的指数加权移动平均,如果不考虑$\epsilon$的影响,AdaDelta算法跟RMSProp算法的不同之处在于使用$\sqrt{\Delta x_{t-1}}$来替代学习率$\eta$。

4 - Adam算法

Adam算法使用了动量变量$v_t$和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量$s_t$,并在时间步0将它们中的每个元素初始化为0。其更新公式为:

$$v_t\leftarrow \beta_1 v_{t-1} + (1-\beta_1)g_t$$

$$s_t\leftarrow \beta_2 s_{t-1} + (1-\beta_2)g_t \odot g_t$$

$$\hat{v_t}\leftarrow \frac{v_t}{1-\beta^t_1}$$

$$\hat{s_t}\leftarrow \frac{s_t}{1-\beta^t_2}$$

$$g_t^{'}\leftarrow \frac{\eta \hat{v_t}}{\sqrt{\hat{s_t}}+\epsilon}$$

$$x_t\leftarrow x_{t-1}-g_t^{'}$$

其中,$\eta$是学习率,$\epsilon$是为了维持数值稳定性而添加的常数(如$10^{-8}$),超参数$\beta_1\in [0, 1)$建议设为0.9,超参数$\beta_2\in [0, 1)$建议设为0.999。

5 - 总结

综上分析,可以得出如下几个结论:

AdaGrad、RMSProp、AdaDelta和Adam几个优化算法,目标函数自变量中每个元素都分别拥有自己的学习率;

AdaGrad目标函数自变量中各个元素的学习率只能保持下降或者不变,因此当学习率在迭代早期降得较快且当前解依然不佳时,由于后期学习率过小,可能较难找到一个有用的解;

RMSProp和AdaDelta算法都是解决AdaGrad上述缺点的改进版本,本质思想都是利用最近的时间步的小批量随机梯度平方项的加权平均来降低学习率,从而使得学习率不是单调递减的(当最近梯度都较小的时候能够变大)。不同的是,RMSProp算法还是保留了传统的学习率超参数,可以显式指定。而AdaDelta算法没有显式的学习率超参数,而是通过$\Delta x$做运算来间接代替学习率;

Adam算法可以看成是RMSProp算法和动量法的结合。

6 - 参考资料

adadelta算法_优化算法:AdaGrad | RMSProp | AdaDelta | Adam相关推荐

  1. 花书+吴恩达深度学习(七)优化方法之基本算法(Momentum, Nesterov, AdaGrad, RMSProp, Adam)

    目录 0. 前言 1. 指数加权平均(exponentially weighted averages) 2. Momentum 动量 3. Nesterov 动量 4. AdaGrad 5. RMSP ...

  2. louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...

    本系列文章已转至 机器学习的优化器​zhuanlan.zhihu.com 优化算法在机器学习中扮演着至关重要的角色,了解常用的优化算法对于机器学习爱好者和从业者有着重要的意义. 这系列文章先讲述优化算 ...

  3. 算法组合 优化算法_算法交易简化了风险价值和投资组合优化

    算法组合 优化算法 Photo by Markus Spiske (left) and Jamie Street (right) on Unsplash Markus Spiske (左)和Jamie ...

  4. matlab共轭梯度法_优化算法之牛顿法

    牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...

  5. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

  6. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...

  7. java寻优算法_模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径...

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

  8. python序列模式的关联算法_关联算法

    以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...

  9. 一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等...

    优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...

  10. 数据挖掘算法_数据挖掘算法入门

    有南方的朋友讲过北方人喜欢打比方,尤其是甲方的,其实也没什么不好了.如果是做菜的话,那么这些算法就相当于烹饪的工具了.对原始的食材进行预处理.加工整合,选择合适烹饪工具,以及对应的方法步骤,最后收获舌 ...

最新文章

  1. SpringBoot使用SOFA-Lookout监控
  2. datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理
  3. mysql数据库获得时间段内数据_mysql 获取规定时间段内的统计数据
  4. c 调用python clion_CLion 2018.1.3 功能超级强大的跨平台 C 开发工具
  5. Chrome浏览器导出插件crx
  6. 2022年中级网络工程师备考(网络知识部分)
  7. Sqlmap使用-盲注小实验
  8. arm nodejs_nodejs是如何和libuv以及v8一起合作的?(文末有彩蛋哦)
  9. C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制
  10. 计算机监控系统sacad,太阳能热泵多功能复合机(sahpm)计算机监控系统实现方法研究-机械电子工程专业论文.docx...
  11. Android 意图(Intent)和过滤器(Filter)
  12. android11更新了什么,一加8安卓11更新了什么 一加8安卓11更新内容
  13. 茧数SCRM营销自动化的定位
  14. JS HTML5仿微信朋友圈特效
  15. TWS耳机OVP芯片,过压保护电路芯片
  16. 【转载收藏】针对VNPY的软件bugs的修改总结
  17. 计算点到直线/线段的距离
  18. MySQL No compatible servers were found.You’ll need to cancel this wizard and install one
  19. PS 快速抠图换背景
  20. 做你自己思想世界的君王

热门文章

  1. 使用Robotframework-ride,导入Selenium2Library库后缺少“Open Browser”关键字
  2. windows server 2012 R2 安装 vc2015 报错 0x80240017
  3. 网友热爱的截图软件--Sinpaste
  4. excel手机版_excel仓库管理手机版导出软件
  5. c语言中头文件iostream,程序中为什么要包含头文件iostream.h?
  6. 商品管理系统(可用于学生参考)
  7. 云购PHP,高仿一元云购CMS-PHP源码
  8. linux中so文件如何打开,安卓手机如何打开.so文件?
  9. oracle系统的物料编码,物料编码汇总专题[大家一起努力将其补充完善!以方便大家查阅!] - □-Oracle ER......
  10. JAVA基础增强_方立勋JavaWeb视频