机器学习中的范数

版权声明:原创作品,欢迎转发!转发附上链接 https://blog.csdn.net/qq_26369907/article/details/89788593

主要介绍几个基本概念

  • 规范化参数:机器学习的模型拟合训练数据;

  • 最小化误差:防止机器学习的模型与训练数据过度拟合;

  • 范数:机器学习、深度学习等计算机领域内用的比较多的就是迭代过程中收敛性质的判断,一般迭代前后步骤的差值称为范数,用范数表示其大小。


    常用的是二范数,差值越小表示越逼近实际值,可以认为达到要求的精度,收敛。范数本质是距离,存在的意义是为了实现比较

向量的范数

假设x是向量:
x = ( x 1 , x 2 , , x n ) x=(x_1,x_2,…,x_n)
那么p-范数的计算公式如下:
x p = i = 1 n x i p p \vert\vert x \vert\vert_p = \sqrt[p]{\sum_{i = 1}^{n}|x_i|^p}
x向量的各元素绝对值的p次方之和的p方根。

1) 0-范数:表示向量中非零元素的个数。
x 0 = i = 1 n x i 0 0 \vert\vert x \vert\vert_0 = \sqrt[0]{\sum_{i = 1}^{n} \vert x_i\vert^0}
例子:

>>> x = np.array([-1,0,1])
>>> np.linalg.norm(x, ord=0)
2.0

x向量为(-1,0,1)非0值共2个
2)1-范数:计算方式为向量所有元素的绝对值之和。。
x 1 = i = 1 n x i \vert\vert x \vert\vert_1 = \sum_{i = 1}^{n}\vert x_i\vert
例子:

>>> x
array([-1,  0,  1,  2])
>>> np.linalg.norm(x, ord=1)
4.0

3)2-范数:计算方式跟欧式距离的方式一致,即向量各元素的平方和然后求平方根。
x 2 = i = 1 n x i 2 2 \vert\vert x \vert\vert_2 = \sqrt[2]{\sum_{i = 1}^{n} x_i^2}
例子:

>>> x
array([-1,  0,  1,  2])
>>> np.linalg.norm(x, ord=2)
2.449489742783178

4)+∞ -范数:所有向量元素绝对值中的最大值。
x + = max i = 1 n x i \vert\vert x \vert\vert_{+\infty} = \max_{i = 1}^{n}\vert x_i\vert
例子:

>>> x
array([-1,  0,  1,  2])
>>> np.linalg.norm(x, ord=np.inf)
2.0

5)−∞-范数:所有向量元素绝对值中的最小值。
A F = i = 1 m j = 1 n a i j 2 2 \vert\vert A\vert\vert_F = \sqrt[2]{\sum_{i=1}^m \sum_{j=1}^n \vert a_{ij}\vert^2}
例子:

array([-1,  0,  1,  2])
>>> np.linalg.norm(x, ord=-np.inf)
0.0

矩阵的范数

和向量的范数一样,矩阵也有范数,假设矩阵A的大小为m∗n,即m行n列。
1)1-范数:又名列和范数。顾名思义,即矩阵列向量中绝对值之和的最大值。。
A 1 = max j = 1 n i = 1 m a i j \vert\vert A\vert\vert_1 = \max_{j = 1}^{n}\sum_{i = 1}^{m}\vert a_{ij}\vert
例子:

>>> y
array([[1, 2, 3],
       [2, 3, 4]])
>>> np.linalg.norm(y, ord=1)
7.0

2)2-范数:又名谱范数,计算方法为ATA矩阵的最大特征值的开平方。
A 2 = m a x ( λ i ) \vert\vert A\vert\vert_2 = \sqrt{max(\lambda_i)}
其中,λi 是ATA矩阵的特征值。
例子:

>>> y
array([[1, 2, 3],
       [2, 3, 4]])
>>> xtx = np.matmul(y.T, y)      #array([4.28600094e+01, 1.39990637e-01, 2.34315981e-15])
>>> n2 = np.linalg.norm(y, ord = 2)   # 6.557438524302 
>>> np.sqrt(4.28600094e+01)
6.5467556392460535

矩阵Y的2-范数计算是先计算XTX的特征值λi,然后找λi中的最大值,再开方。代码里xtx即为XTX,eigvals函数的返回值就是各个λi。

3)F-范数:Frobenius范数,计算方式为矩阵元素的绝对值的平方和再开方。
A F = i = 1 m j = 1 n a i j 2 2 \vert\vert A\vert\vert_F = \sqrt[2]{\sum_{i=1}^m \sum_{j=1}^n \vert a_{ij}\vert^2}
例子:

>>> y
array([[1, 2, 3],
       [2, 3, 4]])
>>> a=np.linalg.norm(y, ord='fro')
>>> a   # 平方和=43
6.557438524302

4)∞ --范数:又名行和范数, 即矩阵行向量中绝对值之和的最大值。
A = max i = 1 m j = 1 n a i j \vert\vert A\vert\vert_{\infty} = \max_{i = 1}^{m}\sum_{j = 1}^{n}\vert a_{ij}\vert
例子:

>>> y
array([[1, 2, 3],
       [2, 3, 4]])
>>> np.linalg.norm(y, ord = np.inf)
9.0
>>> np.linalg.norm(y, ord = 'fro')
6.557438524302

学习范数的意义

通过NumPy计算向量、矩阵的范数为后续学习深度学习打下夯实的基础,因为深度学习里的求最小损失函数时就用到了2-范数,所以本章节需要理解并掌握范数的求解。

猜你喜欢

转载自blog.csdn.net/qq_26369907/article/details/89788593