数有大小,向量也有大小,向量的大小我们通过范数(Norm)来衡量。范数在机器学习、深度学习中运用非常广泛,特别在限制模型复杂度、提升模型的泛化能力方面效果不错。p范数的定义如下:
其中p∈R,P≥1。
直观上来看,向量x的范数是度量从原点到点x的距离,范数是将向量映射到非负值的函数,如果从广义来说,任意一个满足以下三个条件的函数,都可称为范数:
1)非负性:f(x)≥0,且当f(x)=0时,必有x=0;
2)三角不等式性:f(x+y)≤f(x)+f(y);
3)齐次性:∀α∈R,∀x∈R n , f (αx) =|α | f(x)。
当p=1时,即L 1 范数,也称为绝对值范数,大小等于向量每个元素的绝对值之和,即:
当p=2时,即L 2 范数,也称为欧几里得范数,其大小表示从原点到当前点的欧几里得距离,即:
当p为∞时,即L ∞ 范数,也称为最大范数,它的值等于向量中每个元素的绝对值的最大值,即:
前面主要介绍了利用范数来度量向量的大小,那么矩阵的大小如何度量呢?我们可以用类似的方法。在深度学习中,常用Frobenius范数来描述,即:
它有点类似向量的L 2 范数。
两个向量的点积可以用范数来表示,即:
其中θ表示x与y之间的夹角。
以上说了向量的一种度量方式,即通过范数来度量向量或矩阵的大小,并有具体公式,在实际编程中如何计算向量的范数呢?这里我们还是以Python为例进行说明。
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求向量的范数还是很方便的。