矩阵进阶 - 范数
作为快餐教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在Tensorflow探索一圈之后,我一定要写一个数学基础比较扎实的进一步教程。
范数(norm)初识
一般大学本科的《线性代数》教材中是不讲范数、广义逆这些知识的,需要学习《矩阵论》课程。但是很不幸,深度学习中会频繁用到。所以我们还是要有个基础的概念的。
不管是一个向量,还是一个矩阵,我们在机器学习中都经常需要有一个对于它们大小的度量。
对于向量的度量,我们的第一印象就用向量的长度就是了么。换成更有文化一点的名词就是欧基里得距离。这么高大上的距离,其实就是所有的值的平方的和的平方根。
我们可以用ord=’euclidean’的参数来调用tf.norm来求欧基里得范数。
例:
>>> a02 = tf.constant([1,2,3,4],dtype=tf.float32)
>>> sess.run(tf.norm(a02, ord='euclidean'))
5.477226
这没啥神秘的,我们用sqrt也照样算:
>>> np.sqrt(1*1+2*2+3*3+4*4)
5.477225575051661
下面我们将向量的范数推广到矩阵。其实还是换汤不换药,还是求平方和的平方根。
>>> a03 = tf.constant([[1,2],[3,4]],dtype=tf.float32)
>>> a03
<tf.Tensor 'Const_34:0' shape=(2, 2) dtype=float32>
>>> sess.run(a03)
array([[1., 2.],
[3., 4.]], dtype=float32)
原来一排的向量,现在换成2x2的矩阵,我们继续求范数。现在有个高大上的名字叫做Frobenius范数。
>>> sess.run(tf.norm(a03,ord=2))
5.477226
嗯,一算下来还是跟[1,2,3,4]向量的范数值是一样的。
范数的定义
欧几里得范数和Frobenius范数只是范数的特例。更一般地,范数的定义如下:
‖x‖p=(∑i|xi|p)1p
‖
x
‖
p
=
(
∑
i
|
x
i
|
p
)
1
p
其中,
p∈ℝ,p≥1
p
∈
R
,
p
≥
1
范数本质上是将向量映射到非负值的函数。当p=2时, L2 L 2 范数称为欧几里得范数。因为在机器学习中用得太多了,一般就将 ‖x‖2 ‖ x ‖ 2 简写成 ‖x‖ ‖ x ‖ 。
更严格地说,范数是满足下列性质的任意函数:
1.
f(x)=0⇒x=0
f
(
x
)
=
0
⇒
x
=
0
2.
f(x+y)≤f(x)+f(y)
f
(
x
+
y
)
≤
f
(
x
)
+
f
(
y
)
(这条被称为三角不等式, triangle inequality)
3.
∀α∈ℝ,f(αx)=|α|f(x)
∀
α
∈
R
,
f
(
α
x
)
=
|
α
|
f
(
x
)
范数的推广
除了 L2 L 2 范数之外,在机器学习中还常用 L1 L 1 范数,就是所有元素的绝对值的和。
有时候,我们只想计算向量或者矩阵中有多少个元素,这个元素个数也被称为 L0 L 0 范数。但是,这种叫法是不科学的,因为不符合上面三条定义中的第三条。一般建议还是使用 L1 L 1 范数。
我们来看下 L1 L 1 范数的例子:
>>> sess.run(tf.norm(a03,ord=1))
10.0
另外,还有一个范数是 L∞ L ∞ 范数,也称为最大范数(max norm). 最大范数表示向量中具有最大幅值的元素的绝对值。
我们可以用ord=np.inf的参数来求最大范数。
>>> sess.run(tf.norm(a03,ord=np.inf))
4.0
范数与赋范空间
最后,我们还是看一下数学上对于范数的严格定义。经过上面对于概念和代码实现的了解,现在这个定义已经不难理解了。
定义1 向量范数:设V是数域F上的线性空间,且对于V的任一个向量x,对应一个非负实数
‖x‖
‖
x
‖
,满足以下条件:
1. 正定性:
‖x‖≥0
‖
x
‖
≥
0
,
‖x‖=0
‖
x
‖
=
0
当且仅当x=0
2. 齐次性:
‖αx‖=|α|‖x‖,a∈F
‖
α
x
‖
=
|
α
|
‖
x
‖
,
a
∈
F
3. 三角不等式:对任意
x,y∈V
x
,
y
∈
V
,都有
‖x+y‖≤‖x‖+‖y‖
‖
x
+
y
‖
≤
‖
x
‖
+
‖
y
‖
,则称
‖x‖
‖
x
‖
为向量x的范数,
[V;‖⋅‖]
[
V
;
‖
⋅
‖
]
为赋范空间。
定义2 矩阵范数:设
A∈Cm×n
A
∈
C
m
×
n
,对每一个A,如果对应着一个实函数N(A),记为
‖A‖
‖
A
‖
,它满足以下条件:
1. 非负性:
‖A‖≥0
‖
A
‖
≥
0
, 正定性:
A=Om×n⇔‖A‖=0
A
=
O
m
×
n
⇔
‖
A
‖
=
0
2. 齐次性:
‖αA‖=|α|‖A‖,α∈C
‖
α
A
‖
=
|
α
|
‖
A
‖
,
α
∈
C
3. 三角不等式:
‖A+B‖≤‖A‖‖B‖,∀B∈Cm×n
‖
A
+
B
‖
≤
‖
A
‖
‖
B
‖
,
∀
B
∈
C
m
×
n
,则称N(A)=
‖A‖
‖
A
‖
为A的广义矩阵范数。进一步,若对
Cm×n,Cn×l,Cm×l
C
m
×
n
,
C
n
×
l
,
C
m
×
l
上的同类广义矩阵范数
‖⋅‖
‖
⋅
‖
,有下面的结论:
4. (矩阵乘法的)相容性:
‖AB‖≤‖A‖‖B‖,B∈Cn×l
‖
A
B
‖
≤
‖
A
‖
‖
B
‖
,
B
∈
C
n
×
l
,则称
N(A)=‖A‖
N
(
A
)
=
‖
A
‖
为A的矩阵范数。