算法背景:

传统的人工神经网络基本只有输入层、隐藏层、以及输出层。随着大数据时代的来临以及GPU算力的提升,更加深层的神经网络出现了,使得人工智能进入深度学习时代。更深层的神经网络相比较于浅层的神经网络来说特征提取能力更强了,但训练权值的拟合也愈加困难。

梯度下降算法经常用来完成神经网络的训练以及拟合优化,梯度下降算法会影响网络训练的速度和精度,而Adagrad算法是一种比较不错的梯度下降算法。


Adagrad算法

Adagrad优化算法被称为自适应学习率优化算法,之前我们讲的随机梯度下降对所有的参数都使用的固定的学习率进行参数更新,但是不同的参数梯度可能不一样,所以需要不同的学习率才能比较好的进行训练,但是这个事情又不能很好地被人为操作,所以 Adagrad 便能够帮助我们做这件事。

如下图所示,为几个不同的梯度下降算法的梯度下降过程,其中五角星为最优点:

算法过程:
Adagrad优化算法就是在每次使用一个 batch size 的数据进行参数更新的时候,算法计算所有参数的梯度,那么其想法就是对于每个参数,初始化一个变量 s 为 0,然后每次将该参数的梯度平方求和累加到这个变量 s 上,然后在更新这个参数的时候,学习率就变为:

如上为Adagrad算法的公式

首先η为初始学习率,这里的 ϵ是为了数值稳定性而加上的,因为有可能 s 的值为 0,那么 0 出现在分母就会出现无穷大的情况,通常 ϵ 取 10的负10次方,这样不同的参数由于梯度不同,他们对应的 s 大小也就不同,所以上面的公式得到的学习率也就不同,这也就实现了自适应的学习率。

我们使用自适应的学习率就可以帮助算法在梯度大的参数方向减缓学习速率,而在梯度小的参数方向加快学习速率,这就可以促使神经网络的训练速度的加快。


算法代码实现:

def sgd_adagrad(parameters, sqrs, lr):eps = 1e-10for param, sqr in zip(parameters, sqrs):sqr[:] = sqr + param.grad.data ** 2div = lr / torch.sqrt(sqr + eps) * param.grad.dataparam.data = param.data - div

算法总结:

Adagrad 的核心想法就是,如果一个参数的梯度一直都非常大,那么其对应的学习率就变小一点,防止震荡,而一个参数的梯度一直都非常小,那么这个参数的学习率就变大一点,使得其能够更快地更新,这就是Adagrad算法加快深层神经网络的训练速度的核心。

参考文献:

论文:[1] Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive subgradient methods for online learning and stochastic optimization. Journal of Machine Learning Research, 12(Jul), 2121-2159.

动手学深度:
https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter07_optimization/7.5_adagrad

【快速理解Adagrad】通俗解释Adagrad梯度下降算法相关推荐

  1. 数据归一化(normalizing)的直观理解和通俗解释。

    以前一直对,数据归一化有一些模糊的概念,最近看Andrew Ng的课程.才有了深入的认识.如下图. 数据归一化,其实就是  数据减去均值再除以标准差.直观解释如下图的过程.清晰明了.

  2. 把梯度下降算法变成酷炫游戏,这有一份深度学习通俗讲义

    公众号关注 "视学算法" 设为"星标",第一时间知晓最新干货~ 晓查 发自 凹非寺 转载自量子位 | 公众号 QbitAI 让小球滚下山坡,找到它们分别落在哪个 ...

  3. 机器学习中牛顿法凸优化的通俗解释

    红色石头的个人网站:redstonewill.com 之前,我发过一篇文章,通俗地解释了梯度下降算法的数学原理和推导过程,推荐一看.链接如下: 为什么局部下降最快的方向就是梯度的负方向? 我们知道,梯 ...

  4. 梯度下降算法动图_梯度下降算法原理及代码实现

    1 概述 梯度下降(Gradient Descent)在机器学习中是很常用的算法,它不仅被用在了线性回归上,还被广泛应用于机器学习的众多领域,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小 ...

  5. matlab常用函数通俗解释(fft2和fftshift函数设置问题等)

    本文是作者在自己使用matlab过程中,针对用到的函数,试图用自己的理解去通俗解释这个函数用途的过程,如有错误,欢迎留言交流. 1. peaks函数 生成由峰峰值组成的矩阵,峰峰值由peaks函数的内 ...

  6. 机械臂正向运动学原理通俗解释

    机械臂正向运动学理解原理通俗解释 正向运动学可以理解为关节运动量的传递. 定性理解:关节的运动量都是以在前面一个关节上建立的坐标系为参考旋转多少角度,一个关节运动会带动后面的关节运动,会导致固定在关节 ...

  7. 如何正确理解近似点梯度下降算法

    学习笔记,仅供参考,有错必纠 转载自:凸优化笔记19:近似点梯度下降 近似点梯度下降算法 这一部分考虑的问题主要是 minmizef(x)=g(x)+h(x)minmize f(x) = g(x) + ...

  8. 理解梯度下降算法中的动量

    理解梯度下降算法中的动量 在深度学习优化算法中,常用的梯度下降算法中一般会有一个参数 -- 动量(momentum).此文章记录动量算法的原理,以及使用它的目的. N.B. 此处的梯度下降算法是广义的 ...

  9. DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介、理解、代码实现、SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略

    DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介.理解.代码实现.SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略 目录 GD算法 ...

最新文章

  1. java队列queue的我觉得很好的使用方式
  2. 【Spring注解系列01】@Configuration与@Bean
  3. 本周六锁定成都!解析百度文心(ERNIE)如何助力快速定制企业级NLP模型
  4. Android 图形架构
  5. 【FFMPEG源码终极解析】 av_packet_alloc 与 av_packet_free
  6. 新手如何准确的控制油门
  7. 数据结构之基于Java的链接队列实现
  8. scrapy.Request使用meta传递数据,以及deepcopy的使用
  9. [NOIP2006] 能量项链
  10. Object -C self -- 笔记
  11. delphi控件属性大全-详解-简介
  12. Eclipse 跌落“神坛”,这款 IDE 后来居上!
  13. 软件著作权算法软件设计说明书_软件详细设计说明书例子.pdf
  14. 例如微博表情添加到textView中
  15. 从腾讯云迁移到腾讯云,开心消消乐的云端迁移战事
  16. 已有的MGR集群上配置InnoDB Cluster
  17. python用turtle画四叶草_pythonturtle工具绘制四叶草的实例分享 | 学步园
  18. Win7快速启动栏恢复方法
  19. 10年时间,打工妹把一个团队从“一盘散沙”到精英战队,成功实现空手“造”大房···
  20. 苹果电脑合并pdf文件最简单的方法?苹果电脑怎么把多个pdf文件合并成一个?

热门文章

  1. git 回退到某个版本,并推送到远程
  2. linux缺页处理步骤,Linux缺页中断处理
  3. SLAM基础——预积分流程梳理
  4. 将军百战声名裂 —— 泣血说李陵
  5. 什么是Web应用程序
  6. Veritas NetBackup备份系统管理维护实战(NBU培训+各种数据库备份恢复)
  7. 河北计算机专业接本考什么,河北专接本考什么 河北专接本考试的分类
  8. Python解题:Leetcode周赛(303)
  9. 你若没有诸葛亮那金刚钻,不要总是去推测人性
  10. cJSON库的使用详情,cJSON动态库制作