导数,偏导数,方向导数,梯度的理解---微积分数学基础
文章目录
0 概述1. 导数的概念1.1 导数的定义1.2 导数的本质
2. 偏导数的概念2.1 偏导数定义2.2 偏导数的本质
3. 方向导数3.1 方向导数定义3.2 方向导数的最大值
4. 梯度4.1 梯度定义4.2 梯度生而最快
5. 总结参考:
0 概述
我们在ML week 1课程中了解到了单变量线性回归,这里使用了梯度下降法来不断更新
θ
0
,
θ
1
\theta_{0,} \theta_{1}
θ0,θ1以求得Cost Function的最优解,从而确定
h
θ
(
x
i
)
h_{\theta}\left(x_{i}\right)
hθ(xi)。 那这里就产生了一个疑问:为什么使用梯度下降法求解?为什么使用梯度下降法,就能够得到最优解(全局或者局部)? 下边我们将从导数,偏导数,方向导数最后引出梯度,进而讲解为什么梯度下降法能够做到求解最优解。
1. 导数的概念
1.1 导数的定义
增量定义:若
f
(
x
)
f(x)
f(x)在点
x
0
x_{0}
x0的某个邻域内有定义,则当自变量
x
x
x 在
x
0
x_{0}
x0处取得增量
Δ
x
\Delta x
Δx(点
x
0
+
Δ
x
x_{0}+\Delta x
x0+Δx仍然在邻域内),相应的
y
y
y取得增量
Δ
y
=
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
\Delta y=f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)
Δy=f(x0+Δx)−f(x0),如果
Δ
y
\Delta y
Δy与
Δ
x
\Delta x
Δx在
Δ
x
→
0
\Delta x \rightarrow 0
Δx→0时极限存在,则称
y
=
f
(
x
)
y=f(x)
y=f(x)在
x
0
x_{0}
x0处可导,这个极限就是
y
=
f
(
x
)
y=f(x)
y=f(x)在
x
0
x_{0}
x0的导数,记为
f
′
(
x
0
)
f^{\prime}\left(x_{0}\right)
f′(x0)。
f
′
(
x
0
)
=
lim
Δ
x
→
0
Δ
y
Δ
x
=
lim
Δ
x
→
0
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
Δ
x
f^{\prime}\left(x_{0}\right)=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x}
f′(x0)=limΔx→0ΔxΔy=limΔx→0Δxf(x0+Δx)−f(x0)
极限定义:在定义域内,当变量
x
x
x趋近于
x
0
x_{0}
x0时,
f
(
x
)
−
f
(
x
0
)
x
−
x
0
\frac{f(x)-f\left(x_{0}\right)}{x-x_{0}}
x−x0f(x)−f(x0)有极限,则有
f
′
(
x
0
)
=
lim
x
→
x
0
f
(
x
)
−
f
(
x
0
)
x
−
x
0
f^{\prime}\left(x_{0}\right)=\lim _{x \rightarrow x_{0}} \frac{f(x)-f\left(x_{0}\right)}{x-x_{0}}
f′(x0)=limx→x0x−x0f(x)−f(x0)
1.2 导数的本质
对于一元函数而言,导数的几何意义是
f
(
x
)
f(x)
f(x)在点
x
0
x_{0}
x0切线的斜率。物理角度上来看,路程对时间的导数叫速度,速度对时间的导数叫加速度。 我们可以理解为这是一种线性近似,当一个函数为曲线时,我们对某一点的斜率,就是通过导数这种线性近似求得的。 但是对于多元函数而言,由于其几何图形为一个曲面,这时候导数作为切线斜率的解释似乎不成立了,因此引入了偏导数的概念。
2. 偏导数的概念
2.1 偏导数定义
对于多元函数,求导数其实也是要求一个切线的斜率,但是由于曲面上的点的切线有无数条,那么取那条切线的斜率呢,这时候就引入了偏导数的概念。 偏导数其实就是选取比较特殊的切线,求其斜率而得,以二元函数
z
=
f
(
x
,
y
)
z=f(x, y)
z=f(x,y)为例,分为对
x
x
x的偏导数和对
y
y
y的偏导数。 如图所示: 对
x
x
x的偏导数:过点
(
x
0
,
y
0
,
z
0
)
\left(x_{0}, y_{0},z_{0}\right)
(x0,y0,z0)垂直于
y
y
y轴的曲线,在该点切线的斜率。 此时,该曲线可表示为
z
=
f
(
x
,
y
)
z=f(x, y)
z=f(x,y)
x
=
t
x=t
x=t
y
=
a
+
0
×
t
y=a+0 \times t
y=a+0×t 因此,我们求对
x
x
x的偏导数,认为
y
y
y是常量是完全正确的。 用导数定义来表示
x
x
x的偏导数,
f
x
(
x
0
,
y
0
)
=
lim
Δ
x
→
0
f
(
x
0
+
Δ
x
,
y
0
)
−
f
(
x
0
,
y
0
)
Δ
x
f_{x}\left(x_{0}, y_{0}\right)=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x, y_{0}\right)-f\left(x_{0}, y_{0}\right)}{\Delta x}
fx(x0,y0)=limΔx→0Δxf(x0+Δx,y0)−f(x0,y0) 对
y
y
y的偏导数:过点
(
x
0
,
y
0
,
z
0
)
\left(x_{0}, y_{0},z_{0}\right)
(x0,y0,z0)垂直于
x
x
x轴的曲线,在该点切线的斜率。 同上理解。
f
y
(
x
0
,
y
0
)
=
lim
Δ
y
→
0
f
(
x
0
,
y
0
+
Δ
y
)
−
f
(
x
0
,
y
0
)
Δ
y
f_{y}\left(x_{0}, y_{0}\right)=\lim _{\Delta y \rightarrow 0} \frac{f\left(x_{0}, y_{0}+\Delta y\right)-f\left(x_{0}, y_{0}\right)}{\Delta y}
fy(x0,y0)=limΔy→0Δyf(x0,y0+Δy)−f(x0,y0)
2.2 偏导数的本质
偏导数几何意义也是切线斜率, 但是由于曲面上一点的切线有无数条(实际上是个切面),偏导数选取的是垂直于各坐标轴的几条特殊切线的斜率。 偏导数物理意义表示函数沿着某个坐标轴方向上的变化率。 但是如果我们想求任意一条曲线切线斜率怎么办呢?这时候就引入了方向导数,可以求出曲面上某一点沿着任意方向的切线斜率。
3. 方向导数
以
z
=
f
(
x
,
y
)
z=f(x, y)
z=f(x,y)为例,过曲面上任意一点
(
x
0
,
y
0
,
z
0
)
\left(x_{0}, y_{0},z_{0}\right)
(x0,y0,z0)的所有切线,组成一个切面。偏导数仅仅选择了垂直于
x
x
x和
y
y
y轴方向的两条切线,计算斜率,方向导数则要求任意切向的斜率。 如下图所示
3.1 方向导数定义
x
x
x和
y
y
y平面上的一个方向向量,决定了一条过点
(
x
0
,
y
0
,
z
0
)
\left(x_{0}, y_{0},z_{0}\right)
(x0,y0,z0)的唯一曲线,此时曲线函数可表示为:
z
=
f
(
x
,
y
)
z=f(x, y)
z=f(x,y)
x
=
x
0
+
t
cos
α
t
≥
0
x=x_{0}+t \cos \alpha \quad t \geq 0
x=x0+tcosαt≥0
y
=
y
0
+
t
cos
β
t
≥
0
y=y_{0}+t \cos \beta \quad t \geq 0
y=y0+tcosβt≥0
u
=
i
⃗
cos
α
+
j
⃗
cos
β
=
i
⃗
cos
α
+
j
⃗
sin
α
u=\vec{i} \cos \alpha+\vec{j} \cos \beta=\vec{i} \cos \alpha+\vec{j} \sin \alpha
u=i
cosα+j
cosβ=i
cosα+j
sinα 其中
α
\alpha
α和
β
\beta
β分别为该方向向量与
x
x
x轴和
y
y
y轴的夹角。 则该曲线的记为方向u的导数,定义:
D
u
f
(
x
,
y
)
D_{u} f(x, y)
Duf(x,y)=
lim
t
→
0
f
(
x
0
+
t
cos
α
,
y
0
+
t
sin
α
)
−
f
(
x
0
,
y
0
)
t
\lim _{t \rightarrow 0} \frac{f\left(x_{0}+t \cos \alpha, y_{0}+t \sin \alpha\right)-f\left(x_{0}, y_{0}\right)}{t}
limt→0tf(x0+tcosα,y0+tsinα)−f(x0,y0) 通过偏微分简化计算可得(这一步的数学证明,请自行搜索),
D
u
f
(
x
,
y
)
=
f
x
(
x
,
y
)
cos
α
+
f
y
(
x
,
y
)
sin
α
D_{u} f(x, y)=f_{x}(x, y) \cos \alpha+f_{y}(x, y) \sin \alpha
Duf(x,y)=fx(x,y)cosα+fy(x,y)sinα
3.2 方向导数的最大值
设偏导向量:
A
⃗
=
(
f
x
(
x
,
y
)
,
f
y
(
x
,
y
)
)
\vec{A}=\left(f_{x}(x, y), f_{y}(x, y)\right)
A
=(fx(x,y),fy(x,y)) 方向向量:
u
⃗
=
(
cos
α
,
sin
α
)
\vec{u}=(\cos \alpha, \sin \alpha)
u
=(cosα,sinα) 则
D
u
f
(
x
,
y
)
=
A
⃗
∗
u
⃗
D_{u} f(x, y)=\vec{A} * \vec{u}
Duf(x,y)=A
∗u
=
∣
A
⃗
∣
∗
∣
u
⃗
∣
∗
cos
(
θ
)
|\vec{A}| *|\vec{u}| * \cos (\theta)
∣A
∣∗∣u
∣∗cos(θ) 其中
θ
\theta
θ 是偏导向量和方向向量之间的夹角。显而易见,当
θ
\theta
θ=0时,
D
u
f
(
x
,
y
)
D_{u} f(x, y)
Duf(x,y)取得最大值。 换句话说,当方向
u
⃗
\vec{u}
u
和偏导向量同向时,方向导数取得正最大值,反向时,取得负最大值。 记住这个结论,接下来我们看梯度定义。
4. 梯度
4.1 梯度定义
对于函数
z
=
f
(
x
,
y
)
z=f(x, y)
z=f(x,y),在平面区域D内具有一阶连续偏导数,则对于每一点
(
x
0
,
y
0
)
∈
D
\left(x_{0}, y_{0}\right) \in D
(x0,y0)∈D都可以定义出一个向量:
f
x
(
x
0
,
y
0
)
i
⃗
+
f
y
(
x
0
,
y
0
)
j
⃗
f_{x}\left(x_{0}, y_{0}\right) \vec{i}+f_{y}\left(x_{0}, y_{0}\right) \vec{j}
fx(x0,y0)i
+fy(x0,y0)j
这个向量称为函数
f
(
x
,
y
)
f(x, y)
f(x,y)在
(
x
0
,
y
0
)
\left(x_{0}, y_{0}\right)
(x0,y0)的梯度,记作
grad
f
(
x
0
,
y
0
)
\operatorname{grad} f\left(x_{0}, y_{0}\right)
gradf(x0,y0)或者
∇
f
(
x
0
,
y
0
)
\nabla f\left(x_{0}, y_{0}\right)
∇f(x0,y0)。其中
∇
=
∂
∂
x
i
⃗
+
∂
∂
y
j
⃗
\nabla=\frac{\partial}{\partial x} \vec{i}+\frac{\partial}{\partial y} \vec{j}
∇=∂x∂i
+∂y∂j
称为向量微分算子或者Nabla算子。
4.2 梯度生而最快
到这里,发现梯度就定义为偏导向量的方向。而方向导数一节已经证明,沿着偏导向量方向的方向导数
D
u
f
(
x
,
y
)
D_{u} f(x, y)
Duf(x,y)能够取得最大值。 因此在不断的迭代计算中,每一次沿着负梯度方向进行更新参数,就能够达到最低点。
5. 总结
通过导数,偏导数,方向导数的逐步讲解,最后给出梯度的定义,发现梯度天生定义就是变化最快的方向。 这是未来使用梯度下降法求解优化问题的数学基础。
参考:
https://www.zhihu.com/question/36301367 马同学和忆臻 的回答 https://github.com/halfrost/Halfrost-Field