一 前言
Gradient Descent 大家都耳熟能详,即使是刚接触机器学习不到一周的初学者也早已经听过了梯度下降的大名,让每个人解释什么是Gradient Descent,大家多多少少也能说出来,但是背后的数学推理相信大家很少见到,在这里小编就毛遂自荐,尽自己所能说一说Gradient Descent 的公式是如何推理出来的。在本文中梯度、局部最优、全剧最优、鞍点等等一些基本的知识就不说了,相信大家心中都有大致的轮廓。
二 泰勒级数展开 Talyor Series
说梯度下降之前我们先来说一说泰勒级数,泰勒展开在微积分中我们是学过的。
现假设有一个一元函数 h(x),该函数在
x
=
x
0
x = x_0
x=x0附近可无限微分的话,此时我们可以在该点对函数进行泰勒展开 (注意这个前提,
x
x
x需要尽可能的接近
x
0
x_0
x0),展开的结果如下图所示:
展开后,二阶及更高阶导的部分统称余项,记为:
σ
(
x
−
x
0
)
\sigma(x - x_0)
σ(x−x0) 余项是一个无穷小量,一般不考虑,所以我们直接写成:
h
(
x
)
≈
h
(
x
0
)
+
h
(
x
0
)
′
(
x
−
x
0
)
h(x) \approx h(x_0) + h(x_0)'(x - x_0)
h(x)≈h(x0)+h(x0)′(x−x0)。从几何意义上来理解,泰勒公式是利用多项式函数来逼近原函数,由于多项式函数可以任意次求导,易于计算,且便于求解极值或者判断函数的性质。
上面说的是一元函数的泰勒级数展开,其实多元函数的泰勒级数展开是一样的,示意图如下:
上面举的是一个二元函数的例子,同样我们只保留到一阶偏导的部分,剩余的部分略去。这里再次强调该二元函数能够使用泰勒级数进行展开的前提,那就是(x, y) 需要在 (
x
0
,
y
0
x_0, y_0
x0,y0)的附近一个很小的邻域内。
三 公式推导
假设现在我们的损失函数有两个参数分别为
θ
1
\theta_1
θ1,
θ
2
\theta_2
θ2,也就是说loss 函数可以写成
L
(
θ
1
,
θ
2
)
L(\theta_1, \theta_2)
L(θ1,θ2) 的形式,在平面上画出loss 函数的等高线,如下图右侧所示,现在我们在等高线图中任意选择一个点(a, b) 作为初始点,以该点为圆心,以一个很小的长度为半径画圆,接下来我们要做的是在圆中选择一个点,从圆心走向这个点,从而使得loss下降,然后在以这个新的点为圆心画圆,不断重复之前的步骤,这样不断的前行,最终到达loss最低的点。
这里的loss函数是一个二元函数,并且以(a, b)为原点,足够小的距离为半径画圆,满足泰勒展开的条件,因此我们在选定的 (a, b) 这个点将函数进行泰勒展开,公式如下:
L
(
θ
)
≈
L
(
a
,
b
)
+
∂
L
(
a
,
b
)
∂
θ
1
(
θ
1
−
a
)
+
∂
L
(
a
,
b
)
∂
θ
2
(
θ
2
−
b
)
L(\theta) \approx L(a, b) + \frac{\partial L(a, b)}{\partial \theta_1} (\theta_1 - a) + \frac{\partial L(a, b)}{\partial \theta_2} (\theta_2 - b)
L(θ)≈L(a,b)+∂θ1∂L(a,b)(θ1−a)+∂θ2∂L(a,b)(θ2−b)
|
|
上面的公式中很多都是常量,我们可以暂时用字母来表示:L(a, b) 表示在(a, b)的损失值,显然是一个常数,我们用 s 表示,
∂
L
(
a
,
b
)
∂
θ
1
\frac{\partial L(a, b)}{\partial \theta_1}
∂θ1∂L(a,b) 表示损失函数
L
L
L对
θ
1
\theta_1
θ1的偏导数在 (a, b) 点的取值,
∂
L
(
a
,
b
)
∂
θ
2
\frac{\partial L(a, b)}{\partial \theta_2}
∂θ2∂L(a,b) 表示损失函数
L
L
L对
θ
2
\theta_2
θ2的偏导数在 (a, b) 点的取值,这两个显然也是常数,我们分别用
u
,
v
u, v
u,v 表示。现在函数可以简化成下面的形式:
L
(
θ
1
,
θ
2
)
≈
s
+
u
(
θ
1
−
a
)
+
v
(
θ
2
−
b
)
L(\theta_1, \theta_2) \approx s + u(\theta_1 - a) + v(\theta_2 - b)
L(θ1,θ2)≈s+u(θ1−a)+v(θ2−b)
问题也就转换为:在 ( θ 1 − a ) 2 (\theta_1 - a)^2 (θ1−a)2 + ( θ 2 − b ) 2 (\theta_2 - b)^2 (θ2−b)2 ⩽ d \leqslant d ⩽d 的圆内找到一组 θ 1 , θ 2 \theta_1, \theta_2 θ1,θ2,使得上面函数的值最小。
为了便于观察,我们进一步化简:令 Δ θ 1 = θ 1 − a , Δ θ 2 = θ 2 − b \Delta\theta_1 = \theta_1 - a, \Delta\theta_2 = \theta_2 - b Δθ1=θ1−a,Δθ2=θ2−b, 故 原式转换为: L ( θ 1 , θ 2 ) ≈ s + u Δ θ 1 + v Δ θ 2 L(\theta_1, \theta_2) \approx s + u\Delta\theta_1 + v\Delta\theta_2 L(θ1,θ2)≈s+uΔθ1+vΔθ2,我们要做的就是让 L ( θ 1 , θ 2 ) L(\theta_1, \theta_2) L(θ1,θ2)的值尽可能的小,其中s是一个常数,不考虑, u Δ θ 1 + v Δ θ 2 u\Delta\theta_1 + v\Delta\theta_2 uΔθ1+vΔθ2的值才是我们需要关注的。
假设现在有两个向量a = (u, v),b = ( Δ θ 1 , Δ θ 2 \Delta\theta_1, \Delta\theta_2 Δθ1,Δθ2),不难发现,我们之前要算的 u Δ θ 1 + v Δ θ 2 u\Delta\theta_1 + v\Delta\theta_2 uΔθ1+vΔθ2的值,不就是这两个向量的内积吗!!!!,要使得这个内积尽可能的小,则向量b = ( Δ θ 1 , Δ θ 2 \Delta\theta_1, \Delta\theta_2 Δθ1,Δθ2)的方向就需要和向量a = (u, v)的方向相反,并且向量b的长度尽可能的长 (那就是圆的半径呀!)
所以 [ Δ θ 1 , Δ θ 2 ] [\Delta\theta_1, \Delta\theta_2] [Δθ1,Δθ2]和 [ u , v ] [u, v] [u,v]之间就有如下图下方所示的关系 (latex写矩阵太麻烦了,就不写了,大家直接看下图吧),稍稍做一下变换就可以得到 [ θ 1 , θ 2 [ [\theta_1, \theta_2[ [θ1,θ2[和 [ u , v ] [u, v] [u,v]之间的关系,其中 η \eta η是两个向量长度的比值。
仔细观察上图中最下方
(
Δ
θ
1
,
Δ
θ
2
)
(\Delta\theta_1, \Delta\theta_2)
(Δθ1,Δθ2)和
(
u
,
v
)
(u, v)
(u,v)的公式,这里的(u, v)我们之前不是说过是常量,所以我们为了简便替换过来了吗?好,我们现在将原来的带入进来,得到如下结果:
最终替换回来之后,我们惊奇的发现,这不就是我们之前看到的梯度下降公式的一般形式吗!!!! 惊不惊喜!!!! (见上图)但在得到这样的结果时,我们仍要保持冷静的头脑,需要知道这一切成立的前提:以(a, b)为原点画圆时,圆的半径需要足够的小,换句话说就是,Gradient Dsecent 时learning rate 要尽可能的小,只有这样,我们才能进行泰勒展开,也才有了后面的这些操作。如果loss 函数比较平滑的话,learning rate 大一点还没关系,但是如果loss 函数非常陡峭时,learning rate 的取值就需要很小心了。
四 结束语
- 本文中的所有图片均来自于台湾大学李宏毅教授 2020 machine learning 课程中的PPT。
- 小编目前毕竟还是本科生,若文章有问题,欢迎大家在评论区中指出。
- 文章编写不易,若对您有帮助,希望您可以点一个小小的赞。路漫漫其修远兮,吾将上下而求索,与君共勉 !!!