优化算法:梯度下降、Adam

一、优化和深度学习

  • 在优化中,损失函数通常被称为优化问题的⽬标函数。
  • ⼤多数优化算法都关注的是最小化。如果我们需要最⼤化⽬标,在⽬标函数前加负号即可。

1.1 优化的目标

  • 优化主要关注的是最⼩化⽬标函数,由于优化算法的⽬标函数通常是基于训练数据集的损失函数,因此优化的⽬标是减少训练误差。

  • 深度学习则关注在给定有限数据量的情况下寻找合适的模型,深度学习(或更⼴义地说,统计推断)的⽬标是减少泛化误差。

  • 为了实现后者,除了使⽤优化算法来减少训练误差之外,我们还需要注意过
    拟合。

1.2 挑战

1.2.1 局部最⼩值

  • 深度学习模型的⽬标函数通常有许多局部最优解。
  • 当优化问题的数值解接近局部最优值时,随着⽬标函数解的梯度接近或变为零,通过最终迭代获得的数值解可能仅使⽬标函数局部最优,⽽不是全局最优。
    在这里插入图片描述

1.2.2 鞍点

  • 鞍点(saddle point)是指函数的所有梯度都消失但
    既不是全局最⼩值也不是局部最⼩值的任何位置。
  • 这时优化可能会停⽌,尽管它不是最⼩值。
    在这里插入图片描述
    我们假设函数的输⼊是k维向量,其输出是标量,因此其Hessian矩阵(也称⿊塞矩阵)将有k个特征值。函数的解可能是局部最⼩值、局部最⼤值或函数梯度为零的
    位置处的鞍点:
  • 当函数在零梯度位置处的Hessian矩阵的特征值全部为正值时,我们有该函数的局部最⼩值。
  • 当函数在零梯度位置处的Hessian矩阵的特征值全部为负值时,我们有该函数的局部最⼤值。
  • 当函数在零梯度位置处的Hessian矩阵的特征值为负值和正值时,我们对函数有⼀个鞍点。

1.2.3 梯度消失

当x大于4时,f的梯度接近于0,优化将会停滞很长一段时间
在这里插入图片描述

二、梯度下降

在这里插入图片描述

2.1 一维梯度下降

2.1.1 公式

利⽤泰勒展开,我们可以得到:
在这里插入图片描述
假设在负梯度⽅向上移动 ϵ ϵ ϵ会减少 f ( x ) f(x) f(x)的值。为了简单起⻅,我们选择固定步⻓ η > 0 η > 0 η>0,然后取 ϵ = − η f ′ ( x ) ϵ = −ηf′(x) ϵ=ηf(x),将其代入泰勒展开式得到:
在这里插入图片描述
使用下面公式来迭代x:
在这里插入图片描述
在梯度下降中,我们⾸先选择初始值x和常数η > 0,然后使⽤它
们连续迭代x,直到停⽌条件达成。例如,当梯度 ∣ f ′ ( x ) ∣ |f′(x)| f(x)的幅度⾜够⼩或迭代次数达到某个值时。

2.1.2 学习率

  • 学习率(learning rate)决定⽬标函数能否收敛到局部最⼩值,以及何时收敛到最⼩值。
  • 使⽤的学习率太⼩,将导致x的更新⾮常缓慢,需要更多的迭代
  • 如果使⽤过⾼的学习率,|ηf′(x)|对于⼀阶泰勒展开式可能太⼤。也就是说, O ( η 2 f ′ 2 ( x ) ) O(η^2f^{′2}(x)) O(η2f′2(x))可能变得显著了。在这种情况下,x的迭代不能保证降低f(x)的值

2.1.3 局部最小值

f ( x ) = x ⋅ c o s ( c x ) f(x) = x · cos(cx) f(x)=xcos(cx),其中c为某常数。这个函数有⽆穷多个局部最⼩值。
选择的学习率不恰当,我们最终可能只会得到许多解的⼀个。
在这里插入图片描述

2.2 多元梯度下降

2.2.1 公式

