深度学习从入门到精通之——线代范数

时间:2022-11-01 18:00:23


标量、向量、矩阵、张量

  • 标量
    0 维度张量,往往一个值,如 1
  • 向量
    一维张量, 如 [1,2,3,4,5,6]
  • 矩阵
    二维张量 如 [1,2,3,4,5,6;1,2,3,4,5,6]
  • 张量
    二维以及以上的矩阵

向量和矩阵的范数归纳

向量的范数定义一个向量为:a=[-5,6,8,-10]。
向量的1范数:向量的各个元素的绝对值之和,上述向量a的1范数结果就是:29。

def norm_1(x):
'''
:param x:输入向量
:return: 一范数
'''
result = list(map(abs,x))

return sum(result)

if __name__ == '__main__':
a= [-5,6,8,-10]

print(norm_1(a))

深度学习从入门到精通之——线代范数


向量的2范数:向量的每个元素的平方和再开平方根,上述a的2范数结果就是:15。

def norm_2(x):

'''

:param x:输入向量
:return: 二范数
'''
result = list(map(abs, x))
result = sum(np.array(result)**2)

return np.sqrt(result)


if __name__ == '__main__':
a= [-5,6,8,-10]

# print(norm_1(a))
print(norm_2(a))

深度学习从入门到精通之——线代范数


向量的负无穷范数:向量的所有元素的绝对值中最小的:上述向量a的负无穷范数结果就是:5。

向量的正无穷范数:向量的所有元素的绝对值中最大的:上述向量a的正无穷范数结果就是:10。

矩阵的范数定义一个矩阵A=[-12-3;4-66]。

  • 矩阵的1范数:矩阵的每一列上的元素绝对值先求和,再从中取个最大的,(列和最大),上述矩阵A的1范数先得到[5,8,9],再取最大的最终结果就是:9。
  • 深度学习从入门到精通之——线代范数


  • 深度学习从入门到精通之——线代范数

  • 矩阵的2范数:矩阵AAT的最大特征值开平方根,上述矩阵A的2范数得到的最终结果是:10.0623。
  • 矩阵的无穷范数:矩阵的每一行上的元素绝对值先求和,再从中取个最大的,(行和最大),上述矩阵A的1范数先得到[6;16],再取最大的最终结果就是:16。
  • 矩阵的核范数:矩阵的奇异值(将矩阵svd分解)之和,这个范数可以用来低秩表示(因为最小化核范数,相当于最小化矩阵的秩——低秩),上述矩阵A最终结果就是:10.9287。
  • 矩阵的L0范数:矩阵的非0元素的个数,通常用它来表示稀疏,L0范数越小0元素越多,也就越稀疏,上述矩阵A最终结果就是:6。
  • 矩阵的L1范数:矩阵中的每个元素绝对值之和,它是L0范数的最优凸近似,因此它也可以表示稀疏,上述矩阵A最终结果就是:22。
  • 矩阵的F范数:矩阵的各个元素平方之和再开平方根,它通常也叫做矩阵的L2范数,它的有点在它是一个凸函数,可以求导求解,易于计算,上述矩阵A最终结果就是:10.0995。
  • 矩阵的L21范数:矩阵先以每一列为单位,求每一列的F范数(也可认为是向量的2范数),然后再将得到的结果求L1范数(也可认为是向量的1范数),很容易看出它是介于L1和L2之间的一种范数,上述矩阵A最终结果就是:17.1559。