SVD及在卷積層的應用
SVD及在卷積層的應用
講SVD分解之前先得講特徵值分解(EVD),在EVD的基礎上理解SVD會更容易些
1、特徵值分解(EVD)
特徵值分解,如果矩陣A是一個m×m的實對稱矩陣,那麼它可以被分解為:
其中Q為標準正交陣,即有QQT=I,Σ為對角矩陣,且上面的矩陣的維度均為m×m。λi稱為特徵值
,ui是Q(特徵矩陣)中的列向量,稱為特徵向量
。
=λ1u1u1T+λ2u2u2T+λ3u3u3T+….
式中Q=[u1 u2 u3… um],其中ui為m行的列向量。
【面試題】:若用特徵值分解矩陣,最少需要多少個引數表示?
最少需要m+1個引數。因為只取分解後的第一項λ1
注:這在影象壓縮和加速方面大有用處。
2、奇異值分解(SVD)
由於特徵值分解(EVD)需要矩陣滿足對角化條件:1)m*m方陣2)有m個線性無關特徵向量3)m個特徵值互不相等【每個特徵值對應的特徵向量線性無關的最大個數等於該特徵值的重數】
但事實上,並不是所有的矩陣的都是方陣,特別是在卷積操作中,如下圖:
上圖來自論文High Performance Convolutional Neural Networks for Document Processing
將輸入特徵圖和卷積用二維矩陣表示後,並不是方陣,所以特徵值分解(EVD)就用不了了,此時SVD應用而生。
2.1 奇異值分解定義
有一個m*n的實數矩陣A,分解如下形式
A=UΣVT
式中U和V均為單位正交陣,即UUT=I,U為左奇異矩陣,V為右奇異矩陣,Σ為奇異值,僅對角線有值。UϵRm*m ,ΣϵRm*n ,VϵRn*n
2.2 奇異值求解
正常求上面的U,V,Σ 不便於求,我們可以利用如下性質
AAT= UΣVT VΣTUT=UΣΣTUT
ATA=VΣTUT UΣVT =VΣTΣVT
需要注意的是ΣTΣ和ΣΣT不相等,但其奇異值是相等的(線性代數可證),即:
從上式可以看出,通過對一般矩陣A的變形(AAT或ATA)使其滿足特徵值分解條件,從而可以求出U、V、Σ,然後進行SVD分解。
上面對SVD的定義和計算做了詳細的描述,似乎看不出SVD有什麼好處。那麼SVD有什麼重要的性質值得我們注意呢?對於奇異值,它跟特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。也就是說,也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。也就是說:
如下圖所示,現在矩陣A只需要灰色的部分的三個小矩陣就可以近似描述了。
3、SVD應用在卷積層
3.1 傳統卷積
正常卷積操作的引數量D2ST,計算量 = 2D2SH’W’T
此時的卷積操作Y=WXT就可轉化為通用矩陣乘法(GEMM),如下圖所示:
也即:
|
常規卷積形式:
3.2 SVD卷積
可對權重矩陣W進行SVD,令W=U∑VT,則Y=WXT=U∑VTXT=U(∑VT)XT=U((∑VT)XT)=(U((∑VT)XT)),通過此轉換可減少引數量和計算量,起到“加速”網路的作用。卷積層和全連線層中的計算都可以轉化為通用矩陣乘法(GEMM)計算,因此“卷積→GEMM→SVD”可以用於卷積層和全連線層。
將WT×L進行SVD,得WT×L=UT×r∑r×rVTr×T,則Y’T×N=WT×LXTL×N=UT×r∑r×rVTr×LXTL×N,
按如下計算順序1:
W’r×L=∑r×r×VTr×L
Y’’r×N=W’r×L×XTL×N
Y’T×N=UT×r×Y’’r×N
“卷積→GEMM→SVD”的整個過程大致示意圖如下:
第1步:與SVD後得到的第一個矩陣(W’r×L=∑r×r×VTr×L)相乘:
第2步:與SVD後得到的第二個矩陣(Y’’r×N=W’r×L×XTL×N)相乘:
第1步是先用卷積核(W’r×L=∑r×r×VTr×L)與輸入特徵圖進行一次常規的卷積運算,得到一箇中間特徵圖(輸出通道減小, H’×W’大小與分解前的一樣大)。
第2步用1×1的卷積核將輸出通道還原為分解前的輸出通道數。
這種分解方式等效稱為分解方式1
分解方式1的等效卷積形式:
對應的有分解方式2,按如下計算順序1:
與分解方式1相比,分解方式2是先用1×1的卷積核將輸出通道變成未採用分解前的輸出通道數(此時H*W沒變),然後再用卷積核與中間輸出特徵圖進行一次常規的卷積運算,得到輸出與分解前的輸出一樣大小(變為H’×W’)。
這種分解方式等效稱為分解方式2
分解方式2等效卷積形式:
SVD分解:https://www.cnblogs.com/endlesscoding/p/10033527.html#4164192983
卷積用矩陣表示:https://www.cnblogs.com/shine-lee/p/10775831.html