0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文解析深度学习的优算方法

深度学习自然语言处理 来源:Chenhao's Studio 作者:Chenhao's Studio 2020-08-31 11:00 次阅读

神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化(optimization)。遗憾的是,神经网络的最优化问题非常难。这是因为参数空间非常复杂,无法轻易找到最优解(无法使用那种通过解数学式一下子就求得最小值的方法)。而且,在 深度神经网络中,参数的数量非常庞大,导致最优化问题更加复杂。

为了找到最优参数,我们将参数的梯度(导数)作为了线索。 使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent),简称SGD。SGD是一个简单的方法,不过比起胡乱地搜索参数空间,也算是“聪明”的方法。

打个比方: 有一个性情古怪的探险家。他在广袤的干旱地带旅行,坚持寻找幽 深的山谷。他的目标是要到达最深的谷底(他称之为“至深之地”)。这 也是他旅行的目的。并且,他给自己制定了两个严格的“规定”:一个 是不看地图;另一个是把眼睛蒙上。因此,他并不知道最深的谷底在这个广袤的大地的何处,而且什么也看不见。在这么严苛的条件下,这位 探险家如何前往“至深之地”呢?他要如何迈步,才能迅速找到“至深 之地”呢?

寻找最优参数时,我们所处的状况和这位探险家一样,是一个漆黑的世界。我们必须在没有地图、不能睁眼的情况下,在广袤、复杂的地形中寻找 “至深之地”。大家可以想象这是一个多么难的问题。

在这么困难的状况下,地面的坡度显得尤为重要。探险家虽然看不到周 围的情况,但是能够知道当前所在位置的坡度(通过脚底感受地面的倾斜状况)。 于是,朝着当前所在位置的坡度最大的方向前进,就是SGD的策略。勇敢的探险家心里可能想着只要重复这一策略,总有一天可以到达“至深之地”。

SGD

用数学式将SGD可以写成如下形式:

为需要更新的权重参数,∂L∂W\frac{\partial L}{\partial W}∂W∂L为损失函数LLL关于WWW的梯度。η\etaη表示学习率,一般会取0.01或0.001这些事先决定好的值。式中的←\leftarrow←表示用右边的值更新左边的值。

缺点:

(1)SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

SGD呈 “之”字形移动。这是一个相当低效的路径。也就是说, SGD的缺点是, 如果函数的形状非均向(anisotropic),比如呈延伸状,搜索的路径就会非常低效。因此,我们需要比单纯朝梯度方向前进的SGD更聪 明的方法。 SGD低效的根本原因是, 梯度的方向并没有指向最小值的方向。

(2)容易收敛到局部最优,并且容易被困在鞍点。

Momentum

Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:

和前面的SGD一样, WWW表示要更新的权重参数, 表示损失函数关于WWW的梯度,ηηη表示学习率。 这里新出现了一个变量vvv,对应物理上的速度。 式(1)表示了物体在梯度方向上受力,在这个力的作用下,物体的速度增加这一物理法则。Momentum方法给人的感觉就像是小球在地面上滚动。

式(1)中有αvαvαv这一项。在物体不受任何力时,该项承担使物体逐渐减速的任务(α设定为0.9之类的值),对应物理上的地面摩擦或空气阻力。

和SGD相比, “之”字形的“程度”减轻了。这是因为虽然x轴方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一个方向会有一定的加速。反过来,虽然y轴方向上受到的力很大,但是因为交互地受到正方向和反方向的力,它们会互相抵消,所以y轴方向上的速度不稳定。因此,和SGD时的情形相比, 可以更快地朝x轴方向靠近,减弱“之”字形的变动程度。

AdaGrad

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

在关于学习率的有效技巧中,有一种被称为学习率衰减(learning rate decay) 的方法,即随着学习的进行,使学习率逐渐减小。实际上,一开始“多” 学,然后逐渐“少”学的方法,在神经网络的学习中经常被使用。

逐渐减小学习率的想法,相当于将“全体”参数的学习率值一起降低。 而AdaGrad进一步发展了这个想法,针对“一个一个”的参数,赋予其“定 制”的值。

AdaGrad会为参数的每个元素适当地调整学习率, 与此同时进行学习 (AdaGrad的Ada来自英文单词Adaptive,即“适当的”的意思)。下面,让我们用数学式表示AdaGrad的更新方法。

其中,hhh为梯度累积变量,它保存了以前的所有梯度值的平方和,hhh的初始值为0。⨀\bigodot⨀表示对应矩阵元素的乘法,η\etaη表示学习率,δ\deltaδ为很小的一个数值,是为了防止分母为0。然后,在更新参数时,通过乘以 1h√\frac{1}{\sqrt h}h1,就可以调整学习的尺度。这意味着, 参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说, 可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。

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

RMSProp

AdaGrad会记录过去所有梯度的平方和。因此,学习越深入,更新 的幅度就越小。实际上,如果无止境地学习,更新量就会变为 0, 完全不再更新。为了改善这个问题,可以使用 RMSProp 方法。RMSProp方法并不是将过去所有的梯度一视同仁地相加,而是逐渐 地遗忘过去的梯度,在做加法运算时将新梯度的信息更多地反映出来。 这种操作从专业上讲,称为“指数移动平均”,呈指数函数式地减小过去的梯度的尺度。

