程序员的数学【多元函数微分学】

前言

本文其实值属于:程序员的数学【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),xD
  • 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+3xy2y2

对变量 x x x 求偏导数,其中 y y y 是常量

f ′ x = ∂ f ∂ x = 2 x + 3 y f'x=\frac{∂f}{∂x}=2x+3y fx=xf=2x+3y

对变量 y y y 求偏导数,则 x x x 是常量

f ′ y = ∂ f ∂ y = 3 x − 4 y f'y=\frac{∂f}{∂y}=3x-4y fy=yf=3x4y

三、高阶偏导数

🚩有高阶导数,同样也有高阶偏导数,它的情况比高阶导数要复杂一些,因为它的求导变量有多个,比如说: ∂ 2 f ∂ x ∂ y \frac{∂^2f}{∂x∂y} xy2f

它对 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+3xy2y2

二元函数的二阶偏导数有四个:

∂ 2 f ∂ 2 x = 2 \frac{∂^2f}{∂^2x}=2 2x2f=2

∂ 2 f ∂ x ∂ y = 3 \frac{∂^2f}{∂x∂y}=3 xy2f=3

∂ 2 f ∂ y ∂ x = 3 \frac{∂^2f}{∂y∂x}=3 yx2f=3

∂ 2 f ∂ 2 y = − 4 \frac{∂^2f}{∂^2y}=-4 2y2f=4

有个重要的结论,就是高阶导数和求导次序无关:

∂ 2 f ∂ x ∂ y = ∂ 2 f ∂ y ∂ x \frac{∂^2f}{∂x∂y}=\frac{∂^2f}{∂y∂x} xy2f=yx2f

四、梯度

🚩机器学习中的梯度下降法,和牛顿法很多地方都会用到梯度这个概念。

ᐁ 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)=[x1f,x2f,...,xnf]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)=3x24xy+y23z2

首先求函数 f ( x , y , z ) f(x,y,z) f(x,y,z) 的一阶偏导数:

  • f ′ x = 6 x − 4 y f'x=6x-4y fx=6x4y
  • f ′ y = − 4 x + 2 y f'y=-4x+2y fy=4x+2y
  • f ′ z = − 6 z f'z=-6z fz=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 v TAv >0,那么 A A A 就是正定矩阵;
  • 对于任意向量 v ⃗ ≠ 0 \vec{v}≠0 v =0,都有 v ⃗ T A v ⃗ < 0 \vec{v}^TA\vec{v}<0 v TAv <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)=x TAx ,其中 x ⃗ \vec{x} x 表示非零任意向量。

  • f ( x ) > 0 , x ⃗ ≠ 0 , x ∈ R f(x)>0,\vec{x}≠0,x∈R f(x)>0,x =0,xR,则 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,xR,则 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,xR,则 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,xR,则 f ( x ) f(x) f(x) 为半负定二次型, A A A 为半负定矩阵
  • 以上皆不是,就叫做不定

正定效果图,如下所示:
在这里插入图片描述

半正定效果图,如下:
在这里插入图片描述
不定效果图,如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值