优化算法两大核心,一曰:方向,比如由负梯度方向给出;二曰:步长。
在机器学习领域,不管是基础的梯度下降,还是更为高级的 L-BFGS、共轭梯度,都对应的是参数学习,用来学习相关模型的参数。
1. 梯度下降
梯度下降算法可以用来处理任何非约束优化问题。它最大的问题在于无法最终保证得到全局最优的结果,即最终的结果通常不能保证使损失函数最小,而只能保证在最终结果附近,没有更好的结果。因为梯度下降算法在参数更新的过程中,只利用了参数附近的梯度,对于整个参数空间的趋势,并未进行考虑。
由于步长的确定,将该问题从科学问题变成了一个工程问题。
一种方法是让步长随着时间 t (迭代次数) 的推移而变化,一般是变小,初期大步快走,后期小步慢走,这也符合我们人类进行无启发式信息时的搜索。
2. 高级优化算法
迄今为止,我们的讨论都集中在使用梯度下降法来最小化
举例来说,可以想象这样一个算法:它使用梯度下降,并能够自动调整学习速率 α ,以得到合适的步长值,最终使 θ 能够快速收敛到一个局部最优解。还有更妙的算法:比如可以寻找一个 Hessian 矩阵的近似,得到最佳步长值,使用该步长值能够更快地收敛到局部最优(和牛顿法类似)。
使用这些高级优化算法时,你需要提供关键的函数:即对于任一个 θ ,需要你计算出 J(θ) 和 ∇θJ(θ) 。之后,这些优化算法会自动调整学习速率/步长值 α 的大小(并计算 Hessian 近似矩阵等等)来自动寻找 J(θ) 最小化时 θ 的值。诸如 L-BFGS 和共轭梯度算法通常比梯度下降法快很多。