【深度学习基础】从零开始的炼丹生活07——深度模型中的优化

往期回顾:
04——从传统机器学习走向深度学习
05——深度前馈网络、神经网络概述
06——深度学习中的正则化

介绍了神经网络的基本构件和正则化策略之后,学习一下深度模型中的优化。先说一说传统的纯优化与机器学习中的优化的异同,再介绍一下神经网络中优化的挑战,最后说说基本的优化算法。(参考《深度学习》第8章)


一、机器学习中的优化

传统的优化方法是纯优化最小化目标 J 本身,而机器学习的优化是间接作用的。在机器学习问题中,我们关注某些性能度量 P ,其定义于测试集上并且是不可解的。因此机器学习希望通过降低代价函数 J(θ)来间接提高 P 。

1. 经验风险最小化

机器学习算法的目标是降低期望泛化误差 J ∗ ( θ ) = E ( x , y ) ∼ p d a t a L ( f ( x ; θ ) , y ) J^*(\theta)=\mathbb E_{(\bold {x,y})\sim p_{data}}L(f(x;\theta),y) J(θ)=E(x,y)pdataL(f(x;θ),y)这被称为风险。此时数据取自真实的潜在分布,然而,我们遇到的问题通常并不清楚真实分布,只知道训练集中的样本。

我们将机器学习中的优化转换回一个优化问题的最简单方法就是最小化训练集上的期望损失,以训练集上的经验分布 p ~ d a t a \tilde p_{data} p~data替代真实分布 p d a t a p_{data} pdata,此时我们最小化的就是经验风险。基于这种训练误差的训练过程称为经验风险最小化,此时机器学习仍然和传统的直接优化相似。

然而经验风险最小化很容易导致过拟合,因此深度学习中我们很少使用经验风险最小化,而是使用不同的方法。

2. 代理损失函数

有时,我们真正关心的损失函数并不能被高效的优化,例如0-1损失函数通常不可解。我们因此会优化代理损失函数,例如负对数似然通常用作 0-1 损失的替代。

在一些情况下,代理损失函数比原函数学的更多。例如,使用对数似然函数在训练集上的 0-1 损失达到 0 之后,测试集上的 0-1 损失还能持续下降很长时间。这是因为即使 0-1 损失的期望是 0 ,我们还能拉开不同类别的距离以改进分类器的鲁棒性,获得一个更强壮的分类器。

3.批量算法和小批量算法

机器学习算法和一般优化算法不同的一点是,机器学习算法的目标可以分解为训练样本上的求和。 机器学习中的优化算法在计算参数的每一次更新时通常仅使用整个代价函数的一部分项来估计代价函数的期望值。

例如最大似然估计问题可以在对数空间中分解为各个样本的总和,同时优化算法用到的目标函数 J 中大多数属性也是训练集上的期望。eg: ∇ θ J ( θ ) = E x , y ∼ p ~ d a t a ∇ θ log ⁡ p model ( x , y ; θ ) \nabla_\theta J(\theta)=\mathbb E_{\bold{x,y}\sim \tilde p_{data}}\nabla_\theta \log p_{\text{model}}(\boldsymbol x,y;\boldsymbol \theta) θJ(θ)=Ex,yp~dataθlogpmodel(x,y;θ)准确计算这个期望的代价很大,因此我们可以从数据集中随机采样少量的样本,然后计算这些样本的平均值。

n 个样本均值的标准差是 σ / n \sigma/\sqrt n σ/n 。分母 n \sqrt n n 表明使用更多的样本估计梯度的方法是低于线性的,因此在计算量加倍的情况下,标准差只降低了根号倍,如果能够快速计算出梯度估计值,而不是缓慢计算准确值,那么大多数优化算法会收敛更快。
另外,大量样本很可能对于梯度都做出了非常相似的贡献,这种冗余也促使我们选择 。

使用整个训练集的优化算法称为批量(batch)确定性(deterministic) 梯度算法,因为它们会在一个大批量中同时处理所有样本。

每次只使用单个样本的优化算法称为随机(stochastic) 或 **在线(online)**梯度算法。

大多数深度学习算法介于两者之间,称为小批量(minibatch)
小批量大小的决定:

  • 更大的批量有更精确的梯度估计,但回报小于线性。
  • 极小批量难以充分利用多核架构,因此我们会使用一些绝对最小批量,低于这个值的批量不会减少计算时间。
  • 如果批量处理的所有样本可以并行的处理,那么内存消耗和批量大小会正比。
  • 在某些硬件上使用特定大小的批量会减少运行时间。比如使用GPU是,通常使用2的幂数作为批量大小可以获得更少的运行时间。
  • 由于在使用小批量进行加入了噪声,它们会有一定的正则化效果,且批量越小正则化效果越好,但因为梯度估计的高方差,小批量训练需要较小的学习率以保持稳定性。

小批量必须要随机抽取,我们希望两个连续的梯度估计是独立的,因此两个连续的小批量样本应该是彼此独立的。、

二、神经网络优化中的挑战

1. 病态

病态体现在随机梯度下降会“卡”在某些情况,此时即使很小的更新步长也会增加代价函数。而很多适用于其他情况的解决病态的技术并不适用于神经网络。例如,牛顿法在解决带有病态条件的 Hessian 矩阵的凸优化问题时是一个非常优秀的工具,但是应用于神经网络时需要很大的改动。

2. 局部极小值

对于如神经网络的非凸函数,由于模型可辨识性问题,神经网络和任意具有多个等效参数化潜变量模型都会具有多个局部极小值。如果一个足够大的数据集可以唯一确定一组模型参数,那么称该模型是可辨认的。而带有潜变量的模型通常是不可辨认的,因为相互交换潜变量的模型是等价的。这被称为权重空间对称性

