最近搞深度学习用到了范数的概念(准确地说是向量范数),我在这里作一下简单的解释,未必100%准确,但是对我来说已经够用了。
首先,在试图理解之前,我们先看一下它们的数学定义:
1-范数:
2-范数:
或
p-范数:
或
∞-范数:
-∞-范数:
由上面的数学表达式,我们可以归纳一下:除了两个无穷范数以外,剩下的范数都是一个规律,即n范数就是一堆数字的n次方之和再开个n次方的根号;或者说,n范数就是一堆数字的n次方之和的n次方根。这是从计算方法层面上的认知。
那么从物理意义上又该如何认识和理解呢?
通过上面的观察可知,范数首先是一个函数。其次,范数表征了距离这个物理量,可以用于比较不同的向量。
一维情况下,假设有1和2两个数,我们可以直接比较它们的大小:2>1。
但是在二维情况下呢?例如,我们如何比较(0,6)和(3,4)?
这时候我们可以使用范数,比如2-范数:
(0,6)的2-范数结果是6,(3,4)的2-范数结果是5。按照范数是函数的思想,我们也可以说,2-范数这个函数把(0,6)映射到了实数6,把(3,4)映射到了5。这样我们就得到了两个实数,就可以将它们进行比较了。
我们最熟悉的应该就是2-范数,它常被用来计算两个点的欧氏距离。
我们上面谈到范数的计算方法层面的理解时,用了大白话的方式,并不是准确的数学语言,主要是为了让你对范数有一个直观上的理解。下面我们用稍严谨一些的语言来阐释一个常用的情况,即2-范数,来看看我们是如何利用2-范数来求欧氏距离的。
我们在上面说,“n范数就是一堆数字的n次方之和的n次方根”,这里所谓的“一堆数字”,实际上是一个向量的多个维度的坐标。我们假设这个向量x = (x1, x2, x3, x4, x5),这一堆数字实际上就是x1, x2, x3, x4, x5,就是向量x在空间中的五个维度上的度量(或“刻度值”)。当我们把x的各维度平方求和再开平方之后,得到的数值表示什么意义呢?还记得我们说范数可以表征距离吗?
其实这个式子就相当于:
也就是说,x的2-范数表示了x这个点与空间原点的距离,也相当于x这个向量的长度。
所以,当我们想求一个向量的长度或者两点间的距离时,可以用2-范数。
例如,在python中,借助numpy库,我们可以这样写:
# 计算向量x的模
import numpy as np
x = np.array([1,2,3])
print(np.linalg.norm(x, ord=2)) # 此处的ord=2就指定了我们在求2-范数,当然不写也可以,因为norm函数默认就是求2-范数。
# 计算两个点,p和q的欧氏距离
import numpy as np
p = np.array([2,3,3])
q = np.array([6,6,6])
print(np.linalg.norm(p-q, ord=2))