第2 章 向量基本运算
2.1转置运算
向量的转置(Transpose)将列向量变成行向量,或将行向量变成列向量。
向量X的转置记为。
例1:,
用Python表示:
1 2 |
X=np.array([1,2,3]) X.T |
2.2 两个向量的点积
两个向量(如X、Y,它们的维数相同)的点积(或称为内积)定义为它们对应元素乘积之和,记为:
例2:,
向量与自身的点积为所有元素的平方和:
如果两个向量的点积为0,则称它们正交。
点积运算满足如下规律:
利用点积可以简化线性函数的表述,这种方法在机器学习中经常可以看到。
如表示权重与输入、偏置项(b)的线性模型预测函数:
设权重向量,输入向量,式(2.5)可写成:
点积运算用于在机器学习的正向传播过程。
2.3 两个向量的阿达马 (Hadamard) 积
两个向量的阿达马积或称为遂元乘积、对应元素的乘积,是它们对应元素相乘。
记为: 或
例3:X=[1 2 3] Y=[2 2 1]
X*Y=[1×2 2×2 3×1]=[2 4 3]
当向量X、Y的元素个数相同时,还可进行对应元素的加、减、乘、除等算术运算。
X+Y=[3 4 4 ]
X/Y=[0.5 1 3]
用Python代码实现
1 2 3 |
X=np.array([1,2,3]) Y=np.array([2,2,1]) X*Y #或np.multiply(X,Y) |
经过阿达马运算的向量或矩阵维度不变,如:
1 2 3 4 5 6 7 8 9 |
import numpy as np #定义sigmoid激活函数 def sigmoid(x): return 1/(1+np.exp(-x)) A=np.array([-1.0,2.0,3.0]) B=np.array([[1.0,2.0,3.0],[4.0,5.0,6.0]]) print("A向量运行后形状:{},B矩阵运行后形状:{}".format(sigmoid(A).shape,sigmoid(B).shape)) |
运行结果:
A向量运行后形状:(3,),B矩阵运行后形状:(2, 3)
阿达马积在机器学习中的正向传播和反向传播、梯度下降法中经常出现。
2.4向量的范数
数有大小,向量也有大小,向量的大小我们通过范数(Norm)来衡量。范数在机器学习、深度学习中运用非常广泛,特别在限制模型复杂度、提升模型的泛化能力方面效果不错。p范数的定义如下:
其中
直观上来看,向量x的范数是度量从原点到点x的距离,范数是将向量映射到非负值的函数,如果从广义来说,任意一个满足以下三个条件的函数,都可称为范数:
(1)非负性:f(x)≥0,且当f(x)=0时,必有x=0;
(2)三角不等式性:f(x+y)≤f(x)+f(y);
(3)齐次性:
当p=1时,即范数,也称为绝对值范数,大小等于向量的每个元素绝对值之和,即:
当p=2时,即范数,也称为欧几里得范数,其大小表示从原点到当前点的欧几里得距离,即:
当p为时,即范数,也称为最大范数,它的值等于向量中每个元素的绝对值的最大值,即:
前面主要介绍了利用范数来度量向量的大小,矩阵的大小如何度量呢?我们可以用类似的方法。在深度学习中,常用Frobenius范数来描述,即:
它有点类似向量的范数。
两个向量的点积可以用范数来表示,即:
其中表示x与y之间的夹角。 以上说了向量一种度量方式,即通过范数来度量向量或矩阵的大小,并有具体公式,在实际编程中如何计算向量的范数呢?这里我们还是以Python为例进行说明。
1 2 3 4 5 6 7 8 9 10 11 12 |
import numpy as np import numpy.linalg as LA #导入NumPy中线性代数库 x=np.arange(0,1,0.1) #自动生成一个[0,1)间的10个数,步长为0.1 print(x) x1= LA.norm(x,1) #计算1范数 x2= LA.norm(x,2) #计算2范数 xa=LA.norm(x,np.inf) #计算无穷范数 print(x1) print(x2) print(xa) |
打印结果如下:
[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
4.5
1.68819430161
0.9
由此看出利用Python求向量的范数还是很方便的。
例3:点积与范数的应用实例:
在平面解析几何中,点到直线ax+by+c=0的距离为:
在空间解析几何中,点到平面ax+by+cz+d=0的距离为:
将其推广到n维空间,点到超平面(或的距离为:
2.5线性相关性
前面我们介绍了向量、矩阵等概念,接下来我们将介绍向量组、线性组合、线性相关性、秩等重要概念。
由多个同维度的列向量构成的集合称为向量组,矩阵可以看成是由行向量或列向量构成的向量组。
2.5.1线性组合
给定向量组其中,对任何一组实数,构成的表达式:
称为向量组X的一个线性组合,称为向量组的系数。
对于任意一个m维向量b,如果存在一组实数,使得:
成立,则称向量b可以被向量组线性表示。
对于任意实数集,由(2.10)式构成的所有向量集合,称为向量空间,其中
向量空间的概念有点抽象,我们举一个简单实例来说明这个概念,比如由三个向量构成的向量组和任何一组实数就构成了一个三维空间。
2.5.2线性相关
线性相关性主要分析向量之间的关系,一组向量他们之间有哪些关系呢?这些关系有何重要应用?
向量组线性相关 <=> 存在不全为0的实数,使得:
如果不存在一组不全为0的数使<=>向量组线性无关或线性独立。
例1:线性无关,因为,只有,所以线性无关。
例2:线性有关,因为。
都不为0(至少一个不为0),所以线性相关。
线性相关和线性无关的等价定义:利用矩阵乘法公式,式(2.11)可表示为:
这里假设:,由线性方程组的理论,可得:
Ax=0只有零解,线性无关;
Ax=0有非零解,线性相关;
由线性方程组解的存在性与矩阵的秩的关系,有如下定理:
线性无关;
线性相关;
2.5.3向量组的秩
假设在原向量组存在一个子向量组,不妨设为,满足: (1)线性无关; (2)向量组X的中任意r+1个向量构成的子向量组都是线性相关的。 那么,称向量组,r 秩是一个重要概念,运用非常广泛,实际上矩阵我们可以看成是一个向量组。如果把矩阵看成是由所有行向量构成的向量组,这样矩阵的行秩就等于行向量组的秩;如果把矩阵看成是由所有列向量构成的向量组,这样矩阵的列秩就等于列向量组的秩。矩阵的行秩与列秩相等,因此,把矩阵的行秩和列秩统称为矩阵的秩。
2.5.4.向量空间
如果在n维向量集合S上的加法、数乘运算封闭,则称S为向量空间或线性空间。
即,对任意,都有,其中k是任意实数.
如通常看到的2维向量构建的集合,3维向量构成的集合,就是向量空间或线性空间。