在机器学习的模型优化求解中必然用到优化算法,其地位在机器学习领域不可小觑。本文将对常见的优化算法进行简单总结。
1. 梯度下降
梯度下降法(GD,gradient descent)也许是求解无约束最优化问题的最为常用最为经典的一种方法,实现简单,易于理解。该类方法基于梯度负方向搜索最优值,而梯度方向在几何学中直观的解释是曲面中坡度最为陡峭的方向,所以沿着坡度陡峭的方向寻优的思想非常直观的,因此GD算法又称为最速下降法(steepest descent)。下面从数学原理上解释这个优化算法。
考虑无约束优化问题 minxf(x) ,其中 f(x) 是在 RD 上具有一阶连续偏导的函数。GD算法是一种迭代算法,选取适当的初始值 x(0) ,不断迭代并更新 x 的值,进行目标函数的极小化,直到收敛。假设第
f(x)=f(x(k))+gTk(x−x(k))
其中 gk=g(x(k))=∇f(x(k)) 为 f(x) 在 x(k) 的梯度。欲使下一步的取值 f(x)<f(x(k)) ,我们可将上式中的 x−x(k)=−λgk ,其中 λ>0 称为学习率或步长,则很容易得到 f(x)<f(x(k)) 。因此下一步的取值为
x(k+1)←x(k)−λgk
上式再次表面GD算法在当前点的负梯度方向 −gk 上,移动一个小的步长 λ 得到下一个优化点,不断迭代使得 f(x) 下降。在机器学习中,我们往往是根据所有训练样本的loss得到一个优化目标函数,当 −gk 是针对所有训练样本的梯度,则这类梯度下降方法称为批量梯度下降(BGD, batch gradient descent);当 −gk 是针对随机的部分训练样本的梯度,则这类梯度下降方法称为随机梯度下降(SGD, stochastic gradient descent)。可知,BGD每次迭代更新都要用到训练集中所有样本计算梯度,当训练集规模较大时,收敛速度会严重变慢;而SGD每次迭代更新随机选择一部分(mini-batch)样本计算梯度,由于噪声干扰,也许SGD的搜索并不都是朝着最优方向,但是它以牺牲部分精确度和更多的迭代次数来换取整体的优化效率。
GD算法基于梯度方向搜索最优值,但值得指出的是:
- GD算法能保证目标函数是凸函数的情况下得到全局最优解,一般情况下只能陷入局部最优。这种情况我们可以设置多组初始解来缓解局部最优。
- 学习率难以自适应确定。据此,Momentum,Adagrad,Adam,Nadam等学习率自适应方法相继提出。基本出发点是加入学习率约束,使得下降初期得到很好的加速,中后期能抑制振荡,从而加快收敛。
- 这类方法收敛速度未必最快,尤其当接近最优区域时,即 gk→0 时,会使收敛速度明显变慢。通过上述的学习率约束能缓解这一问题。
2. 牛顿法
牛顿法(Newton method)和拟牛顿法(quasi Newton method)也是求解无约束最优化问题的常用方法,有收敛速度快的优点。
同样考虑无约束优化问题