在机器学习中经常需要对向量,矩阵有一个对于它们大小的度量。
范数的定义:
∣
∣
x
∣
∣
p
=
(
∑
i
∣
x
i
∣
p
)
1
p
||x||_p = (\sum_i |x_i|^p)^{\frac{1}{p}}
∣∣x∣∣p=(i∑∣xi∣p)p1
其中,p ∈ R, p ≥ 1
范数实质就是将向量映射到非负值的函数, 当p=2时, L 2 L^2 L2范数称为欧几里得范数。因为在机器学习中用的太多, ∣ ∣ x ∣ ∣ 2 ||x||_2 ∣∣x∣∣2一般简写为||x||
更严格地说,范数是满足下列性质的任意函数:
- f(x)=0 ⇒ x=0
- f(x+y) ≤ f(x) + f(y) (这条被称为三角不等式, triangle inequality)
- ∀α∈R,f(αx)=|α|f(x)
除了 ∣ ∣ x ∣ ∣ 2 ||x||_2 ∣∣x∣∣2范数外,在机器学习中还常用 ∣ ∣ x ∣ ∣ 1 ||x||_1 ∣∣x∣∣1范数,也就是所有元素的绝对值的和
在tf.norm中,我们用ord='euclidean’的参数来求欧几里得范数( ∣ ∣ x ∣ ∣ 2 ||x||_2 ∣∣x∣∣2范数),
>>> a03 = tf.constant([[1,2],[3,4]],dtype=tf.float32)
>>> sess.run(tf.norm(a03, ord='euclidean'))
5.477226
换一种方式,同样可得:
>>> np.sqrt(1*1+2*2+3*3+4*4)
5.477226
L 1 L^1 L1范数的例子
>>> sess.run(tf.norm(a02,ord=1))
10.0
L ∞ L^∞ L∞范数, 也称为最大范数(max norm), 表示向量中最大幅值得元素的绝对值。
>>> sess.run(tf.norm(a03,ord=np.inf))
4.0