最速下降法
最速下降法(Steepest Descent Method)是一种基于负梯度方向进行迭代的最优化算法,用于寻找一个函数的最小值。该方法也被称为梯度下降法,是一种迭代的一阶优化算法。
算法的基本思想是从当前点出发,沿着当前点的负梯度方向,以一定的步长(学习率)移动到新的点,重复这个过程直至达到停止条件。
下面是最速下降法的基本步骤:
- 给出 x 0 ∈ R n , 0 ⩽ ε ≪ 1 , k : = 0 x_0\in\mathbf{R}^n,0\leqslant\varepsilon\ll1,k:=0 x0∈Rn,0⩽ε≪1,k:=0
- 计算 d k = − g k d^k=-g_k dk=−gk;如果 ∥ g k ∥ ⩽ ε \|g_k\|\leqslant\varepsilon ∥gk∥⩽ε,停止
- 由线性搜索求步长因子 λ k \lambda_k λk
- 计算 x k + 1 = x k + λ k d k x_{k+1}=x_k+\lambda_kd^k xk+1=xk+λkdk
- k : = k + 1 k:=k+1 k:=k+1,转步 2
最速下降法的优点是简单易理解,容易实现。然而,它可能在某些情况下收敛速度较慢。
在实践中,有一些改进的方法,如共轭梯度法、牛顿法等,可以在某些情况下加速收敛。最速下降法常被视为这些更高级方法的基础。
对于正定二次函数
f
(
x
)
=
1
2
x
T
G
x
+
q
T
x
+
r
f(x)=\frac{1}{2}x^{T}Gx+q^{T}x+r
f(x)=21xTGx+qTx+r
其中 G ∈ R n × n G\in\mathbf{R}^{n\times n} G∈Rn×n 正定矩阵, q ∈ R n q\in\mathbf{R}^n q∈Rn, r ∈ R r\in\mathbf{R} r∈R
由精确一维线搜索确定的步长
λ
k
=
−
(
g
k
)
T
d
k
(
d
k
)
T
G
d
k
.
\lambda_k=-\frac{\left(g_k\right)^Td^k}{\left(d^k\right)^TGd^k}.
λk=−(dk)TGdk(gk)Tdk.
证明: g ( x ) = G x + q , G ( x ) = G g(x)=Gx+q,G(x)=G g(x)=Gx+q,G(x)=G,其中 G ∈ R n × n G\in\mathbf{R}^{n\times n} G∈Rn×n正定。
由精确一维线搜索确定的步长
λ
k
=
min
λ
>
0
φ
(
λ
)
=
f
(
x
k
+
λ
d
k
)
\lambda_k=\min\limits_{\lambda >0}\varphi(\lambda)=f(x^k+\lambda d^k)
λk=λ>0minφ(λ)=f(xk+λdk),满足
0
=
φ
′
(
λ
k
)
=
∇
f
(
x
k
+
λ
k
d
k
)
T
d
k
=
(
G
(
x
k
+
λ
k
d
k
)
+
q
)
T
d
k
0=\varphi^{\prime}(\lambda_{k})=\nabla f(x^{k}+\lambda_{k}d^{k})^{\mathrm{T}}d^{k}=\left(G(x^{k}+\lambda_{k}d^{k})+q\right)^{T}d^{k}
0=φ′(λk)=∇f(xk+λkdk)Tdk=(G(xk+λkdk)+q)Tdk
=
(
G
x
k
+
q
)
T
d
k
+
λ
k
(
d
k
)
T
G
d
k
=
g
k
T
d
k
+
λ
k
(
d
k
)
T
G
d
k
,
=\left(Gx^{k}+q\right)^{T}d^{k}+\lambda_{k}\left(d^{k}\right)^{T}Gd^{k}=g_{k}^{T}d^{k}+\lambda_{k}(d^{k})^{T}Gd^{k},
=(Gxk+q)Tdk+λk(dk)TGdk=gkTdk+λk(dk)TGdk,
所以
λ
k
=
−
(
g
k
)
T
d
k
(
d
k
)
T
G
d
k
.
\lambda_{k}=-\frac{(g_{k})^{T}d^{k}}{(d^{k})^{T}G\:d^{k}}.
λk=−(dk)TGdk(gk)Tdk.
注意:由于
d
k
=
−
g
k
d^k=-g_k
dk=−gk,所以
λ
k
=
(
g
k
)
T
g
k
(
g
k
)
T
G
g
k
.
\lambda_{k}=\frac{\left(g_{k}\right)^{T}g_{k}}{\left(g_{k}\right)^{T}G\:g_{k}}.
λk=(gk)TGgk(gk)Tgk.
那么,利用采用精确一维线搜索的最速下降法求解目标函数为正定二次函数的无约束极小化问题,迭代格式为:
x
k
+
1
=
x
k
−
(
g
k
)
T
g
k
(
g
k
)
T
G
g
k
g
k
.
x^{k+1}=x^{k}-\frac{\left(g_{k}\right)^{T}g_{k}}{\left(g_{k}\:\right)^{T}G\:g_{k}}g_{k}.
xk+1=xk−(gk)TGgk(gk)Tgkgk.
示例
利用采用精确一维线搜索的最速下降法求解,其中初始点
x
0
=
(
2
,
1
)
T
x^0=(2,1)^T
x0=(2,1)T
min
f
(
x
)
=
1
2
x
1
2
+
x
2
2
\min f(x)=\frac{1}{2}x_1^2 + x_2^2
minf(x)=21x12+x22
解: 下述为前两步的计算过程,后面通过数学归纳求解
g
(
x
)
=
(
x
1
,
2
x
2
)
T
,
G
(
x
)
=
[
1
0
0
2
]
>
0
g
0
=
g
(
x
0
)
=
(
2
,
2
)
T
x
1
=
x
0
+
λ
0
d
0
=
x
0
−
(
g
0
)
T
g
0
(
g
0
)
T
G
g
0
g
0
=
[
2
1
]
−
8
12
[
2
2
]
=
1
3
[
2
−
1
]
g
1
=
g
(
x
1
)
=
1
3
(
2
,
−
2
)
T
x
2
=
x
1
+
λ
1
d
1
=
x
1
−
(
g
1
)
T
g
1
(
g
1
)
T
G
g
1
g
1
=
1
3
[
2
−
1
]
−
2
9
[
2
−
2
]
=
(
1
3
)
2
[
2
(
−
1
)
2
]
g
2
=
g
(
x
2
)
=
1
9
(
2
,
2
)
T
\begin{aligned} & g(x) = (x_1, 2x_2)^T, G(x) = \begin{bmatrix} 1 & 0 \\ 0 & 2 \\ \end{bmatrix} > 0 \\ & g_0 = g(x^0) = (2, 2)^T \\ & x^1 = x^0 + \lambda_0 d^0 = x^0 - \frac{(g_0)^Tg_0}{(g_0)^TGg_0}g_0= \begin{bmatrix} 2 \\ 1 \\ \end{bmatrix} - \frac{8}{12} \begin{bmatrix} 2 \\ 2 \\ \end{bmatrix} = \frac{1}{3} \begin{bmatrix} 2 \\ -1 \\ \end{bmatrix} \\ & g_1 = g(x^1) = \frac{1}{3}(2, -2)^T \\ & x^2 = x^1 + \lambda_1 d^1 = x^1 - \frac{(g_1)^Tg_1}{(g_1)^TGg_1}g_1 = \frac{1}{3} \begin{bmatrix} 2 \\ -1 \\ \end{bmatrix} - \frac{2}{9} \begin{bmatrix} 2 \\ -2 \\ \end{bmatrix} = (\frac{1}{3})^2 \begin{bmatrix} 2 \\ (-1)^2 \\ \end{bmatrix} \\ & g_2 = g(x^2) = \frac{1}{9}(2, 2)^T \end{aligned}
g(x)=(x1,2x2)T,G(x)=[1002]>0g0=g(x0)=(2,2)Tx1=x0+λ0d0=x0−(g0)TGg0(g0)Tg0g0=[21]−128[22]=31[2−1]g1=g(x1)=31(2,−2)Tx2=x1+λ1d1=x1−(g1)TGg1(g1)Tg1g1=31[2−1]−92[2−2]=(31)2[2(−1)2]g2=g(x2)=91(2,2)T
类似计算并归纳可得迭代点列为 x k = ( 1 3 ) k [ 2 ( − 1 ) k ] x^k=(\frac{1}{3})^k\begin{bmatrix}2 \\ (-1)^k\end{bmatrix} xk=(31)k[2(−1)k]
当 k → ∞ k\to\infty k→∞ 时,有 x k → x ∗ = ( 0 , 0 ) T . x^k\to x^*=(0,0)^T. xk→x∗=(0,0)T.
牛顿法
- 选取初始数据。取初始点 x 0 x_0 x0,终止误差 ε > 0 \varepsilon>0 ε>0,令 k : = 0. k:=0. k:=0.
- 计算 g k g_k gk,若 ∥ g k ∥ ⩽ ε \|g_k\|\leqslant \varepsilon ∥gk∥⩽ε,算法终止,输出 x k . x_k. xk.
- 计算 G k G_k Gk,并由牛顿方程 d k = − G k − 1 g k d_k=-G_k^{-1}g_k dk=−Gk−1gk 解出 d k . d_k. dk.
- 令 x k + 1 : = x k + λ k d k , k : = k + 1 x_{k+1}:=x_k+\lambda_kd_k,k:=k+1 xk+1:=xk+λkdk,k:=k+1,转步 2
迭代公式:
x
k
+
1
=
x
k
−
G
k
−
1
g
k
x_{k+1}=x_k-G_k^{-1}g_k
xk+1=xk−Gk−1gk
阻尼牛顿法
-
选取初始数据。取初始点 x 0 x_0 x0,终止误差 ε > 0 \varepsilon>0 ε>0,令 k : = 0. k:=0. k:=0.
-
计算 g k g_k gk,若 ∥ g k ∥ ⩽ ε \|g_k\|\leqslant \varepsilon ∥gk∥⩽ε,算法终止,输出 x k . x_k. xk.
-
计算 G k G_k Gk,并由牛顿方程 d k = − G k − 1 g k d_k=-G_k^{-1}g_k dk=−Gk−1gk 解出 d k . d_k. dk.
-
由线搜索计算步长 λ k \lambda_{k} λk 使得
f ( x k + λ k d k ) = min α ⩾ 0 f ( x k + λ k d k ) f(x_{k}+\lambda_{k}d_{k})=\min_{\alpha\geqslant0}f(x_{k}+\lambda_{k}d_{k}) f(xk+λkdk)=α⩾0minf(xk+λkdk) -
令 x k + 1 : = x k + λ k d k , k : = k + 1 x_{k+1}:=x_k+\lambda_kd_k,k:=k+1 xk+1:=xk+λkdk,k:=k+1,转步 2
迭代公式:
x
k
+
1
=
x
k
−
λ
k
G
k
−
1
g
k
x_{k+1}=x_k-\lambda_kG_k^{-1}g_k
xk+1=xk−λkGk−1gk
示例
利用阻尼牛顿法求 f ( x 1 , x 2 ) = x 1 2 + 2 x 2 2 − 4 x 1 − 2 x 1 x 2 f(x_1,x_2) = x_1^2+2x_2^2-4x_1-2x_1x_2 f(x1,x2)=x12+2x22−4x1−2x1x2 的极小值,取 x 0 = ( 1 , 1 ) T x_0 = (1,1)^T x0=(1,1)T
解:
g
(
x
)
=
[
2
x
1
−
4
−
2
x
2
,
4
x
2
−
2
x
1
]
T
,
G
(
x
)
=
[
2
−
2
−
2
4
]
,
G
−
1
=
[
1
1
2
1
2
1
2
]
x
0
=
(
1
,
1
)
T
,
g
0
=
[
−
4
,
2
]
T
,
d
0
=
−
G
−
1
g
0
=
[
3
,
1
]
T
φ
(
λ
0
)
=
f
(
x
0
+
λ
0
d
0
)
=
f
(
1
+
3
λ
0
,
1
+
λ
0
)
=
5
λ
0
2
−
10
λ
0
−
3
,
φ
′
(
λ
0
)
=
10
λ
0
−
10
=
0
,
λ
0
=
1
x
1
=
x
0
−
λ
0
d
0
=
(
1
,
1
)
T
+
(
3
,
1
)
T
=
(
4
,
2
)
T
\begin{aligned} & g(x)=[2x_1-4-2x_2,4x_2-2x_1]^T,~ G(x)=\begin{bmatrix} 2 & -2 \\ -2 & 4 \end{bmatrix},~ G^{-1}=\begin{bmatrix} 1 & \frac{1}{2} \\ \frac{1}{2} & \frac{1}{2} \end{bmatrix} \\ & x_0 = (1,1)^T,~ g_0 = [-4,2]^T,~ d_0 = -G^{-1}g_0 = [3,1]^T \\\\ & \varphi(\lambda_0)=f(x_{0}+\lambda _0d_{0})=f(1+3\lambda_0,1+\lambda_0)=5\lambda_0^{2}-10\lambda_0-3,\\\\ & \varphi^{\prime}(\lambda_0)=10\lambda_0-10=0,~ \lambda_{0}=1 \\\\ & x_1 = x_0 - \lambda_{0}d_0 = (1,1)^T + (3,1)^T = (4,2)^T \\ \end{aligned}
g(x)=[2x1−4−2x2,4x2−2x1]T, G(x)=[2−2−24], G−1=[1212121]x0=(1,1)T, g0=[−4,2]T, d0=−G−1g0=[3,1]Tφ(λ0)=f(x0+λ0d0)=f(1+3λ0,1+λ0)=5λ02−10λ0−3,φ′(λ0)=10λ0−10=0, λ0=1x1=x0−λ0d0=(1,1)T+(3,1)T=(4,2)T
最终得出 x = ( 4 , 2 ) T , min f ( x ) = − 8 x = (4, 2)^T,~~~ \min f(x) = -8 x=(4,2)T, minf(x)=−8
最小二乘问题
目标函数
min
q
(
x
)
=
1
2
∣
∣
A
x
−
b
∣
∣
2
\min \: q(x) = \frac{1}{2}||Ax-b||^2
minq(x)=21∣∣Ax−b∣∣2
其中 A A A 是一个矩阵, x x x 和 b b b 是向量。这个目标函数是为了找到一个向量 x x x,使得 A x Ax Ax 尽可能接近 b b b。以下是化简过程:
首先,我们知道向量的模长公式为
∣
∣
v
∣
∣
=
v
T
v
||v|| = \sqrt{v^Tv}
∣∣v∣∣=vTv,所以我们可以将目标函数写为:
q
(
x
)
=
1
2
(
A
x
−
b
)
T
(
A
x
−
b
)
q(x) = \frac{1}{2}(Ax-b)^T(Ax-b)
q(x)=21(Ax−b)T(Ax−b)
接下来,我们展开右边的项:
q
(
x
)
=
1
2
(
x
T
A
T
A
x
−
x
T
A
T
b
−
b
T
A
x
+
b
T
b
)
q(x) = \frac{1}{2}(x^TA^TAx - x^TA^Tb - b^TAx + b^Tb)
q(x)=21(xTATAx−xTATb−bTAx+bTb)
注意到,
x
T
A
T
b
x^TA^Tb
xTATb 和
b
T
A
x
b^TAx
bTAx 是共轭转置的关系,同时等于一个标量,所以相等,因此可以合并成一项。这样就可以得到:
q
(
x
)
=
1
2
x
T
A
T
A
x
−
b
T
A
x
+
1
2
b
T
b
q(x) = \frac{1}{2}x^TA^TAx - b^TAx + \frac{1}{2}b^Tb
q(x)=21xTATAx−bTAx+21bTb
这就是化简后的目标函数。
要最小化这个目标函数,我们需要对它求导并令其等于0。具体步骤如下:
∇
q
(
x
)
=
A
T
A
x
−
A
T
b
=
0
\nabla q(x) = A^TAx - A^Tb = 0
∇q(x)=ATAx−ATb=0
解这个方程,可以得到最优解
x
∗
x^*
x∗
x
∗
=
(
A
T
A
)
−
1
A
T
b
x^* = (A^TA)^{-1}A^Tb
x∗=(ATA)−1ATb
这就是其化简过程以及如何找到最小值