http://www.cnblogs.com/gongxijun/p/5890548.html
https://blog.youkuaiyun.com/u012795120/article/details/83862284
梯度下降法(Gradient Descent)或最速下降法(Steepest Descent)是求解无约束最优化问题的一种最常用的方法,有实现简单的有点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。
设
f
(
x
)
f(x)
f(x)是
R
n
R^n
Rn上具有一阶连续偏导数
的函数。要求解的无约束最优化问题是
m
i
n
x
∈
R
n
f
(
x
)
\underset{x\in R^{n}}{min} \quad f(x)
x∈Rnminf(x)
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
)
)
)
f(x)=f(x^{(k)}+g_k^T(x-x^{(k)}))
f(x)=f(x(k)+gkT(x−x(k)))
这里,
g
k
=
g
(
x
(
k
)
)
=
▽
f
(
x
(
k
)
)
g_k=g(x^{(k)})=\bigtriangledown 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}
xk+1:
x
k
+
1
←
x
k
+
λ
k
p
k
x^{k+1} \leftarrow x^{k}+\lambda_{k}p_{k}
xk+1←xk+λkpk
其中,
p
k
p_k
pk是搜索方向,取负梯度方向
p
k
=
−
▽
f
(
x
(
k
)
)
p_k=-\bigtriangledown 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
)
f(x^{(k)}+\lambda_kp_k)=\underset{\lambda \geqslant 0}{min} f(x^{(k)}+\lambda p_k)
f(x(k)+λkpk)=λ⩾0minf(x(k)+λpk)
梯度下降法算法如下:
输入:目标函数 f ( x ) f(x) f(x),梯度函数 g ( x ) = ▽ f ( x ) g(x)=\bigtriangledown f(x) g(x)=▽f(x),计算精度 ε \varepsilon ε;
输出: 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
∣
∣
<
ε
||g_k||<\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
)
=
m
i
n
λ
⩾
0
f
(
x
(
k
)
+
λ
p
k
)
f(x^{(k)}+\lambda_kp_k)=\underset{\lambda\geqslant 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(xk+1)
当
∣
∣
f
(
x
(
k
+
1
)
)
−
f
(
x
(
k
)
)
∣
∣
<
ε
||f(x^{(k+1)})-f(x^{(k)})||<\varepsilon
∣∣f(x(k+1))−f(x(k))∣∣<ε或
∣
∣
x
(
k
+
1
)
−
x
(
k
)
∣
∣
<
ε
||x^{(k+1)}-x^{(k)}||<\varepsilon
∣∣x(k+1)−x(k)∣∣<ε时,表示满足计算精度
ε
\varepsilon
ε,则停止迭代,令
x
∗
=
x
k
+
1
x^*=x^{k+1}
x∗=xk+1
(5)否则,置
k
=
k
+
1
k=k+1
k=k+1,转(3).
当目标函数是凸函数
时,梯度下降法的解是全局最优解
。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。