用SVD壓縮深度模型(DNN,CNN)的全連線層(fully-connected layer)
轉自:https://my.oschina.net/liusicong/blog/866364
轉載請註明出處,否則將依法追究版權
全連線層出現在DNN和 CNN中.很多論文[介紹瞭如何用SVD,VQ,Sparse code壓縮全連線層,這些方法不是端到端地訓練一個新模型,而是對訓練好的模型壓縮其全連線層的權重矩陣,在應用實現中則需要同時考慮對權重和偏移的處理. 實際上權重和偏移的維度不相同,處理方法是不同的.本文將系統性地介紹在應用實現中,如何利用下述方法壓縮權重矩陣,同時處理與之對應的偏移量,從而實現全連線層壓縮的整個過程.
首先深入研究兩個相鄰全連線層的運算原理,理解權重矩陣 和偏移 的關係.如下圖所示,第L層有m個神經元,第(L+1)層有n個神經元,因此相鄰兩個全連線層的權重矩陣 是一個 的2維矩陣.全連線層輸入 與輸出 的對映關係是 .即L層所有神經元與第(L+1)層的某個神經元的連線共享同一個偏移量,因此相鄰兩個全連線層的偏移量是一個1維向量,包含n個元素.
奇異值分解(SVD)壓縮演算法. 如下圖所示,基於SVD的全連線層壓縮方法就是引入一箇中間層L’,該中間層包含 c個神經元, .因此可以減少連線數和權重規模,權重矩陣規模從 mn減少到(m+n)c ,從而降低執行深度模型的計算和儲存需求.
DeepX運用了基於SVD的面向層的壓縮技術,處理訓練好的模型引數,以減少引數規模,減少模型執行推斷時的資源消耗,提高推斷速度.具體地,相鄰的兩個全連線層L和(L+1)分別有m和n個神經元,對相鄰兩層的權重矩陣 執行SVD運算,即就是 .可以選擇最大的c個值來近似權重矩陣,如式(1)所示.
(1)
基於以上分析,就可以直接程式碼實現了