数学知识 之 多元函数的微分学
一、偏导数
概念
偏导数,可以看作是导数的推广
在多元函数中,把其它的自变量固定不动,看成是常量。只对其中的某一个变量(如
x
i
x_i
xi )求导数,这就是偏导数(偏偏对一个变量求导数)
∂
f
∂
x
i
=
lim
△
x
i
→
0
f
(
x
1
,
.
.
.
,
x
i
+
△
x
i
,
.
.
.
,
x
n
)
−
f
(
x
1
,
.
.
.
,
x
i
,
.
.
.
,
x
n
)
△
x
i
\frac{\partial f}{\partial x_i}=\lim_{\bigtriangleup x_i\rightarrow 0}\frac{f(x_1,...,x_i+\bigtriangleup x_i,...,x_n)-f(x_1,...,x_i,...,x_n)}{\bigtriangleup x_i}
∂xi∂f=△xi→0lim△xif(x1,...,xi+△xi,...,xn)−f(x1,...,xi,...,xn)
几何意义
计算
示例: f ( x , y ) = x 2 + x y − y 2 f(x,y)=x^2+xy-y^2 f(x,y)=x2+xy−y2
① 对
x
x
x 求偏导数:(把
y
y
y 当成常数)
∂
f
∂
x
=
2
x
+
y
\frac{\partial f}{\partial x}=2x+y
∂x∂f=2x+y
② 对
y
y
y 求偏导数:(把
x
x
x 当成常数)
∂
f
∂
y
=
x
−
2
y
\frac{\partial f}{\partial y}=x-2y
∂y∂f=x−2y
有些时候,可简洁的写成: f ′ x {f}'x f′x、 f ′ y {f}'y f′y
Pyhton中的表示
以下是 cmd
命令端中输入python
,所进入的 python 交互窗口
- 通过代码可验证:上方的式子计算准确性(对多元函数求偏导)
>>> from sympy import diff, symbols
>>> x , y = symbols('x y') # 用 symbols 函数定义变量
>>>
>>> f = x**2 + x*y - y**2
>>>
>>> # 用 diff 函数进行求导
>>> diff(f,x) # 对 x 求偏导数
2*x + y
>>> diff(f,y) # 对 y 求偏导数
x - 2*y
注意:
- 若在导入模块时
from sympy import diff, symbols
,出现如下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sympy'
- 需要先在 cmd 命令窗口下载 sympy 库
pip install sympy
二、高阶偏导数
概念
既然有高阶导数,那同样存在高阶偏导数,但它的情况比高阶导数要复杂一些,因为它的求导变量有多个。
- 比如下式 ☞ 对 x x x, y y y 求高阶偏导数:先对 x x x 求偏导,再对 y y y 求偏导
- 高阶偏导数跟一元函数的高阶导数是一样的,依次对每个变量反复求导 ∂ 2 f ∂ x ∂ y \frac{\partial^2 f}{\partial x \partial y} ∂x∂y∂2f
计算
示例: f ( x , y ) = x 2 + x y − y 2 f(x,y)=x^2+xy-y^2 f(x,y)=x2+xy−y2
- 情况一:先对
x
x
x 求偏导
∂
f
∂
x
=
2
x
+
y
\frac{\partial f}{\partial x}=2x+y
∂x∂f=2x+y
- 然后再对
x
x
x 求偏导就等于 2
∂ 2 f ∂ 2 x = 2 \frac{\partial^2 f}{\partial^2 x}=2 ∂2x∂2f=2 - 然后再对
y
y
y 求偏导就等于 1
∂ 2 f ∂ x ∂ y = 1 \frac{\partial^2 f}{\partial x \partial y}=1 ∂x∂y∂2f=1
- 然后再对
x
x
x 求偏导就等于 2
- 情况二:先对
y
y
y 求偏导
∂
f
∂
y
=
x
−
2
y
\frac{\partial f}{\partial y}=x-2y
∂y∂f=x−2y
- 然后再对
x
x
x 求偏导就等于 1
∂ 2 f ∂ y ∂ x = 1 \frac{\partial^2 f}{ \partial y \partial x}=1 ∂y∂x∂2f=1 - 然后再对
y
y
y 求偏导就等于 -2
∂ 2 f ∂ 2 y = − 2 \frac{\partial^2 f}{ \partial^2y }=-2 ∂2y∂2f=−2
- 然后再对
x
x
x 求偏导就等于 1
一个结论:高阶导数和求导次序无关
∂
2
f
∂
x
∂
y
=
∂
2
f
∂
y
∂
x
\frac{\partial^2 f}{\partial x \partial y}=\frac{\partial^2 f}{ \partial y \partial x}
∂x∂y∂2f=∂y∂x∂2f
Pyhton中的表示
以下是 cmd
命令端中输入python
,所进入的 python 交互窗口
- 通过代码可验证:上方的式子计算准确性(求高阶偏导数)
>>> from sympy import diff, symbols
>>> f = x**2 + x*y - y**2
>>> x,y = symbols('x y') # 用 symbols 函数定义变量
>>> diff(f,x,2) # 对 x 的二阶偏导数
2
>>> diff(f,y,2) # 对 y 的二阶偏导数
-2
>>> diff(diff(f,x),y) # 先对 x 的一阶偏导数,再对 y 的一阶偏导数
1
>>> diff(diff(f,y),x) # 先对 y 的一阶偏导数,再对 x 的一阶偏导数
1
>>>
>>> # 可将 实际数值 代入变量 y 中求具体值
>>> diff(f,y) # 对 y 的一阶偏导数
x - 2*y
>>> diff(f,y).subs(y,2) # 令 y = 2 代入 x - 2*y 中
x - 4
三、梯度
机器学习中的梯度下降法、牛顿法,很多地方都会用到这个概念
关于梯度
梯度(gradient)可以看成是一元函数的导数,对于多元函数的推广
- 梯度的概念:对于多元函数,如果它的自变量有 N 个( x 1 x_1 x1 x 2 x_2 x2 … x n x_n xn)。它的梯度是个向量,是由对 x 1 x_1 x1 x 2 x_2 x2 … x n x_n xn 等的偏导数构成的向量,称之为梯度
- 梯度的表示:用倒三角符号来表示,表示作用于
f
(
x
)
f(x)
f(x) 得到这样一个向量。式子里往往会通过
T
T
T 把它转置一下,看成是列向量
▽ f ( x ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ) T \bigtriangledown f(x) = \left ( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2},..., \frac{\partial f}{\partial x_n}\right )^T ▽f(x)=(∂x1∂f,∂x2∂f,...,∂xn∂f)T
示例-求梯度
- 求
f
(
x
1
,
x
2
)
=
x
1
2
+
x
1
x
2
−
x
2
2
f(x_1,x_2)=x_1^2+x_1x_2-x_2^2
f(x1,x2)=x12+x1x2−x22 的梯度
▽ f ( x ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 ) T = ( 2 x 1 + x 2 , x 2 − 2 x 2 ) T \bigtriangledown f(x) = \left ( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}\right )^T=\left ( 2x_1+x_2,x_2-2x_2\right )^T ▽f(x)=(∂x1∂f,∂x2∂f)T=(2x1+x2,x2−2x2)T - 求
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
w
1
x
1
+
w
2
x
2
+
.
.
.
+
w
n
x
n
f(x_1,x_2, ... ,x_n)=w_1x_1+w_2x_2+...+w_nx_n
f(x1,x2,...,xn)=w1x1+w2x2+...+wnxn 的梯度
▽ f ( x ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ) T = ( w 1 , w 2 , . . . , w n ) T \bigtriangledown f(x) = \left ( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2},..., \frac{\partial f}{\partial x_n}\right )^T=\left ( w_1,w_2,...,w_n\right )^T ▽f(x)=(∂x1∂f,∂x2∂f,...,∂xn∂f)T=(w1,w2,...,wn)T
四、雅可比矩阵
雅可比(Jacobian)矩阵:是由一阶偏导数构成的矩阵,发明它的目的主要是为了简化求导公式
- 优点:对多元的复合函数求导,如果用雅可比矩阵来计算,它会写起来非常简洁
- 应用:在人工神经网络(ANN)反向推导(BP)的过程中往往会看到雅可比矩阵的使用
定义
- y = f ( x ) y=f(x) y=f(x):假设有一个函数可以把 n n n 维 x x x 向量映射为 k k k 维的向量 y y y;
- y i = f ( x i ) y_i=f(x_i) yi=f(xi):其中每个 x i x_i xi 和每个 y i y_i yi 都相关,即 每个 y i y_i yi 是单独从 x i x_i xi 映射过来的函数;
函数 f ( x ) f(x) f(x) 的雅可比矩阵就是每个 y i y_i yi 分别对每个 x i x_i xi 求偏导,然后构成的矩阵叫做雅可比矩阵。
小贴士:如果 x i x_i xi 是 n n n 维向量, y y y 是 k k k 个值的结果( k k k 维向量),那么雅可比矩阵就是 k × n k×n k×n 的矩阵
图文理解
计算-求雅克比矩阵
如果
x
1
x_1
x1 ,
x
2
x_2
x2 ,
x
3
x_3
x3 根据函数
f
(
x
)
f(x)
f(x) 映射成
y
1
y_1
y1 ,
y
2
y_2
y2 。其中,
y
1
y_1
y1 是
x
1
x_1
x1 ,
x
2
x_2
x2 ,
x
3
x_3
x3 的函数,
y
2
y_2
y2 也是
x
1
x_1
x1 ,
x
2
x_2
x2 ,
x
3
x_3
x3 的函数,则函数
f
(
x
)
f(x)
f(x) 的雅可比矩阵为:
在神经网络中的应用
五、Hessian 矩阵
定义
Hessian 矩阵:对多元函数中每个变量分别求二阶求导,它就相当于一元函数的二阶导数
- 对于一个
n
n
n 元函数
f
(
x
)
f(x)
f(x),有自变量
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2, ... ,x_n
x1,x2,...,xn,
其 Hessian 矩阵(如下图)是一个 n*n 的矩阵,它的所有的元素是二阶偏导数构成的
小贴士:由于多元函数高阶偏导数和顺序无关,所以 hessian 矩阵是对称矩阵
计算
求 f ( x , y , z ) = 2 x 2 − x y + y 2 − 3 z 2 f(x,y,z)=2x^2-xy+y^2-3z^2 f(x,y,z)=2x2−xy+y2−3z2 的 Hessian 矩阵
- 先求出
f
(
x
,
y
,
z
)
f(x,y,z)
f(x,y,z) 的一阶偏导数:
- f ′ x = 4 x − y f'x=4x-y f′x=4x−y
- f ′ y = − x + 2 y f'y=-x+2y f′y=−x+2y
- f ′ z = − 6 z f'z=-6z f′z=−6z
- 然后把 Hessian 矩阵求出来:
[ 4 − 1 0 − 1 2 0 0 0 − 6 ] \begin{bmatrix} 4 & -1 &0 \\ -1 & 2 & 0\\ 0 & 0 & -6 \end{bmatrix} 4−10−12000−6
作用
Hessian 矩阵和函数的凹凸性(极值)是有密切关系的——对机器学习的凹凸性有用(找 loss function 损失函数 的极值)
- 如果 Hessian 矩阵 正定,函数 f(x) 存在 极小值;
- 如果 Hessian 矩阵 负定,函数 f(x) 存在 极大值。
六、极值判别法则
对于一元函数(点击可查看相关知识:高等数学知识强化(二)一元函数微分学 ,设
f
(
x
)
f(x)
f(x) 在
x
=
x
0
x=x_0
x=x0 处二阶可导,且
f
′
(
x
0
)
=
0
f'(x_0) =0
f′(x0)=0,
f
′
′
(
x
0
)
≠
0
f''(x_0) ≠0
f′′(x0)=0。① 若
f
′
′
(
x
0
)
>
0
f''(x_0) >0
f′′(x0)>0 ,则
f
(
x
)
f(x)
f(x) 在
x
0
x_0
x0 处取得极小值;② 若
f
′
′
(
x
0
)
<
0
f''(x_0) <0
f′′(x0)<0 ,则
f
(
x
)
f(x)
f(x) 在
x
0
x_0
x0 处取得极大值。—— 判别极值的第二充分条件
多元函数的极值判别法则
对于多元函数,首先 f ( x ) f(x) f(x) 的一阶导数等于 0,这点是驻点的话,那它就可能是极值点
问:它是极大值还是极小值或者不是极值怎么判定的?
答:看 Hessian 矩阵,在 f(x)的一阶导数等于 0 处,就是驻点处
- 如果 Hessian 矩阵是正定,函数在该点有极小值
- 如果 Hessian 矩阵是负定,函数在该点有极大值
- 如果 Hessian 矩阵不定,还需要看更高阶的导数
实对称矩阵正定判断
设 A A A 为实对称矩阵:对于任意向量 X ≠ 0 X≠0 X=0,都有 X T A X > 0 X^TAX>0 XTAX>0,则矩阵 A A A 为正定矩阵;如果 X T A X ≥ 0 X^TAX≥0 XTAX≥0,则矩阵 A A A 为半正定矩阵。
问:怎么判断矩阵是正定的?
答:拿式子 X T A X . . . X^TAX... XTAX... 去证明,但是这样不太容易,有时候会根据几个原则去判断:
- 矩阵的特征值全部大于 0(矩阵的特征值和特征向量后续会讲到)
- 矩阵的所有顺序主子式都大于 0(用的较少)
- 矩阵合同于单位阵(用的较少)