在神经网络的学习中,学习率(数学式中记为 η )的值很重要。学习率过小,会导致学习花费过多时间;反过来,学习率过大,则会导致学习发散而不能正确进行。

在关于学习率的有效技巧中,有一种被称为学习率衰减(learning rate decay)的方法,即随着学习的进行,使学习率逐渐减小。即,一开始“多”学,然后逐渐“少”学。(学习的意思是朝着损失函数最低处进行优化)

AdaGrad 会为参数的每个元素适当地调整学习率,与此同时进行学习(AdaGrad 的 Ada 来自英文单词 Adaptive,即“适当的”的意思)。逐渐减小学习率的想法,相当于将“全体”参数的学习率值一起降低。

而 AdaGrad进一步发展了这个想法,针对“一个一个”的参数,赋予其“定制”的值。下面,让我们用数学式表示 AdaGrad 的更新方法。

和 SGD (随机梯度下降算法)一样,  表示要更新的权重参数, 表示损失函数关于   的梯度,η 表示学习率。这里新出现了变量   ,如式 (6.5) 所示,它保存了以前的所有梯度值的平方和(式(6.5)中的   表示对应矩阵元素的乘法)。然后,在更新参数时,通过乘以   ,就可以调整学习的尺度。这意味着,参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说,可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。

AdaGrad 会记录过去所有梯度的平方和。因此,学习越深入,更新的幅度就越小。实际上,如果无止境地学习,更新量就会变为 0,完全不再更新。

为了改善这个问题,可以使用 RMSProp 方法。RMSProp 方法并不是将过去所有的梯度一视同仁地相加,而是逐渐地遗忘过去的梯度,在做加法运算时将新梯度的信息更多地反映出来。这种操作从专业上讲,称为“指数移动平均”,呈指数函数式地减小过去的梯度的尺度。

现在来实现 AdaGrad。AdaGrad 的实现过程如下所示。

class AdaGrad:def __init__(self, lr=0.01):self.lr = lr#学习率self.h = Nonedef update(self, params, grads):if self.h is None:self.h = {}for key, val in params.items():self.h[key] = np.zeros_like(val)for key in params.keys():self.h[key] += grads[key] * grads[key]params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)

这里需要注意的是,最后一行加上了微小值 1e-7 。这是为了防止当 self.h[key] 中有 0 时,将 0 用作除数的情况。在很多深度学习的框架中,这个微小值也可以设定为参数,但这里我们用的是 1e-7 这个固定值。

现在,让我们试着使用 AdaGrad 解决式(6.2)的最优化问题,结果如图 6-6 所示。

图 6-6 基于 AdaGrad 的最优化的更新路径

由图 6-6 的结果可知,函数的取值高效地向着最小值移动。由于 y 轴方向上的梯度较大,因此刚开始变动较大,但是后面会根据这个较大的变动按比例进行调整,减小更新的步伐。因此,y 轴方向上的更新程度被减弱,“之”字形的变动程度有所衰减。

深度学习入门之AdaGrad相关推荐

  1. Day9 深度学习入门

    参数的更新 神经网络学习的目的是找到使损失函数的值尽可能小的参数.常见的有以下四种: SGD(stochastic gradient descent).Momentum.AdaGrad.Adam. A ...

  2. python深度学习入门-与学习相关的技巧

    深度学习入门-与学习相关的技巧 博主微信公众号(左).Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步! 目录 摘要 1. 参数的更新 1.1 SGD 1.2 ...

  3. 《深度学习入门——基于Python的理论与实现》笔记

    PS:写这篇博客主要是记录下自己认为重要的部分以及阅读中遇到的些问题,加深自己的印象. 附上电子书及源代码: 链接:https://pan.baidu.com/s/1f2VFcnXSSK-u3wuvg ...

  4. Keras深度学习入门(一)

    第一部分:机器学习基础 一.机器学习的四个分支 监督学习 分类 回归 序列生成,给定一张图像,预测描述图像的文字 语法树预测,给定一个句子,预测其分解生成的语法树 目标检测,给定一张图像,在图中特定目 ...

  5. 读书笔记:《深度学习入门:基于python的理论与实现》

    基于python的深度学习入门 <Deep Learning from Scratch> 这是本人在关于深度学习领域所阅读的第一本书,即日本程序员斋藤康毅著,陆宇杰译作的<深度学习入 ...

  6. 《深度学习入门》笔记(一)

    <深度学习入门1>笔记(一) 神经网络的传播 如下图,我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层,也称为隐藏层."隐藏"一词的意思是,隐 ...

  7. 【《深度学习入门》—— 学习笔记(二)】

    <深度学习入门>-- 学习笔记(二)_5-8章 第五章 误差反向传播法 方法一:基于数学式 - 严密简洁 方法二:基于计算图(computational graph) - 直观 5.1 计 ...

  8. 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link

    各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...

  9. 深度学习入门,一文讲解神经网络的构成、训练和算法

    小白深度学习入门系列 神经网络的构成.训练和算法 什么是神经网络 人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种 ...

最新文章

  1. glassfish发布应用_WildFly 8与GlassFish 4 –选择哪个应用服务器
  2. 【转】DPDK(一):专业术语
  3. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)
  4. ERDAS IMAGINE 2015安装步骤(绝对正确,不正确,我给你远程安装)
  5. linux-tomcat-install
  6. 关于在Android中访问和使用到上下文变量
  7. Vue 与 Web Components
  8. 武汉大学计算机专业录取分数线,最新武汉大学专业排名录取分数线
  9. VS使用SDL2时LNK2019无法解析的外部符号_main
  10. 2005年国内最有份量的资源下载网站一览
  11. Webdriver 爬取新浪滚动新闻
  12. 针式PKM初级应用:针式PKM更适合管理什么样的文件
  13. C# 手机号码归属地查询
  14. 坪山体育中心体育馆全景不同高度展示
  15. 相关搜索词的一种粗排方法
  16. 基于STM32的开源简易示波器项目
  17. matlab图像文件的格式
  18. 网页编程软件:Coda 2 for Mac
  19. 【射雕英雄传】文本分析初步 第二弹【gensim word2vec lda roberta】
  20. 基于zynq的千兆网udp项目_基于FPGA的千兆网UDP通信分析

热门文章

  1. php算前端还是后端,php属于后端还是前端
  2. Linux安装pycharm
  3. 用python输出姓名,年龄等信息
  4. Spark ml 特征工程
  5. [4G5G专题-65]:RF层 - 天线基础、天线组成、常见的天线特性
  6. 南邮《Linux编程》2018-2019学年第一学期期末考试回忆
  7. 【行业新闻】Cocos游戏横扫日本市场 独霸双榜冠军
  8. Spring Autowire自动装配介绍
  9. 图文并茂!为你展示Flex布局
  10. 苹果开发者账号可以创建多少测试证书_2019年最新苹果企业开发者账号创建证书完整流程...