梯度下降法(Gradient Descent)
定义
梯度下降法(gradient descent)或最速下降法(steepest descent)是求解无约束最优化问题的一种最常用的方法,具有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。
目标函数
假设
f
(
x
)
f({\bm x})
f(x)是
R
n
\mathbb{R}^n
Rn上具有一阶连续偏导数的函数。要求解的无约束最优化问题是:
min
x
∈
R
n
f
(
x
)
\min_{{\bm x} \in \mathbb{R}^n} f({\bm x})
x∈Rnminf(x)
x
∗
{\bm x}^*
x∗表示目标函数
f
(
x
)
f({\bm x})
f(x)的极小点。
迭代过程
梯度下降法是一种迭代算法。选取适当的初值 x ( 0 ) {\bm x}^{(0)} x(0),不断迭代,更新 x {\bm x} x的值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新 x {\bm x} x的值,从而达到减少函数值的目的。
泰勒展开
由于
f
(
x
)
f({\bm x})
f(x)具有一阶连续偏导数,若第
k
k
k次迭代值为
x
(
k
)
{\bm x}^{(k)}
x(k),则可将
f
(
x
)
f({\bm x})
f(x)在
x
(
k
)
{\bm x}^{(k)}
x(k)附近进行一阶泰勒展开:
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
f({\bm x}) = f({\bm x}^{(k)}) + {\bm g}_k^{\rm T} ({\bm x} - {\bm x}^{(k)})
f(x)=f(x(k))+gkT(x−x(k))
这里,
g
k
=
∇
f
(
x
(
k
)
)
{\bm g}_k = \nabla f({\bm x}^{(k)})
gk=∇f(x(k))为
f
(
x
)
f({\bm x})
f(x)在
x
(
k
)
{\bm x}^{(k)}
x(k)的梯度。
更新公式
求出第
k
+
1
k+1
k+1次迭代值
x
(
k
+
1
)
{\bm x}^{(k+1)}
x(k+1):
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
k
{\bm x}^{(k+1)} = {\bm x}^{(k)} + \lambda_k {\bm p}_k
x(k+1)=x(k)+λkpk
其中,
p
k
{\bm p}_k
pk是搜索方向,取负梯度方向
p
k
=
−
∇
f
(
x
(
k
)
)
{\bm p}_k = -\nabla f({\bm x}^{(k)})
pk=−∇f(x(k)),
λ
k
\lambda_k
λk是步长,
最小化条件
f
(
x
(
k
+
1
)
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
(
k
+
1
)
−
x
(
k
)
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
(
k
+
1
)
−
x
(
k
)
)
=
f
(
x
(
k
)
)
−
λ
k
∥
g
k
∥
2
\begin{aligned} f({\bm x}^{(k+1)}) &= f({\bm x}^{(k)}) + {\bm g}_k^{\rm T} ({\bm x}^{(k+1)} - {\bm x}^{(k)})\\ &= f({\bm x}^{(k)}) + {\bm g}_k^{\rm T} ({\bm x}^{(k+1)} - {\bm x}^{(k)})\\ &= f({\bm x}^{(k)}) - \lambda_k \|{\bm g}_k\|^2 \end{aligned}
f(x(k+1))=f(x(k))+gkT(x(k+1)−x(k))=f(x(k))+gkT(x(k+1)−x(k))=f(x(k))−λk∥gk∥2
由于
λ
k
∥
g
k
∥
2
⩾
0
\lambda_k \|{\bm g}_k\|^2 \geqslant 0
λk∥gk∥2⩾0,因此
f
(
x
(
k
+
1
)
)
⩽
f
(
x
(
k
)
)
f({\bm x}^{(k+1)}) \leqslant f({\bm x}^{(k)})
f(x(k+1))⩽f(x(k)) 。
精确一维搜索
由一维搜索确定,即
λ
k
\lambda_k
λk使得:
f
(
x
(
k
)
+
λ
k
p
k
)
=
min
λ
⩾
0
f
(
x
(
k
)
+
λ
p
k
)
f({\bm x}^{(k)} + \lambda_k {\bm p}_k) = \min_{\lambda \geqslant 0} f({\bm x}^{(k)} + \lambda {\bm p}_k)
f(x(k)+λkpk)=λ⩾0minf(x(k)+λpk)
梯度下降法(Gradient Descent)
(1) 取初始值
x
(
0
)
∈
R
n
{\bm x}^{(0)} \in \mathbb{R}^n
x(0)∈Rn,置
k
=
0
k = 0
k=0。
(2) 计算
f
(
x
(
k
)
)
f({\bm x}^{(k)})
f(x(k))。
(3) 计算梯度
g
k
=
∇
f
(
x
(
k
)
)
{\bm g}_k = \nabla f({\bm x}^{(k)})
gk=∇f(x(k)),当
∥
g
k
∥
<
ϵ
\| {\bm g}_k \| < \epsilon
∥gk∥<ϵ时,停止迭代,令
x
∗
=
x
(
k
)
{\bm x}^* = {\bm x}^{(k)}
x∗=x(k);否则,令
p
k
=
−
∇
f
(
x
(
k
)
)
{\bm p}_k = -\nabla f({\bm x}^{(k)})
pk=−∇f(x(k)),求
λ
k
\lambda_k
λk,使
f
(
x
(
k
)
+
λ
k
p
k
)
=
min
λ
⩾
0
f
(
x
(
k
)
+
λ
p
k
)
f({\bm x}^{(k)} + \lambda_k {\bm p}_k) = \min_{\lambda \geqslant 0} f({\bm x}^{(k)} + \lambda {\bm p}_k)
f(x(k)+λkpk)=λ⩾0minf(x(k)+λpk)
(4) 置
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
k
{\bm x}^{(k+1)} = {\bm x}^{(k)} + \lambda_k {\bm p}_k
x(k+1)=x(k)+λkpk,计算
f
(
x
(
k
+
1
)
)
f({\bm x}^{(k+1)})
f(x(k+1))。
当
∥
f
(
x
(
k
+
1
)
)
−
f
(
x
(
k
)
)
∥
<
ϵ
\| f({\bm x}^{(k+1)}) - f({\bm x}^{(k)}) \| < \epsilon
∥f(x(k+1))−f(x(k))∥<ϵ或
∥
x
(
k
+
1
)
−
x
(
k
)
∥
<
ϵ
\| {\bm x}^{(k+1)} - {\bm x}^{(k)} \| < \epsilon
∥x(k+1)−x(k)∥<ϵ时,停止迭代,令
x
∗
=
x
(
k
+
1
)
{\bm x}^* = {\bm x}^{(k+1)}
x∗=x(k+1)。
(5) 否则,置
k
=
k
+
1
k = k + 1
k=k+1,转(3)。
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。
解释
- 初始化:选择一个初始点 x ( 0 ) {\bm x}^{(0)} x(0)并设置迭代计数器 k = 0 k = 0 k=0。
- 计算函数值:计算当前点 x ( k ) {\bm x}^{(k)} x(k)的函数值 f ( x ( k ) ) f({\bm x}^{(k)}) f(x(k))。
- 计算梯度:计算当前点
x
(
k
)
{\bm x}^{(k)}
x(k)的梯度
g
k
=
g
(
x
(
k
)
)
{\bm g}_k = g({\bm x}^{(k)})
gk=g(x(k))。
- 如果梯度的模小于给定的阈值 ε \varepsilon ε,则停止迭代,并将当前点作为解 x ∗ {\bm x}^* x∗。
- 否则,确定搜索方向 p k = − g ( x ( k ) ) {\bm p}_k = -g({\bm x}^{(k)}) pk=−g(x(k)),并找到步长 λ k \lambda_k λk,使得函数值最小。
- 更新点:更新点
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
k
{\bm x}^{(k+1)} = {\bm x}^{(k)} + \lambda_k {\bm p}_k
x(k+1)=x(k)+λkpk,并计算新的函数值
f
(
x
(
k
+
1
)
)
f({\bm x}^{(k+1)})
f(x(k+1))。
- 如果函数值的变化或点的变化小于给定的阈值 ε \varepsilon ε,则停止迭代,并将当前点作为解 x ∗ {\bm x}^* x∗。
- 迭代:继续迭代,直到满足停止条件。
通过这些步骤,梯度下降法逐步逼近函数的极小值点。
算法步骤
算法 A.1(梯度下降法)
- 输入:目标函数 f ( x ) f({\bm x}) f(x),梯度函数 g ( x ) = ∇ f ( x ) g({\bm x}) = \nabla f({\bm x}) g(x)=∇f(x),计算精度 ϵ \epsilon ϵ;
- 输出: f ( x ) f({\bm x}) f(x)的极小点 x ∗ {\bm x}^* x∗。
总结
- 梯度下降法 是一种迭代算法,通过不断更新参数 x {\bm x} x来最小化目标函数 f ( x ) f({\bm x}) f(x)。
- 搜索方向 通常选择负梯度方向 p k = − ∇ f ( x ( k ) ) {\bm p}_k = -\nabla f({\bm x}^{(k)}) pk=−∇f(x(k))。
- 步长 λ k \lambda_k λk通过一维搜索确定,以确保每次迭代都能有效减少函数值。
- 收敛条件 通常是当梯度的模小于某个阈值 ϵ \epsilon ϵ时停止迭代。