白话机器学习数学——梯度下降与牛顿迭代

  • 导言
  • 预备知识

多元函数的泰勒展开式
梯度的概念
Hessian矩阵

  • 梯度下降法
  • 牛顿法
  • 拓展-坐标下降法

总结

  1. 导言

机器学习中,我们为了得到最优结果,需要寻找函数的最值这。由微积分的基础知识我们可知,即寻找函数在某一领域内的极值点。由于机器学习的模型涉及多个函数的变量及参数值,我们无法通过简单的多元函数求导找到函数的极值点。因此通常我们采用迭代法,从一个初始点x0x_0x0​开始,反复使用某种规则从xkx_kxk​移动到下一个点xk+1x_{k+1}xk+1​,直到到达函数的极值点。即达成寻找到函数极小值的目标
minxf(x⃗)min_xf(\vec{x})minx​f(x)
其中x⃗\vec{x}x称为优化变量,fff称为目标函数。极大值问题可通过将目标值函数冠以负号转化为极小值问题。当然,有时也会对优化变量有约束。

  1. 预备知识
    2.1多元函数的泰勒展开式
    由微积分知识我们可知,一元函数f(x)f(x)f(x)在某一点x0x_0x0​处可展开为
    f(x)=f(x0)0!+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+...+fn(x0)n!(x−x0)n+o(x)f(x)=\frac{f(x_0)}{0!}+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+...+\frac{f^n(x_0)}{n!}(x-x_0)^n+o(x)f(x)=0!f(x0​)​+1!f′(x0​)​(x−x0​)+2!f′′(x0​)​(x−x0​)2+...+n!fn(x0​)​(x−x0​)n+o(x)
    类似地,我们可得到多元函数的泰勒展开公式(此处忽略了二次及以上的项)
    f(x⃗+Δx⃗)=f(x⃗)+(∇(x⃗)TΔx⃗)+o(x)f(\vec{x}+\Delta\vec{x})=f(\vec{x})+(\nabla(\vec{x})^T\Delta\vec{x})+o(x)f(x+Δx)=f(x)+(∇(x)TΔx)+o(x)
    其中dfdfdf表示f(x⃗)f(\vec{x})f(x)的全导数。
    2.2梯度
    如果将多元函数的自变量用一组n维向量
    x⃗=(x1,x2,...,xn)T\vec{x}=(x_1,x_2,...,x_n)^Tx=(x1​,x2​,...,xn​)T
    表示出来,那么梯度身的概念即是对向量的偏导数,即
    gradf=∑i=1n∂f∂xigradf=\sum_{i=1}^n\frac {∂f}{∂x_i}gradf=i=1∑n​∂xi​∂f​
    或者说,梯度是一个向量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
    2.3Hessian矩阵
    当函数有多输入时,若对函数求二阶导数,由链式求导法则可知,会产生多个二阶导数。通过将这些二阶导数合并成一个矩阵,称为Hessian矩阵,且有如下定义
    H(f)(x⃗i,j)=∂2∂xj∂xif(x⃗){\bf H}(f)(\vec {x}_i,_j)=\frac{∂^2}{∂x_j∂x_i} f(\vec{x})H(f)(xi​,j​)=∂xj​∂xi​∂2​f(x)
    且由于微分算子在任何二阶偏导数连续的点处可交换,即
    Hi,j=Hj,i\bf H_i,_j=H_j,_iHi​,j​=Hj​,i​
    且Hessian矩阵是实对称矩阵。
    3.梯度下降法
    梯度下降法即沿着梯度向量的反方向进行迭代以达到函数的极值点。由前文所提及的忽略二次以上的项的多元函数泰勒展开式,可作如下变形
    f(x⃗+Δx⃗)−f(x⃗)=(∇f(x⃗)TΔx⃗)+o(x)f(\vec{x}+\Delta\vec{x})-f(\vec{x})=(\nabla f(\vec{x})^T\Delta\vec{x})+o(x)f(x+Δx)−f(x)=(∇f(x)TΔx)+o(x)
    用以描述函数的增量与自变量的增量Δx\Delta xΔx、函数梯度间的关系。如果
    (∇(x⃗)TΔx⃗)<0(\nabla(\vec{x})^T\Delta\vec{x})<0(∇(x)TΔx)<0
    恒成立,则有
    f(x⃗+Δx⃗)<f(x⃗)f(\vec{x}+\Delta\vec{x})<f(\vec{x})f(x+Δx)<f(x)
    即函数递减。因此,我们需要选择适合的Δx⃗\Delta \vec xΔx来保证函数值的下降,设
    Δx⃗=−γ∇f(x⃗)\Delta \vec{x}=-\gamma \nabla f(\vec{x})Δx=−γ∇f(x)
    其中,γ\gammaγ为一个趋近0的常数(亦称之为学习率,Learning Rate),由人工设定,保证在x⃗+Δx⃗\vec{x}+\Delta \vec{x}x+Δx在x⃗\vec{x}x的领域内,从而忽略泰勒展开式中二次及更高项。在梯度反方向有
    (∇f(x⃗)TΔx⃗)=−γ(∇f(x⃗))T(∇f(x⃗)≤0(\nabla f(\vec{x})^T\Delta\vec{x})=-\gamma (\nabla f(\vec{x}))^T(\nabla f(\vec{x})\leq0(∇f(x)TΔx)=−γ(∇f(x))T(∇f(x)≤0
    从初始点x0⃗\vec {x_0}x0​​开始,使用如下迭代公式
    xk+1⃗=x⃗k−γ∇f(x⃗k)\vec{x_{k+1}}=\vec x_k-\gamma \nabla f(\vec x_k)xk+1​​=xk​−γ∇f(xk​)
    只要没有到达梯度为0⃗\vec00的点,函数值会沿着序列x⃗k\vec x_kxk​递减,最终收敛到梯度为0⃗\vec00的点,此乃梯度下降法。
    4.牛顿法
    由前文所提及的Hessian矩阵、忽略了二次以上项的泰勒展开式,令函数梯度为0⃗\vec00我们可以得到
    ∇f(x⃗0)+∇2f(x⃗0)(x⃗−x0⃗)=0⃗\nabla f(\vec x_0)+\nabla^2 f(\vec x_0)(\vec {x}-\vec {x_0})=\vec 0∇f(x0​)+∇2f(x0​)(x−x0​​)=0
    解这个线性方程组可得,
    x⃗=x⃗0−(∇2f(x⃗0))−1∇f(x⃗0)\vec x=\vec x_0-(\nabla^2 f(\vec x_0))^{-1} \nabla f(\vec x_0)x=x0​−(∇2f(x0​))−1∇f(x0​)
    由于在泰勒展开中忽略了高阶项,因此,这个点并不一定是函数的驻点,需要反复用公式进行迭代
    x⃗k+1=x⃗k−(∇2f(x⃗k))−1∇f(x⃗k)\vec x_{k+1}=\vec x_k-(\nabla^2 f(\vec x_k))^{-1} \nabla f(\vec x_k)xk+1​=xk​−(∇2f(xk​))−1∇f(xk​)
    最终方可抵达驻点。其中,−(∇2f(x⃗k))−1∇f(x⃗k)-(\nabla^2 f(\vec x_k))^{-1} \nabla f(\vec x_k)−(∇2f(xk​))−1∇f(xk​)称为牛顿方向。
    迭代终止条件:梯度模接近于0⃗\vec 00,或者函数值下降小于制定阈值。下面用一段伪代码表示这一流程:
while(1){
var x_0,k;
k=0;
cal(g_k,H_k);//计算梯度和矩阵
if (||g_k||<阈值) return ;
else{
cal(-H_k^(-1)g_k);//计算搜索方向
x_k+1=x_k+γd_k;//计算新的迭代点
k++;
cal(g_k,H_k);
}
}

与梯度下降一样,γ\gammaγ是一个步长。
如果目标函数为二次函数,则牛顿迭代可一步便收敛到极值点。
由于牛顿迭代不能保证每一步函数下降和一定收敛,因此常采用直线搜索。具体做法为让γ\gammaγ取一些典型的离散值,例如:
0.0001,0.001,0.01
比较取哪个时函数下降最快。
相比梯度下降的方法,牛顿法显然速度较快,但每一步迭代的代价也是很高的。在实际运用中,一般不直接求矩阵的逆,而是求解如下方程组:
Hkd=−gkH_kd=-g_kHk​d=−gk​
当然,求解这个方程组还是使用迭代方法,比如共轭梯度法。
还有一个问题是,如果Hessian矩阵没有逆矩阵,那么上面那句话也就gg了。
5.拓展–最速下降法
在梯度下降中,为计算最优步长γ\gammaγ,记搜索方向为
d⃗k=−∇f(x⃗k)\vec d_k=-\nabla f(\vec x_k)dk​=−∇f(xk​)
则最小步长为
γk=argminγf(x⃗k+γdk⃗)\gamma_k=argmin_{\gamma} f(\vec x_k+\vec{\gamma d_k})γk​=argminγ​f(xk​+γdk​​)
当然,这是一个一元函数极值问题,唯一优化变量是γ\gammaγ。
6.总结
梯度下降和牛顿法都是机器学习中求解最优化问题的常见方法。二者都基于泰勒展开和Hessian矩阵进行计算,且都有一定程度上的精度损失。当然,相比梯度下降算法,牛顿迭代法速度更快,损失也更大。
参考资料:
雷明,《机器学习与应用》,清华大学出版社
(美)Ian Goodfellow等,《深度学习》,人民邮电出版社
(第一次写博客,给个赞呗~)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