在这里插入图片描述
即⽬标函数 f : R d → R f : R^d →R f:RdR将向量映射成标量。它的梯度也是多元的:它是⼀个由d个偏导数组成的向量:
在这里插入图片描述
在这里插入图片描述

2.2.2 ⾃适应⽅法

选择“恰到好处”的学习率η是很棘⼿的

如果我们把它选得太⼩,就没有什么进展

如果太⼤,得到的解就会振荡,甚⾄可能发散。

如果能够自动确定η,或者完全不必选择学习率,会怎么样?

牛顿法
蓝色曲线是损失函数的曲线
梯度下降法:先求切线,然后在切线上进行移动,移动的距离就是每一步的步长,如果步长比较短,那么切线上的取值和曲线上的取值还是比较接近的,如果步长比较大,二者的距离偏差就会比较大。
优化思路:使用二次抛物线替代一次切线,二次抛物线比直线更接近曲线,牛顿法是没有学习率的,学习步长是计算得来的

  • 灰色曲线:到极值点最优的路线
  • 橙色曲线:当前点的切线,离最优路线是有偏差的,距离越远偏差越大
  • 绿色抛物线:在一定范围内,效果是优于这条直线的超出这个范围,效果反而更差,在抛物线的顶点效果是最好的
    在这里插入图片描述
    多维情况:
    在这里插入图片描述
    牛顿法:本质上就是把下降路径的所有的维度放到一起统一考虑,看看能不能找到一个合适的路径,但是计算量太大,难以实际应用。

将维度拆开进行考虑,例如看下面这个图中,梯度在不同维度上的分量是怎样的?——动量法在这里插入图片描述

三、随机梯度下降

对梯度下降的两个优化方向:

  • 减少每一次的计算量:随机梯度下降
  • 优化下降路径,用更少的步数、更快的速度到达极值点:动量法

3.1 公式

在深度学习中,⽬标函数通常是训练数据集中每个样本的损失函数的平均值。我们假设 f i ( x ) f_i(x) fi(x)是关于索引i的训练样本的损失函数,其中x是参数向量。然后我们得到⽬标函数
在这里插入图片描述

x的⽬标函数的梯度计算为
在这里插入图片描述

如果使⽤梯度下降法,则每个⾃变量迭代的计算代价为O(n),它随n线性增⻓。
随机梯度下降(SGD)可降低每次迭代时的计算代价。在随机梯度下降的每次迭代中,我们对数据样本随机均匀采样⼀个索引i,并计算梯度∇fi(x)以更新x:
在这里插入图片描述

每次迭代的计算代价从梯度下降的O(n)降⾄常数O(1)。
此外,随机梯度∇fi(x)是对完整梯度∇f(x)的⽆偏估计,因为
在这里插入图片描述
在这里插入图片描述

  • 随机梯度下降中变量的轨迹⽐梯度下降中观察到的轨迹嘈杂得
    多。这是由于梯度的随机性质。
  • 也就是说,即使我们接近最⼩值,我们仍然受到通过 η ∇ f i ( x ) η∇f_i(x) ηfi(x)的瞬间梯度所注⼊的不确定性的影响。
  • 即使经过50次迭代,质量仍然不那么好。更糟糕的是,经过额外的步骤,它不会得到改善(意味着它无法收敛到极值点)

这给我们留下了唯⼀的选择:改变学习率η。

  • 如果选择的学习率太⼩,我们⼀开始就不会取得任何有意义的进展。
  • 如果我们选择的学习率太⼤,将⽆法获得⼀个好的解决⽅案,
  • 如上所⽰。解决这些相互冲突的⽬标的唯⼀⽅法是在优化过程中动态降低学习率。

3.2 2 动态学习率

  • ⽤与时间相关的学习率η(t)取代η增加了控制优化算法收敛的复杂性。
  • 如果η的衰减速度太快,将过早停⽌优化。如果减少的太慢,会在优化上浪费太多时间。
    在这里插入图片描述
  • 指数衰减(exponential decay)往往会导致算法收敛之前过早停⽌
  • ⼀个受欢迎的选择是α = 0.5的多项式衰减

