1. 偏导数与方向导数
偏导数
对于一元函数来说变化率就是导数,在机器学习中多数使用的是多元函数而多元函数的变化率通常是采用偏导数进行表示。
定义:设函数
z
=
f
(
x
,
y
)
z = f(x, y)
z=f(x,y)在点
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)的某一邻域内有定义,当
y
y
y固定于
y
0
y_0
y0,而
x
x
x在
x
0
x_0
x0处有增量
Δ
x
\Delta x
Δx,相应的函数有增量
f
(
x
0
+
Δ
x
,
y
0
)
−
f
(
x
0
,
y
0
)
f(x_0+\Delta x, y_0)-f(x_0,y_0)
f(x0+Δx,y0)−f(x0,y0),如果
lim
Δ
x
→
0
f
(
x
0
+
Δ
x
,
y
0
)
−
f
(
x
0
,
y
0
)
Δ
x
\lim_{\Delta x\rightarrow0}\frac{f(x_0+\Delta x, y_0)-f(x_0,y_0)}{\Delta x}
limΔx→0Δxf(x0+Δx,y0)−f(x0,y0)存在,则称该极限为函数咋子
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)处对x的偏导。
方向导数
对于多元函数,如果说偏导数表示的是多元函数在沿坐标轴的变化率,那么可以说方向导数是沿着任意一指定方向的变化率
方向导数表达式:
∂
f
∂
l
∣
(
x
0
,
y
0
)
=
lim
t
→
0
+
f
(
x
0
+
t
cos
α
,
y
0
+
t
cos
β
)
−
f
(
x
0
,
y
0
t
\frac{\partial f}{\partial l}|_{(x_0,y_0)}=\lim_{t\rightarrow0^+}\frac{f(x_0+t\cos\alpha,y_0+t\cos\beta)-f(x_0,y_0}{t}
∂l∂f∣(x0,y0)=t→0+limtf(x0+tcosα,y0+tcosβ)−f(x0,y0
其中,l的单位向量是
e
=
(
cos
α
,
cos
β
)
e=(\cos\alpha,\cos\beta)
e=(cosα,cosβ),而这正表示函数f沿着l方向的变化率,当e=(0,1)时,就表示f对于y的偏导数,,即沿着y轴的变化率。
方向导数的计算公式:
∂ f ∂ l ∣ ( x 0 , y 0 ) = f ( x 0 , y 0 ) x cos α + f ( x 0 , y 0 ) y cos β \frac{\partial f}{\partial l}|_{(x_0,y_0)}=f(x_0,y_0)_x\cos\alpha+f(x_0,y_0)_y\cos\beta ∂l∂f∣(x0,y0)=f(x0,y0)xcosα+f(x0,y0)ycosβ
方向导数等于函数x处的偏导数与单位向量x的方向乘积加上在y处的偏导与单位向量y的方向的乘积。
2. 梯度(注意梯度是一个向量 )
函数在某点的梯度是这样一个向量,它的方向与去的最大方向导数的方向一致,而它的模为方向导数的最大值。
g
r
a
d
f
(
x
,
y
)
=
(
f
x
(
x
,
y
)
,
f
y
(
x
,
y
)
)
grad f(x,y) = (f_x(x,y),f_y(x,y))
gradf(x,y)=(fx(x,y),fy(x,y))
∣
g
r
a
d
f
(
x
,
y
)
∣
=
(
∂
f
∂
x
)
2
+
(
∂
f
∂
y
)
2
|gradf(x,y)|=\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}
∣gradf(x,y)∣=(∂x∂f)2+(∂y∂f)2
对于梯度的数学定义:
设函数 f ( x , y ) f(x,y) f(x,y)在平面区域D内具有一阶连续偏导数则对每一点 P ( x 0 , y 0 ) ∈ D P(x_0,y_0)\in D P(x0,y0)∈D都可以找出一个向量 f x ( x 0 , y 0 ) i + f y ( x 0 , y 0 ) j f_x(x_0,y_0)i+f_y(x_0,y_0)j fx(x0,y0)i+fy(x0,y0)j称为 f ( x , y ) f(x,y) f(x,y)在P点处的梯度,记作 ∇ f ( x 0 , y 0 ) \nabla f(x_0,y_0) ∇f(x0,y0)
g r a d f ( x 0 , y 0 ) = ( f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ) grad f(x_0,y_0) = (f_x(x_0,y_0),f_y(x_0,y_0)) gradf(x0,y0)=(fx(x0,y0),fy(x0,y0))
- 梯度是向量
- 仅与函数和点有关
由于具有一阶连续偏导数那么意味着,函数 f ( x , y ) f(x,y) f(x,y)在各个方向的切线都在同一平面上,也就是其切平面,那么就可以得知一定有且仅有一个“最陡峭”的地方
梯度与方向导数的等式关系
假设P点为
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)
那么由方向导数的公式可以推到为:
∂
f
∂
l
∣
(
P
0
)
=
f
(
P
0
)
x
cos
α
+
f
(
P
0
)
y
cos
β
\frac{\partial f}{\partial l}|_{(P_0)}=f(P_0)_x\cos\alpha+f(P_0)_y\cos\beta
∂l∂f∣(P0)=f(P0)xcosα+f(P0)ycosβ
∂
f
∂
l
∣
(
P
0
)
=
(
f
x
(
P
0
)
,
f
y
(
P
0
)
)
⋅
(
cos
α
,
cos
β
)
\frac{\partial f}{\partial l}|_{(P_0)}=(f_x(P_0),f_y(P_0))·(\cos\alpha,\cos\beta)
∂l∂f∣(P0)=(fx(P0),fy(P0))⋅(cosα,cosβ)
∂
f
∂
l
∣
(
P
0
)
=
g
r
a
d
f
(
P
0
)
⋅
e
l
⃗
\frac{\partial f}{\partial l}|_{(P_0)}=grad f(P_0)·\vec{e_l}
∂l∂f∣(P0)=gradf(P0)⋅el
将
(
cos
α
,
cos
β
)
记
为
e
l
⃗
(\cos\alpha,\cos\beta)记为\vec{e_l}
(cosα,cosβ)记为el
∂
f
∂
l
∣
(
P
0
)
=
∣
g
r
a
d
f
(
P
0
)
∣
⋅
∣
e
l
⃗
∣
cos
θ
\frac{\partial f}{\partial l}|_{(P_0)}=|grad f(P_0)|·|\vec{e_l}|\cos\theta
∂l∂f∣(P0)=∣gradf(P0)∣⋅∣el∣cosθ
其中
θ
\theta
θ是梯度和
e
l
⃗
\vec{e_l}
el的夹角,又因为
e
l
⃗
\vec{e_l}
el是单位向量,因此:
∂
f
∂
l
∣
(
P
0
)
=
∣
g
r
a
d
f
(
P
0
)
∣
⋅
cos
θ
\frac{\partial f}{\partial l}|_{(P_0)}=|grad f(P_0)|·\cos\theta
∂l∂f∣(P0)=∣gradf(P0)∣⋅cosθ
所以方向导数的大小完全取决于
cos
θ
\cos\theta
cosθ的大小,其中
θ
=
(
g
r
a
d
f
(
x
,
y
)
,
e
⃗
)
\theta = (gradf(x,y),\vec e)
θ=(gradf(x,y),e)。
3. 雅可比矩阵(Jacobian矩阵)和海森矩阵(Hessian矩阵)
3.1雅可比矩阵&雅可比行列式
雅可比矩阵
先补充一下算子和线性算子的概念
算子:一个函数空间到另一个函数空间的映射
线性算子:设X和Y是同一线性赋范空间,
D
⊂
X
D\subset X
D⊂X,T为D到Y中的算子,如果
∀
α
,
β
∈
K
\forall\alpha,\beta\in K
∀α,β∈K,有
T
(
α
x
+
β
y
)
=
α
T
(
x
)
+
β
T
(
y
)
T(\alpha x + \beta y)=\alpha T(x) + \beta T(y)
T(αx+βy)=αT(x)+βT(y),则称T为D上的线性算子。
梯度向量的公式:
g
(
x
)
=
∇
f
(
x
1
,
x
2
,
.
.
.
x
n
)
=
(
∂
f
∂
x
1
,
∂
f
∂
x
2
,
.
.
.
,
∂
f
∂
x
2
)
g(x)=\nabla f(x_1,x_2,...x_n) = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_2})
g(x)=∇f(x1,x2,...xn)=(∂x1∂f,∂x2∂f,...,∂x2∂f)
雅可比矩阵:一阶偏导数以一定方式排列成的矩阵,其行列式成为雅可比行列式。其重要性在于它体现了一个微分方程与给出点的最优线性逼近.因此,也科比矩阵类似于多元函数的导数。
假设
F
F
F:
R
n
→
R
m
R_n\rightarrow R_m
Rn→Rm是一个从欧式
n
n
n维空间转换到欧式
m
m
m维空间的函数。这个函数由
m
m
m个实函数组成:
y
1
(
x
1
,
.
.
.
,
x
n
)
,
.
.
.
,
y
m
(
x
1
,
.
.
.
,
x
n
)
y_1(x_1,...,x_n),...,y_m(x_1,...,x_n)
y1(x1,...,xn),...,ym(x1,...,xn)。这些函数的偏导数(如果存在)可以组成一个
m
m
m行
n
n
n列的矩阵,这就是所谓的雅可比矩阵:
[
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
]
\left[ \begin{matrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \\ \end{matrix} \right]
⎣⎢⎡∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎦⎥⎤
=
[
g
1
(
x
)
T
g
2
(
x
)
T
⋯
g
m
(
x
)
T
]
= \left[ \begin{matrix} g_1(x)^T \\ g_2(x)^T \\ \cdots \\ g_m(x)^T \end{matrix} \right]
=⎣⎢⎢⎡g1(x)Tg2(x)T⋯gm(x)T⎦⎥⎥⎤
此矩阵表示为:
J
F
(
x
1
,
.
.
.
,
x
n
)
J_F(x_1,...,x_n)
JF(x1,...,xn),或者
∂
(
y
1
,
.
.
.
y
m
)
∂
(
x
1
,
.
.
.
,
x
n
)
\frac{\partial(y_1,...y_m)}{\partial(x_1,...,x_n)}
∂(x1,...,xn)∂(y1,...ym)。
此矩阵的第
i
i
i行
[
∂
y
i
∂
x
i
,
∂
y
i
∂
x
2
,
⋅
⋅
⋅
,
∂
y
i
∂
x
n
]
[\frac{\partial y_i}{\partial x_i},\frac{\partial y_i}{\partial x_2},···,\frac{\partial y_i}{\partial x_n}]
[∂xi∂yi,∂x2∂yi,⋅⋅⋅,∂xn∂yi]即为梯度的转置。
如果
p
p
p是
R
n
R_n
Rn中的一点,
F
F
F在
p
p
p点可微,那么在这一点的导数由
J
F
(
p
)
J_F(p)
JF(p)给出,在此情况下,由
F
(
p
)
F(p)
F(p)描述的线性算子接近点
p
p
p的
F
F
F的最优线性逼近,
x
x
x逼近于
p
p
p:
F
(
x
)
≈
F
(
p
)
+
J
F
(
p
)
⋅
(
x
−
p
)
F(x)\approx F(p)+J_F(p)·(x-p)
F(x)≈F(p)+JF(p)⋅(x−p)(个人理解是泰勒展开式)
雅可比行列式
如果 m = n m=n m=n,那么 F F F是从 n n n维空间到 n n n维空间的函数,那么它的雅可比矩阵是一个方阵。取其行列式称为雅可比行列式。
在某个给定点的雅可比行列式提供了 在接近该点时的表现的重要信息. 例如, 如果连续可微函数 F F F在 p p p点的雅可比行列式不是零, 那么它在该点附近具有反函数. 这称为反函数定理. 更进一步, 如果 p p p点的雅可比行列式是正数, 则 F F F在 p p p点的取向不变;如果是负数, 则 F F F的取向相反. 而从雅可比行列式的绝对值, 就可以知道函数 F F F在 p p p点的缩放因子;这就是为什么它出现在换元积分法中.
3.2海森Hessian矩阵
在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)
如果
f
f
f的所有二阶导数都存在,那么
f
f
f的海森矩阵即:
H
(
f
)
i
j
(
x
)
=
D
i
D
j
f
(
x
)
H(f)_{ij}(x)=D_iD_jf(x)
H(f)ij(x)=DiDjf(x)
其中
x
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
x=(x_1,x_2,...,x_n)
x=(x1,x2,...,xn),即
H
(
f
)
H(f)
H(f)为:
[
∂
2
f
∂
x
1
2
∂
2
f
∂
x
1
∂
x
2
⋯
∂
2
f
∂
x
1
∂
x
n
∂
2
f
∂
x
2
∂
x
1
∂
2
f
∂
x
2
2
⋯
∂
2
f
∂
x
2
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
∂
x
n
∂
x
1
∂
2
f
∂
x
n
∂
x
2
⋯
∂
2
f
∂
x
n
2
]
\left[ \begin{matrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1\partial x_n} \\ \frac{\partial^2 f}{\partial x_2\partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n\partial x_1} & \frac{\partial^2 f}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \\ \end{matrix} \right]
⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
(也有人把海森定义定义为以上矩阵的行列式)海森矩阵被应用于牛顿法解决大规模优化问题。
应用
一般来说, 牛顿法主要应用在两个方面
1、 求方程的根
2、 最优化
1), 求解方程
并不是所有的方程都有求根公式, 或者求根公式很复杂, 导致求解困难. 利用牛顿法, 可以迭代求解。
原理是利用泰勒公式,在
x
0
x_0
x0处展开,且展开到一阶,即
f
(
x
)
=
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
f(x)=f(x_0)+(x-x_0)f'(x_0)
f(x)=f(x0)+(x−x0)f′(x0)
求解方程
f
(
x
)
=
0
f(x)=0
f(x)=0即
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
=
0
f(x_0)+(x-x_0)f'(x_0)=0
f(x0)+(x−x0)f′(x0)=0,求解
x
=
x
1
=
x
0
−
f
(
x
0
)
f
′
(
x
0
)
x=x_1=x_0-\frac{f(x_0)}{f'(x_0)}
x=x1=x0−f′(x0)f(x0),因为这是利用泰勒公式的一节展开,
f
(
x
)
=
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
f(x)=f(x_0)+(x-x_0)f'(x_0)
f(x)=f(x0)+(x−x0)f′(x0)处并不完全相等,而是近似相等,这里求得的
x
1
x_1
x1并不能让
f
(
x
)
=
0
f(x)=0
f(x)=0,只能说
f
(
x
1
)
f(x_1)
f(x1)的值比
f
(
x
0
)
f(x_0)
f(x0)更接近
f
(
x
)
=
0
f(x)=0
f(x)=0,于是迭代求解就很自然了,可以进而推出
x
n
+
1
=
x
n
−
f
(
x
n
)
f
′
(
x
n
)
x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}
xn+1=xn−f′(xn)f(xn),通过迭代,这个式子必然在
f
(
x
∗
)
=
0
f(x^*)=0
f(x∗)=0的时候收敛。整个过程如下图:
2), 最优化
在最优化的问题中, 线性最优化至少可以使用单纯形法(或称不动点算法)求解, 但对于非线性优化问题, 牛顿法提供了一种求解的办法. 假设任务是优化一个目标函数
f
f
f, 求函数
f
f
f的极大极小问题, 可以转化为求解函数
f
f
f的导数
f
′
=
0
f′=0
f′=0的问题, 这样求可以把优化问题看成方程求解问题(
f
′
=
0
f′=0
f′=0). 剩下的问题就和第一部分提到的牛顿法求解很相似了。
这次为了求解
f
′
=
0
f′=0
f′=0的根, 首先把
f
(
x
)
f(x)
f(x)在探索点
x
n
x_n
xn处泰勒展开, 展开到2阶形式进行近似:
f
(
x
)
=
f
(
x
n
)
+
f
′
(
x
n
)
(
x
−
x
n
)
+
f
′
′
(
x
n
)
2
(
x
−
x
n
)
2
f(x)=f(x_n)+f'(x_n)(x-x_n)+\frac{f''(x_n)}{2}(x-x_n)^2
f(x)=f(xn)+f′(xn)(x−xn)+2f′′(xn)(x−xn)2
然后用
f
(
x
)
f(x)
f(x)的最小点做为新的探索点
x
n
+
1
x_{n+1}
xn+1,据此,令:
f
′
(
x
)
=
f
′
(
x
n
)
+
f
′
′
(
x
n
)
(
x
−
x
n
)
=
0
f'(x)=f'(x_n)+f''(x_n)(x-x_n)=0
f′(x)=f′(xn)+f′′(xn)(x−xn)=0
求出迭代公式:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
x_{n+1}=x_n-\frac{f'(x_n)}{f''(x_n)}
xn+1=xn−f′′(xn)f′(xn)
一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解.
在上面讨论的是2维情况, 高维情况的牛顿迭代公式是:
x
n
+
1
=
x
n
−
[
H
f
(
x
n
)
]
−
1
∇
f
(
x
n
)
,
n
≥
0
x_{n+1}=x_n-[Hf(x_n)]^{-1}\nabla f(x_n),n\geq 0
xn+1=xn−[Hf(xn)]−1∇f(xn),n≥0
其中
H
H
H是Hessian矩阵.
高维情况依然可以用牛顿迭代求解, 但是问题是Hessian矩阵引入的复杂性, 使得牛顿迭代求解的难度大大增加, 但是已经有了解决这个问题的办法就是Quasi-Newton method, 不再直接计算hessian矩阵, 而是每一步的时候使用梯度向量更新hessian矩阵的近似.
4.凸函数
凸函数,是数学函数的一类特征。凸函数就是一个定义在某个向量空间的凸子集C(区间)上的实值函数。
凸集:如果集合中任意两个元素连线上的点也在集合中,那么这个集合就是凸集。
常见的凸集:
- 所有 R n R^n Rn
- 所有 R + n R_+^n R+n
- 超平面: C = { x ∣ a T x = b } C=\{x|a^Tx=b\} C={x∣aTx=b}既是仿射集又是凸集(仿射集都是凸集)
- 半空间: C = { x ∣ a T x ≤ b } C=\{x|a^Tx\leq b\} C={x∣aTx≤b}或 C = { x ∣ a T x ≤ b } C=\{x|a^Tx\leq b\} C={x∣aTx≤b}只是凸集
- 范数球:满足 ∣ ∣ x ∣ ∣ p ≤ 1 , p ≥ 1 ||x||_p\leq1,p\geq1 ∣∣x∣∣p≤1,p≥1的集合称为范数球。但是 ∣ ∣ x ∣ ∣ p = 1 , p ≥ 1 ||x||_p=1,p\geq1 ∣∣x∣∣p=1,p≥1不是凸集。当 0 < p < 1 0<p<1 0<p<1时, ∣ ∣ x ∣ ∣ p ≤ 1 ||x||_p\leq1 ∣∣x∣∣p≤1也不是凸集。
- 多面体:有限个半空间和超平面的交集。
凸函数的数学定义:
函数
f
f
f:
R
n
→
R
R^n\rightarrow R
Rn→R定义域dom
f
f
f是凸集,并且对于
∀
x
,
y
∈
d
o
m
\forall x,y\in dom
∀x,y∈dom
f
f
f和
∀
θ
,
0
≤
θ
≤
1
\forall \theta,0\leq \theta\leq 1
∀θ,0≤θ≤1有
f
(
θ
x
+
(
1
−
θ
)
y
)
≤
θ
f
(
x
)
+
(
1
−
θ
)
f
(
y
)
f(\theta x+(1-\theta)y)\leq\theta f(x)+(1-\theta)f(y)
f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)
则称函数
f
f
f是凸的。
凸函数的判断方法:
- 一元函数
- 二元函数:
- 多元函数
Hessian矩阵半正定,则函数是凸函数;若Hessian矩阵正定,则函数是严格凸函数。(参考https://blog.csdn.net/qq_39521554/article/details/78895869)
注:理解上可能会有偏差,如有错误欢迎指正
参考:
https://blog.csdn.net/qq_40707407/article/details/80101501
https://www.matongxue.com/madocs/222.html
【雅可比矩阵和海森矩阵转自】http://jacoxu.com/jacobian矩阵和hessian矩阵/