「最优化算法」牛顿法

牛顿法(Newton Method)

牛顿法其实是一个寻找函数的根的方法,而后运用到优化问题中。主要是运用泰勒级数的知识来寻找一个可导函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) = 0 f(x)=0 </math>f(x)=0 的根。

将函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(x) </math>f(x) 在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 0 x_0 </math>x0 处展开成带皮亚诺余项的泰勒展开式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + o ( x ) f(x) = f(x_0) + f'(x_0)(x-x_0)+o(x) </math>f(x)=f(x0)+f′(x0)(x−x0)+o(x)

取前两项,作为 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(x) </math>f(x) 的近似,那么就可以用
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f(x_0) + f'(x_0)(x-x_0)=0 </math>f(x0)+f′(x0)(x−x0)=0

的解来近似 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(x) </math>f(x) 的解,求得的解为
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1 = x_0-\frac{f(x_0)}{f'(x_0)} </math>x1=x0−f′(x0)f(x0)

如下图:

由于函数只有一阶展开,求解处的值离真实的根还有一定的差距,但是已经很接近结果了,我们只需要再将 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(x) </math>f(x) 在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 1 x_1 </math>x1 处泰勒展开,重复以上的步骤,那么就会得到比 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 1 x_1 </math>x1 更加接近的解 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 2 x_2 </math>x2。

只要我们重复上述的步骤,循环迭代 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n 次,就会得到近似解 <math xmlns="http://www.w3.org/1998/Math/MathML"> x n x_n </math>xn
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> x n = x n − 1 − f ( x n − 1 ) f ′ ( x n − 1 ) x_n =x_{n-1}-\frac{f(x_{n-1})}{f'(x_{n-1})} </math>xn=xn−1−f′(xn−1)f(xn−1)

利用牛顿法求解最优化问题

对于一求个无约束的最优化问题 <math xmlns="http://www.w3.org/1998/Math/MathML"> min ⁡ x f ( x ) , x ∈ R n \min_{\mathbf x} f(\mathbf x),\mathbf x\in \mathbb R^n </math>minxf(x),x∈Rn 的最优解,可以将其转换为求解其梯度等于 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 </math>0 时的根,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∇ f ( x ) = 0 \nabla f(\mathbf x)=0 </math>∇f(x)=0。你看,这就可以利用牛顿法求解最优化问题啦。

采用牛顿法求解的迭代式为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> x k + 1 = x k − H − 1 ( x k ) ⋅ ∇ f ( x k ) \mathbf x_{k+1} = \mathbf x_k -H^{-1}(\mathbf x_k) \cdot \nabla f(\mathbf x_k) </math>xk+1=xk−H−1(xk)⋅∇f(xk)

这个 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x ) H(\mathbf x) </math>H(x) 是海塞矩阵,用来描述一个多元函数二阶导数。

海塞矩阵(Hessian Matrix)

对于一个多元函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x 1 , x 2 , ... , x n ) f(x_1,x_2,\dots,x_n) </math>f(x1,x2,...,xn),如果函数的二阶 导数都存在,则定义 <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f 的海塞矩阵为
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H ( f ) = ( ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ) H(f)= \begin{pmatrix} \frac{\partial^2f}{\partial x_1^2} & \frac{\partial^2f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2f}{\partial x_1 \partial x_n} \\ \frac{\partial^2f}{\partial x_2 \partial x_1} & \frac{\partial^2f}{\partial x_2^2} & \cdots & \frac{\partial^2f}{\partial x_1 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2f}{\partial x_n \partial x_1} & \frac{\partial^2f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2f}{\partial x_n^2} \\ \end{pmatrix} </math>H(f)=⎝ ⎛∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x1∂xn∂2f⋮∂xn2∂2f⎠ ⎞

