矩阵进阶 - 范数
范数(norm)
不管是一个向量,还是一个矩阵,我们在机器学习中都经常需要有一个对于它们大小的度量。
对于向量的度量,就是欧基里得距离,即所有的值的平方的和的平方根。
我们用ord='euclidean'的参数来调用tf.norm来求欧基里得范数。
例:
>>> a2 = tf.constant([1,2,3,4],dtype=tf.float32)
>>> sess.run(tf.norm(a2, ord='euclidean'))
5.477226
用sqrt计算:
>>> np.sqrt(1*1+2*2+3*3+4*4)将向量的范数推广到矩阵。还是求平方和的平方根。
>>> a3 = tf.constant([[1,2],[3,4]],dtype=tf.float32)
>>> a3
'Const_34:0' shape=(2, 2) dtype=float32>
>>> sess.run(a3)
array([[1., 2.],
[3., 4.]], dtype=float32)
>>> sess.run(tf.norm(a3,ord=2))
5.477226
矩阵的范数叫Frobenius范数。
范数的定义
欧几里得范数和Frobenius范数只是范数的特例。更一般地,范数的定义如下:
∥x∥p=(∑i|xi|p)1p
其中,p∈R,p≥1
范数本质上是将向量映射到非负值的函数。当p=2时,L2范数称为欧几里得范数。因为在机器学习中用得太多了,一般就将∥x∥2简写成∥x∥。
范数是满足下列性质的任意函数:
- f(x)=0⇒x=0
- f(x+y)≤f(x)+f(y) (这条被称为三角不等式, triangle inequality)
- ∀α∈R,f(αx)=|α|f(x)
范数的推广
除了L2范数之外,在机器学习中还常用L1范数,就是所有元素的绝对值的和。
有时候,我们只想计算向量或者矩阵中有多少个元素,这个元素个数也被称为L0范数。但是,这种叫法是不科学的,因为不符合上面三条定义中的第三条。一般建议还是使用L1范数。
我们来看下L1范数的例子:
>>> sess.run(tf.norm(a3,ord=1))另外,还有一个范数是L∞范数,也称为最大范数(max norm). 最大范数表示向量中具有最大幅值的元素的绝对值。
我们可以用ord=np.inf的参数来求最大范数。
>>> sess.run(tf.norm(a3,ord=np.inf))
4.0范数与赋范空间
定义1 向量范数:设V是数域F上的线性空间,且对于V的任一个向量x,对应一个非负实数∥x∥,满足以下条件:
- 正定性:∥x∥≥0, ∥x∥=0当且仅当x=0
- 齐次性:∥αx∥=|α|∥x∥,a∈F
- 三角不等式:对任意x,y∈V,都有∥x+y∥≤∥x∥+∥y∥,则称∥x∥为向量x的范数,[V;∥⋅∥]为赋范空间。
定义2 矩阵范数:设A∈Cm×n,对每一个A,如果对应着一个实函数N(A),记为∥A∥,它满足以下条件
- 非负性:∥A∥≥0, 正定性:A=Om×n⇔∥A∥=0
- 齐次性:∥αA∥=|α|∥A∥,α∈C
- 三角不等式: ∥A+B∥≤∥A∥∥B∥,∀B∈Cm×n,则称N(A)=∥A∥为A的广义矩阵范数。进一步,若对Cm×n,Cn×l,Cm×l上的同类广义矩阵范数∥⋅∥,有下面的结论:
- (矩阵乘法的)相容性:∥AB∥≤∥A∥∥B∥,B∈Cn×l,则称N(A)=∥A∥为A的矩阵范数。
评论列表(0条)