机器学习最常用的优化方法是梯度下降法,如下图所示:
它属于 一阶优化算法。
一阶优化算法(first-order optimization algorithms):仅使用梯度信息优化的算法称为一阶优化算法,如梯度下降算法。
一阶导数就是梯度。通俗来说,梯度就是表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。局部下降最快的方向就是梯度的负方向。其中的数学知识包括一阶泰勒展开式,线性近似和向量相乘最小化的思想。
另外一种常见的算法,是牛顿法。牛顿法属于二阶优化算法。
二阶优化算法(second-order optimization algorithms):使用海森矩阵优化的算法称为二阶优化算法,如牛顿方法。
那么梯度下降法与牛顿法的差别有哪些?
先看公式: 第一行是 梯度下降法,第二行是牛顿法。
梯度下降算法是将函数在 xn 位置进行一次函数近似,也就是一条直线。计算梯度,从而决定下一步优化的方向是梯度的反方向。(一阶)
牛顿法是将函数在 xn 位置进行二阶函数近似,也就是二次曲线。计算梯度和二阶导数,从而决定下一步的优化方向。(二阶)
如下图所示:
梯度下降法
牛顿法
牛顿法相比梯度下降法有什么优势呢?
a、从公式看 不需要学习率
b、可以利用曲线性质,下降速度更快
但是,总的来说,基于梯度下降的优化算法,在实际应用中更加广泛一些,例如 RMSprop、Adam等。但是,牛顿法的改进算法,例如 BFGS、L-BFGS 也有其各自的特点,也有很强的实用性。
那这是为什么呢?一般说来有以下原因。
1、牛顿法需要计算梯度和Hessian矩阵及其逆,难以求解,特别是深度学习神经网络中;
2、Hessian矩阵维度大,占用内存非常大
3、神经网络是 非凸优化问题,鞍点相对于局部最小值的数量非常多,而二阶优化算法是寻找梯度为0,容易陷入鞍点。
需要了解的概念还有:
雅可比矩阵(Jacobian):有时候我们需要计算输入和输出都为向量的函数的所有偏导数。包含这样偏导数的矩阵称为雅可比矩阵。
海森矩阵(Hessian):一阶导数看单调性,二阶导数看凹凸性。有时候,我们可能会对二阶导数比较感兴趣。当我们的函数具有多维输入,二阶导数也有很多,我们可以对这些导数合并成一个矩阵,就是海森矩阵。
领取专属 10元无门槛券
私享最新 技术干货