简介:梯度下降法(gradient descent)或最速下降法(steepest descent)是求解无约束最优化问题的一种最常用的方法,具有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。
假设
f
(
x
)
f(x)
f(x)是
R
n
R^n
Rn上具有一阶连续偏导数的函数。要求解的无约束最优化问题是
m
i
n
x
∈
R
n
f
(
x
)
(A.1)
\underset{x\in{R^n}}{min}f(x)\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的值,进行目标函数的极小化,直到收敛。
由
于
负
梯
度
方
向
是
使
函
数
值
下
降
最
快
的
方
向
,
\color{red}由于负梯度方向是使函数值下降最快的方向,
由于负梯度方向是使函数值下降最快的方向,
在
迭
代
的
每
一
步
,
以
负
梯
度
方
向
更
新
x
的
值
,
从
而
达
\color{red}在迭代的每一步,以负梯度方向更新x的值,从而达
在迭代的每一步,以负梯度方向更新x的值,从而达
到
减
少
函
数
值
的
目
的
。
\color{red}到减少函数值的目的。
到减少函数值的目的。
由于
f
(
x
)
f(x)
f(x)具有一阶偏导数,若第
k
k
k次迭代值为
x
k
x^{k}
xk,则可将
f
(
x
)
f(x)
f(x)在
x
k
x^{k}
xk附近进行一阶泰勒展开:
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
(A.2)
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})\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)})=\nabla 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_kp_k\tag{A.3}
xk+1←x(k)+λkpk(A.3)
其中,
p
k
p_k
pk是搜索方向,取负梯度方向
p
k
=
−
∇
f
(
x
(
k
)
)
p_k=-\nabla f(x^{(k)})
pk=−∇f(x(k)),
λ
k
\lambda_k
λk是步长,由一维搜索确定,即
λ
k
\lambda_k
λk使得
f
(
x
(
k
)
+
λ
k
p
k
)
=
m
i
n
λ
≥
0
f
(
x
(
k
)
+
λ
p
k
)
(A.4)
f(x^{(k)}+\lambda_kp_k)=\underset{\lambda\geq 0}{min}f(x^{(k)}+\lambda p_k)\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)=\nabla f(x)
g(x)=∇f(x),计算精度
ϵ
\epsilon
ϵ;
输出:
f
(
x
)
f(x)
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\lVert<\epsilon
∥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
)
=
m
i
n
λ
≥
0
f
(
x
(
k
)
+
λ
p
k
)
f(x^{(k)}+\lambda_kp_k)=\underset{\lambda\geq 0}{min}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_kp_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)})\lVert<\epsilon
∥f(x(k+1))−f(x(k))∥<ϵ或
∥
x
(
k
+
1
)
−
x
(
k
)
∥
<
ϵ
\lVert x^{(k+1)}-x^{(k)}\lVert<\epsilon
∥x(k+1)−x(k)∥<ϵ时,停止迭代,令
x
∗
=
x
(
x
+
1
)
x^*=x^{(x+1)}
x∗=x(x+1)。
(5)否则,置
k
=
k
+
1
k=k+1
k=k+1,转(3)。
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。
举例:
J
(
θ
)
=
θ
1
2
+
θ
2
2
J(\theta)=\theta_1^2+\theta_2^2
J(θ)=θ12+θ22
θ
0
=
(
1
,
3
)
\theta^0=(1,3)
θ0=(1,3),学习率
α
=
0.1
\alpha=0.1
α=0.1,
∇
J
(
θ
)
=
(
2
θ
1
,
2
θ
2
)
\nabla J(\theta)=(2\theta_1,2\theta_2)
∇J(θ)=(2θ1,2θ2)
进行多次迭代:
θ
0
=
(
1
,
3
)
\theta^0=(1,3)
θ0=(1,3);
θ
1
=
θ
0
−
α
∇
J
(
θ
0
)
\theta^1=\theta^0-\alpha \nabla J(\theta^0)
θ1=θ0−α∇J(θ0)
=
(
1
,
3
)
−
0.1
(
2
,
6
)
=(1,3)-0.1(2,6)
=(1,3)−0.1(2,6)
=
(
0.8
,
2.4
)
=(0.8,2.4)
=(0.8,2.4)
θ
2
=
θ
1
−
α
∇
J
(
θ
1
)
\theta^2=\theta^1-\alpha \nabla J(\theta^1)
θ2=θ1−α∇J(θ1)
=
(
0.8
,
2.4
)
−
0.1
(
1.6
,
4.8
)
=(0.8,2.4)-0.1(1.6,4.8)
=(0.8,2.4)−0.1(1.6,4.8)
=
(
0.64
,
1.92
)
=(0.64,1.92)
=(0.64,1.92)
.
.
.
.
.
.
......
......
摘录自《统计学习方法》
d y d x \frac{\mathrm{d} y }{\mathrm{d} x} dxdy