如果多元函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x 1 , x 2 , ... , x n ) f(x_1,x_2,\dots,x_n) </math>f(x1,x2,...,xn) 二阶连续可导,并且在某一点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α ( x 1 ′ , x 2 ′ , ... , x n ′ ) \alpha(x_1',x_2',\dots,x_n') </math>α(x1′,x2′,...,xn′) 处梯度为 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 </math>0,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∇ f ( α ) = 0 \nabla f(\alpha)=0 </math>∇f(α)=0,那么点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α 为函数驻点,但不能判断该点是否为极小值。通过之前学习的知识,此时需要对函数求二阶导。

记 <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f 在点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α 处的海塞矩阵为 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( α ) H(\alpha) </math>H(α),因为
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 f ∂ x i ∂ x j = ∂ 2 f ∂ x j ∂ x i \frac{\partial^2f}{\partial x_i \partial x_j}=\frac{\partial^2f}{\partial x_j \partial x_i} </math>∂xi∂xj∂2f=∂xj∂xi∂2f

那么海塞矩阵是一个对称矩阵 ,对于 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( α ) H(\alpha) </math>H(α),有以下结论

  • 如果 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( α ) H(\alpha) </math>H(α) 是正定矩阵,则驻点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α 为极小值点
  • 如果 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( α ) H(\alpha) </math>H(α) 是负定矩阵,则驻点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α 为极大值点
  • 如果 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( α ) H(\alpha) </math>H(α) 是不定矩阵,则驻点 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α 不是极值点

因为牛顿法在进行迭代时运用了二阶导数,也就是说用二次曲线连模拟点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x k \mathbf x_k </math>xk,一步便可以找到二次曲线的极值点,所以下降的速度比起梯度下降法更快,能更容易地找到答案;但由于 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) H^{-1}(\mathbf x_k) </math>H−1(xk) 难于求解,难于操作,于是一种牛顿法的优化方法便出现了,就是下面提到的拟牛顿法。

LM 修正牛顿法

Levenberg-Marquardt 修正牛顿法主要着手于处理 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) H^{-1}(\mathbf x_k) </math>H−1(xk) 为不可逆的情况,令
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k ) = H ( x k ) + μ I G(\mathbb x_k) = H(\mathbf x_k) + \mu I </math>G(xk)=H(xk)+μI

使 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ \mu </math>μ 充分大,则 <math xmlns="http://www.w3.org/1998/Math/MathML"> G ( x k ) G(\mathbf x_k) </math>G(xk) 的特征值 <math xmlns="http://www.w3.org/1998/Math/MathML"> λ i + μ \lambda_i + \mu </math>λi+μ 均大于 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 </math>0。

当 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ → ∞ \mu \to \infty </math>μ→∞ 时, <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) ⋅ ∇ f ( x k ) H^{-1}(\mathbf x_k) \cdot \nabla f(\mathbf x_k) </math>H−1(xk)⋅∇f(xk) 趋近于 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 μ ∇ f ( x k ) \frac 1 \mu \nabla f(\mathbf x_k) </math>μ1∇f(xk),那么该法就趋近于梯度下降法。

高斯-牛顿法(Gauss-Newton Method)

高斯-牛顿法是用来解非线性的最小二乘问题。设有 <math xmlns="http://www.w3.org/1998/Math/MathML"> m m </math>m 个样本点 <math xmlns="http://www.w3.org/1998/Math/MathML"> { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , ⋯   , ( x ( m ) , y ( m ) ) } \{ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)}) \} </math>{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}, <math xmlns="http://www.w3.org/1998/Math/MathML"> x ( i ) ∈ R n x^{(i)}\in \mathbb R^n </math>x(i)∈Rn,用于训练一个可以用来预测的函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f θ ( x ) f_\theta(x) </math>fθ(x)。

有别于其他模型,这里我们特别地记 <math xmlns="http://www.w3.org/1998/Math/MathML"> f i ( x ) = f ( x ( i ) ; θ ) f_i(x)=f(x^{(i)};\theta) </math>fi(x)=f(x(i);θ) 。有损失函数:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> L ( θ ) = ∑ i = 1 m ( f i ( θ ) − y ( i ) ) 2 L(\theta) = \sum_{i=1}^m(f_i(\theta) - y^{(i)})^2 </math>L(θ)=i=1∑m(fi(θ)−y(i))2

