深度学习03——梯度下降和学习率

目录

引言

梯度下降

Batch/SGD/Mini Batch

学习率的优化

Adagrad(学习率衰减)

RMSProp(逐渐遗忘)

Momentum(动量思想)

AdaM

对比

对优化的选择


引言

今天我们详细讲解一下梯度下降学习率的设置

梯度下降

我们可以想象一下,当我们的模型有很多个特征以后,甚至每个特征有不同的幂时。我们得到的损失函数的图像就会非常的奇缺不平,甚至会出现局部最优点。

在进行梯度下降时,我们的参数是随着梯度的变化而改变的(即新参数值=旧参数值-学习率*梯度),当我们的梯度为0时,那么参数那么参数的值便不会在改变。我们为知道梯度的值为损失函数的偏导数,那么当偏导数为0时,我们的参数就不会在改变。那么我们的模型就会遇到两个挑战。一是:当遇到马鞍面的鞍点时,损失的偏导数就为0;二是:遇到局部最低点,偏导数也为0。如图。但是这是损失便没有到最小值,模型便没有到达最优化。那么应该如何解决这两个挑战呢?

          

Batch/SGD/Mini Batch

        我们可以想象一下,我们的损失函数是由我们的训练数据和函数模型决定的,那么如果我们在训练一个函数模型的时候,梯度下降的过程中改变损失函数模型,那么就算是进入了鞍点或局部最优点,在下一次改变损失函数后该鞍点和局部最优点为梯度不为0的点,那么就会从里面跳出来,想要改变损失函数,从训练模型入手肯定是不可以的,那就只能从训练数据了,那么我们只要将训练数据分成几个批次录入训练,每次录入训练的损失函数模型都不一样,就不会一直在鞍点或局部最优点停留了。可能你会说,那要是没每次他都是鞍点或局部最优点呢?这样的概率几乎为0,只有在你的训练集数据极度相似甚至重叠情况下,才有可能出现这样的情况。

        假如我们一次性全部放入,那么就会产生我们说的陷入鞍点和局部最优点。但是如果为了不陷入其中,我们一个样本一个样本的输入,这样效率会很低,有的训练数据有上万条,所以我们选择分批次录入,这样既避免陷入一点,又不会效率很低。

        一个样本一个样本的录入,之所以效率低,是因为它成“之”字形下降,根本原因是梯度的方向没有指向最低点。

学习率的优化

Adagrad(学习率衰减)

w^{t+1}\leftarrow w^{t}-\frac{\eta }{\sqrt{\sum_{i=0}^{t}\left ( g^{i} \right )^{2}}}g^{t}

        根据公式,我们可以发现,在这里我们保留了梯度历史信息来调整学习率,而其不同的参数的梯度历史信息不一样,这就使不同的参数采用了不同的学习率。简单地说,在训练过程中,Adagrad会根据每个参数的历史梯度来调整参数的学习率,使得梯度较大的参数,学习将逐渐减小,而梯度较小的参数学习率将会相对增大(但是值也会减小)。随着学习的深入,更新的幅度会越来越小,最后更新量接近为0,甚至不更新。故他的作用:

1.自适应学习率:根据每个参数的历史梯度来调整参数的学习率,能更加适应不同的参数梯度变化

2.稀疏参数处理:对于出现频率低的参数,由于梯度较小,学习率会相对增大,有助于其快速收敛

3.减小手动调参:相对固定学习率,Adagrad不需要手动设置学习率,能够减少调参的复杂度。

但是它有个缺点:随着学习的深入,更新的幅度会越来越小,最后更新量接近为0,甚至不更新。

RMSProp(逐渐遗忘)

        RMSProp就是为了改善Adagrad的更新量为0的弊端的,我们都知道之所以为为0,是因为随着更新学习的累加,历史梯度逐渐变大,分母太大导致学习率太小而导致的。那么我们只要把前面的一些梯度忘掉,这样使历史梯度变小,分母变小一点,就不用担心更新量变为0了。

E\left [ g^{2} \right ]_{t}=\gamma E\left [ g^{2} \right ]_{t-1}+(1-\gamma )g^{2}_{t }

\theta _{t+1}= \theta _{t}-\frac{\eta }{\sqrt{E[g^{2}]_{t}+\epsilon }}\odot g_{t,i}

        其中E[g^{2}]_{t}^{} 是梯度平方的移动指数加权平均\gamma是衰减率(一般取0.9)g_{t}是对参数的梯度,\eta学习率,\varepsilon是一个很小的参数用于避免分母为0,其大小一般为1e-8。

移动指数加权平均:移动指数加权平均法加权就是根据同一个移动段内不同时间的数据对预测值的影响程度,分别给予不同的权数,然后再进行平均移动以预测未来值。

例如:

Momentum(动量思想)

v\leftarrow \alpha v-\eta \frac{\partial L}{\partial W}

                                W\leftarrow W+v     ( v的初始值为0)

        Momentum 方法基于动量的概念,通过引入动量项来加速优化过程。动量项可以看作是之前梯度更新的“惯性”,使得更新方向更加稳定。想象参数受到一个向梯度方向上的一个力,在这个力的作用下,参数在这个方向就有了速度,就像一个球在一个凹面上滚动,球在最低点时会继续向前滚动,这样就会跳出局部最优点,假如在全局最低点,他就会左右摇摆过后,最终回到最低点。如图。的具体来说,Momentum 方法在每次迭代更新时,会考虑之前的梯度方向,并给予一个动量因子,使得更新方向更加平滑,有助于跳出局部最优解,加速收敛。

作用:

1.加速收敛:动量项可以帮助优化算法在参数空间中更快地找到最优解,尤其在参数空间中存在很多局部最优解时,Momentum 可以更快地跳出这些局部最优解。

2.平滑更新:动量项可以减少参数更新的方差,使得参数更新更加平滑,有助于减少震荡,提高收敛稳定性。

3.改善学习率:Momentum 方法也可以帮助优化算法更好地调整学习率,通过动量项的引入,可以减少学习率的波动,从而更好地控制参数更新的步长。

例如:

X轴方向的动量持续增加,因而加速,y轴虽然动量大,但交互的受到正反方向力,互相抵消,因而在y轴的震荡幅度有所减轻。

AdaM

MomentumRMSprop融合在一起

m_{t}=\beta _{1}m_{t-1}+(1-\beta _{1})g_{t}    

v_{t}=\beta _{2}v_{t-1}+(1-\beta _{2})g_{t}^{2}

\tilde{m}_{t}=\frac{m_{t}}{1-\beta ^{t}_{1}}

\tilde{v}_{t}=\frac{v_{t}}{1-\beta ^{t}_{2}}

\theta _{t+1}=\theta _{t}-\frac{\eta }{\sqrt{\tilde{v_{t}}}+\epsilon }\tilde{m_{t}}

对比

对优化的选择:


学习笔记干货,拿走不谢!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔拉西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值