目录
前言
本文其实值属于:程序员的数学【AIoT阶段二】 的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 多元函数微分学,读之前建议先看:程序员的数学【微积分基础】,本文涵盖了一些计算的问题并使用代码进行了实现,安装代码运行环境见博客:最详细的Anaconda Installers 的安装【numpy,jupyter】(图+文),如果你只是想要简单的了解有关线代的内容,那么只需要学习一下博文:NumPy从入门到高级,如果你是跟着博主学习 A I o T AIoT AIoT 的小伙伴,建议先看博文:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),如果你没有 P y t h o n Python Python 基础,那么还需先修博文:Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)
一、多元函数的定义
🚩设
D
D
D 为一个非空的
n
n
n 元有序数组的集合,
f
(
x
)
f(x)
f(x) 为某一确定的对应规则,也称为函数关系。
(
x
1
,
x
2
,
.
.
.
x
n
)
∈
D
(x_1,x_2,...x_n)∈D
(x1,x2,...xn)∈D 如果对于每一个有序数组,通过对应规则
f
(
x
)
f(x)
f(x) 都有唯一确定的实数
y
y
y 与之对应,则称对应规则
f
(
x
)
f(x)
f(x) 为定义在
D
D
D 上的
n
n
n 元函数。记为:
y
=
f
(
x
1
,
x
2
,
.
.
.
x
n
)
,
(
x
1
,
x
2
,
.
.
.
x
n
)
∈
D
y=f(x_1,x_2,...x_n),(x_1,x_2,...x_n)∈D
y=f(x1,x2,...xn),(x1,x2,...xn)∈D。变量
x
1
,
x
2
,
.
.
.
x
n
x_1,x_2,...x_n
x1,x2,...xn 称为自变量;
y
y
y 称为因变量。
- 当 n = 1 n=1 n=1 时,为一元函数,记为 y = f ( x ) , x ∈ D y=f(x),x∈D y=f(x),x∈D;
- 当 n = 2 n=2 n=2 时,为二元函数,记为 y = f ( x , y ) , ( x , y ) ∈ D y=f(x,y),(x,y)∈D y=f(x,y),(x,y)∈D,如图所示:
- 二元及以上的函数统称为多元函数。
二、偏导数
偏导数,可以看作是导数的推广,对于多元函数来说,我们把其它的自变量固定不动,看成是常量,我们对其中的某一个变量求导数的话,那就是偏导数了,只对一个变量求导数!
几何意义上面来说就是在某个方向上对原函数来切一下,再去求导,就是偏导数。举例说明:
f ( x , y ) = x 2 + 3 x y − 2 y 2 f(x,y)=x^2+3xy-2y^2 f(x,y)=x2+3xy−2y2
对变量 x x x 求偏导数,其中 y y y 是常量
f ′ x = ∂ f ∂ x = 2 x + 3 y f'x=\frac{∂f}{∂x}=2x+3y f′x=∂x∂f=2x+3y
对变量 y y y 求偏导数,则 x x x 是常量
f ′ y = ∂ f ∂ y = 3 x − 4 y f'y=\frac{∂f}{∂y}=3x-4y f′y=∂y∂f=3x−4y
三、高阶偏导数
🚩有高阶导数,同样也有高阶偏导数,它的情况比高阶导数要复杂一些,因为它的求导变量有多个,比如说: ∂ 2 f ∂ x ∂ y \frac{∂^2f}{∂x∂y} ∂x∂y∂2f
它对 x , y x,y x,y 求高阶偏导数的话,就是先对 x x x 求偏导,再对 求偏导,其实跟一元函数的高阶导数是一样的,依次对每个变量反复求导即可,我们还是以上面的公式为例:
f ( x , y ) = x 2 + 3 x y − 2 y 2 f(x,y)=x^2+3xy-2y^2 f(x,y)=x2+3xy−2y2
二元函数的二阶偏导数有四个:
∂ 2 f ∂ 2 x = 2 \frac{∂^2f}{∂^2x}=2 ∂2x∂2f=2
∂ 2 f ∂ x ∂ y = 3 \frac{∂^2f}{∂x∂y}=3 ∂x∂y∂2f=3
∂ 2 f ∂ y ∂ x = 3 \frac{∂^2f}{∂y∂x}=3 ∂y∂x∂2f=3
∂ 2 f ∂ 2 y = − 4 \frac{∂^2f}{∂^2y}=-4 ∂2y∂2f=−4
有个重要的结论,就是高阶导数和求导次序无关:
∂ 2 f ∂ x ∂ y = ∂ 2 f ∂ y ∂ x \frac{∂^2f}{∂x∂y}=\frac{∂^2f}{∂y∂x} ∂x∂y∂2f=∂y∂x∂2f
四、梯度
🚩机器学习中的梯度下降法,和牛顿法很多地方都会用到梯度这个概念。
ᐁ f ( x ) = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ] T ᐁf(x)=[\frac{∂f}{∂x_1},\frac{∂f}{∂x_2},...,\frac{∂f}{∂x_n}]^T ᐁf(x)=[∂x1∂f,∂x2∂f,...,∂xn∂f]T
梯度可以看成一元函数的导数,对于多元函数来说就是偏导数而已。
对于多元函数如果它的自变量有 N N N 个: x 1 , x 2 , . . . x n x_1,x_2,...x_n x1,x2,...xn。它的梯度是个向量,是由对 x 1 , x 2 , . . . x n x_1,x_2,...x_n x1,x2,...xn 变量。
求偏导数构成的这样一个向量,称之为梯度。梯度我们用倒三角这个符号来表示,对 f ( x ) f(x) f(x) 求梯度得到上面所示的向量 ᐁ f ( x ) ᐁf(x) ᐁf(x)
五、雅可比矩阵
5.1 雅克比矩阵定义
🚩这个可能很多同学学高等数学的时候可能没有学过,但是这个也比较好理解,就是由一阶偏导数构成的矩阵,发明它的目的主要是为了简化求导公式,对多元的复合函数求导,如果我们用雅可比矩阵来计算的话,它会写起来非常简洁,这在我们的人工神经网络反向推导的过程中往往会看到的。
y = f ( x ) y=f(x) y=f(x) ,其中 x x x 是 n n n 维向量表示有 n n n 个未知数即 n n n 个自变量, y y y 是 k k k 维的向量表示函数对应关系计算返回 k k k 个因变量。
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 求偏导,然后构成的矩阵叫做雅可比矩阵:
5.2 雅克比矩阵示例
自变量
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3 根据函数
f
(
x
)
f(x)
f(x) 映射为因变量
y
1
,
y
2
y_1,y_2
y1,y2,那么
y
1
y_1
y1 是
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3 的函数,
y
2
y_2
y2 也是
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3 的函数,那么函数
f
(
x
)
f(x)
f(x) 的雅可比矩阵如下:
六、Hessian矩阵
6.1 Hessian矩阵定义
🚩
H
e
s
s
i
a
n
Hessian
Hessian 矩阵是对于一个多元函数来说的,它就相当于一元函数的二阶导数。有一个关于
x
x
x 的
n
n
n 元函数
f
(
x
)
f(x)
f(x),自变量为
x
1
,
x
2
,
.
.
.
x
n
x_1,x_2,...x_n
x1,x2,...xn,那么
H
e
s
s
i
a
n
Hessian
Hessian 矩阵为:
Hessian 矩阵是一个 n × n n\times n n×n 的矩阵,里面的元素是二阶偏导数构成的。第一个元素是对 x 1 x_1 x1 求二阶偏导数,第二个元素是对 x 1 , x 2 x_1,x_2 x1,x2 求偏导数,因为咱们前面讲过,多元函数高阶偏导数和顺序无关,所以 H e s s i a n Hessian Hessian 矩阵是对称矩阵。
6.2 实例演示Hessian矩阵
f ( x , y , z ) = 3 x 2 − 4 x y + y 2 − 3 z 2 f(x,y,z)=3x^2-4xy+y^2-3z^2 f(x,y,z)=3x2−4xy+y2−3z2
首先求函数 f ( x , y , z ) f(x,y,z) f(x,y,z) 的一阶偏导数:
- f ′ x = 6 x − 4 y f'x=6x-4y f′x=6x−4y
- f ′ y = − 4 x + 2 y f'y=-4x+2y f′y=−4x+2y
- f ′ z = − 6 z f'z=-6z f′z=−6z
然后求解
H
e
s
s
i
a
n
Hessian
Hessian 矩阵:
H e s s i a n Hessian Hessian 矩阵和函数的凹凸性是有密切关系的,如果 H e s s i a n Hessian Hessian 矩阵正定,可以说函数 f ( x ) f(x) f(x) 是凸函数,如果是负定,它就是凹函数 。矩阵正定是如何判定的呢?
七、极值判别法则
7.1 极值判定条件
🚩对于一元函数,我们前面讲过, f ( x ) f(x) f(x) 的一阶导数等于 0 0 0 处有极值,当 f ( x ) f(x) f(x) 的二阶导数大于 0 0 0 时是极小值,当 f ( x ) f(x) f(x) 的二阶导数小于 0 0 0 时是极大值,可以参考 f ( x ) = x 2 f(x)=x^2 f(x)=x2 的这个函数,其二阶导数是 f ′ ′ ( x ) = 2 f''(x)=2 f′′(x)=2,那么该函数是凸函数。
多元函数的极值判别法则,首先 f ( x ) f(x) f(x) 的一阶导数等于 0 0 0,这点是驻点,那它就可能是极值点,它是极大值还是极小值或者不是极值怎么判定的?
看 H e s s i a n Hessian Hessian 矩阵,在 f ( x ) f(x) f(x) 的一阶导数等于 0 0 0 处,就是驻点处。
- 如果 H e s s i a n Hessian Hessian 矩阵是正定的话,函数在该点有极小值;
- 如果 H e s s i a n Hessian Hessian 矩阵是负定的话,函数在该点有极大值;
- 如果 H e s s i a n Hessian Hessian 矩阵不定,函数在该点不是极值;
7.2 实对称矩阵正定负定判定
🚩实对称矩阵 A A A 正定负定判定条件:
- 对于任意向量 v ⃗ ≠ 0 \vec{v}≠0 v=0,都有 v ⃗ T A v ⃗ > 0 \vec{v}^TA\vec{v}>0 vTAv>0,那么 A A A 就是正定矩阵;
- 对于任意向量 v ⃗ ≠ 0 \vec{v}≠0 v=0,都有 v ⃗ T A v ⃗ < 0 \vec{v}^TA\vec{v}<0 vTAv<0,那么 A A A 就是负定矩阵;
实对称矩阵 A A A 负定,代码演示:
import numpy as np
A = np.array([[-2, -3, -1],
[-3, -6, -4],
[-1, -4, -5]])
v = np.array([-2, -3, -7])
print('给定向量任意向量v:', v)
print('求解矩阵A正定判定条件结果是:', v.T.dot(A).dot(v))
实对称矩阵
A
A
A 正定,代码演示:
import numpy as np
A = np.array([[5, 1, -4],
[1, 3, -2],
[-4, -2, 7]])
v = np.random.randint(-50, 50,size = 3)
print('给定向量任意向量v:', v)
print('求解矩阵A正定判定条件结果是:', v.dot(A).dot(v))
但是这样不太容易判断,我们还可以根据特征值正负去判断矩阵正定与否:
- 矩阵 A A A 的特征值全部大于 0 0 0,那么矩阵 A A A 为正定矩阵;
- 矩阵 A A A 的特征值全部小于 0 0 0,那么矩阵 A A A 为负定矩阵;
实对称矩阵 A A A 负定,特征值代码演示:
import numpy as np
A = np.array([[-2, -3, -1],
[-3, -6, -4],
[-1, -4, -5]])
w,v = np.linalg.eig(A)
print('矩阵A的特征值特征向量是:')
display(w, v)
实对称矩阵 A A A 正定,特征值代码演示:
import numpy as np
A = np.array([[5, 1, -4],
[1, 3, -2],
[-4, -2, 7]])
np.linalg.eig(A)
八、二次型
8.1 二次型定义
🚩二次型就是纯二次项构成的一个函数 。
因为二次函数(方程)的二次部分最重要,为了方便研究,我们把含有
n
n
n 个变量的二次齐次函数:
称为二次型。
8.2 二次型表示
🚩我们可以通过矩阵来进行表示
二次型通俗表现形式:
二次型矩阵表示:
n n n 个变量的二次齐次函数矩阵表示:
8.3 二次型应用
🚩在机器学习中,我们可以根据数据分布进行模型选择:
- 如果数据分布是一次型的,那我们就可以选择 L o g i s t i c Logistic Logistic R e g r e s s i o n Regression Regression、 S V M SVM SVM 等分界面为一次型的模型;
- 如果数据分布是二次型的,我们可以选择 n a i v e naive naive b a y e s bayes bayes;
- 如果数据分布既不是一次型也不是二次型,那我们可以选择基于决策树的模型,例如 G B D T GBDT GBDT、随机森林等,或者 D N N DNN DNN(深度神经网络),这些模型都高度非线性,表达能力极强理论上可以拟合任意曲线。
8.4 Hessian矩阵与二次型
将
H
e
s
s
i
a
n
Hessian
Hessian 矩阵
A
A
A 转换为二次型:
f ( x ) = x ⃗ T A x ⃗ f(x)=\vec{x}^TA\vec{x} f(x)=xTAx,其中 x ⃗ \vec{x} x 表示非零任意向量。
- f ( x ) > 0 , x ⃗ ≠ 0 , x ∈ R f(x)>0,\vec{x}≠0,x∈R f(x)>0,x=0,x∈R,则 f ( x ) f(x) f(x) 为正定二次型, A A A 为正定矩阵
- f ( x ) ≥ 0 , x ⃗ ≠ 0 , x ∈ R f(x)≥0,\vec{x}≠0,x∈R f(x)≥0,x=0,x∈R,则 f ( x ) f(x) f(x) 为半正定二次型, A A A 为半正定矩阵
- f ( x ) < 0 , x ⃗ ≠ 0 , x ∈ R f(x)<0,\vec{x}≠0,x∈R f(x)<0,x=0,x∈R,则 f ( x ) f(x) f(x) 为负定二次型, A A A 为负定矩阵
- f ( x ) ≤ 0 , x ⃗ ≠ 0 , x ∈ R f(x)≤0,\vec{x}≠0,x∈R f(x)≤0,x=0,x∈R,则 f ( x ) f(x) f(x) 为半负定二次型, A A A 为半负定矩阵
- 以上皆不是,就叫做不定
正定效果图,如下所示:
半正定效果图,如下:
不定效果图,如下: