構建機器學習算法和剪枝

1、構建機器學習算法

幾乎所有的深度學習算法都可以被描述爲一個相當簡單的配方:特定的數據集、代價函數、優化過程和模型。

在大多數情況下,優化算法可以定義爲求解代價函數梯度爲零的正規方程。

通常代價函數至少含有一項使學習過程進行統計估計的成分。最常見的代價函數是負對數似然,最小化代價函數導致的最大似然估計。

組合模型、代價和優化算法來構建學習算法的配方同時適用於監督學習和無監督學習。在某些情況下,由於計算原因,我們不能實際計算代價函數。在這種情況下,只要我們有近似其梯度的方法,那麼我們仍然可以使用迭代數值優化近似最小化目標。

2、pruning剪枝

2.1 深度學習減枝背景

隨着2012年Alextnet的橫空出世,其遠超傳統方法的分類準確率讓深度學習重新走進人們的視野。爲提高網絡的性能,神經網絡逐漸朝着越來越深和越來越寬的方向發展,參數數量隨之激增。例如vgg對alexnet進行改進,在簡單二分類問題上,實測網絡模型大小達到了150MB。而在資源受限的場景中,例如移動設備,計算和存儲資源有限,大尺寸網絡的模型難以應用。

 

                                                                                       圖1

在神經網絡中,並不是所有的參數都有着相同的作用。部分參數幅值大,對網絡輸出的影響顯著,某些參數權重接近0,對網絡輸出的影響微乎其微。如果在神經網絡中,找到並刪除這些對網絡影響較小的參數,那麼可以在保持網絡性能的前提下,減小網絡模型的尺寸,提高模型的計算速度。如何在找到對網絡影響較小的參數,如何刪除網絡的部分參數或結構,怎樣在減小網絡尺寸的同時,保證網絡的性能,這就是剪枝要完成的工作。


2.2 常用剪枝方法

剪枝顧名思義,就是剪去網絡中不重要的部分,減小網絡的尺寸,簡化網絡的結構.在實施時,首先通過設定規則,找到要減去的網絡結構,在減去該部分結構後,網絡性能會受到影響,因此需要重新訓練,恢復網絡的性能.

                                                                                                    圖2

2.2.1神經元和連接剪枝

在對圖2左圖所示網絡進行剪枝,對網絡結構中任一神經元的每一個連接(接收上一層的輸出),將其與設置的閾值相比較,如果大於該閾值,則保留該連結,如果小與該閾值,則丟棄該連接。當一個神經元大所有連接都被丟棄時,該神經元同樣被丟棄。按照這一規則剪枝後的網絡結構如圖2右所示。

剪枝時閾值的由稀疏度決定,而連接的權重與閾值比較的標準有L1 norm,L2 norm等,最常用的是L1 norm,其簡單容易操作。

該方法的實施依賴於mask實現,在tensorflow中有Pruning接口,供實現該剪枝方法。但該方法的優點是原理簡單,卷積和全連接層的操作相同,數據壓縮程度大,對精度的影響小。但該方法在實施時步驟繁瑣,需要分層和迭代的剪枝。此外,由於該方法藉助於mask實現,因此模型的大小和在模型的速度難以有明顯的提升。

2.2.2卷積核剪枝

                                                                                                           圖3

上節卷積核剪枝中剪枝操作藉助mask實現的主要原因是要減去的網絡結構是不規則的,如果每次剪去一整個網絡單元,或者一個全連接的神經元,那麼剪枝的操作將被簡化,同時不借助mask實現起來也更爲便捷。  

卷積核剪枝的基本思路即是如此,每次剪去一整個卷積核。具體的方法是,對某卷積層而言,其中包含了許多卷積核,如上圖的kernel matrix的列所示。在對某層進行剪枝時,分別計算每個卷積核的L1 norm(卷積核的所有權值的絕對值之和),小於某閾值的卷積核將被丟棄(注意,計算卷積核的L1 norm時應使用剪枝前的卷積核權值)。該閾值的設定方法與1類似,由稀疏度決定。每剪去一個卷積核,該卷積層輸出的feature map將會減少一個,爲保證輸入feature map和權值維度匹配,應對下一層的輸入權值進行調整,將下一層每個kernel中對該feature map進行卷積操作的channel刪除,如圖3中右邊的kernel matrix所示。

需要注意的是,如果網絡中使用到了batch norm,則在剪枝時要對batch norm的參數一併處理。

在實施時,有兩種訓練的方法,一種是從靠近輸入層開始,逐層進行剪枝,每剪完一層,重新訓練後再進行下一層的剪枝。這種方法的剪枝得到的模型精度較高。另一種方法是同時對所有層進行剪枝,每次剪枝時設置較小的稀疏度,重訓後,再設置小稀疏度進行剪枝,如此迭代。這種方法操作起來更簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章