我们在接触到具体的机器学习算法前,其实很有必要对优化问题进行一些了解。
随着学习的深入,越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型。
最常见的最优化方法有梯度下降法、牛顿法和拟牛顿法、共轭梯度方向法等。
在大学课程中,数值分析是计算机或数学相关专业一门比较重要的一门课程,笔者也在大学时自学过相关课程,其介绍的诸多对理论的计算机实现方法,对现在的学习依然发挥着很大的作用。
当然优化算法只是数值分析课程中涉及一部分内容,这一节主要介绍和回顾梯度下降法
梯度下降法
梯度下降法是最为常见的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。
在一般情况下,其解不能保证是全局最优解,梯度下降法的速度也未必是最快的。
假设 f(x) f ( x ) 是 Rn R n 上具有一阶连续偏导数的函数,需要求解的无约束最优化问题是:
梯度下降法是一种迭代算法,选取适当的初值 x0 x 0 ,反复迭代,更新 xi x i 的值,进行目标函数的极小化,直至收敛。
由于我们都知道梯度方向 ∇f(x) ∇ f ( x ) 是函数增长最快的方向,那么自然而然的想到负梯度方向就是函数值下降最快的方向了。因此,我们以负梯度方向作为极小化的下降方向,在迭代的每一步,以负梯度方向来更新 x x 的值,从而达到减小函数值目的,这种方法就是梯度下降法。
由于
具有一阶连续偏导数,若第k次迭代值为 xk x k ,则可将 f(x) f ( x ) 在 xk x k 处进行一阶泰勒展开:
这里,(方便推广,使用矩阵形式)