本课程来自深度之眼,部分截图来自课程视频以及李航老师的《统计学习方法》第二版。
公式输入请参考:在线Latex公式
梯度下降法是一种迭代算法。选取适当的初值
x
0
x^0
x0,不断迭代,更新
x
x
x的值,进行目标函数的极小化,直到收敛。这个方法应该大部分人都很熟悉,在NG和李宏毅的课程里面都有涉及,提几个点。
1.这个方法什么时候不适用
2.多个极值点的情况是否能保证一定会找到最优点:当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。
下面直接看例子
例子
上图是函数
f
(
x
)
=
(
x
−
1
)
2
+
0.5
f(x)=(x-1)^2+0.5
f(x)=(x−1)2+0.5,使用GD计算其最小值,步长
η
=
0.2
\eta=0.2
η=0.2,初始点
x
0
=
5
x^0=5
x0=5
- 求导
f ′ ( x ) = 2 ( x − 1 ) f'(x)=2(x-1) f′(x)=2(x−1) - 计算初始位置
x
0
=
5
x_0=5
x0=5的梯度
f ′ ( x 0 ) = 2 ( x 0 − 1 ) = 2 ( 5 − 1 ) = 8 f'(x^0)=2(x^0-1)=2(5-1)=8 f′(x0)=2(x0−1)=2(5−1)=8 - 根据步长更新下一个位置
x
1
x^1
x1
x 1 = x 0 − f ′ ( x 0 ) η = 5 − 8 × 0.2 = 3.4 x^1=x^0-f'(x^0)\eta=5-8\times0.2=3.4 x1=x0−f′(x0)η=5−8×0.2=3.4 - 计算当前位置
x
1
x_1
x1的梯度
f ′ ( x 1 ) = 2 ( x 1 − 1 ) = 2 ( 3.4 − 1 ) = 4.8 f'(x^1)=2(x^1-1)=2(3.4-1)=4.8 f′(x1)=2(x1−1)=2(3.4−1)=4.8 - 根据步长更新下一个位置
x
2
x_2
x2
x 2 = x 1 − f ′ ( x 1 ) η = 3.4 − 4.8 × 2 = 2.44 x^2=x^1-f'(x^1)\eta=3.4-4.8\times2=2.44 x2=x1−f′(x1)η=3.4−4.8×2=2.44
不断重复,直到梯度
f
′
(
x
)
f'(x)
f′(x)很小很小后停止
GD数学表示
输入:目标函数
f
(
x
)
f(x)
f(x),梯度函数
g
(
x
)
=
Δ
f
(
x
)
g(x)=\Delta f(x)
g(x)=Δf(x),计算精度
ϵ
\epsilon
ϵ,步长
η
\eta
η。
输出:
f
(
x
)
f(x)
f(x)的极小值点
x
∗
x^*
x∗。
(1)取初始值
x
0
∈
R
n
x^0\in R^n
x0∈Rn,取
k
=
0
k=0
k=0
(2)计算
f
(
x
k
)
f(x^k)
f(xk)
(3)计算梯度
g
k
=
g
(
x
(
k
)
)
g_k=g(x^{(k)})
gk=g(x(k)),当
∣
∣
g
k
∣
∣
<
ϵ
||g_k||<\epsilon
∣∣gk∣∣<ϵ时,停止迭代,否则,
x
k
+
1
=
x
k
−
η
∗
g
k
x^{k+1}=x^k-\eta*g_k
xk+1=xk−η∗gk,重新转至步骤2
总结
1.梯度下降法在每一步时计算当前位置的梯度,由此明白该往什么方向走能够使函数值下降。
2.参数步长决定了每步走的幅度。太大最后接近极值后不容易收敛,太小接近极值要花很多时间。