【深度学习】优化方法

写在前面

仍然是读完Deep Learning之后的笔记和知识梳理,这些内容其实是偏理论层面的,后续的话可以结合代码进行讲解。
DL关注的优化问题:寻找神经网络上的一组参数θ,显著降低代价函数J(θ),J(θ)通常包括整个训练集上性能评估(ER-经验风险)和额外的正则化项(SR-结构风险)。
对于偏应用层面的可以直接看基本算法、参数初始化策略及自适应学习率算法。

思维导图梳理知识体系

自己在看书的时候有个习惯第一遍看的时候画个思维导图,第二遍细看take notes。这里写图片描述


1.学习与纯优化的不同

  • 纯优化最小化目标函数J(θ)本身,即只关注训练误差。ML or DL通常通过间接作用进行优化,它本身关注的是测试集上的性能度量P(可能不可解),因此通过降低代价函数J(θ)来间接的优化P。可以将这种优化看作是对测试集的估计,加上正则化以后。从这一点来看,学习的优化既关注训练误差又关注泛化误差。
  • 经验风险最小化
    • ERM——最小化平均训练误差的训练过程
    • ERM容易导致过拟合
    • 有些损失函数(0-1损失函数)不能使用GD(梯度下降)
    • DL很少使用
  • 代理损失函数和提前终止
    • 损失函数不能被高效地优化(0-1损失函数)
  • 代理损失函数作为原目标的代理被优化
  • 基于提前终止,收敛条件满足时,优化代理损失函数也停止。此时代理损失函数仍然有较大导数。
  • 以0-1损失函数为例,它的代理损失函数——正确类别的负对数似然,而提前终止使用真实潜在的损失函数(验证集上的0-1损失),设计为在过拟合发生之前终止。
  • 批量算法和小批量算法

    • 与一般的优化不同,ML优化的目标函数通常可以分解为训练样本上的求和。在进行参数更新时,通常仅使用整个代价函数中的一部分项来估计代价函数的期望。这么做的原因是:
      1.在整个训练集计算的代价非常大且回报低于线性
      2.训练集存在冗余
    • 批量或确定性梯度算法——使用整个训练集的优化算法
    • 随机或在线算法——每次只使用单个样本的优化算法
    • 小批量或小批量随机方法——随机方法
    • DL选取一组样本介于以上两者之间。随机方法的典型示例是SGD。
    • 小批量的大小的决定因素:

      • 更大的批量的回报小于线性
      • 批量太小难以利用多核架构
      • 并行处理时内存消耗和批量大小成正比
      • 小批量需要较小的学习率以保持稳定,导致总的运行时间大。
    • 小批量随机抽取——实际中经常采取打乱样本一次,抽取时按序抽取


2.神经网络中的挑战

  • 病态

    神经网络训练的过程中,优化凸函数时,比较突出的是Hessian矩阵H的病态,体现在SGD会卡在某些情况—此时即使很小的更新步长也会增加代价函数。
    牛顿法是解决这一问题的有效工具,但需要对神经网络进行很大的改动。

  • 局部极小值—待解决的问题

    对于非凸函数,由于模型可辨识性问题,神经网络代价函数可能具有非常多的局部极小值(隐含变量和参·数的不确定导致代价函数不同)。
    学者们的猜想—足够大的神经网络,大部分局部极小值都具有很小的代价函数。

  • 模型可辨识性

    如果一个足够大的训练集可以唯一确定一组模型参数,该模型是可辨认的。反之,带有隐含变量的模型通常不可辨认,通过相互交换隐含变量可能得到等价的模型。导致这一问题的原因有:
    1.权重空间对称性(交换神经单元的参数得到等价的模型)
    2.代价函数的结构

  • 高原、鞍点和其它平坦区域

    对于很多高维非凸函数,局部极小值远少于另一类梯度为零的点:鞍点(该点处梯度为零,左右梯度符号相同)。目前的研究并未有明确的定论,实验表明可以逃离鞍点。

    但是对于牛顿法,寻找梯度为零的点,可能会跳进鞍点。

    类似高原这样的平坦区域,梯度和Hessian矩阵都是零,对于凸优化没有影响。但是对于一般的优化而言,这样的区域可能对应目标函数的较高的值。

  • 悬崖和梯度爆炸

    多层神经网络通常存在像悬崖一样的斜率较大的区域,梯度更新时,很可能会跳过这类悬崖结构。应用启发式梯度截断来干涉减小步长。

  • 长期依赖

    变深的结构使模型丧失了学习到先前信息的能力。存在梯度消失于爆炸问题(尤其RNN)。

  • 非精确梯度

    目标函数难以处理的情况,其梯度也是难以处理。在这种情况下,只能近似梯度。

  • 局部和全局结构之间的弱对应
    梯度下降的方向在局部改进很大,但并没有指向代价低的多的遥远区域。此时即使在单点克服了病态条件、悬崖及鞍点等问题,最终效果仍表现不好。


3.基本算法

  • SGD-随机梯度下降

    • 相比梯度下降,SGD可以很大程度的加速,沿着随机挑选的小批量数据的梯度下降方向。可以随机挑选小批量样本的原因:梯度是期望,期望可使用小规模的样本近似估计。此外,还有小批量的优点。
    • 关键参数—学习率(理解为梯度更新的步长)

    • 实践中,随着时间的推移逐渐降低学习率。
      这里写图片描述

  • 动量

    动量方法旨在加速学习(针对SGD有时学习过程缓慢),积累了之前梯度指数级衰减的移动平均,继续沿该方向移动。
    这里写图片描述
    主要目的是解决两个问题:
    1.Hessian矩阵的病态条件
    2.随机梯度的方差
    这里写图片描述

  • Nesterov动量

    相比动量方法,它的不同之处在于计算梯度的时候施加了当前速度。
    这里写图片描述
    现在一般采用具动量的SGD优化方法。


4.参数初始化策略

目前的初始化策略是简单的、启发式的。完全确认的一个特性是初始化参数需要在不同单元间破坏对称性。
通常情况下,仅随机初始化权重,偏移等参数设置启发式挑选的常数。一般初始化模型的权重为高斯或均匀分布中随机抽取的值。

5.自适应学习率算法

  • AdaGrad

    独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根。适用于凸优化问题,存在的问题是:从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。
    这里写图片描述

  • RMSProp
    修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。可结合Nesterov使用。相比AdaGrad,使用移动平均引入新的超参数ρ,用来控制移动平均的步长。
    这里写图片描述

    使用Nesterov动量的RMSProp算法

    这里写图片描述

  • Adam
    结合RMSProp和动量的变种。
    • 动量直接并入了梯度一阶矩(指数加权)的估计。
    • Adam包括偏置修正
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值