线性搜索下降算法
基本思想:给定初始点\(x^0\),依次沿着坐标轴\(e_1,\dots e_n\)进行搜索
当变量之间的交叉程度较小时非常有效,比如:
基本思想:选择\(x^k\)处负梯度作为搜索方向,即\(d^{k}=-\nabla f\left(x^{k}\right)\)
若迭代步长\(\alpha_k\)是\(\phi(\alpha)=f(x^k+\alpha_k d^k)\)的精确最小点,则\(\phi^{‘}(\alpha_k)=0\),即:
例:\(\min f(x)=0.5x_1^2+2x_2^2\),设初始点\(x^0=(2,1)^T\)
缺点:
基本思想:对\(x^k\)处的二次逼近函数进行最小化:
对二次近似函数进行求导:
进行移项可得:
牛顿法步骤:
优缺点:
对步长\(\alpha_k\)的修正:首先判断\(\alpha_k=1\)是否让目标函数充分下降,否则采用线搜索方法重新确定\(\alpha_k\)
对于方向(Hesse矩阵)的修正:选取\(d^k=-B_k^{-1}\nabla f\left(x^{k}\right)\)
若\(\nabla^2 f\left(x^{k}\right)\succ 0\),则选取\(B_k=\nabla^2 f\left(x^{k}\right)\)
否则修正方法有多种:
\(B_k=\nabla^2 f\left(x^{k}\right)+\lambda I\),\(\lambda\)为适当正数保证\(B_k\)正定
考虑特征值分解\(\nabla^{2} f\left(x^{k}\right)=Q^{T} \Sigma Q\) ,其中$ \Sigma=dia g(\lambda_1,\cdots,\lambda_n)$ ,每一个对角线元素就是一个特征值。令\(B_k=Q^{T} diag(\tau_i) Q\)
考虑\(f(x)\)在当前点\(x^k\)处的二次近似函数
其中\(B_k\succ 0\),这个\(B_k\)就是为了代替\(\nabla^2 f\left(x^{k}\right)\)的,因为Hesse矩阵不好求
利用\(\min m_k(x)\)得到搜索方向\(d^k=-B_k^{-1}\nabla f\left(x^{k}\right)\)
拟牛顿法步骤:
在\(x^{k+1}\)这个点确定\(B_{k+1}\)有多种方法,如何简便获取矩阵\(B_{k+1}\)?
在\(x^{k}\)点处已知\(\nabla f\left(x^{k}\right)\)和\(B_k\),此时刚得到\(x^{k+1}\)点,可以计算出该点的梯度\(\nabla f\left(x^{k+1}\right)\),待求的为\(B_{k+1}\)。根据中值定理可知:
这个Hesse矩阵\(\nabla^2 f\left(\xi \right)\)不好算,所以用\(B_{k+1}\)来代替,所以基本要求是:
这个就是拟牛顿方程,满足拟牛顿方程的矩阵有很多。
记\(y_k=\nabla f\left(x^{k+1}\right)-\nabla f\left(x^{k}\right)\),\(s_k=x^{k+1}-x^{k}\),则上式简写为:\(y_k=B_{k+1}s_k\)
记\(H_k=B_k^{-1}\),拟牛顿方程也可以表示成\(s_k=H_{k+1}y_k\)
基于已有信息\(y_k,s_k,B_k\)获取\(B_{k+1}\)有几种方法:
第一类方法:选择满足拟牛顿方程且与\(B_k\)近似的矩阵
第二类方法:对\(B_k\)(或者\(H_k\))进行校正,如:\(B_{k+1}=B_k+\Delta B\)
共轭方向:考虑正定矩阵\(Q\)及非零向量\(d^i,d^j\)。若\((d^i)^TQd^j=0\),则称\(d^i,d^j\)关于矩阵\(Q\)共轭。
对于问题:
给定初始点\(x^0\)及一组关于\(Q\)共轭方向\(d^0,d^1,\cdots,d^{n-1}\),令\(x^{k+1}=x^k+\alpha_kd^k, \quad k=0,\cdots ,n-1\)
其中
对\(\phi(\alpha)\)求导可得到
共轭方向法为一类方法,共轭梯度法是其中一种。
几何解释:
对于问题
当\(Q\)是一个对角阵时,\(f(x)=1 / 2 x^{T} \rm diag(q_{11},\cdots q_{nn}) x+c^{T}\),可以发现\(f(x)\)没有交叉的项(即\(x_{ij},i\not=j\)),所以这时沿着每个维度去正交搜索就行了(作一次精确线搜索就可以得到这个维度上最小值的精确解),比如下图\(n=2\)时:
而\(Q\)不是对角阵时
令\(S=(d^0,d^1,\cdots,d^{n-1})\),\(S\)可逆,可以发现此时
根据共轭的性质可以知道,\(\hat Q\)一个对角阵。因此令\(x=S\hat{x}\),上面的问题中\(f(x)\)可以写为:
此时变成了在\(\hat x\)坐标域上进行搜索。
在迭代下降过程中,借助当前点\(x^k\)的梯度信息构造共轭方向\(d^k\)
共轭梯度法步骤:
给定初始点\(x^0\),记\(d^0=-\Delta f(x^0)\),\(k=0\)
判断是否满足\(\left\|\nabla f\left(x^{k}\right)\right\| \leq \epsilon\),满足则终止;
利用线性搜索计算步长\(\alpha_k\)(上面有计算公式);
令\(x^{k+1}=x^k + \alpha_k d^k\),并计算方向
其中
令\(k=k+1\),转第2步
原文:https://www.cnblogs.com/MayeZhang/p/14343104.html