上式对 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ j \theta_j </math>θj 进行求导,有
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ L ∂ θ j = ∑ i = 1 m [ 2 ( f i ( θ ) − y ( i ) ) ∂ f i ∂ θ j ] \frac{\partial L}{\partial \theta_j} = \sum_{i=1}^m\left[2(f_i(\theta) - y^{(i)})\frac{\partial f_i}{\partial\theta_j}\right] </math>∂θj∂L=i=1∑m[2(fi(θ)−y(i))∂θj∂fi]

写成向量和矩阵形式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∇ L ( θ ) = ( ∂ L ∂ θ 1 ∂ L ∂ θ 2 ⋮ ∂ L ∂ θ n ) = 2 ( ∂ f 1 ∂ θ 1 ∂ f 2 ∂ θ 1 ⋯ ∂ f m ∂ θ 1 ∂ f 1 ∂ θ 2 ∂ f 2 ∂ θ 2 ⋯ ∂ f m ∂ θ 2 ⋮ ⋮ ⋱ ⋮ ∂ f 1 ∂ θ n ∂ f 2 ∂ θ n ⋯ ∂ f m ∂ θ n ) ( ( f 1 ( θ ) − y ( 1 ) ) ( f 2 ( θ ) − y ( 2 ) ) ⋮ ( f m ( θ ) − y ( m ) ) ) = 2 J T r \begin{align} \nabla L(\theta) &= \begin{pmatrix} \frac{\partial L}{\partial \theta_1}\\ \frac{\partial L}{\partial \theta_2}\\ \vdots\\ \frac{\partial L}{\partial \theta_n} \end{pmatrix} =2 \begin{pmatrix} \frac{\partial f_1}{\partial \theta_1} & \frac{\partial f_2}{\partial \theta_1} & \cdots&\frac{\partial f_m}{\partial \theta_1}\\ \frac{\partial f_1}{\partial \theta_2} & \frac{\partial f_2}{\partial \theta_2} & \cdots&\frac{\partial f_m}{\partial \theta_2}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial f_1}{\partial \theta_n} & \frac{\partial f_2}{\partial \theta_n} & \cdots&\frac{\partial f_m}{\partial \theta_n} \end{pmatrix} \begin{pmatrix} (f_1(\theta) - y^{(1)})\\ (f_2(\theta) - y^{(2)})\\ \vdots\\ (f_m(\theta) - y^{(m)}) \end{pmatrix} \\ &=2J^Tr \end{align} </math>∇L(θ)=⎝ ⎛∂θ1∂L∂θ2∂L⋮∂θn∂L⎠ ⎞=2⎝ ⎛∂θ1∂f1∂θ2∂f1⋮∂θn∂f1∂θ1∂f2∂θ2∂f2⋮∂θn∂f2⋯⋯⋱⋯∂θ1∂fm∂θ2∂fm⋮∂θn∂fm⎠ ⎞⎝ ⎛(f1(θ)−y(1))(f2(θ)−y(2))⋮(fm(θ)−y(m))⎠ ⎞=2JTr

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> J J </math>J 为 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ; θ ) f(x;\theta) </math>f(x;θ) 关于 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ 的雅可比矩阵, <math xmlns="http://www.w3.org/1998/Math/MathML"> r \mathbf r </math>r 为样本与模型的残差。

