梯度下降法Gradient Descent是求解无约数最优化问题的一种最常见的方法。
假设f(x)f(x)f(x)是RnR^nRn上具有一阶连续偏导数的函数,要求解的无约束最优化问题是:(1)minx∈Rnf(x)min_{x\in R^n}f(x)\tag{1}minx∈Rnf(x)(1)
x∗x^*x∗表示目标函数f(x)f(x)f(x)的极小点
由于负梯度方向是函数值下降最快的方向,每一步迭代中,以负梯度方向更新xxx的值,从而达到减小函数值得目的
由于f(x)f(x)f(x)有一阶连续偏导数,若第kkk次迭代值为x(k)x^{(k)}x(k),则可将f(x)f(x)f(x)在x(k)x^{(k)}x(k)附近进行一阶泰勒展开:(2)f(x)=f(x(k))+gkT(x−x(k))f(x)=f(x^{(k)})+g^T_k(x-x^{(k)})\tag{2}f(x)=f(x(k))+gkT(x−x(k))(2)
这里,gk=g(x(k))=∇f(x(k))g_k=g(x^{(k)})=\nabla f(x^{(k)})gk=g(x(k))=∇f(x(k))为f(x)f(x)f(x)在x(k)x^{(k)}x(k)的梯度。
求出第k+1k+1k+1次迭代值x(k+1)x^{(k+1)}x(k+1): (3)x(k+1)=x(k)+λpkx^{(k+1)}=x^{(k)}+\lambda p_k\tag{3}x(k+1)=x(k)+λpk(3)
其中,pkp_kpk是搜索方向,取负梯度方向pk=−∇f(x(k))p_k=-\nabla f(x^{(k)})pk=−∇f(x(k)),λk\lambda_kλk是步长,由一维搜索确定,即λk\lambda_kλk使得(4)f(x(k)+λkpk)=minλ>=0f(x(k)+λpk)f(x^{(k)}+\lambda_kp_k)=min_{\lambda>=0} f(x^{(k)}+\lambda p_k)\tag{4}f(x(k)+λkpk)=minλ>=0f(x(k)+λpk)(4)
梯度下降法算法流程:
输入:目标函数f(x)f(x)f(x),梯度函数g(x)=∇f(x)g(x)=\nabla f(x)g(x)=∇f(x),计算精度ϵ\epsilonϵ
输出:f(x)f(x)f(x)的极小值点x∗x^*x∗
(1) 取初始值x(0)∈Rnx^{(0)}\in R^nx(0)∈Rn,置k=0k=0k=0
(2) 计算f(x(k))f(x^{(k)})f(x(k))
(3) 计算梯度g(x)=∇f(x)g(x)=\nabla f(x)g(x)=∇f(x),当∣∣gk∣∣<ϵ||g_k||<\epsilon∣∣gk∣∣<ϵ时,停止迭代,令x∗=x(k)x^*=x^{(k)}x∗=x(k);否则,令pk=−g(x(k))p_k=-g(x^{(k)})pk=−g(x(k)),求λk\lambda_kλk使得f(x(k)+λkpk)=minλ>=0f(x(k)+λpk)f(x^{(k)}+\lambda_kp_k)=min_{\lambda>=0} f(x^{(k)}+\lambda p_k)f(x(k)+λkpk)=minλ>=0f(x(k)+λpk)
(4) 置x(k+1)=x(k)+λkpkx^{(k+1)}=x^{(k)}+\lambda_kp_kx(k+1)=x(k)+λkpk,计算f(x(k+1))f(x^{(k+1)})f(x(k+1))
当∣∣f(x(k+1))−f(x(k))∣∣<ϵ||f(x^{(k+1)})-f(x^{(k)})||<\epsilon∣∣f(x(k+1))−f(x(k))∣∣<ϵ或∣∣x(k+1)−x(k)∣∣<ϵ||x^{(k+1)}-x^{(k)}||<\epsilon∣∣x(k+1)−x(k)∣∣<ϵ时,停止迭代,令x∗=x(k+1)x^*=x^{(k+1)}x∗=x(k+1)
(5) 否则,k=k+1k=k+1k=k+1,转(3)
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证全局最优。梯度下降法的收敛速度也未必很快。