深度学习优化算法

梯度下降

在机器学习中,无论是回归还是分类,我们的大部分目标都是优化损失函数使其最小化,但是如何让机器找到最小化损失函数的参数呢?根据微积分的知识,我们知道在函数的最小点附近,如果我们沿着函数梯度的方向走,函数值会减小:
L%28w%27%29%3CL%28w%29%2Cw%27%3Dw-%5Calpha%5Cfrac%7B%5Cpartial%7BL%7D%7D%7B%5Cpartial%7Bw%7D%7D
以线性回归问题为例(如下图),损失函数为二次函数。式中的a为学习率,当学习率较小的时候,权重梯度优化的速度较慢,损失每次变化的幅度较小,收敛到最小值点速度慢。反之学习率较大时,参数每次变化幅度大,可能导致整个优化行为数值不稳定,甚至无法收敛。故在实际任务中选一个合适的学习率比较重要。
深度学习优化算法
梯度下降的思想是深度学习中优化的基本思想,但是标准的梯度下降法很难应用到实际任务中,因为每次梯度下降都要计算所有样本的损失,而目前的计算能力无法承受如此大的计算量。 ,所以梯度下降法需要优化。常用的方法如下。

随机梯度下降(SGD)

随机梯度下降在统计学中使用随机抽样的方法。它不直接计算总体,而是随机选择样本计算期望值,对总体进行近似估计。标准梯度下降损失函数如下:
f%28x%29%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%7Bl_i%28x%29%7D
其中li(x)表示每个样本的损失,f(x)就是在时间t上的总损失。
随机梯度下降则在时间t不计算全部的样本损失,而是随机抽取一个样本ti的损失来近似全部损失f(x):
x_t%3Dx_%7Bt-1%7D-%5Calpha_%7Bt%7D%5Cfrac%7B%5Cpartial%7Bl_i%7D%7D%7B%5Cpartial%7Bx_%7Bt-1%7D%7D%7D
其中xt,xt-1表示t、t-1时刻的参数,at为t时刻的学习率。
为什么可以这么做?因为统计学中,随机样本期望等于总体的期望(例如我在总体中随机抽取4个样本计算期望与总体的期望不会太大,在大量的样本抽取中可以近似替代),所以在这里随机抽取一个样本的情况下:
E%5B%5Cnabla%20l_i%28x%29%5D%3DE%5B%5Cnabla%20f%28x%29%5D 这里的等号不是严格相等,而是近似替换。
随机梯度下降的好处是我可以在每次参数更新时计算一个样本的损失,找到梯度来更新梯度,大大降低了资源消耗。

小批量随机梯度下降

从上述知道标准的随机梯度下降是每次抽取一个样本,不是很稳定(具有高方差),而且直接从全部样本变成了1个,导致完全不耗费算力(有点像优化过头了),所以提出了小批量随机梯度下降:在时间t上抽取b个样本(就是深度学习中的batchsize),通过计算这b个样本的梯度的平均来逼近f(x)。
x_t%3Dx_%7Bt-1%7D-%5Cfrac%7B%5Calpha_%7Bt%7D%7D%7Bb%7D%5Csum_%7Bi%5Cin%20I_t%7D%5Cnabla%20l_i%28x_%7Bt-1%7D%29%3Dx_%7Bt-1%7D-%5Cfrac%7B%5Calpha_%7Bt%7D%7D%7Bb%7D%5Csum_%7Bi%5Cin%20I_t%7D%5Cfrac%7B%5Cpartial%7Bl_i%7D%7D%7B%5Cpartial%7Bx_%7Bt-1%7D%7D%7D
其中It表示含有b个样本的集合,x是参数。
与随机梯度下降的想法相同,这也是一个无偏估计器,但比标准随机梯度下降的方差更小。

冲量法(momentum)

在实际任务中,面临的损失函数往往非常不平滑。如果按照梯度的方向更新权重,会导致不稳定(因为此时的梯度方向往往与前一时刻完全相反),而且还有一个问题:容易陷入局部最低限度。因此,可以引入一个脉冲,使梯度的更新方向不完全依赖于当前梯度的方向,还依赖于前一个梯度的方向。通俗地说,就好比一个人的奔跑不会马上停下来,会有惯性让他继续下去。向前跑一段距离。这有利于在一些最大值点上找到全局最大值。
g_t%3D%5Cfrac%7B1%7D%7Bb%7D%5Csum_%7Bi%5Cin%20I_t%7D%7B%5Cnabla%20l_i%28x_%7Bt-1%7D%29%7D
与小批量随机梯度下降一样,gt表示t时刻的近似梯度。但是冲量法并不以该梯度更新参数,而是以vt:
v_t%3D%5Cbeta%20v_%7Bt-1%7D%2Bg_t
w_t%3Dw_%7Bt-1%7D-%5Calpha%20v_t
其中%5Cbeta是个小于1大于0的数,由vt的递推式可以看到,vt综合了之前的梯度(gt,gt-1,…,g1),使得在wt参数更新时考虑之前的梯度更新方向,而且时间与t时刻越近,对当前的梯度更新影响越大。
v_t%3Dg_t%2B%20%5Cbeta%20g_%7Bt-1%7D%2B%7B%5Cbeta%7D%5E2g_%7Bt-2%7D%2B%20...%20%2B%20%7B%5Cbeta%7D%5E%7Bn-1%7Dg_1
%5Cbeta为0时,冲量法等同于小批量随机梯度下降。

Adam

Adam是另一种优化算法,它相较于SGD对学习率没那么敏感,也是实际任务中最常用的方法之一。
其权重更新公式如下:
先记录两个变量vt,st:
深度学习优化算法
当t值较小时,beta的等比级数的和不为1,所以将vt修正为一下形式:
深度学习优化算法
深度学习优化算法
然后进行参数更新:
深度学习优化算法

参考:
https://zhuanlan.zhihu.com/p/36564434
李沐–动手学深度学习v2

深度学习笔记 2022/02/26

版权声明:本文为博主helluy原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/helluy/article/details/122717853

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年2月28日 下午6:18
下一篇 2022年2月28日

相关推荐