此外,在任意整流线性网络或 maxout 网络中,我们将传入权重和偏置扩大α倍,然后将传出权重扩大1/α倍, 此时模型仍是等价的。因此此类神经网络的每一个局部极小值点都在等价的局部极小值的(m x n)维双曲线上。但这些并不是由于非凸带来的问题,而是由不可辨识性产生的。

如果局部极小值拥有很大的代价,这会产生很大的隐患,对于实际中的神经网络,是否存在大量代价很高的局部极小值,优化算法是否会碰到这些局部极小值,都尚未解决。现在学者们猜想,对于足够大的神经网络而言,大部分局部极小值都具有很小的代价函数,因此我们能否找到真正的全局最小点并不重要,我们只需找一个代价很小的点。

3. 高原、鞍点和其他平坦区域

在高维空间中,除了局部极小点,很多其他结构也具有很小的梯度。并且事实上局部极小值远少于另一类梯度为零的点:鞍点。在鞍点处, Hessian 矩阵同时具有正负特征值。我们可以将鞍点视为代价函数某个横截面上的局部极小点,同时也可以视为代价函数某个横截面上的局部极大点。

鞍点对于只使用梯度信息的一阶优化的影响尚未明确,梯度下降在实验中可以在许多情况下逃离鞍点。

而对于牛顿法而言,鞍点就是很大的问题,因为它梯度为0,那么牛顿法会很容易就跳进鞍点。因此神经网络训练中二阶方法很少会使用,尽管有二阶优化的无鞍牛顿法但是难以扩展到大型网络,如果无鞍算法能够扩展,那么二阶优化很有希望。

除了点,还可能存在恒值的,宽且平坦的区域,此时梯度和 Hessian 矩阵都是零。这种退化的情形是所有数据优化算法的主要问题。对于一般的优化问题,这样的区域可能对应着目标函数中一个较高的值。

4. 悬崖和梯度爆炸

多层神经网络通常存在像悬崖一样斜率较大区域,这是由于几个较大的权重相乘导致的。此时梯度更新会很大程度的改变参数值,以至于完全跳过悬崖结构。

因此我们可以使用启发式的梯度截断来避免跳过悬崖可能导致的严重后果。基本思想是梯度并没有指明最佳步长,只是说明了最佳方向。当传统的梯度下降提议更新很大一步时,启发式梯度截断就会干涉来减少步长。

悬崖结构在循环神经网络的代价函数中很常见,因为它会涉及多个因子相乘。

5. 长期依赖

当计算图变得极深时,神经网络算法还会面临长期依赖问题——由于变深的结构使模型丧失了学习到先前信息的能力,让优化变得困难。尤其是循环神经网络,更会产生这种问题。

6. 非精确梯度

大多数优化算法的先决条件都是我们知道精确的梯度,但在实践中,梯度通常会有噪声,甚至是有偏的估计。
此外,如果我们的目标函数是难以处理的,通常其梯度也很难处理。我们只能近似梯度。

各种神经网络优化算法都考虑到了梯度估计的缺陷。我们可以选择代理损失函数来避免这个问题。

7. 局部和全局结构的弱对应

如图,如果局部表面没有指向全局解,基于局部下坡移动的优化可能就会失败。即使没有鞍点或局部极小值,图中的代价函数仅包含朝向低值而非极小值的渐近线。
在这里插入图片描述
造成这种现象的主要原因就是初始化在“山”错误的一侧,并且无法遍历。在高维空间中,学习算法通常会绕过高山,但相关的轨迹会很长,导致了过长的训练时间。

许多现有的解决办法是在求解具有困难全局结构的问题是,旨在寻找良好的初始点,而非开发非局部范围更新的算法。

除了上图梯度信息提供了完全相反的信息,还有在高原等平坦区域,梯度信息完全不能提供任何有用信息。两者都是当前研究的热点。

如果存在一个区域,我们遵循局部下降便能合理地直接到达某个解,并且我们能够在该良好区域上初始化学习,就可以避免这种问题。因此目前的解决方法就是有一个良好的初始化。

8. 优化的理论限制

一些理论研究表明,我们为任何神经网络设计的任何优化算法都有性能限制,但是,这样的理论上的性能限制并不影响神经网络在实践中的应用。寻找一个给定规模的网络的可行解是困难的,但在现实情况中,我们可以通过选择更大的网络,设置更多的参数,轻松找到可以接受的解。另外,在神经网络中实践中,我们不关注某个函数的精确的极小值点,只要求损失减到足够小以获得可以接受的泛化误差即可。理论研究优化算法的性能上界需要学术界更多的努力。

三、基本优化算法

1. 随机梯度下降

随机梯度下降(SGD)按照数据生成分布抽取 m 个小批量样本(独立同分布),通过计算它们的梯度均值,我们就可以得到梯度的无偏估计。具体算法如下:在这里插入图片描述
SGD算法的关键参数就是学习率,在实践中,有必要随时间的推移逐渐降低学习率,因此我们将第 k 步迭代的学习率记作 ϵ k \epsilon_k ϵk。这是因为 SGD 中梯度估计引入的噪声源并不会在极小点处消失,而批量梯度下降可以使用固定的学习率。

保证 SGD 收敛的一个充分条件是 ∑ k = 1 ∞ ϵ k = ∞ \sum_{k=1}^\infty\epsilon_k=\infty k=1ϵk= ∑ k = 1 ∞ ϵ k 2 < ∞ \sum_{k=1}^\infty\epsilon_k^2<\infty k=1ϵk2<

因此我们一般会线性衰减学习率直到第 τ \tau τ次迭代: ϵ k = (

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值