常见机器学习和深度学习优化方法总结

常见机器学习和深度学习优化方法总结

  • 机器学习
    • 梯度下降法
        • 批量梯度下降法BGD
        • 随机梯度下降法SGD
        • 小批量梯度下降法MBGD:
        • 三种方法使用的情况:
    • 牛顿法
        • 定义
        • 梯度下降法和牛顿法的区别与对比
    • 拟牛顿法
  • 深度学习
    • momentum 动量法
    • Nesterov(牛顿动量)
    • AdaGrad (自适应学习率算法)
    • RMSProp
    • Adam

机器学习

不管是机器学习还是深度学习,我们总是需要获得相应的优化方法获取方差的最优解,然后的到相应的模型参数去做预测,本篇博客将讨论机器学习和深度学习常用的优化求解方法。

梯度下降法

在机器学习领域,梯度下降的方法有三种,分别为:批量梯度下降(BGD)、随机梯度下降(SGD)、小批量梯度下降法MBGD,三种梯度下降方法,各有各自的优点和缺点。下面我们以 linear regression为例子来对三种梯度下降方法进行分析和比较。

对于数据而言,假设feature和label都满足线性关系,这样形成的线性模型如下所示:

在这里插入图片描述
X表示feature, θ \theta θ表示 parameter,h表示 label。直观上,我们需要训练误差最小的模型:
在这里插入图片描述
如果对目标函数求导,导数如下:
在这里插入图片描述
原始的梯度下降方法如下式所示:
常见机器学习和深度学习优化方法总结_第1张图片
λ \lambda λ是我们的 learning rate,优化得到参数得到模型。

批量梯度下降法BGD

BDG是梯度下降最原始的形式,它的思路更新每一个参数都使用我们拥有的所有样本来更新。
优点:全局最优解,易于并行计算。
缺点:当样本数量很多时,训练过程很慢。

随机梯度下降法SGD

它的具体思路是在更新每一参数时都使用一个样本来进行更新。每一次跟新参数都用一个样本,更新很多次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
优点:训练速度快;
缺点:准确度下降,并不是全局最优;不易于并行实现

小批量梯度下降法MBGD:

它的具体思路是在更新每一参数时都使用一部分样本来进行更新,为了克服上面两种方法的缺点,又同时兼顾两种方法的优点。

三种方法使用的情况:

如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。

牛顿法

定义

首先得明确,牛顿法是为了求解函数值为零的时候变量的取值问题的,具体地,当要求解 f(θ)=0 时,如果 f 可导,那么可以通过迭代公式
在这里插入图片描述
当应用于求解最大似然估计的值时,变成ℓ′(θ)=0的问题。这个与梯度下降不同,梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。那么迭代公式写作:
在这里插入图片描述
当θ是向量时,牛顿法可以使用下面式子表示:
在这里插入图片描述
通过比较牛顿法和梯度下降法的迭代公式,可以发现两者及其相似。海森矩阵的逆就好比梯度下降法的学习率参数alpha。牛顿法收敛速度相比梯度下降法很快,而且由于海森矩阵的的逆在迭代中不断减小,起到逐渐缩小步长的效果。
牛顿法的缺点就是计算海森矩阵的逆比较困难,消耗时间和计算资源。因此有了拟牛顿法

梯度下降法和牛顿法的区别与对比

梯度下降法是一阶优化算法,牛顿法是二阶优化算法
牛顿法的收敛速度相比梯度下降法常常较快
牛顿法每次需要更新一个二维矩阵,计算代价很大,实际使用中常使用拟牛顿法
牛顿法对初始值有一定要求,在非凸优化问题中(如神经网络训练),牛顿法很容易陷入鞍点(牛顿法步长会越来越小),而梯度下降法则很容易逃离鞍点(因此在神经网络训练中一般使用梯度下降法,高维空间的神经网络中存在大量鞍点)
梯度下降法在靠近最优点时会震荡,因此步长调整在梯度下降法中是必要的,具体有adagrad, adadelta, rmsprop, adam等一系列自适应学习率的方法

拟牛顿法

拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。

深度学习

momentum 动量法

如果把梯度下降法想象成一个小球从山坡到山谷的过程,从A点开始,计算当前A点的坡度,沿着坡度最大的方向走一段路,停下到B。在B点再看一看周围坡度最大的地方,沿着这个坡度方向走一段路,再停下。确切的来说,这并不像一个球,更像是一个正在下山的盲人,每走一步都要停下来,用拐杖来来探探四周的路,再走一步停下来,周而复始,直到走到山谷。而一个真正的小球要比这聪明多了,从A点滚动到B点的时候,小球带有一定的初速度,在当前初速度下继续加速下降,小球会越滚越快,更快的奔向谷底。momentum 动量法就是模拟这一过程来加速神经网络的优化的。
常见机器学习和深度学习优化方法总结_第2张图片
优点:从而学习地更快,并且还有一定摆脱局部最优的能力。

Nesterov(牛顿动量)

1.Nesterov是Momentum的变种。
2.与Momentum唯一区别就是,计算梯度的不同,Nesterov先用当前的速度v更新一遍参数,在用更新的临时参数计算梯度。
3.相当于添加了矫正因子的Momentum。
4.在GD下,Nesterov将误差收敛从O(1/k),改进到O(1/k^2)
5.然而在SGD下,Nesterov并没有任何改进
常见机器学习和深度学习优化方法总结_第3张图片
优点:加快收敛速度

AdaGrad (自适应学习率算法)

1.简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同
2.效果是:在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小)
3.缺点是,使得学习率过早,过量的减少
4.在某些模型上效果不错。
常见机器学习和深度学习优化方法总结_第4张图片

RMSProp

1.AdaGrad算法的改进。鉴于神经网络都是非凸条件下的,RMSProp在非凸条件下结果更好,改变梯度累积为指数衰减的移动平均以丢弃遥远的过去历史。
2.经验上,RMSProp被证明有效且实用的深度学习网络优化算法。
相比于AdaGrad的历史梯度,RMSProp增加了一个衰减系数来控制历史信息的获取多少.
常见机器学习和深度学习优化方法总结_第5张图片

Adam

1.Adam算法可以看做是修正后的Momentum+RMSProp算法
2.动量直接并入梯度一阶矩估计中(指数加权)
3.Adam通常被认为对超参数的选择相当鲁棒
4.学习率建议为0.001
常见机器学习和深度学习优化方法总结_第6张图片

你可能感兴趣的:(机器学习理论)