在这里插入图片描述
使用指数衰减,参数的⽅差⼤⼤减少,但是,这是以未能收敛到最优解x = (0, 0)为代价的。即使经过1000个迭代步骤,我们仍然离最优解很远。事实上,该算法根本⽆法收敛。
在这里插入图片描述
使⽤多项式衰减,其中学习率随迭代次数的平⽅根倒数衰减,那么仅在50次迭代之后,收敛就会更好。

四、小批量随机梯度下降

  • 梯度下降使⽤完整数据集来计算梯度并更新参数
  • 批量随机梯度下降⼀次处理⼀个训练样本来取得进展。

⼆者各有利弊

  • 每当数据⾮常相似时,梯度下降并不是⾮常“数据⾼效”
  • ⽽由于CPU和GPU⽆法充分利⽤向量化,随机梯度下降并不特别“计算⾼效”。

这暗⽰了两者之间可能有折中⽅案,这便涉及到⼩批量随机梯度下降
在这里插入图片描述

由于 x t x_t xt和⼩批量 B t B_t Bt的所有元素都是从训练集中随机抽出的,因此梯度的期望保持不变。另⼀⽅⾯,⽅差显著降低。

五、动量法

5.1 梯度下降表现不佳的情况

在这里插入图片描述
lr=0.4
在这里插入图片描述
从构造来看,x2⽅向的梯度⽐⽔平x1⽅向的梯度⼤得多,变化也快得多。
因此,我们陷⼊两难:

  • 如果选择较⼩的学习率,我们会确保解不会在x2⽅向发散,但要承受在x1⽅向的缓慢收敛。
  • 相反,如果学习率较⾼,我们在x1⽅向上进展很快,但在x2⽅向将会发散。

lr从0.4提高到0.6: x1⽅向上的收敛有所改善,但整体来看解的质量更差了
在这里插入图片描述

5.2 动量法

引入历史数据:
在这里插入图片描述
问题:如果步数够多,会一视同仁地考虑所有历史数据,但是太久远的历史数据对当前点可能已经失去了参考价值

引入系数β(指数加权移动平均法):距离当前越近的数据系数越大,越远的数据,系数越少,
在这里插入图片描述
有效样本权重
不同于在梯度下降或者随机梯度下降中取步⻓η,我们选取步⻓ η / ( 1 − β ) η/(1−β) η/(1β)

β的不同数值的权重大小如图
在这里插入图片描述

较⼤的β相当于⻓期平均值,⽽较⼩的β相对于梯度法只是略有修正。新的梯度替换不再指向特定实例下降最陡的⽅向,⽽是指向过去梯度的加权平均值的⽅向。
在这里插入图片描述
在这里插入图片描述

lr=0.6,β=0.5
在这里插入图片描述
lr=0.6,β=0.25
在这里插入图片描述

六、AdaGrad算法

动量法改变的是梯度的大小和方向
AdaGrad算法改变的是学习率/步长
在这里插入图片描述
在这里插入图片描述

这有两个好处:

  • ⾸先,我们不再需要决定梯度何时算⾜够⼤。
  • 其次,它会随梯度的⼤⼩⾃动变化。
  • 通常对应于较⼤梯度的坐标会显著缩⼩,⽽其他梯度较⼩的坐标则会得到更平滑的处理。

Adagrad适合训练稀疏数据
维度:用来判断的特征
稀疏数据:对于一个数据集,区分其中的不同数据更多地依靠数据是否具有某些特征,而不是依靠某些特征的深浅强弱,那么这个数据集就是稀疏数据。

七、RMSProp

AdaGrad算法的缺点:

  • AdaGrad的梯度是累积的,在训练过程中,累积的梯度越来越大,步长越来越小,此时就失去了调节作用。

RMSProp加入了一个衰减系数ρ

在这里插入图片描述
在这里插入图片描述

九、Adam

融合了动量和自适应的优点,同时添加了修正,避免了冷启动的问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值