今天说一个深度学习和机器学习里面经常出现,但是未必人人都能 get 到直观感受的概念:范数,英文名叫 norm。
1、直观感受
本质上来讲,范数是用来衡量一个向量(vector)的规模的,我个人觉得中文中的「体量」这个词翻译它更形象。
什么叫规模,举个例子,x 和 y 两个向量分别如下:
x:tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])y:tensor([0., 0.])
他们的 size 分别是:
x: torch.Size([3, 3])y: torch.Size([2])
x 的规模是 3 维的,而且每个维度有 3 个取值,值的数值都为1;y 的规模是 1 维的, 每个维度只有 2 个取值,数值为0;
无论是维度还是数值大小,x 都毫无疑问比 y 大。如果现在问你,这两个向量的规模哪个大一些,相信你能很直观且不违背直觉地得出结论:x 的规模更大,即「体量」更大。
当然,还有一种比较亲民的理解方法,你可以把一个向量的范式衡量了这个向量指向的终点距离原点的距离。 这样一来,维度很高且各维度上取值都很大的向量指向的点,肯定就比维度低且取值小的点,距离原点更远些。所以前者的范数更大。
那么在数学上具体是怎么定义范式的呢?
2. 数学定义
严格来说,范式是一个可以由一个向量映射到一个数值的函数。这个函数遵从下面几条规则:
范式是非负的,当你把它理解为长度的时候,就不难理解这个限制,因为长度是非负的。
当且仅当向量为零向量时,这个向量的范数才为零。
范数遵循三角定律。两个向量相加以后求范式 <= 两个向量求范式以后再相加。
向量乘以标量以后求范式 = 向量求范式以后再乘以标量。