接下来我们根据已经求得的梯度,更进一步求海森矩阵的元素 <math xmlns="http://www.w3.org/1998/Math/MathML"> h j k h_{jk} </math>hjk
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> h j k = ∂ 2 L ∂ θ j θ k = ∂ ∂ θ j ( ∑ i = 1 m [ 2 ( f i ( θ ) − y ( i ) ) ∂ f i ∂ θ k ] ) = 2 ∑ i = 1 m ( ∂ f i ∂ θ j ∂ f i ∂ θ k + ( f i ( θ ) − y ( i ) ) ∂ 2 f i ∂ θ j θ k ) \begin{align} h_{jk} &= \frac{\partial^2 L}{\partial\theta_j\theta_k}\\ &=\frac{\partial}{\partial\theta_j}\left(\sum_{i=1}^m\left[2(f_i(\theta) - y^{(i)})\frac{\partial f_i}{\partial\theta_k}\right]\right)\\ &= 2\sum_{i=1}^m \left( \frac{\partial f_i}{\partial\theta_j}\frac{\partial f_i}{\partial\theta_k} + (f_i(\theta) - y^{(i)})\frac{\partial^2 f_i}{\partial\theta_j\theta_k} \right) \end{align} </math>hjk=∂θjθk∂2L=∂θj∂(i=1∑m[2(fi(θ)−y(i))∂θk∂fi])=2i=1∑m(∂θj∂fi∂θk∂fi+(fi(θ)−y(i))∂θjθk∂2fi)

同样的,写成矩阵形式
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H ( θ ) = 2 ( J T J + S ) H(\theta) = 2(J^TJ+S) </math>H(θ)=2(JTJ+S)

其中
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> s i j = ∑ i = 1 m ( f i ( θ ) − y ( i ) ) ∂ 2 f i ∂ θ j θ k s_{ij} = \sum_{i=1}^m(f_i(\theta) - y^{(i)})\frac{\partial^2 f_i}{\partial\theta_j\theta_k} </math>sij=i=1∑m(fi(θ)−y(i))∂θjθk∂2fi

在迭代过程中,由于残差项很小,往往(?)在迭代过程中可以忽略,则我们找到了一个新的矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> J T J J^TJ </math>JTJ 来代替海塞矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> H H </math>H,回归到求解 <math xmlns="http://www.w3.org/1998/Math/MathML"> x \mathbf x </math>x 的问题,得到迭代式
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> x k + 1 = x k − ( J T J ) − 1 J T r \mathbf x_{k+1} = \mathbf x_k -(J^TJ)^{-1} J^T\mathbf r </math>xk+1=xk−(JTJ)−1JTr

拟牛顿法(Quasi-Newton Methods)

由于海塞矩阵矩阵不一定可逆,而且求矩阵逆的复杂度较高,所以引入了拟牛顿法。拟牛顿法其实就是准找可以替代矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) H^{-1}(\mathbf x_k) </math>H−1(xk) 的方法。

我们对 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∇ f ( x ) \nabla f(\mathbf x) </math>∇f(x) 在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x k x_k </math>xk 点处做一阶泰勒展开:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∇ f ( x ) = ∇ f ( x k ) + H ( x k ) ⋅ ( x − x k ) \nabla f(\mathbf x) = \nabla f(\mathbf x_k) + H(\mathbf x_{k})\cdot(\mathbf x-\mathbf x_k) </math>∇f(x)=∇f(xk)+H(xk)⋅(x−xk)

或者说对 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) f(\mathbf x) </math>f(x) 在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x k x_k </math>xk 点处做二阶泰勒展开:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> f ( x ) = f ( x k ) + ( x − x k ) T ∇ f ( x k ) + 1 2 ( x − x k ) T H ( x k ) ( x − x k ) f(\mathbf x) = f(\mathbf x_k) + (\mathbf x-\mathbf x_k)^T\nabla f(\mathbf x_k) + \frac 1 2 (\mathbf x-\mathbf x_k)^TH(\mathbf x_{k})(\mathbf x-\mathbf x_k) </math>f(x)=f(xk)+(x−xk)T∇f(xk)+21(x−xk)TH(xk)(x−xk)

并对其求导。

取 <math xmlns="http://www.w3.org/1998/Math/MathML"> x = x k + 1 \mathbf x = \mathbf x_{k+1} </math>x=xk+1 有:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∇ f ( x k + 1 ) − ∇ f ( x k ) = H ( x k ) ⋅ ( x k + 1 − x k ) \nabla f(\mathbf x_{k+1})-\nabla f(\mathbf x_k) = H(\mathbf x_k)\cdot(\mathbf x_{k+1}-\mathbf x_k) </math>∇f(xk+1)−∇f(xk)=H(xk)⋅(xk+1−xk)

