数学知识点之范数
机器学习中会用到很多范数,自己在学习LSTM网络的时候,有一步是计算损失的时候,用到了范数,就顺便整理一下,可能不全,之后再次更新。
数学中:
1. 向量范数:
(1)向量的1-范数: , 即向量中每个元素绝对值的和。
(2)向量的2-范数:,即向量中每个元素平方和之后再开方。
(3)向量的无穷范数:,即向量中元素绝对值最大的一个。
2. 矩阵范数:
(1)矩阵的1-范数(列范数):,矩阵的每列求和,然后从每列和中挑出一个最大的。
(2)矩阵的2-范数:,其中为的特征值。即矩阵特征值绝对值的最大值的开方。
(3)矩阵的无穷范数(行范数):,矩阵的每行求和,然后从每行和中挑出一个最大的。
机器学习用到的一些范数,与数学中的有些区别。
(1)矩阵的核范数:矩阵的奇异值(线代中的特征值分解只适用于方针,奇异值分解适用于任意的矩阵。)之和。
(2)矩阵的L0范数:矩阵的非0元素的个数,它可以来表示矩阵的稀疏性,L0范数越小,则0元素越多,矩阵越稀疏。
(3)矩阵的L1范数:矩阵中每个元素绝对值之和,它是L0范数的最优凸近似,它也可以近似表示稀疏。
(4)矩阵的F范数:矩阵的各个元素平方和之后再开方。通常被称为L2范数。、
(5)矩阵的L21范数:以矩阵每列为单位,求每列F范数,然后将得到的结果求L1范数。
代码:numpy中实现的范数
import numpy as np
#np.linalg.norm(x, ord=None, axis=None, keepdims=False) ord表示范数类型
#向量:
a = np.array([1,2,3])
b = np.array([4,5,6])
print(np.linalg.norm(a-b)) #默认为2范数
print(np.linalg.norm(a-b, 1)) #向量1范数
print(np.linalg.norm(a-b, 2)) #向量2范数
print(np.linalg.norm(a-b, np.inf)) #向量的无穷范数
#矩阵:
a = np.array([[1,2,3],[4,5,6]])
print(a)
print(np.linalg.norm(a)) #默认是F范数
print(np.linalg.norm(a, 2)) #矩阵的2范数
print(np.linalg.norm(a, 1)) #矩阵的1范数
print(np.linalg.norm(a, np.inf)) #矩阵无穷范数
5.196152422706632
9.0
5.196152422706632
3.0
[[1 2 3]
[4 5 6]]
9.539392014169456
9.508032000695724
9.0
15.0
参考资料:
1.np.linalg.norm(求范数) https://blog.csdn.net/hqh131360239/article/details/79061535
2.向量与矩阵的范数(比较1-范数、2-范数、无穷范数、p-范数、L0范数 和 L1范数等)https://blog.csdn.net/zaishuiyifangxym/article/details/81673491