最近在学习机器学习的的过程中老遇到范数的定义,在读论文过程中也常遇到L1范数,L2范数等等。正好最近在看deep learning这本书,就总结记录一下。
L P L^{P} LP范数
从数学的角度来看,范数是向量大小的一种表示,也即是范数越大,表示向量越大。在数学上,
L
P
L^{P}
LP范数的定义如下:
其中,
p
∈
R
,
p
≥
1
p\in \mathbb{R},p\geq 1
p∈R,p≥1。
L 1 L^{1} L1范数
当p==1时,称为
L
1
L^{1}
L1范数,在某些机器学习的任务中,区分0和非0但值很小的元素是非常重要的,在这种情况下,可以使用
L
1
L^{1}
L1范数, p=1时,
L
1
L^{1}
L1范数简化为:
∥
x
∥
1
=
∑
i
∣
x
i
∣
\left \| \textup{x} \right \|_{1} = \sum_{i}^{}\left | x_{i} \right |
∥x∥1=∑i∣xi∣
在机器学习中,当0与非0元素之间的差异非常重要时,通常会使用
L
1
L^{1}
L1范数。当向量x的某个元素从0增加到e,
L
1
L^{1}
L1范数也会增加e。
LASSO回归算法就是线性回归加上一个
L
1
L^{1}
L1范数的正则项。
pytorch中提供了简单的API来求范数,使用torch.norm()方法可以简单的求出向量的范数,如下:
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# Author:WeiFeng Liu
# @Time: 2021/11/8 下午1:58
import torch
a = torch.rand(5)
print(a)
print(sum(a))
print(a.norm( p= 1))
运行结果:
对一维向量来说,
L
1
L^{1}
L1范数就是的元素的绝对值只和,在元素都大于0的情况下,就是向量各元素之和。
L 2 L^{2} L2范数
当p = 2时,
L
2
L^{2}
L2范数也称为欧几里得范数,其实就是向量和0向量之间的距离度量。
L
2
L^{2}
L2范数在机器学习中应用极其广泛。例如,经典的岭回归算法就是线性回归加上一个
L
2
L^{2}
L2范数的正则化。
L
2
L^{2}
L2范数公式简化如下:
∥
x
∥
2
=
(
∑
i
∣
x
i
∣
)
1
2
\left \| \textup{x} \right \|_{2} = \left ( \sum_{i}^{}\left | x_{i} \right |\right )^{\frac{1}{2}}
∥x∥2=(∑i∣xi∣)21
也就是初中数学课本的点到原点的距离公式,
L
2
L^{2}
L2范数在论文中尝尝简化写为
∥
x
∥
\left \| \textup{x} \right \|
∥x∥。
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# Author:WeiFeng Liu
# @Time: 2021/11/8 下午1:58
import torch
a = torch.rand(5)
print(a)
# print(sum(a))
print(a.norm( p= 2))
平方 L 2 L^{2} L2范数
在 L 2 L^{2} L2范数的基础上加上一个平方,即去掉了 L 2 L^{2} L2范数开根号的过程。 L 2 L^{2} L2范数和平方 L 2 L^{2} L2范数有一样的单调性,且平方 L 2 L^{2} L2范数在数学上和计算上都更简单。
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# Author:WeiFeng Liu
# @Time: 2021/11/8 下午1:58
import torch
a = torch.rand(5)
print(a)
# print(sum(a))
print(a.norm( p= 2)**2)
L ∞ L^{\infty } L∞范数
L
∞
L^{\infty }
L∞范数也叫最大范数,这个范数表示使用向量中绝对值最大的元素:
∥
x
∥
∞
=
m
a
x
i
∣
x
∣
i
\left \| x \right \|_{\infty }=\underset{i}{max}\left | x \right |_{i}
∥x∥∞=imax∣x∣i
Frobenius范数
衡量矩阵大小的范数,就是矩阵各点元素平方和的平方跟:
∥
A
∥
F
=
∑
i
,
j
A
i
,
j
2
\left \| A \right \|_{F }=\sqrt{\sum_{i,j}^{}A_{i,j}^{2}}
∥A∥F=∑i,jAi,j2