天天看點

深度學習從入門到精通之——線代範數

标量、向量、矩陣、張量

  • 标量

    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。