项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
1.前言
在讲解梯度下降算法时,经常可以看到下面这张图(图片来自Wiki百科):
这张图后面一般都会再接一句,梯度下降的方向与等高线的切线方向垂直。
最开始的时候对这句话并没有多想,觉得这理所应当。不过突然有一天回过神来,为什么梯度下降方向与等高线的方向垂直啊?然后开始仔细考虑了一下这个问题。
2.等高线
看到知乎上的一幅图,能比较清楚地看出等高线的绘制过程,在此粘贴过来。
3.梯度的定义
梯度的概念是为了解决这么一个问题:
函数在变量空间(变量的维度可能很高)的某一点,沿着那个方向有最大的变化率?
梯度退化到xoy平面的二维空间,其实就是导数的概念。
梯度的定义如下:
g
r
a
d
f
(
x
0
,
x
1
,
⋯
,
x
n
)
=
(
∂
f
∂
x
0
,
⋯
,
∂
f
∂
x
i
,
⋯
,
∂
f
∂
x
n
)
gradf(x_0, x_1, \cdots, x_n) = \left(\frac{\partial f}{\partial x_0}, \cdots, \frac{\partial f}{\partial x_i}, \cdots, \frac{\partial f}{\partial x_n} \right)
gradf(x0,x1,⋯,xn)=(∂x0∂f,⋯,∂xi∂f,⋯,∂xn∂f)
需要注意如下几点:
1.梯度是一个向量,既有大小又有方向。
2.梯度的方向是最大方向导数的方向。
3.梯度的模是方向导数的最大值。
4.梯度方向与等高线切线方向垂直
假设Loss Function为
z
=
f
(
x
,
y
)
z = f(x,y)
z=f(x,y),该函数为一个三维曲面。该面被平面
z
=
c
z = c
z=c所截的曲线方程为
{
z
=
f
(
x
,
y
)
z
=
c
\begin{cases} z = f(x, y) \\ z = c \end{cases}
{z=f(x,y)z=c
该曲线在xoy平面上的投影是一条曲线,假设该曲线为Q,在xoy平面上该曲线的方程为
f
(
x
,
y
)
=
c
f(x, y) = c
f(x,y)=c
不难看出,xoy平面上的曲线Q即为
z
=
f
(
x
,
y
)
z = f(x, y)
z=f(x,y)的等高线。
等高线
f
(
x
,
y
)
=
c
f(x, y) = c
f(x,y)=c上的任意一点p切线处的斜率为
d
y
/
d
x
dy/dx
dy/dx
而p点对应的法线的斜率则为:
−
1
d
y
d
x
=
−
1
−
f
x
f
y
=
f
y
f
x
-\frac{1}{\frac{dy}{dx}} = -\frac{1}{-\frac{f_x}{f_y}} = \frac{f_y}{f_x}
−dxdy1=−−fyfx1=fxfy
d
y
d
x
=
−
f
x
f
y
\frac{dy}{dx} = -\frac{f_x}{f_y}
dxdy=−fyfx可以由隐函数求导公式推导得出。
而梯度的表达式为:
∂
f
∂
x
i
+
∂
f
∂
y
j
\frac{\partial f}{\partial x}i + \frac{\partial f}{\partial y}j
∂x∂fi+∂y∂fj
则梯度的方向为:
∂
f
∂
y
/
∂
f
∂
x
=
f
y
f
x
\frac{\partial f}{\partial y} / \frac{\partial f}{\partial x} = \frac{f_y}{f_x}
∂y∂f/∂x∂f=fxfy
由此可见,梯度的方向与等高线切线的法向量方向是相同的!
参考文献:
1.https://zhuanlan.zhihu.com/p/27731819