【台大李宏毅|ML】Gradient Descent

梯度下降


梯度下降的过程

1. 梯度下降的优化目标
在这里插入图片描述
在线性回归中,我们针对不同的模型定义了一个loss function,期望通过梯度下降的方式找到一个最优的状态点。也就是通过梯度下降找到函数的最值点。

2. 梯度下降的迭代过程

(1)微分运算
在这里插入图片描述

初始对所有参数进行随机初始化,然后每一步都沿着当前梯度的负方向对参数进行同时更新。

为了简便描述,定义了梯度算子【上图右边黑框部分】,利用梯度算子简化描述参数的更新过程。

(2)梯度下降的可视化过程
在这里插入图片描述


Tip1:小心调整learning_rate(Adagrad)

1. 学习率在梯度下降算法中的地位
在这里插入图片描述

学习率η控制参数更新的步长

2. 学习率大小对参数更新的影响
在这里插入图片描述
由上图——
当学习率适中时【红色曲线】:会在适当的迭代次数中找到函数的最优值
当学习率过小时【蓝色曲线】:参数更新较慢,迭代次数过多
当学习率过大时【绿/黄色曲线】:参数更新会使得loss值发生振荡

上述的learning_rate与loss 的可视化关系只在参数一维或二维的时候行得通,对于含有更多维参数的函数曲线优化问题,需要找其他方式判断学习率是过大还是过小。

3. loss-iterations 曲线
在这里插入图片描述

把每一次迭代之后的loss值描点、连线绘制出来得到的这条曲线,就可以通过判断loss的趋势和变化的速度来决策当前学习率的设定是否合理。

4. 学习率调整措施

(1)大原则——随着迭代次数的增加,学习率会逐渐减小
在这里插入图片描述

【原因】
一开始的时候,我们离最优点的距离较大,所以需要一个较大的步长快速往最优点靠近;
当我们经过几次迭代靠近最优点之后,梯度的变化也会越来越细微,这个时候就需要调小学习率,以确保最终可以收敛到最值点。

上述红框中给出的就是一个设定学习率的范例。

【原则】
对于不同的参数组合,需要设定不同的学习率和制定不同的调整措施。

(2)Adagrad

最理想的学习率设置,是每一组不同的参数都有相应不同的学习率的设置(Adaptive Learning Rate)。
能够完成这一操作有很多不同的方法,其中一种就是Adagrad。

定义:
在这里插入图片描述
其中,ηt是在第t次迭代时的学习率变化因子,如图中所示;
gt是第t次迭代时损失函数关于这个权重的梯度
σt是从第0次到第t次迭代计算过的所有t+1个梯度值的均值平方根(rms)


化简可得:
在这里插入图片描述


过程理解:

假设对某一个参数ω的迭代变化过程进行考虑
p.s. 因为Adagrad的原则也是对于不同的参数要有不同的学习率,所以在实际应用中也是分开对每一个参数单独考虑的。

在这里插入图片描述


本质解释:

①梯度随着时间的平滑

如果只观察AdaGrad的表达式,会发现含有梯度的两项,一项在分子,一项在分母,那么梯度的增大在不同的位置对于步长的影响是不同的(在分子处的是梯度越大,步长越大;但是处在分母位置上的是梯度越大,步长越小)

在这里插入图片描述
可以理解为,总体上,梯度较大的值,依然具有相对较大的学习率,而梯度较小的值,其步长会相对较小。
其中的“相对”二字,就体现在“随着时间不断增大的分母上”。

当我们认为,随着迭代次数的增多,当前点肯定会相对之前更加靠近最优解,所以此时的步长应该也要比之前的步长更小。因此,随着迭代次数的增多,我们会逐渐减小学习率的大小。

②多参数优化:考虑二阶导数项→用一阶导数项近似二阶导数

首先用一个我们熟悉的二次函数最值求解问题来引入
p.s. 二次函数顶点可以是任意位置,这里特殊画在原点,但其实对于数学推导没有影响。

如果只考虑单因子,“梯度越大的地方离最优点越远”这一点是可以成立的,但是如果是一个多参数的优化问题,就不一定成立
e.g. 下图中,在c点的梯度值比a点梯度值大(看纵向长度),但是c点离最优点(这里特殊地把最优点设在原点了)的距离(看横向长度)比a点离得更近。

p.s. 究其原因,是因为函数关于两个参数w1和w2变化的剧烈程度(导数变化)不一样。

所以实际上,我们在每一步的最优行径路线,不仅要考虑一阶导数,还要考虑二阶导数,其中一阶导数决定了方向,二阶导数决定了步长(?或许可以这样理解?)
在这里插入图片描述

比如前面那个二次函数在两个方向w1和w2的优化问题;因为在w1上的关系变化比较平滑(二次导数的值比较小)所以可以大跨步地走也不担心会越界;而在w2方向上的变化比较陡峭,因此需要小碎步地走才能更加稳妥。

但是二阶导数的计算量巨大,所以我们采用每次参数的梯度(一阶导数)历史平方值总和的平方根来近似二阶导数的值。

可以理解为用一阶函数曲线上的若干采样点来估计二阶导数,其相对大小是可以正确反映出来的。
在这里插入图片描述


Tip2: Stochastic Gradient Decsent

简而言之,每次看到一个样本点,就只计算该样本对应的损失值,基于这一个损失值对参数进行一次更新。
在这里插入图片描述
可以形象地把随机梯度下降理解成“小步快跑”的更新方式,虽然每一步都并不是直奔着最优的方向,但是因为计算量小,在一次批量梯度下降的时间里可以进行多次随机梯度下降。


Tip3: Feature Scaling(特征缩放)

1. 目标:使得不同维度的特征具有相差不大的分布。
在这里插入图片描述
2. 意义
以一个二维特征的优化问题为例:

  • 两个维度的数据具有较为相似的分布——loss的等高线分布更加趋近于是正圆,若范围相差越大,则椭圆会更加趋于扁平。
  • 在椭圆上跟踪梯度下降的过程,其轨迹是迂回的,意味着需要经历更多次的迭代才能达到最优点。
  • 如果在正圆上进行梯度下降,其在任何一个点进行的变化都是较为稳定的,且对于不同维度可以应用相同的学习率
    在这里插入图片描述
    3. 特征缩放的方法

实现特征缩放的方法要么就是进行标准化,要么就是针对某几个维度的变量进行映射,使之数值在指定的范围内。
在这里插入图片描述
按照上图,对每个元素,其每个维度的数值都减去该维度的均值,除以该维度数据的标准差,从而得到其归一化数值。

梯度下降的局限性

梯度下降能够可行的一大条件就是梯度是可计算的,那么碰到驻点、局部极值点以及平原区域这些梯度几乎或者就等于0的情景,梯度下降可能就会失效。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kodoshinichi/article/details/108948358
今日推荐