前言
作为一种经典的优化方法, 梯度下降广泛应用于问题的最小值计算,其中可以通过等式(1)达到改变权重的目的(这里以二维变量为例):
w
k
+
1
=
w
k
−
η
∂
L
(
w
)
∂
w
(1)
{\bf w_{k+1}}={\bf w_k}-\eta\frac{\partial L({\bf w})}{\partial {\bf w}}\tag{1}
wk+1=wk−η∂w∂L(w)(1)
式中
η
\eta
η是学习率,
k
k
k代表第
k
k
k步迭代,
L
(
w
)
L(w)
L(w)是关于变量
w
{\bf w}
w的代价函数,
w
=
[
w
1
,
w
2
]
T
{\bf w}=[w_1, w_2]^T
w=[w1,w2]T,一个二维列向量。
假设现在需要计算
m
i
n
L
(
w
)
min L({\bf w})
minL(w),现在通过梯度下降来求解最优值
w
∗
{\bf w^*}
w∗,即:
w
∗
=
arg min
w
L
(
w
)
{\bf w^*}=\argmin_{{\bf w}} L({\bf w})
w∗=wargminL(w)
如上图所示,给定目标函数以及一个初始点,横坐标为变量
w
1
w_1
w1,纵坐标为变量
w
2
w_2
w2,好比我们在一座山上,要找到山的最低点,那么在有限的视野范围内我们只能是看到哪里比当前位置低那么我们就往哪走,这样我们总能到达山的最低点(这里假设山只有全局最低点)。这里同样的道理,红色的圆圈是该点的视野,圆心是当前所在位置,我们在圈内观察,移动到视野范围内的最低点,即完成一次迭代。如此迭代下去,就能到达图中最低点,找到目标函数的最小值。
那现在的问题是如何在一定的视野范围内找到最小值?
数学推导
首先先复习一下一元泰勒公式:假设任意给定的函数
f
(
x
)
f(x)
f(x)在
x
=
x
0
x=x_0
x=x0处可微,那么就可以将该函数展开为:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
f
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
⋯
f(x) = f(x_0) + f^{'}(x_0)(x-x_0)+\frac {f^{''}(x_0)}{2!}(x-x_0)^2+\cdots
f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯
因为当n的阶次较高时,
lim
x
→
x
0
(
x
−
x
0
)
n
→
0
,
\lim_{x \to x_0}(x-x_0)^{n}\to0,
limx→x0(x−x0)n→0,,所以:
f
(
x
)
≈
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x) \approx f(x_0) + f^{'}(x_0)(x-x_0)
f(x)≈f(x0)+f′(x0)(x−x0)
同理二元泰勒公式可表示为:
f
(
x
,
y
)
≈
f
(
x
0
,
y
0
)
+
∂
f
(
x
0
,
y
0
)
∂
x
(
x
−
x
0
)
+
∂
f
(
x
0
,
y
0
)
∂
y
(
y
−
y
0
)
f(x, y) \approx f(x_0, y_0)+ \frac{\partial f(x_0, y_0)}{\partial x}(x-x_0)+\frac{\partial f(x_0, y_0)}{\partial y}(y-y_0)
f(x,y)≈f(x0,y0)+∂x∂f(x0,y0)(x−x0)+∂y∂f(x0,y0)(y−y0)
那么假如要将目标函数展开成二元泰勒公式,那么图中的视野范围的半径必须足够小才能满足
(
w
1
,
w
2
)
(w_1, w_2)
(w1,w2)无限趋近于初始点
(
a
0
,
b
0
)
(a_0, b_0)
(a0,b0)条件,因此,目标函数可以表示为:
L
(
w
1
,
w
2
)
=
L
(
a
0
,
b
0
)
+
∂
L
(
a
0
,
b
0
)
∂
w
1
(
w
1
−
a
0
)
+
∂
L
(
a
0
,
b
0
)
∂
w
2
(
w
2
−
b
0
)
L(w_1, w_2)=L(a_0, b_0)+ \frac{\partial L(a_0,b_0)}{\partial w_1}(w_1-a_0)+\frac{\partial L(a_0, b_0)}{\partial w_2}(w_2-b_0)
L(w1,w2)=L(a0,b0)+∂w1∂L(a0,b0)(w1−a0)+∂w2∂L(a0,b0)(w2−b0)
L
(
w
1
,
w
2
)
=
c
+
u
(
w
1
−
a
0
)
+
v
(
w
2
−
b
0
)
(2)
L(w_1, w_2)=c+ u(w_1-a_0)+v(w_2-b_0)\tag{2}
L(w1,w2)=c+u(w1−a0)+v(w2−b0)(2)现在的问题转换成在圆圈内寻找变量
w
1
w_1
w1和
w
2
w_2
w2使得
L
(
w
1
,
w
2
)
L(w_1, w_2)
L(w1,w2)最小
假设
Δ
w
1
=
w
1
−
a
0
\Delta w_1=w_1-a_0
Δw1=w1−a0,
Δ
w
2
=
w
2
−
b
0
\Delta w_2=w_2-b_0
Δw2=w2−b0,那么目标函数可以进一步简化为:
L
(
w
1
,
w
2
)
=
c
+
u
Δ
w
1
+
v
Δ
w
2
(3)
L(w_1, w_2)=c+ u\Delta w_1+v\Delta w_2\tag{3}
L(w1,w2)=c+uΔw1+vΔw2(3)等式(3)中
c
c
c为常数,故对于求解最小值无影响,将等式(3)改写为:
L
(
w
1
,
w
2
)
=
u
Δ
w
1
+
v
Δ
w
2
(4)
L(w_1, w_2)=u\Delta w_1+v\Delta w_2\tag{4}
L(w1,w2)=uΔw1+vΔw2(4)
L
(
w
1
,
w
2
)
=
[
Δ
w
1
Δ
w
2
]
[
u
v
]
(5)
L(w_1, w_2)= \begin{bmatrix} \Delta w_1 & \Delta w_2 \end{bmatrix} \begin{bmatrix}u \\ v \end{bmatrix}\tag{5}
L(w1,w2)=[Δw1Δw2][uv](5)
L
(
w
)
=
Δ
w
T
g
(6)
L({\bf {w}})= \Delta {\bf{w}^T} {\bf{g}}\tag{6}
L(w)=ΔwTg(6)由等式(6)可知,目标函数转换成两个向量内积,进一步将等式(6)改写为:
L
(
w
)
=
∣
Δ
w
T
∣
∣
g
∣
cos
θ
(7)
L({\bf {w}})= \lvert \Delta {\bf{w}^T} \rvert \lvert{\bf{g}} \rvert \cos\theta\tag{7}
L(w)=∣ΔwT∣∣g∣cosθ(7) 其中
θ
\theta
θ表示两个向量的夹角,
∣
g
∣
\lvert{\bf{g}} \rvert
∣g∣表示目标函数
L
(
w
)
L({\bf {w}})
L(w)在点
(
a
0
,
b
0
)
(a_0,b_0)
(a0,b0)关于
w
1
w_1
w1和
w
2
w_2
w2的偏微分构成的向量的模,因为已知点的坐标,因此
∣
g
∣
\lvert{\bf{g}} \rvert
∣g∣为定值。要使得
L
(
w
)
L({\bf {w}})
L(w)最小,只有当
cos
θ
=
−
1
\cos\theta=-1
cosθ=−1,
∣
Δ
w
T
∣
\lvert \Delta {\bf{w}^T} \rvert
∣ΔwT∣取最大值时,
L
(
w
)
L({\bf {w}})
L(w)才有最小值。
因为
Δ
w
\Delta {\bf{w}}
Δw中的
Δ
w
1
\Delta w_1
Δw1和
Δ
w
2
\Delta w_2
Δw2表示的是圆内一点到圆心的距离,因此只有当这一点在圆上时,
∣
Δ
w
T
∣
\lvert \Delta {\bf{w}^T} \rvert
∣ΔwT∣才有最大值,且为圆的半径
r
r
r;
cos
θ
=
−
1
\cos\theta=-1
cosθ=−1时,
θ
\theta
θ=
π
\pi
π,即向量
Δ
w
\Delta {\bf{w}}
Δw与向量
g
{\bf{g}}
g反向。
综上所述,因为向量
Δ
w
\Delta {\bf{w}}
Δw与向量
g
{\bf{g}}
g反向,所以
Δ
w
\Delta {\bf{w}}
Δw可以用
g
{\bf{g}}
g表示为:
Δ
w
=
[
Δ
w
1
Δ
w
2
]
=
−
η
[
u
v
]
=
−
η
g
\Delta {\bf{w}}= \begin{bmatrix} \Delta w_1 \\ \Delta w_2 \end{bmatrix}= - \eta\begin{bmatrix}u \\ v \end{bmatrix}=-\eta{\bf{g}}
Δw=[Δw1Δw2]=−η[uv]=−ηg所以:
Δ
w
=
[
w
1
−
a
0
w
2
−
b
0
]
=
−
η
[
u
v
]
\Delta {\bf{w}}= \begin{bmatrix} w_1-a_0 \\ w_2-b_0\end{bmatrix}= - \eta\begin{bmatrix}u \\ v \end{bmatrix}
Δw=[w1−a0w2−b0]=−η[uv]
{
w
1
−
a
0
=
−
η
u
w
2
−
b
0
=
−
η
v
\left\{\begin{array}{c} w_1-a_0 = -\eta u \\ w_2-b_0= - \eta v \\ \end{array} \right.
{w1−a0=−ηuw2−b0=−ηv
{
w
1
=
a
0
−
η
u
w
2
=
b
0
−
η
v
(8)
\left\{\begin{array}{c} w_1= a_0-\eta u \\ w_2=b_0 - \eta v \end{array} \right.\tag{8}
{w1=a0−ηuw2=b0−ηv(8)
因为
a
0
,
b
0
a_0, b_0
a0,b0是开始迭代的初始点,因此可以将等式(8)改写为
{
w
1
k
+
1
=
w
1
k
−
η
u
w
2
k
+
1
=
w
2
k
−
η
v
(9)
\left\{\begin{array}{c} w_{1}^{k+1}=w_{1}^{k} -\eta u \\ w_2^{k+1}=w_{2}^{k} - \eta v \end{array} \right.\tag{9}
{w1k+1=w1k−ηuw2k+1=w2k−ηv(9)式中
w
k
w^{k}
wk表示第
k
k
k次的
w
w
w的大小,
w
k
+
1
w^{k+1}
wk+1表示第
k
+
1
k+1
k+1次的
w
w
w的大小
即:
w
k
+
1
=
w
k
−
η
g
(10)
{\bf w_{k+1}}={\bf w_k}-\eta{\bf{g}}\tag{10}
wk+1=wk−ηg(10)
w
k
+
1
=
w
k
−
η
(
∂
L
(
a
0
,
b
0
)
∂
w
1
∂
L
(
a
0
,
b
0
)
∂
w
2
)
(11)
{\bf w_{k+1}}={\bf w_k}-\eta\begin{pmatrix} \frac{\partial L(a_0,b_0)}{\partial w_1}\\ \frac{\partial L(a_0,b_0)}{\partial w_2} \end{pmatrix}\tag{11}
wk+1=wk−η(∂w1∂L(a0,b0)∂w2∂L(a0,b0))(11)
w
k
+
1
=
w
k
−
η
∂
L
(
w
)
∂
w
(12)
{\bf w_{k+1}}={\bf w_k}-\eta\frac{\partial L({\bf w})}{\partial {\bf w}}\tag{12}
wk+1=wk−η∂w∂L(w)(12)等式(12)与等式(1)相等,等式(12)恰好就是梯度下降中权重更新的公式。因为这个公式是有二元泰勒公式推导而来,因此必须满足的大前提是:等式(8)中的
w
1
−
a
0
w_1-a_0
w1−a0、
w
2
−
b
0
w_2-b_0
w2−b0足够小,即圆的半径足够小。推广到
k
k
k次迭代,即
lim
w
k
=
w
k
+
1
(13)
\lim{\bf w_k} = {\bf w_{k+1}}\tag{13}
limwk=wk+1(13)由等式(12)可知,欲满足等式(13)的要求,那么学习率
η
\eta
η必须很小,才能满足二元泰勒公式的条件。因此使用梯度下降计算时学习率
η
\eta
η至关重要,同时也要根据实际情况进行调节以保证目标函数更快达到最优值。
直观理解
如上图所示,以一元函数为例,因为变量只有一个,所以函数某一点的梯度就等于该点处的一阶导数(图中使用该点处的斜率表示),并且假设该函数只有全局最小值,没有局部最小值。
如图a所示,若初始点为
A
A
A,最小值点为
B
B
B,因此想要到达最小值点最直观的方法就是从初始点的位置逐步向左移动靠近
B
B
B,因此该过程可以表示为:
θ
=
θ
2
−
c
(14)
\theta=\theta_2-c\tag{14}
θ=θ2−c(14)式(14)中
c
c
c表示表示每一次左移的距离,由图可知,距离
c
c
c可以表示为:
c
=
k
y
2
c=ky_2
c=ky2,
k
k
k表示该点的斜率,
y
2
y_2
y2表示初始点的y坐标,因此式(14)可以改写为:
θ
=
θ
2
−
k
y
2
(15)
\theta=\theta_2-ky_2\tag{15}
θ=θ2−ky2(15)因为是不断向左移动,因此不太可能只移动一次就达到
B
B
B,故需要进行迭代,式(15)表示为:
θ
k
+
1
=
θ
k
−
η
⋅
g
r
a
d
(16)
\theta^{k+1}=\theta^{k}-\eta \cdot grad\tag{16}
θk+1=θk−η⋅grad(16)式(16)中
η
\eta
η与
y
2
y_2
y2对应,表示当前点的y坐标值;
g
r
a
d
grad
grad与斜率
k
k
k对应。
同理,在图b中,初始点为
A
A
A,最小值点为
B
B
B,因此想要到达最小值点最直观的方法就是从初始点的位置逐步向右移动靠近
B
B
B,因此该过程可以表示为:
θ
=
θ
2
+
c
(17)
\theta=\theta_2+c\tag{17}
θ=θ2+c(17)式(17)中
c
c
c同样表示距离,假如仍然使用斜率表示的话需要添加一个负号,因为距离不可能是负值,因此距离
c
c
c可以表示为:
c
=
−
k
y
2
c=-ky_2
c=−ky2,代入到式(17)可以改写为:
θ
=
θ
2
−
k
y
2
(18)
\theta=\theta_2-ky_2\tag{18}
θ=θ2−ky2(18)式(18)同理可以表示为式(16)
重写式(16),如下所示:
θ
k
+
1
=
θ
k
−
η
⋅
g
r
a
d
\theta^{k+1}=\theta^{k}-\eta \cdot grad
θk+1=θk−η⋅grad式(16)与式(1)非常相似,只是式(16)中的
η
\eta
η表示的不是学习率,而是当前点的y坐标值。由图可知,假如当前点的y坐标很大,由斜率计算出来的距离
c
c
c可能就会很大,可能一次迭代就已经超过了最小值点,因此仅从这点来看y的值不能太大,需要适当的y坐标值才能步步逼近最小值点,当然也不能太小,太小的话逼近最小值点的速度会很慢。这一层面的性质和学习率很相似,因此此种方法有助于理解梯度下降法,但并不完全相同,因为在梯度下降法并不要求y的坐标值很小,只是要求学习率很小。
[1]李宏毅深度学习视频
[2]机器学习及其应用