深入分析:近端梯度下降法交替方向乘子法牛顿法
Posted 信
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入分析:近端梯度下降法交替方向乘子法牛顿法相关的知识,希望对你有一定的参考价值。
写在前面
本文主要围绕近端梯度下降法(Proximal Gradient Descent)、交替方向乘子法(Alternating Direction Method of Multipliers)、牛顿法来结合实际的案例进行推导分析,主打一个面向对象。
近端梯度下降法
**PGD (Proximal Gradient Descent) **,称为近端梯度优化法,近端指的是局部区域,在损失函数曲线上的一个泰勒展开点的近端或附近。近端梯度优化则是损失函数曲线上的一个点附近进行泰勒展开,通过执行梯度优化寻找局部最优解。
为什么要提出PGD?与L1范数相关的稀疏问题求解中,L1范数不是处处可导(在零点不可导),无法使用梯度下降法。因此不难发现,其主要用于解决目标函数中存在可微和不可微函数的情况,如sgn函数。
在近端梯度求解时,会遇到绝对值求导的问题,绝对值求导结果为符号函数Sgn(x)
,这个过程需要分情况讨论,因此会形成软阈值算子。在下面的例子中,\\(x\\)即为关于\\(b\\)的软阈值。
因此在含L1范数的稀疏编码关于近端梯度下降算法的求解问题中,面临迭代软阈值优化分析,故这类问题也称为迭代软阈值算法(ISTA,Iterative Shrinkage Thresholding Algorithm)。
在这里,将近端梯度算法有关的算法做一个归类,针对问题:\\(x=\\undersetx\\arg\\ming(x)+h(x)\\),如果函数\\(g(x)\\)是可微的凸函数,\\(h(x)\\)是不可微的凸函数,那么可以根据\\(h(x)\\)将近端梯度算法表示为以下几种:
- 如果\\(h(x)=0\\),则近端梯度算法退化为一般的梯度下降算法
- 如果\\(h(x)=I_C(x)\\),则近端梯度算法称为投影梯度下降算法,其中示性函数\\(I_C(x)=\\begincases0,&x\\in C\\\\ \\infty,&x\\notin C\\endcases\\)
- 如果\\(h(x)=\\lambda \\Vert x\\Vert_1\\),则近端梯度算法称为迭代软阈值算法。
标准Lasso问题(PGD)
针对问题:\\(min_x g(x)+h(x)=min_x\\frac12||Ax-b||_2^2+\\lambda||x||_1\\),我们需要令其能够转化为\\((x-b)^2\\)的形式,因此,我们可以选择在\\(x_0\\)处泰勒展开(令\\(\\nabla^2g(x_0)=\\frac1t\\)),则有:
\\(\\beginalignedg(x)&\\approx g(x_0)+\\nabla g(x_0)(x-x_0)+\\frac12\\nabla^2g(x_0)(x-x_0)^2=g(x_0)+\\nabla g(x_0)(x-x_0)+\\frac12t(x-x_0)^2\\endaligned\\)
那么,Lasso问题等价为:
\\(min_x~g(x)+h(x) \\approx min ~g(x_0)+\\nabla g(x_0)(x-x_0)+\\frac12t(x-x_0)^2+h(x)\\\\ =min\\frac12t[x-x_0+t\\nabla g(x_0)]^2+h(x)=min_x\\frac12t||x-(x_0-t\\nabla g(x_0)||_2^2+h(x)=m i n\\frac12t||x-z||_2^2+h(x)\\)
至此,我们可以得到\\(z=x_0-t\\nabla g(x_0)\\),即\\(g(x)\\)梯度下降的形式,此时如果代入\\(h(x)=\\lambda \\Vert x\\Vert_1\\),我们就不难发现这个式子和开篇的类似,因此,我们可以得到Lasso问题的解为\\(x=\\boldsymbolS_\\lambda\\left( \\boldsymbolz \\right)\\)
近端算子则可以表示为:\\(prox_t,h(\\cdot)(z)=\\arg\\min\\frac12||x-z||_2^2+t\\cdot h(x)\\)
因此,近端梯度下降的迭代过程可以表示为如下:先对\\(g(x)\\)进行梯度下降求解\\(z^(k+1)=x^(k)--t\\nabla g(x_(k))\\),再代入\\(x^(k+1)=prox_t,h(\\cdot)(z^(k+1))=\\boldsymbolS_\\lambda\\left( \\boldsymbolz^(k+1) \\right)\\)
标准Lasso问题(ISTA)
Lasso (Least Absolute Shrinkage and Selection Operatior),最小绝对收缩选择算子,本质是给解向量增加L1范数约束,使向量的元素尽可能稀疏。
给定目标函数如下:
引入中间变量\\(w\\),如下:
下面分别对\\(L\\)关于\\(\\alpha,\\beta\\)和\\(\\rho\\)项求极值点分析。
1、首先,对式中与\\(\\beta\\)有关项进行偏导分析,详细过程如下(懒得描绘,直接看推导过程吧):
2、其次,对式中与\\(\\alpha\\)有关项进行偏导分析,详细过程如下:
3、最后,更新\\(w\\)项:\\(w^(l+1)=w^(l)+\\beta^(l)-\\alpha^(l)\\)
混合Lasso问题(ISTA)
这个案例选自国防科大ISAR高分辨成像的1篇文章ADMM-Net,其主要引入了卷积算子来解决传统LASSO-成像问题中忽略了弱散射中心与强散射中心的关系导致的弱散射点成像不显著问题。其给定的目标函数如下:
上式中,\\(C\\)为卷积核,\\(*\\)为二维卷积,\\(\\epsilon\\)为任意极小值,\\(\\bigodot\\)为矩阵哈达玛积。下面通过引入中间变量\\(Z=X\\)来解耦合卷积过程的两项表达式,考虑中间变量后的目标函数如下:
下面,我们将上式改写为增广拉格朗日方程的形式:
我们对上述目标函数\\( \\boldsymbolL\\left( \\boldsymbolX,\\boldsymbolZ,\\boldsymbolB \\right) \\)关于变量\\(X\\),\\(Z\\)和\\(B\\)分别求偏导,可以得到如下表达式:
1、首先,对关于\\(X\\)的项更新:
2、再次,对关于\\(Z\\)的项更新:
3、最后,对关于\\(B\\)项的更新:
交替方向乘子法
交替方向乘子法的主要思想为将大问题拆解为若干子问题进行迭代求解。
原子范数软阈值AST推导
单快拍
在范数对偶问题证明中,有噪声版本下的单快拍原子范数软阈值问题可以表示为:
\\(\\beginarrayll\\textminimize_t,u,x,Z&\\frac12\\|x-y\\|_2^2+\\frac\\tau2(t+u_1)\\\\ \\textsubject to&Z=\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\\\ &Z\\succeq0.\\endarray\\)
下面给出具体的变量迭代过程:
1、首先需要将上述有约束条件的原问题表述为增广拉格朗日方程形式,如下所示:
\\(\\beginarrayc\\mathcalL_\\rho(t,u,x,Z,\\Lambda)=\\dfrac12\\|x-y\\|_2^2+\\dfrac\\tau2(t+u_1)+\\left\\langle\\Lambda,Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\rangle+\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\|_F^2\\endarray\\)
其中,\\(\\Lambda^l=\\beginbmatrix\\Lambda_0^l&\\lambda_1^l\\\\ \\lambda_1^l* & \\Lambda_n+1,n+1^l\\endbmatrix\\),\\(Z^l=\\beginbmatrixZ_0^l&z_1^l\\\\ z_1^l* & Z_n+1,n+1^l\\endbmatrix\\)
2、下面依次对变量\\(x\\),\\(t\\),\\(u\\)依次迭代更新:
2.1 首先提取关于\\(x\\)项的表达式,\\(\\dfrac12\\|x-y\\|_2^2+\\left\\langle\\Lambda,Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\rangle+\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\|_F^2\\)
其偏导为\\(-2\\lambda_1^l+2\\rho(x-z_1^l)+x-y=0,\\)那么有\\(x^l+1=\\fracy+2\\lambda_1^l+2\\rho z_1^l1+2\\rho\\).
2.2 其次提取关于\\(t\\)项的表达式,\\(\\dfrac\\tau2(t+u_1)+\\left\\langle\\Lambda,Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\rangle+\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\|_F^2\\)
其偏导为\\(\\frac\\tau2-\\Lambda_n+1,n+1^l+\\rho t-\\rho Z_n+1,n+1^l=0\\),那么有\\(t^l+1=\\frac1\\rho(\\rho Z_n+1,n+1l+\\Lambda_n+1,n+1^l-\\tau/2)\\).
2.3 其次提取关于\\(u\\)项的表达式,\\(\\dfrac\\tau2(t+u_1)+\\left\\langle\\Lambda,Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\rangle+\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\|_F^2\\)
其偏导为\\(\\frac\\tau2e_1-\\Lambda_0^l+\\rho(T(u)-\\Z_0^l)=0\\),那么有\\(u^l+1=W\\left(T^*(Z_0^l+\\Lambda_0^l/\\rho)-\\dfrac\\tau2\\rhoe_1\\right)\\),对角矩阵\\(W\\)满足关系\\(W_ii=\\begincases\\frac1n&i=1\\\\ \\frac12(n-i+1)&i>1\\endcases\\),\\(T^*(\\cdot)\\)表示生成共轭转置向量.
2.4 其次提取关于\\(Z\\)项的表达式,\\(\\left\\langle\\Lambda,Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\rangle+\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix\\right\\|_F^2\\)
其可进步表示为\\(\\dfrac\\rho2\\left\\|Z-\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix+\\rho^-1\\Lambda\\right\\|_F^2+Const\\),当且仅当\\(Z=\\beginbmatrixT(u)&x\\\\ x^*&t\\endbmatrix+\\rho^-1\\Lambda\\)时有最小值.
因此\\(Z^l+1=\\beginbmatrixT(u^l+1)&x^l+1\\\\ (x^l+1)^*&t^l+1\\endbmatrix+\\rho^-1\\Lambda^l\\)
2.5 最后,更新拉格朗日乘子项\\(\\Lambda^l+1=\\Lambda^l+\\rho(Z^l+1-\\beginbmatrixT(u^l+1)&x^l+1\\\\ (x^l+1)^*&t^l+1\\endbmatrix)\\)
多快拍
在范数对偶问题证明中,有噪声版本下的多快拍原子范数软阈值问题可以表示为:
下面给出具体的变量迭代过程:
1、首先需要将上述有约束条件的原问题表述为增广拉格朗日方程形式,如下所示:
2、下面需要依次对变量\\(X,W,u,\\Theta,\\Lambda\\)等参量分别求极值点来更新每个子问题的最优解;在正式更新前,需要展开以下几个参量表示,以更好地帮助证明推导。(下面中\\(M,L\\)分别表示阵元数目和快拍数目)
上式中,\\(\\mathbf\\Theta_W,\\mathbf\\Lambda_W\\in C^L\\times L\\),\\(\\mathbf\\Theta_T(u),\\mathbf\\Lambda_T(u)\\in C^M\\times M\\),\\(\\mathbf\\Theta_X,\\mathbf\\Lambda_X\\in C^L\\times M\\)
对于\\(L_1=\\left\\langle\\mathbf\\Lambda,\\mathbf\\Theta-\\left[\\beginarrayccT(\\mathbfu)&\\mathbfX\\\\ \\mathbfX^\\mathrmH&\\mathbfW\\endarray\\right]\\right\\rangle\\),我们有\\(L_1=trace(\\Lambda^T\\\\mathbf\\Theta-\\left[\\beginarrayccT(\\mathbfu)&\\mathbfX\\\\ \\mathbfX^\\mathrmH&\\mathbfW\\endarray\\right]\\)\\),令\\(B=\\mathbf\\Theta-\\left[\\beginarrayccT(\\mathbfu)&\\mathbfX\\\\ \\mathbfX^\\mathrmH&\\mathbfW\\endarray\\right]\\),对于\\(trace(\\Lambda^TB)\\)关于\\(B\\)的偏导为\\(trace(\\Lambda)\\),\\(B\\)关于\\(X\\)的导数为\\(\\left[\\beginarrayccO_M\\times M&\\mathbf-I_M\\times L\\\\ \\mathbf-I_L\\times M&\\mathbfO_L\\times L\\endarray\\right]\\),那么对应\\(L_1\\)关于\\(X\\)的偏导为\\(trace(\\left[\\beginmatrix\\mathbf-\\Lambda_X&\\mathbf-\\Lambda_T(\\mathbfu)\\\\ \\mathbf-\\Lambda_\\mathbfW^&\\mathbf-\\Lambda_\\mathbfX^H\\endmatrix\\right])\\)
对于\\(L_2=\\frac\\rho2\\|\\mathbf\\Theta-\\left[\\beginarrayccT(\\mathbfu)&\\mathbfX\\\\ \\mathbfX^\\mathrmH&\\mathbfW\\endarray\\right]\\|_\\mathbfF^2\\),我们有\\(L_2=trace((\\Theta-B)(\\Theta-B)^H)=trace(\\Theta\\Theta^H-\\Theta B^H-B\\Theta^H+BB^H),\\)我们对\\(L_2\\)关于X求偏导可以得到其偏导数为
\\(2\\cdot trace(\\\\Theta-B\\\\cdot \\left[\\beginarrayccO_M\\times M&\\mathbf-I_M\\times L\\\\ \\mathbf-I_L\\times M&\\mathbfO_L\\times L\\endarray\\right])=2trace(\\left[\\beginarrayccX-\\Theta_X&\\mathbfT_u-\\Theta_T_u\\\\ \\mathbfW-\\Theta_W&\\mathbfX^H-\\Theta_X^H\\endarray\\right])\\)
那么,我们可以得到\\(L\\)关于\\(X\\)的偏导为\\(\\rho(2X-2\\Theta_X)-2\\Lambda_X+X-Y=0\\),因而在第一步迭代可以更新\\(X\\)如下:
3、下面,我们继续对\\(L\\)中关于\\(W\\)的项求偏导,可以得到以下形式:
取迹后,我们可以得到关于\\(W\\)的更新式如下:
4、下面,我们继续对\\(L\\)中关于\\(T(u)\\)的项求偏导,可以得到其更新式如下:
5、下面,我们继续对\\(L\\)中关于\\(\\Theta\\)的项求偏导,这项比较特殊,因为我们可以将含\\(\\Theta\\)的项转化为以下形式:
那么,对应我们可以得到\\(\\Theta\\)在\\( \\left[ \\beginmatrix \\boldsymbolT_u& \\boldsymbolX\\\\ \\boldsymbolX^H& \\boldsymbolW\\\\ \\endmatrix \\right] -\\rho ^-1\\Lambda \\)时取到极值点。
6、对应乘子项的更新,同单快拍中的表述。我们在上面的表述中,没有显式地写出具体的\\(l+1\\)和\\(l\\)次迭代的关系,这并不影响,可以参考单快拍算法中的步骤,这里只是为了码公式而进行了简化。
牛顿法
牛顿法是求解无约束优化问题的经典方法。
参考文献
GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导
为什么要介绍梯度下降法和牛顿法那?
这里提及两个算法模型GBDT和XGBoost,两个都是boosting模型。
GBDT和xgb的目标函数是不同的,同时针对其目标函数中的误差函数 L(θ) 的拟合方式也有差异:
- GBDT利用一阶泰勒展开两项,做一个近似
- xgboost利用二阶泰勒展开三项,做一个近似
言为之意, - GBDT在函数空间中利用梯度下降法进行优化
- XGBoost在函数空间中用牛顿法进行优化
最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。
针对误差函数可以自定义,比如说平方损失函数: (yi,yi)=(yi?yi)2(yi,yi)=(yi?yi)2 (yi,y^i) = (yi?y^i)2 (yi,yi)=(yi?yi)2,或logistic损失函数
更多介绍建议去听:https://study.163.com/course/courseMain.htm?courseId=1006401020&share=2&shareId=400000000645014
1. 梯度下降法的推导
梯度下降法在机器学习和深度学习里用的非常多,一般教程或者教材在解释梯度下降法的时候会用形象化的方式(二次曲线、下凸面等),想必大家都知道如何用形象化的方式来说明梯度下降法的有效性。这里,我就不再赘述这种形象化的解释了。我这里使用数学推导来证明梯度下降法的有效性。
一元函数的泰勒展开大家应该都知道,公式如下:
f(x)=f(x0)+f’(x0)1!(x?x0)+f’’(x0)2!(x?x0)2+f’’’(x0)3!(x?x0)3+…f(x)=f(x0)+f’(x0)1!(x?x0)+f’’(x0)2!(x?x0)2+f’’’(x0)3!(x?x0)3+… f(x)=f(x_0)+frac{f’(x_0)}{1!}(x-x_0)+frac{f’’(x_0)}{2!}(x-x_0)^2+frac{f’’’(x_0)}{3!}(x-x_0)^3+… f(x)=f(x0?)+1!f’(x0?)?(x?x0?)+2!f’’(x0?)?(x?x0?)2+3!f’’’(x0?)?(x?x0?)3+…
不妨只取右边式子的前两项,也就是一个“约等于”的结果:
f(x)=f(x0)+f’(x0)1!(x?x0)f(x)=f(x0)+f’(x0)1!(x?x0) f(x)=f(x_0)+frac{f’(x_0)}{1!}(x-x_0) f(x)=f(x0?)+1!f’(x0?)?(x?x0?)
记:Δx=x?x0Δx=x?x0 Delta x=x-x_0 Δx=x?x0?,上式变为:
f(x)=f(x0)+f’(x0)1!Δxf(x)=f(x0)+f’(x0)1!Δx f(x)=f(x_0)+frac{f’(x_0)}{1!}Delta x f(x)=f(x0?)+1!f’(x0?)?Δx
我们的目标是在迭代过程中让下式恒成立,也就是说希望迭代过程中函数值会逐渐减小,用数学语言描述就是:f(xn+1)≤f(xn)f(xn+1)≤f(xn) f(x_{n+1})leq f(x_{n}) f(xn+1?)≤f(xn?)
容易想到,应该构造:
Δx=?f’(x0)Δx=?f’(x0) Delta x=-f’(x_0) Δx=?f’(x0?)
此时:
f(x)=f(x0)?f’(x0)2f(x)=f(x0)?f’(x0)2 f(x)=f(x_0)-f’(x_0)^2 f(x)=f(x0?)?f’(x0?)2
写成迭代形式:
f(xn+1)=f(xn)?f’(xn)2f(xn+1)=f(xn)?f’(xn)2 f(x_{n+1})=f(x_{n})-f’(x_{n})^2 f(xn+1?)=f(xn?)?f’(xn?)2
由于f’(x)2≥0f’(x)2≥0 f’(x)^2geq 0 f’(x)2≥0,我们就完成了对于梯度下降有效性的证明。从上述步骤归纳出来的参数迭代更新的公式如下:
f(xn+1)=f(xn)?f’(xn)2f(xn+1)=f(xn)?f’(xn)2 f(x_{n+1})=f(x_{n})-f’(x_{n})^2 f(xn+1?)=f(xn?)?f’(xn?)2
以上步骤是在一元函数上证明了梯度下降的有效性。容易推广到多元函数。另外,在多元函数中,还可以补充证明梯度方向是下降最快的方向。
详见:知乎为什么梯度下降能找到最小值?
2. 牛顿法
说完了梯度下降法,顺便介绍下牛顿法的推导。因为牛顿法也是通过泰勒展开推导出来的。
继续看泰勒展开:
f(x)=f(x0)+f’(x0)1!(x?x0)+f’’(x0)2!(x?x0)2+f’’’(x0)3!(x?x0)3+…f(x)=f(x0)+f’(x0)1!(x?x0)+f’’(x0)2!(x?x0)2+f’’’(x0)3!(x?x0)3+… f(x)=f(x_0)+frac{f’(x_0)}{1!}(x-x_0)+frac{f’’(x_0)}{2!}(x-x_0)^2+frac{f’’’(x_0)}{3!}(x-x_0)^3+… f(x)=f(x0?)+1!f’(x0?)?(x?x0?)+2!f’’(x0?)?(x?x0?)2+3!f’’’(x0?)?(x?x0?)3+…
依旧,我们取右式的前2项:
f(x)=f(x0)+f’(x0)1!(x?x0)f(x)=f(x0)+f’(x0)1!(x?x0) f(x)=f(x_0)+frac{f’(x_0)}{1!}(x-x_0) f(x)=f(x0?)+1!f’(x0?)?(x?x0?)
对等式两边取导数:
f’(x)=f’(x0)+f’’(x0)1!(x?x0)f’(x)=f’(x0)+f’’(x0)1!(x?x0) f’(x)=f’(x_0)+frac{f’’(x_0)}{1!}(x-x_0) f’(x)=f’(x0?)+1!f’’(x0?)?(x?x0?)
f’(x)=f’(x0)+f’’(x0)1!Δxf’(x)=f’(x0)+f’’(x0)1!Δx f’(x)=f’(x_0)+frac{f’’(x_0)}{1!}Delta x f’(x)=f’(x0?)+1!f’’(x0?)?Δx
根据微积分的性质,f(x)f(x) f(x) f(x)取最小值时,有f’(x)=0f’(x)=0 f’(x)=0 f’(x)=0,我们把这个性质代入上面的式子,有:
0=f’(x0)+f’’(x0)1!Δx0=f’(x0)+f’’(x0)1!Δx 0=f’(x_0)+frac{f’’(x_0)}{1!}Delta x 0=f’(x0?)+1!f’’(x0?)?Δx
Δx=?f’(x0)f’’(x0)Δx=?f’(x0)f’’(x0) Delta x=-frac{f’(x_0)}{f’’(x_0)} Δx=?f’’(x0?)f’(x0?)?
这样我们就得到了牛顿法的参数迭代更新公式如下:
xn+1=xn?f’(xn)f’’(xn)xn+1=xn?f’(xn)f’’(xn) x_{n+1}=x_{n}-frac{f’(x_n)}{f’’(x_n)} xn+1?=xn??f’’(xn?)f’(xn?)?
3. 梯度下降法和牛顿法的异同
从上面的证明过程可以看出,梯度下降法和牛顿法虽然都可以用泰勒展开推导,但推导所依据的思想还是有一点不一样的。
在实际运用中,牛顿法和梯度下降法都是广泛应用于机器学习中的。两者的区别其实很多博客都有写,比如:梯度下降or拟牛顿法?
4. 拟牛顿法
在上面牛顿法的参数迭代更新公式中,我们可以看到f’’(x0)f’’(x0) f’’(x_0) f’’(x0?)是位于分母部分的。记住,上面的数学推导是用的一元函数,对于多元函数,这个分母存在相当于要计算Hessian矩阵的逆矩阵,这是非常困难且耗费时间的。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。BFGS是用迭代法去近似计算海森矩阵。而BFGS需要额外储存近似的那个海森矩阵,所以有了改进版L-BFGS。
以上是关于深入分析:近端梯度下降法交替方向乘子法牛顿法的主要内容,如果未能解决你的问题,请参考以下文章