与公众号同步更新,详细内容及相关ipynb文件在公众号中,公众号:AI入门小白
梯度下降法(gradient descent) 或最速下降法(steepest descent) 是求解无约束最优化问题的一种最常用的方法,具有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。
假设
f
(
x
)
f(x)
f(x)是
R
n
R^n
Rn上具有一阶连续偏导数的函数。要求解的无约束最优化问题是
min
x
∈
R
n
f
(
x
)
(A.1)
\min_{x \in R^n} f(x) \quad \tag{A.1}
x∈Rnminf(x)(A.1)
x
∗
x^*
x∗表示目标函数
f
(
x
)
f(x)
f(x)的极小点。
梯度下降法是一种选代算法。选取适当的初值 x ( 0 ) x^{(0)} x(0),不断迭代,更新 x x x的值,进行目标函数的极小化, 直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新 x x x的值,从而达到减少函数值的目的。
由于
f
(
x
)
f(x)
f(x)具有一阶连续偏导数,若第
k
k
k次迭代值为
x
(
k
)
x^{(k)}
x(k),则可将
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)附近进行一阶泰勒展开:
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
(A.2)
f(x) = f(x^{(k)}) + g_k^T (x - x^{(k)}) \quad \tag{A.2}
f(x)=f(x(k))+gkT(x−x(k))(A.2)
这里,
g
k
=
g
(
x
(
k
)
)
=
▽
f
(
x
(
k
)
)
g_k = g(x^{(k)}) = \triangledown f(x^{(k)})
gk=g(x(k))=▽f(x(k))为
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)的梯度。
求出第
k
+
1
k + 1
k+1次迭代值
x
(
k
+
1
)
x^{(k+1)}
x(k+1):
x
(
k
+
1
)
←
x
(
k
)
+
λ
k
p
k
(A.3)
x^{(k+1)} \leftarrow x^{(k)} + \lambda_k p_k \quad \tag{A.3}
x(k+1)←x(k)+λkpk(A.3)
其中,
p
k
p_k
pk是搜索方向,取负梯度方向
p
k
=
−
▽
f
(
x
(
k
)
)
,
λ
k
p_k = -\triangledown f(x^{(k)}), \lambda_k
pk=−▽f(x(k)),λk是步长,由一维搜索确定,即
λ
k
\lambda_k
λk使得
f
(
x
(
k
)
+
λ
k
p
k
)
=
min
λ
≥
0
f
(
x
(
k
)
+
λ
p
k
)
(A.4)
f(x^{(k)} + \lambda_k p_k) = \min_{\lambda \geq 0} f(x^{(k)} + \lambda p_k) \quad \tag{A.4}
f(x(k)+λkpk)=λ≥0minf(x(k)+λpk)(A.4)
算法A.1(梯度下降法)
输入:目标函数
f
(
x
)
f(x)
f(x),梯度函数
g
(
x
)
=
▽
f
(
x
)
g(x) = \triangledown f(x)
g(x)=▽f(x),计算精度
ε
\varepsilon
ε;
输出:f(x)的极小点
x
∗
x^*
x∗。
(1)取初始值
x
(
0
)
∈
R
n
x^{(0)} \in R^n
x(0)∈Rn,置
k
=
0
k = 0
k=0。
(2)计算
f
(
x
(
k
)
)
f(x^{(k)})
f(x(k))。
(3)计算梯度
g
k
=
g
(
x
(
k
)
)
g_k = g(x^{(k)})
gk=g(x(k)),当
∥
g
k
∥
<
ε
\lVert g_k\rVert < \varepsilon
∥gk∥<ε时,停止迭代,令
x
∗
=
x
(
k
)
x^* = x^{(k)}
x∗=x(k);否则,令
p
k
=
−
g
(
x
(
k
)
)
p_k = -g(x^{(k)})
pk=−g(x(k)),求
λ
k
\lambda_k
λk,使
f
(
x
(
k
)
+
λ
k
p
k
)
=
min
λ
≥
0
f
(
x
(
k
)
+
λ
p
k
)
f(x^{(k)} + \lambda_k p_k) = \min_{\lambda \geq 0} f(x^{(k)} + \lambda p_k)
f(x(k)+λkpk)=λ≥0minf(x(k)+λpk)
(4)置
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
p
k
x^{(k+1)} = x^{(k)} + \lambda_k p_k
x(k+1)=x(k)+λkpk,计算
f
(
x
(
k
+
1
)
)
f(x^{(k+1)})
f(x(k+1))
当
∥
f
(
x
(
k
+
1
)
)
−
f
(
x
(
k
)
)
∥
<
ε
\lVert f(x^{(k+1)})-f(x^{(k)}) \rVert < \varepsilon
∥f(x(k+1))−f(x(k))∥<ε或
∥
x
(
k
+
1
)
−
x
(
k
)
∥
<
ε
\lVert x^{(k+1)} - x^{(k)} \rVert < \varepsilon
∥x(k+1)−x(k)∥<ε时,停止迭代,令
x
∗
=
x
(
k
+
1
)
x^* = x^{(k+1)}
x∗=x(k+1)。
(5)否则,置
k
=
k
+
1
k=k+1
k=k+1,转(3)。
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。
数据来源:统计学习方法(第二版)