梯度下降法(GD,SGD)总结

一.梯度下降法

梯度下降法是求解无约束最优化问题的一种最常用的方法
假设f(x)为一阶连偏导数的函数

m i n x R n f ( x ) min_{x \in R^n} f(x)
梯度下降法是一种迭代算法,选取适当的初值x0,不断迭代,更新x的值,进行最小化,直到收敛
x ( k + 1 ) = x ( k ) + λ k p k x^{(k+1)} = x^{(k)}+\lambda_k p_k
λ k \lambda_k 代表的是步长(又称学习率,决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度)
p k p_k 代表的是搜索方向,取负梯度的方向

在这里插入图片描述
在梯度下降法中调优比较重要的是3个因素,步长、初始值、归一化。
1.步长:步长太小,收敛慢,步长太大,会远离最优解。所以需要从小到大,分别测试,选出一个最优解。
在这里插入图片描述
2.初始值:随机选取初始值,当损失函数是非凸函数时,找到的解可能是局部最优解,需要多测试几次,从局部最优解中选出最优解。当损失函数是凸函数时,得到的解就是最优解。
3.归一化:如果不归一化,会收敛的很慢,会形成之字的路线。
在这里插入图片描述
4.参数达到局部最优解,进行梯度下降时导数为0,参数不会改变
在这里插入图片描述

二.梯度下降法的分类

1、批量梯度下降法(BGD)
(1)计算梯度时使用所有的样本,这样算出来的梯度是当前最优的方向
1.优点
(1)迭代次数少
若损失函数为凸函数,能够保证收敛到全局最优解;若为非凸函数,能够收敛到局部最优值(结果的准确度)
2.缺点
(1)训练速度慢(时间,每一次训练需要的时间)
(2)需要内存大(空间)
(3)不支持在线更新

在线梯度下降与离线梯度下降的区别。下图是一个区别示意图。在离线的情况下,我们知道所有数据,所以能计算得到整个目标函数的梯度,从而能朝最优解迈出坚实的一步。而在online设定下,我们只根据当前的数据来计算一个梯度,其很可能与真实目标函数的梯度有一定的偏差。我们只是减少 ,而对别的项是否也是减少就难说了。当然,我们一直在朝目标前进,只是可能要走点弯路。
在这里插入图片描述

2、随机梯度下降法(SGD)
随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j求梯度
1.优点
训练速度快
支持在线更新
有几率跳出局部最优解
2.缺点
容易收敛到局部最优,并且容易被困在鞍点
迭代次数多

在这里插入图片描述

3、小批量梯度下降法(mini-GD)
1.小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10。

三.SGD延伸算法

1.Momentum(动量法)
我们把一个球推下山,球在下坡时积累惯性(动量),在途中若球运动方向不变,因为惯性,球会越来越快,若球的方向发生变化,因为惯性,球的速度会变慢。
左边是SGD,右边是Momentum旨在加速学习:
在这里插入图片描述
在这里插入图片描述
由上式可知,Momentum在记录梯度,简单来说Momentum允许前人来指导后人,SGD则是后人自有后人福

2.Nesterov Momentum (NAG)
Nesterov Momentum是Momentum的变种,用于解决SGD容易陷入局部最优的问题。我们知道Momentum方法中梯度方向由积累的动量和当前梯度方法共同决定,与其看当前梯度方向,不妨先看看跟着积累的动量走一步是什么情况,再决定怎么走

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.Adagrad
Adagrad是自适应梯度的算法,它通过记录每次迭代过程中的前进方向和距离,从而使得针对不同问题,有一套自适应调整学习率的方法,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新

在这里插入图片描述
优点:
(1)前期g_t较小的时候, regularizer较大,能够放大梯度
(2)后期g_t较大的时候,regularizer较小,能够约束梯度
缺点:
(1)由公式可以看出,仍依赖于人工设置一个全局学习率
(2)学习率设置过大的话,会使regularizer过于敏感,对梯度的调节太大
(3)中后期,分母上梯度平方的累加将会越来越大,使gradient接近0,使得训练提前结束

4.RMSprop
Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题

在这里插入图片描述
E代表的是RMS(均方根误差)

5.Adam
Adam(Adaptive Moment Estimation)是另一种自适应学习率的方法。总结以上算法,以SGD作为最初的算法,Momentum在其基础上加入了一阶动量(历史梯度的累计),AdaGrad和RMSProp在其基础上加入了二阶动量(历史梯度的平方累计),Adam就是结合了一阶动量和二阶动量算法。

在这里插入图片描述
在这里把原来分子中的g_t换为了一阶动量,β1 = 0.95,β2 = 0.99,ϵ = 10e−8

6.Nadam
我们说Adam是集大成者,而Nadam = Adam + NAG

四.各种下降方法的比较

image

image

区别和联系

1.不同
对于最小二乘法,当从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该使模型最好地拟合样本数据,也就是使估计值和观测值之差的平方和最小。而对于最大似然法,当从模型中随机抽取n组样本观测值之后,最合理的参数估计量应该使得从模型中抽取的该n组样本观测值的概率最大。显然,这是从不同的原理出发的两种参数估计方法。

2.相同
在最大似然法中,通过选择参数,使已知数据在某种意义下最有可能出现,而某种意义通常指似然函数最大,而似然函数又往往指数据的概率分布函数。与最小二乘法不同的是,最大似然法需要已知这个概率分布函数,这在实践中是很困难的。一般假设其满足正态分布函数的特性,在这种情况下,最大似然估计和最小二乘估计相同。
最小二乘法以估计值与观测值的差的平方和作为损失函数,极大似然法则是以最大化目标值的似然概率函数为目标函数
处理线性回归并假设单一样本的概率函数为正太分布时,通过极大似然估计法得到的模型优化的目标函数和最小二乘法下的目标函数是相同的。

3.SGD优化算法的选择
1.如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。
2.RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。
3.Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,随着梯度变的稀疏,Adam 比 RMSprop 效果会好。
4.整体来讲,Adam 是最好的选择。
5.很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。
6.如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

参考

https://www.cnblogs.com/ying-chease/p/9152427.html
https://www.cnblogs.com/huangyc/p/9801261.html
https://mli7.wordpress.com/2011/04/08/online_learning_2/
https://www.cnblogs.com/guoyaohua/p/8542554.html
https://blog.csdn.net/tsyccnh/article/details/76673073

发布了27 篇原创文章 · 获赞 81 · 访问量 5657

猜你喜欢

转载自blog.csdn.net/qq_39426225/article/details/101560176