其中ppp一般可取0.9,其它参数和AdaGrad一致。

Adam

Momentum参照小球在碗中滚动的物理规则进行移动,AdaGrad为参数的每个元素适当地调整更新步伐。如果将这两个方法融合在一起会怎么样呢?这就是Adam方法的基本思路。直观地讲,Adam就是融合了Momentum和AdaGrad的方法。通过组合前面两个方法的优点,有望实现参数空间的高效搜索。此外,进行超参数的“偏置校正”也是Adam的特征。Adam结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点。

可以看出,直接对梯度的矩估计对内存没有额外的要求,而且可以根据梯度进行动态调整,而−mˆtnˆt√+δ-\frac{\hat m_t}{\sqrt {\hat n_t} + \delta }−n^t+δm^t对学习率η\etaη形成了一个动态约束,而且有明确的范围。

如图,基于 Adam 的更新过程就像小球在碗中滚动一样。虽然 Momentun 也有类似的移动,但是相比之下, Adam的小球左右摇晃的程度有所减轻。这得益于学习的更新程度被适当地调整了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 深度学习
    +关注

    关注

    73

    文章

    5507

    浏览量

    121272

原文标题:【知识点】长文超详讲解深度学习中你总是掌握不牢的若干知识点

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解机器学习深度学习的区别

    深度学习这几年特别火,就像5年前的大数据样,不过深度学习其主要还是属于机器学习的范畴领域内,所
    发表于 09-06 12:48 2511次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>详解机器<b class='flag-5'>学习</b>和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的区别

    解析深度学习:卷积神经网络原理与视觉实践

    解析深度学习:卷积神经网络原理与视觉实践
    发表于 06-14 22:21

    基于深度学习的异常检测的研究方法

    异常检测的深度学习研究综述原文:arXiv:1901.03407摘要异常检测是个重要的问题,在不同的研究领域和应用领域都得到了很好的研究。本文的研究目的有两个:首先,我们对基于深度
    发表于 07-12 07:10

    深度学习技术的开发与应用

    /A2C6.DDPG7.PPO8.SAC1.深度强化学习训练场-OpenAI Gym 安装与使用2.Pytorch安装与使用3.自动驾驶赛车任务4.月球飞船降落任务实操解析与训练实验
    发表于 04-21 14:57

    C语言深度解析

    C语言深度解析,本资料来源于网络,对C语言的学习有很大的帮助,有着较为深刻的解析,可能会对读者有定的帮助。
    发表于 09-28 07:00

    读懂深度学习与机器学习的差异

    机器学习深度学习变得越来越火。突然之间,不管是了解的还是不了解的,所有人都在谈论机器学习深度学习
    发表于 11-16 01:38 3087次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>读懂<b class='flag-5'>深度</b><b class='flag-5'>学习</b>与机器<b class='flag-5'>学习</b>的差异

    模型驱动深度学习的标准流程与学习方法解析

    模型驱动的深度学习方法近年来,深度学习在人工智能领域系列困难问题上取得了突破性成功应用。
    的头像 发表于 01-24 11:30 4937次阅读
    模型驱动<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的标准流程与<b class='flag-5'>学习方法</b><b class='flag-5'>解析</b>

    解读深度学习的发展

    在2018清洁发展国际融资论坛上,北京交通大学人工智能研究院常务副院长、教授于剑先生从专业角度回顾了人工智能的发展历程,并介绍了深度学习的适用范围和所面临的问题。他指出,深度学习是机器
    的头像 发表于 10-05 17:29 2300次阅读

    为什么学习深度学习需要使用PyTorch和TensorFlow框架

    如果你需要深度学习模型,那么 PyTorch 和 TensorFlow 都是不错的选择。 并非每个回归或分类问题都需要通过深度学习来解决。甚至可以说,并非每个回归或分类问题都需要通过
    的头像 发表于 09-14 10:57 3465次阅读

    解析人工智能中深度学习的经典算法

    深度学习作为机器学习个分支,其学习方法可以分为监督学习和无监督
    发表于 01-30 09:29 3333次阅读
    <b class='flag-5'>解析</b>人工智能中<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的经典算法

    人工智能之深度强化学习DRL的解析

    深度学习DL是机器学习种基于对数据进行表征学习方法
    发表于 01-24 10:46 5075次阅读

    读懂何为深度学习1

    自然语言处理领域的殿堂标志 BERT 并非横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型
    发表于 02-22 09:54 522次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>读懂何为<b class='flag-5'>深度</b><b class='flag-5'>学习</b>1

    深度学习框架和深度学习算法教程

    深度学习框架和深度学习算法教程 深度学习是机器学习
    的头像 发表于 08-17 16:11 1095次阅读

    深度学习中的时间序列分类方法

    时间序列分类(Time Series Classification, TSC)是机器学习深度学习领域的重要任务之,广泛应用于人体活动识别、系统监测、金融预测、医疗诊断等多个领域。随
    的头像 发表于 07-09 15:54 1029次阅读

    Pytorch深度学习训练的方法

    掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练。
    的头像 发表于 10-28 14:05 227次阅读
    Pytorch<b class='flag-5'>深度</b><b class='flag-5'>学习</b>训练的<b class='flag-5'>方法</b>