记 <math xmlns="http://www.w3.org/1998/Math/MathML"> y k = ∇ f ( x k + 1 ) − ∇ f ( x k ) \mathbf y_k = \nabla f(\mathbf x_{k+1})-\nabla f(\mathbf x_k) </math>yk=∇f(xk+1)−∇f(xk), <math xmlns="http://www.w3.org/1998/Math/MathML"> δ k = x k + 1 − x k \delta_k = \mathbf x_{k+1}-\mathbf x_k </math>δk=xk+1−xk,有:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> y k = H ( x k ) ⋅ δ k \mathbf y_k = H(\mathbf x_k) \cdot \delta_k </math>yk=H(xk)⋅δk

上式被称为拟牛顿条件 。根据对矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) H^{-1}(\mathbf x_k) </math>H−1(xk) 或者 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x k ) H(\mathbf x_k) </math>H(xk) 估计方法的不同,拟牛顿法可以分为以下的几种:

DFP 变尺度法

DFP 方法采用矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> G ( x k ) G(\mathbf x_k) </math>G(xk) 来对 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) H^{-1}(\mathbf x_k) </math>H−1(xk) 进行近似,最早是由 Davidon 提出,后经 Fletcher 和 Powell 解释和改进,在命名时以三个人名字的首字母命名。

在 DFP 方法中,假设迭代式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = G ( x k ) + Δ G ( x k ) G(\mathbf x_{k+1}) = G(\mathbf x_{k}) + \Delta G(\mathbf x_{k}) </math>G(xk+1)=G(xk)+ΔG(xk)

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> G ( x k ) G(\mathbf x_{k}) </math>G(xk) 是正定的,令
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> Δ G k = α u k u k T + β v k v k T , u k , v k ∈ R n \Delta G_k = \alpha u_ku_k^T + \beta v_kv_k^T, \quad u_k,v_k \in \mathbb R^n </math>ΔGk=αukukT+βvkvkT,uk,vk∈Rn

代入上上式可得
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = G ( x k ) + α u k u k T + β v k v k T G(\mathbf x_{k+1}) = G(\mathbf x_{k}) + \alpha u_ku_k^T + \beta v_kv_k^T </math>G(xk+1)=G(xk)+αukukT+βvkvkT

已知有 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 ( x k ) ⋅ y k = δ k H^{-1}(\mathbf x_k) \cdot \mathbf y_k =\delta_k </math>H−1(xk)⋅yk=δk,则
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ k = G ( x k ) y k + α u k u k T y k + β v k v k T y k = G ( x k ) y k + α ( u k T y k ) u k + β ( v k T y k ) v k \begin{align} \delta_k =& G(\mathbf x_{k})\mathbf y_k + \alpha u_ku_k^T\mathbf y_k + \beta v_kv_k^T\mathbf y_k\\ =& G(\mathbf x_{k})\mathbf y_k + \alpha (u_k^T\mathbf y_k)u_k + \beta (v_k^T\mathbf y_k)v_k \end{align} </math>δk==G(xk)yk+αukukTyk+βvkvkTykG(xk)yk+α(ukTyk)uk+β(vkTyk)vk

可知 <math xmlns="http://www.w3.org/1998/Math/MathML"> u k T y k , v k T y k u_k^T\mathbf y_k,v_k^T\mathbf y_k </math>ukTyk,vkTyk 为数,我们设 <math xmlns="http://www.w3.org/1998/Math/MathML"> u k = r δ k u_k = r\delta_k </math>uk=rδk, <math xmlns="http://www.w3.org/1998/Math/MathML"> v k = θ G ( x k ) y k v_k = \theta G(\mathbf x_k)\mathbf y_k </math>vk=θG(xk)yk,有
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ k = G ( x k ) y k + α ( r δ k T y k ) r δ k + β ( θ y k T G ( x k ) y k ) θ G ( x k ) y k \delta_k = G(\mathbf x_{k})\mathbf y_k+\alpha( r\delta_k^T\mathbf y_k) r\delta_k + \beta (\theta \mathbf y_k^TG(\mathbf x_k)\mathbf y_k)\theta G(\mathbf x_k)\mathbf y_k </math>δk=G(xk)yk+α(rδkTyk)rδk+β(θykTG(xk)yk)θG(xk)yk

