想要理解梯度下降,我们需要先认识梯度这一概念。首先回顾一下偏微分。对于函数
z
=
f
(
x
,
y
)
z = f(x,y)
z=f(x,y)自变量取值
(
x
0
,
y
0
)
(x_0, y_0)
(x0,y0)时,偏导数
f
x
(
x
0
,
y
0
)
f_x(x_0, y_0)
fx(x0,y0)和
f
y
(
x
0
,
y
0
)
f_y(x_0, y_0)
fy(x0,y0)表示
f
f
f在
x
x
x轴与
y
y
y轴方向上的变化率。而
z
=
f
(
x
0
,
y
0
)
z = f(x_0, y_0)
z=f(x0,y0)在其它方向
u
=
<
u
1
,
u
2
>
\mathbf u = <u_1, u_2>
u=<u1,u2>上的变化率则可通过计算
f
f
f的方向导数
D
u
f
(
x
0
,
y
0
)
D_{\mathbf u}f(x_0, y_0)
Duf(x0,y0)得到。方向导数公式如下:
D
u
f
(
x
0
,
y
0
)
=
f
x
(
x
0
,
y
0
)
u
1
+
f
y
(
x
0
,
y
0
)
u
2
D_{\mathbf u}f(x_0, y_0) = f_x(x_0, y_0)u_1 + f_y(x_0, y_0)u_2
Duf(x0,y0)=fx(x0,y0)u1+fy(x0,y0)u2
其中,
u
\mathbf u
u是单位向量,即
∥
u
∥
=
1
\Vert \mathbf u \Vert = 1
∥u∥=1。
z
=
f
(
x
0
,
y
0
)
z = f(x_0, y_0)
z=f(x0,y0)在方向
u
\mathbf u
u上的变化率,即
f
f
f在
x
x
x轴方向上的变化率乘以
u
1
u_1
u1和
f
f
f在
y
y
y轴方向上的变化率乘以
u
2
u_2
u2的组合。上式可改写成向量的形式:
D
u
f
(
x
0
,
y
0
)
=
<
f
x
(
x
0
,
y
0
)
,
f
y
(
x
0
,
y
0
)
>
⋅
<
u
1
,
u
2
>
D_{\mathbf u}f(x_0, y_0) = <f_x(x_0, y_0), f_y(x_0, y_0)>\centerdot<u_1, u_2>
Duf(x0,y0)=<fx(x0,y0),fy(x0,y0)>⋅<u1,u2>
由此,我们将得到梯度向量的定义。函数
z
=
f
(
x
,
y
)
z = f(x, y)
z=f(x,y)在
(
x
0
,
y
0
)
(x_0, y_0)
(x0,y0)处的梯度:
▽
f
(
x
0
,
y
0
)
=
<
f
x
(
x
0
,
y
0
)
,
f
y
(
x
0
,
y
0
)
>
\bigtriangledown f(x_0, y_0) = <f_x(x_0, y_0), f_y(x_0, y_0)>
▽f(x0,y0)=<fx(x0,y0),fy(x0,y0)>
梯度有个重要的性质需要牢记,即梯度的方向始终指向函数
f
f
f上升最快的方向,即
z
z
z值增大最快的方向。
P
r
o
o
f
:
\mathcal Proof:
Proof:
D
u
f
(
x
0
,
y
0
)
=
<
f
x
(
x
0
,
y
0
)
,
f
y
(
x
0
,
y
0
)
>
⋅
<
u
1
,
u
2
>
=
▽
f
(
x
0
,
y
0
)
⋅
u
=
∥
▽
f
(
x
0
,
y
0
)
∥
∥
u
∥
cos
(
θ
)
D_{\mathbf u}f(x_0, y_0) = <f_x(x_0, y_0), f_y(x_0, y_0)>\centerdot<u_1, u_2> = \bigtriangledown f(x_0, y_0) \centerdot \mathbf u = \Vert \bigtriangledown f(x_0, y_0) \Vert \Vert \mathbf u \Vert \cos(\theta)
Duf(x0,y0)=<fx(x0,y0),fy(x0,y0)>⋅<u1,u2>=▽f(x0,y0)⋅u=∥▽f(x0,y0)∥∥u∥cos(θ)
当 u \mathbf u u指向与梯度方向相同时( θ = 0 , cos ( θ ) = 1 \theta = 0, \cos(\theta) = 1 θ=0,cos(θ)=1),又因为 ∥ u ∥ = 1 \Vert \mathbf u \Vert = 1 ∥u∥=1,方向导数取得最大值 ∥ ▽ f ( x 0 , y 0 ) ∥ \Vert \bigtriangledown f(x_0, y_0) \Vert ∥▽f(x0,y0)∥。此处,我们回忆一下一元微积分。当一个函数在 x x x轴方向上某处的导数为正时,是否函数在该处递增呢?答案是肯定的,在多元微积分中,同样适用。因此,梯度的方向始终指向函数 f f f上升最快的方向。
梯度下降则是利用梯度的反向去求函数的极小值。给定一个学习率
α
\alpha
α和初始的
θ
\theta
θ值,逐步更新目标函数
J
(
θ
)
J(\theta)
J(θ)中的自变量
θ
\theta
θ。每次更新得到一个较先前更小的函数值,逐渐逼近极小值。
θ
\theta
θ更新公式如下:
θ
j
:
=
θ
j
−
α
∂
J
(
θ
)
∂
θ
j
\theta_j := \theta_j - \alpha \frac {\partial J(\theta)}{\partial \theta_j}
θj:=θj−α∂θj∂J(θ)
将上式写成向量形式,即: θ = θ − α < J θ 1 , J θ 2 , … , J θ n > = θ − α ▽ J ( θ ) \theta = \theta - \alpha<J_{\theta_1}, J_{\theta_2}, \dots, J_{\theta_n}> = \theta - \alpha \bigtriangledown J(\theta) θ=θ−α<Jθ1,Jθ2,…,Jθn>=θ−α▽J(θ)。