本篇博客主要给大家介绍一下,在学习python AIOT方向中,必备的数学基础知识。
定义设D为一个非空的n 元有序数组的集合, f 为某一确定的对应规则。
若对于每一个有序数组,通过对应规则 f,都有唯一确定的实数 y 与之对应,则称对应规则 f 为定义在 D 上的n 元函数。记为 。 变量 称为自变量;y称为因变量。
当n=1时,为一元函数,记为y=f(x),x∈D;
当n=2时,为二元函数,记为z=f(x,y),(x,y)∈D,图象如下图。
二元及以上的函数统称为多元函数。
偏导数,可以看作是导数的推广,对于多元函数来说,我们把其他的自变量固定不动,看成是常量,我们对其中的某一个变量求导数的话,那就是偏导数了,只对一个变量求导数!
几何意义上面来说就是在某个方向上对原函数来切一下,再去求导,就是偏导数。举例说明:
对变量x求偏导数,其中y是常量
对变量y求偏导数,其中x是常量
对于多元函数来说,若其一阶偏导数仍是关于每个自变量的函数,并且一阶偏导数对每个自变量的偏导数也存在,则说这个多元函数具有二阶偏导数。以此类推,有三阶偏导数,四阶偏导数等,我们把一阶以上的偏导数称为高阶偏导数。
如果定义在开集 G 上的函数的一阶偏导数关于某个变量可偏微分,就能作出二阶偏导数。同样能定义n阶偏导数。我们即将一阶以上的偏导数称为高阶偏导数。将这些高阶偏导数记为:
举例:
定义:
设二元函数在平面区域D上具有一阶连续偏导数,则对于每一个点P(x,y)都可定出一个向量 ,该函数就称为函数 在点P(x,y)的梯度,记作gradf(x,y)或,即有:
gradf(x,y)= =
其中 称为(二维的)向量微分算子或Nabla算子, 。
设 是方向l上的单位向量,则
由于当方向l与梯度方向一致时,有
所以当l与梯度方向一致时,方向导数 有最大值,且最大值为梯度的模,即
因此说,函数在一点沿梯度方向的变化率最大,最大值为该梯度的模。
通俗一点总结一下:梯度可以看成一元函数的导数,对于多元函数来说就是偏导数而已。
多元函数的梯度公式:
相信很多人没有接触过这个矩阵,其实这个是比较好理解的,雅可比矩阵就是由一阶偏导数构成的矩阵,发明它的目的主要是为了简化求导公式,对多元的复合函数求导,如果我们用雅可比矩阵来计算的话,它会写起来非常简洁,这在人工神经网络反向推导的过程中往往会看到的。
y=f(x), 其中 x 是 n 维向量表示有 n 个未知数即 n 个自变量,y是k维的向量表示函数对应关系计算返回k个因变量。这句话理解不了不要紧,静下心来,我们继续往后看。
Yi = f(Xi) ,其中每个Xi 和每个 Yi 都是相关的,也就是每个 Yi 是单独从 Xi 映射过来的函数。
那么函数f(X)的雅可比矩阵就是每个Yi 分别对每个 Xi 求偏导,然后构成的矩阵就叫雅可比矩阵:
可能看到这里还是有点迷惑,不知道怎么用这个玩意,我们举几个例子,然后再回过头看,就会有不一样的理解。
示例一
示例二
示例三
相信大家对雅可比矩阵有了一个全面的认识。
Hessian矩阵类似于雅可比矩阵,Hessian矩阵是对于一个多元函数来说的,它就相当于一元函数的二阶导数。
有一个关于x 的n元 函数,自变量为
x
1
,
x
2
,
x
3
,
.
.
.
,
x
n
,
{x}_{1},{x}_{2},{x}_{3\, ,...},{x}_{n},
x1,x2,x3,...,xn,那么Hessian矩阵为:
举个例子:
从上面例子我们引出来一个问题:什么是正定呢?矩阵的正定是如何判断呢?
答案就在下一个知识点极值判别法则。
7.1、极值判定条件
对于一元函数,f(x) = x2的一阶导数等于0处有极值,当f(x)的二阶导数大于0时是极小值,当f(x)的二阶导数小于0时是极大值,可以参考f(x) = x2这个函数,其二阶导数为2,大于0,那么该函数是凸函数。
对于多元函数 ,首先f(x)的一阶导数等于0,这点是驻点,那它就可能是极值点,它是极大值还是极小值或者不是极值怎么判定呢?
看Hessian矩阵,在f(x)的一阶导数等于0处,就是驻点处。
那么怎么判断Hessian矩阵正负定呢?
7.2、实对称矩阵的正负定判断
实对称矩阵A正定负定判断条件:
我们用代码演示一下:
实对称矩阵A负定,代码如下:
import numpy as np
A = np.array([[-2,-3,-1],
[-3,-6,-4],
[-1,-4,-5]])
v = np.array([3,5,6])
print('给定向量任意向量v',v)
print('求解矩阵A正定判定条件结果是:'v.dot(A).dot(v))
'''
给定向量任意向量v:[3,5,6]
求解矩阵A正定判定条件结果是: -714
'''
但是这样不太容易判断,我们还可以根据特征值正负去判断矩阵正定与否:
实对称矩阵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的特征值特征向量是:')
print(w,v)
'''
矩阵A的特征值特征向量是:
[-10.54287655 -0.03922866 -2.41789479] 特征值全部为负数
[[ 0.32798528 0.73697623 -0.59100905]
[ 0.73697623 -0.59100905 -0.32798528]
[ 0.59100905 0.32798528 0.73697623]]
'''
那存在不存在特征向量有大与0的,也有小于0的呢? 肯定是存在的,我们称它为不定。那存在不存在特征向量大于等于0的,或者小于等于0的呢? 肯定也是存在的,它们我们称为半正定,或者半负定。
什么是半正定,什么是半负定呢?留个疑问,我们学完下面的二次型就明白啦。
8.1、二次型定义
二次型(quadratic form):n个变量的二次多项式称为二次型,即在一个多项式中,未知数的个数为任意多个,但每一项的次数都为2的多项式。
二次型就是纯二次项构成的一个函数。
因为二次函数(方程)的二次部分最重要,为了发表研究,我们把含有n个变量的二次齐次函数:
称为二次型。
8.2、二次型表示
我们可以通过矩阵来进行表示
二次型通俗表现形式:
二次型矩阵表示:
这里我们可以发现与我们之前说的Hessian矩阵的判定正负有点相似。
n个变量的二次齐次函数矩阵表示:
8.3、二次型应用
在机器学习中,我们可以根据数据分布进行模型选择:
●如果数据分布是一次型的,那我们就可以选择Logistic Regression、SVM 等分界面为-次型的模型;
●如果据分布是二次型的,我们可以选择naive bayes;
●如果数据分布既不是一次型也不是二次型,那我们可以选择基于决策树的模型,例如GBDT、随机森林等,或者DNN (深度神经网络), 这些模型都高度非线性,表达能力极强理论上可以拟合任意曲线。
8.4、Hessian矩阵与二次型
将Hessian矩阵A转换为二次型:
这个就是我们上一节留的疑问,半正定,半负定矩阵。
正定效果图,如下所示:
如上图所示,正定有极小值,相反负定有极大值。
半正定效果图,如下所示:
不定效果图,如下所示:
我们可以看到,不定没有最大值也没有最小值。
以上仅供理解,大概理解正定,负定,半正定,半负定,不定就可以了。
以上就是机器学习必备的多元函数微分学理论基础的知识点。
bye,bye!
python AIOT教程目录:
1.AIOT介绍
2.python AIOT 必备多元函数微分学理论基础
持续更新中。。。,本人马上就要考研了,可能更新有些慢,敬请理解。