第九十篇 机器学习优化器总结

心得: 总感觉自己要学的东西还有很多,一方面让自己工程能力,代码能力或者新学习一门语言来进一步提高自己的技术,另一方面,自己在机器学习上的成就还得继续研究,不仅仅只是懂工程而且还要学习一定的算法,所以算法不能说研究的太通,但还需要一定的理解,毕竟还是要以工程能力为主。

一、优化器是什么

一言以蔽之,优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向更新合适的大小,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小。

优化问题可以看做是我们站在山上的某个位置(当前的参数信息),想要以最佳的路线去到山下(最优点)。首先,直观的方法就是环顾四周,找到下山最快的方向走一步,然后再次环顾四周,找到最快的方向,直到下山——这样的方法便是朴素的梯度下降——当前的海拔是我们的目标函数值,而我们在每一步找到的方向便是函数梯度的反方向(梯度是函数上升最快的方向,所以梯度的反方向就是函数下降最快的方向)。

事实上,使用梯度下降进行优化,是几乎所有优化器的核心思想。当我们下山时,有两个方面是我们最关心的:

  1. 首先是优化方向,决定“前进的方向是否正确”,在优化器中反映为梯度或动量。
  2. 其次是步长,决定“每一步迈多远”,在优化器中反映为学习率。

我们需要找到关于损失的神经网络中每个权重的偏导数。在特定时刻,如果权重的偏导数为正,则我们将减小该权重以减少损失。如果偏导数为负,则我们将增加该权重以减少损失。我们的最终目标是最后减少损失。

在这里插入图片描述

1. GD

此算法称为“ 梯度下降”,也是优化神经网络的最基本方法。这是一个迭代的过程,我们将多次更新每个权重的值直到损失收敛于合适的值

在这里插入图片描述

如果学习率大,则由于较大的步幅,我们将更快地达到损失的极小值,但是同时由于采用了较大的步幅,可能走过头,我们可能无法达到非常好的极小值。较小的学习率将解决此问题,但是要使神经网络的损失减少到一个好的值,需要过多步数。因此,我们需要将学习率保持在最佳值。通常保持alpha = 0.01是一个安全值。

然而,仅梯度下降存在一个大问题。我们并没有将损失推向全局最小值,而只是将其推向了最接近的局部极小值。所以引入动量来解决局部最小值问题。

二、动量 (Momentum)

2. Momentum

在动量方法中,基本上我们要做的就是获取权重在执行当前更新之前的更新信息。本质上,如果权重在特定方向上不断移动(增大或减小),它将在该方向上缓慢积累一些“动量”。因此,当它遇到一些阻力不得不向相反方向移动时,由于累积的动量,它仍将继续沿原方向运行一段时间。

在这里插入图片描述
此处,V是动量因子,第一次迭代的动量因子初始化为0。在每次更新中,它实际上将当前导数与先前动量因子的一部分相加。然后我们将其添加到权重中以得到更新的权重。n是动量系数,它决定每次结转多少动量。

由于权重得到更新,动量因子将存储部分以前的梯度。因此,一旦它面对相反的方向的变化(如局部极小值),它将继续沿相同的方向运动,直到动量因子的大小逐渐减小并开始指向相反的方向。大多数情况下,动量因子足以使权重克服局部极小值。

3. Nesterov 加速梯度(NAG)

在NAG中,我们计算近似未来位置梯度代替计算当前位置处的梯度。因为我们要尝试以更智能的方式计算梯度。因为我们使用一个未来的点的梯度,所以动量会在梯度达到最小值之前就开始减小。这样可以提高稳定性,并在收敛时产生较小的震荡,而且,在实践中,其性能优于纯动量。

整个动量展开方程是:
在这里插入图片描述
先计算未来的W:
在这里插入图片描述
现在,我们要做的不是对当前W值计算梯度,而是对未来W值计算梯度。这样,动量因子就可以在急剧的梯度变化发生之前就开始适应,从而提高了训练时的稳定性。

在这里插入图片描述
最后更新系数:
在这里插入图片描述

三、自适应优化

在这些方法中,像学习率(alpha)和动量系数(n)这样的参数在整个训练过程中不会保持恒定。相反,这些值将不断适应网络中的每个权重,因此也会随着权重而变化。这些优化算法属于自适应优化范畴。

4. Adagrad

Adagrad是自适应梯度的缩写。在这种情况下,我们尝试更改每次更新的学习率(alpha)。在每次更新期间,学习率都会以如下方式变化:如果在短时间内对权重进行过多的更新,学习率将降低;如果对权重没有进行多少更新,则学习率将提高。

首先,每个权重都有自己的缓存值,该值集合了直到当前点为止的梯度的平方。
在这里插入图片描述
随着训练的进行,缓存的值将继续增加。现在,新的更新公式如下:

在这里插入图片描述
这与原始的梯度下降公式具有相同的形式,不同之处在于在整个训练过程中学习率(alpha)不断变化。分母中的E是一个很小的值,以确保不会被零除。

本质上,这里发生的事情是,如果权重进行了非常大的更新,则其缓存值也将增加。其结果是,学习率将变得更小,且权重的更新幅度会随时间而减少。另一方面,如果权重没有进行任何重大更新,则其缓存值将非常小,因此其学习率将提高,从而迫使其进行较大的更新。这是Adagrad优化器的基本原理。

但是,此算法的缺点是,无论权重过去的梯度如何,由于平方不能为负,因此缓存将始终增加一定的量。因此每个权重的学习率最终都会降低到非常低的值以至于训练无法再有效进行

5. RMSProp

在RMSProp中,唯一的区别在于缓存更新策略。在新公式中,我们引入了一个新参数,衰减率(gamma)。

在这里插入图片描述
更新系数
在这里插入图片描述

此处的gamma值通常约为0.9或0.99。因此,与adagrad相比,每次更新都会以非常慢的速率添加梯度平方。这样可以确保学习率根据权重的更新方式而不断变化,就像adagrad一样,但是同时学习率不会衰减太快,因此可以继续训练更长的时间。

6. Adam

Adam有点像将RMSProp和Momentum相结合。首先,我们计算m值,它将代表当前点的动量。

在这里插入图片描述
该方程式与动量方程式之间的唯一区别在于,我们将(1-Beta_1)乘以当前梯度,而不是学习率。

接下来,我们将计算累积缓存,它与RMSProp中的缓存完全相同:
在这里插入图片描述
现在我们可以得到最终的更新公式:

在这里插入图片描述
如上,我们通过计算动量来执行梯度的累积,而且我们还通过使用缓存不断地改变学习率。由于这两个特征,Adam通常比任何其他优化器性能更好,并且是训练神经网的首选。在Adam的论文中,建议的参数beta_1为0.9,beta_2为0.99,epsilon为1e-08 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值