整理得:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ( α r 2 ( δ k T y k ) − 1 ) δ k + ( β θ 2 ( y k T G ( x k ) y k ) + 1 ) G ( x k ) y k = 0 (\alpha r^2(\delta_k^T\mathbf y_k)-1)\delta_k+(\beta\theta^2(\mathbf y_k^TG(\mathbf x_k)\mathbf y_k)+1) G(\mathbf x_k)\mathbf y_k=0 </math>(αr2(δkTyk)−1)δk+(βθ2(ykTG(xk)yk)+1)G(xk)yk=0


<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> { α r 2 ( δ k T y k ) = 1 β θ 2 ( y k T G ( x k ) y k ) = − 1 \begin{cases} \alpha r^2(\delta_k^T\mathbf y_k) = 1\\ \beta\theta^2(\mathbf y_k^TG(\mathbf x_k)\mathbf y_k)=-1 \end{cases} </math>{αr2(δkTyk)=1βθ2(ykTG(xk)yk)=−1

最终代入可得
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = G ( x k ) + δ k δ k T δ k T y k − G ( x k ) y k y k T G ( x k ) y k T G ( x k ) y k G(\mathbf x_{k+1}) = G(\mathbf x_k) + \frac{\delta_k\delta_k^T}{\delta_k^T\mathbf y_k} - \frac{G(\mathbf x_k)\mathbf y_k\mathbf y_k^TG(\mathbf x_k)}{\mathbf y_k^TG(\mathbf x_k)\mathbf y_k} </math>G(xk+1)=G(xk)+δkTykδkδkT−ykTG(xk)ykG(xk)ykykTG(xk)

BFGS 方法

BFGS 算法采用矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> B ( x k ) B(\mathbf x_k) </math>B(xk) 来对 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x k ) H(\mathbf x_k) </math>H(xk) 进行近似,采取上节 DFP 方法的推导方法,可得
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> B ( x k + 1 ) = B ( x k ) + y k y k T y k T δ k − B ( x k ) δ k δ k T B ( x k ) δ k T B ( x k ) δ k B(\mathbf x_{k+1}) = B(\mathbf x_k) + \frac{\mathbf y_k\mathbf y_k^T}{\mathbf y_k^T\delta_k} - \frac{B(\mathbf x_k)\delta_k \delta_k^TB(\mathbf x_k)}{\delta_k^TB(\mathbf x_k)\delta_k} </math>B(xk+1)=B(xk)+ykTδkykykT−δkTB(xk)δkB(xk)δkδkTB(xk)

可记 <math xmlns="http://www.w3.org/1998/Math/MathML"> G ( x k ) = B ( x k ) − 1 G(\mathbf x_{k})=B(\mathbf x_{k})^{-1} </math>G(xk)=B(xk)−1,那么有
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = ( B ( x k ) + y k y k T y k T δ k − B ( x k ) δ k δ k T B ( x k ) δ k T B ( x k ) δ k ) − 1 G(\mathbf x_{k+1})=\left(B(\mathbf x_k) + \frac{\mathbf y_k\mathbf y_k^T}{\mathbf y_k^T\delta_k} - \frac{B(\mathbf x_k)\delta_k \delta_k^TB(\mathbf x_k)}{\delta_k^TB(\mathbf x_k)\delta_k}\right)^{-1} </math>G(xk+1)=(B(xk)+ykTδkykykT−δkTB(xk)δkB(xk)δkδkTB(xk))−1

本式可以运用 Sherman-Morrison-Woodbury 公式求解

Sherman-Morrison-Woodbury 公式是一种矩阵求逆的方法,公式如下:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ( A + U C V ) − 1 = A − 1 − A − 1 U V A − 1 C − 1 + V A − 1 U (A+UCV)^{-1} = A^{-1}-\frac{A^{-1}UVA^{-1}}{C^{-1}+VA^{-1}U} </math>(A+UCV)−1=A−1−C−1+VA−1UA−1UVA−1

还有一个向量版的,叫 Sherman-Morrison 公式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ( A + u v T ) − 1 = A − 1 − A − 1 u v T A − 1 1 + v T A − 1 u (A+uv^{T})^{-1} = A^{-1}-\frac{A^{-1}uv^{T}A^{-1}}{1+v^{T}A^{-1}u} </math>(A+uvT)−1=A−1−1+vTA−1uA−1uvTA−1

经过上面两个计算的不停的折腾(完整推倒过程可以 点这里 ),求解得:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = ( I − δ k y k T y k T δ k ) G ( x k ) ( I − y k δ k T y k T δ k ) + δ k δ k T y k T δ k G(\mathbf x_{k+1}) = (I-\frac{\delta_k\mathbf y_k^T}{\mathbf y^T_k\delta_k}) G(\mathbf x_{k}) (I-\frac{\mathbf y_k\delta_k^T}{\mathbf y^T_k\delta_k})+\frac{\delta_k\delta_k^T}{\mathbf y^T_k\delta_k} </math>G(xk+1)=(I−ykTδkδkykT)G(xk)(I−ykTδkykδkT)+ykTδkδkδkT

令 <math xmlns="http://www.w3.org/1998/Math/MathML"> ρ = 1 y k T δ k \rho = \frac 1 {\mathbf y^T_k\delta_k} </math>ρ=ykTδk1,可以得出最终的 BFGS 方法的迭代方程:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> G ( x k + 1 ) = ( I − ρ δ k y k T ) G ( x k ) ( I − ρ y k δ k T ) + ρ δ k δ k T G(\mathbf x_{k+1}) = (I-\rho{\delta_k\mathbf y_k^T}) G(\mathbf x_{k}) (I-\rho{\mathbf y_k\delta_k^T})+\rho{\delta_k\delta_k^T} </math>G(xk+1)=(I−ρδkykT)G(xk)(I−ρykδkT)+ρδkδkT

L-BFGS 算法

这个算法的英文全称为Limited-memory BFGS(或 Limited-storage BFGS),意思就是上面的 BFGS 方法同样需要消耗计算机的很多计算能力,于是需要一个简洁版的算法。这个 L-BFGS 算法就是这个意思。

想看的看下面这个博客

liuxiaofei.com.cn/blog/lbfgs%...

相关推荐
因特麦克斯9 分钟前
每日一题&智能指针
数据结构·算法·leetcode
蹉跎x19 分钟前
力扣104. 二叉树的最大深度
算法·leetcode·职场和发展
gaogao_jack21 分钟前
[Leetcode小记] 3233. 统计不是特殊数字的数字数量
java·算法·leetcode
zzzhpzhpzzz35 分钟前
设计模式——解释器模式
算法·设计模式·解释器模式
一只鸡某1 小时前
实习冲刺第二十九天
数据结构·c++·算法·leetcode
ZZZ_O^O1 小时前
【贪心算法入门第一题——860.柠檬水找零】
学习·算法·leetcode·贪心算法
Easy数模2 小时前
竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】
python·算法·数学建模
向宇it2 小时前
【unity小技巧】Unity 四叉树算法实现空间分割、物体存储并进行查询和碰撞检测
开发语言·算法·游戏·unity·游戏引擎
无限大.2 小时前
冒泡排序(结合动画进行可视化分析)
算法·排序算法
走向自由3 小时前
Leetcode 最长回文子串
数据结构·算法·leetcode·回文·最长回文