目录
- 前言
- 一、多元函数的定义
- 二、偏导数
- 三、高阶偏导数
- 四、梯度
- 五、雅可比矩阵
- 5.1 雅克比矩阵定义
- 5.2 雅克比矩阵示例
- 六、Hessian矩阵
- 6.1 Hessian矩阵定义
- 6.2 实例演示Hessian矩阵
- 七、极值判别法则
- 7.1 极值判定条件
- 7.2 实对称矩阵正定负定判定
- 八、二次型
- 8.1 二次型定义
- 8.2 二次型表示
- 8.3 二次型应用
- 8.4 Hessian矩阵与二次型
前言
本文其实值属于:程序员的数学【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 为半负定矩阵
- 以上皆不是,就叫做不定
正定效果图,如下所示:
半正定效果图,如下:
不定效果图,如下: