選自 arXiv,機器之心編譯,作者:Aidan N. Gomez、Ivan Zhang、Kevin Swersky、Yarin Gal、Geoffrey E. Hinton,參與:思源。
Dropout 已經是很多模型的標配,它隨機刪除一些神經元或權重以獲得不同的「架構」。那麼我們在訓練中能「隨機」刪除很弱的連線,或不重要的神經元,因此構建更「重要」的架構嗎?Hinton 等研究者表示這是可以的,這種名為 Targeted Dropout 的方法類似於將剪枝嵌入到了學習過程中,因此訓練後再做剪枝會有很好性質。
這篇 Targeted Dropout 論文接受為 NIPS/NeurIPS 2018 關於緊湊神經網路的 Workshop,該研討會關注構建緊湊和高效的神經網路表徵。具體而言,其主要會討論剪枝、量化和低秩近似等神經網路壓縮方法;神經網路表示和轉換格式;及使用 DNN 壓縮視訊和媒體的方式。
該 Workshop 的最佳論文是機器之心曾介紹過的 Rethinking the Value of Network Pruning ,這篇論文重新思考了神經網路過引數化的作用,該論文表示剪枝演算法的價值可能在於識別高效結構、執行隱性的架構搜尋,而不是在過引數化中選擇「重要的」權重。
Workshop地址:nips.cc/Conferences…
當然,本文還是重點關注這種 Targeted Dropout,它將剪枝隱性地構建到 Dropout 中,難道也是在隱性地搜尋高效神經網路架構?
目前有很多研究工作都關注訓練一個稀疏化的神經網路,而稀疏化涉及將神經網路的權重或整個神經元的啟用值配置為零,並且同時要求預測準確率不能有明顯下降。在學習階段,我們一般能用正則項來迫使神經網路學習稀疏權重,例如 L1 或 L0 正則項等。當然稀疏性也可以通過後期剪枝實現,即在訓練過程中使用完整模型,訓練完在使用一些策略進行剪枝而實現稀疏化。
理想情況下,給定一些能度量任務表現的方法,剪枝方法會去除對模型最沒有益處的權重或神經元。但這一過程非常困難,因為數百萬引數的哪個子集對任務最重要是沒辦法確定的。因此常見的剪枝策略側重於快速逼近較優子集,例如移除數量較小的引數,或按照任務對權重的敏感性進行排序,並去除不敏感的權重。
研究者新提出來的 Targeted Dropout 基於這樣的觀察:Dropout 正則化在每次前向傳播中只啟用區域性神經元,因此它本身在訓練過程中會增加稀疏性屬性。這鼓勵神經網路學習一種對稀疏化具有魯棒性的表示,即隨機刪除一組神經元。作者假設如果我們準備做一組特定的剪枝稀疏化,那麼我們應用 Dropout 到一組特定的神經元會有更好的效果,例如一組數值接近為零的神經元。
作者稱這種方式為 Targeted Dropout,其主要思想是根據一些快速逼近權重重要性的度量對權重或神經元進行排序,並將 Dropout 應用於那些重要性較低的元素。與正則化 Dropout 觀察結果相似,作者表示該方法能鼓勵神經網路學習更重要的權重或神經元。換而言之,神經網路學習到了如何對剪枝策略保持足夠的魯棒性。
相對於其它方法,Targeted Dropout 的優點在於它會令神經網路的收斂對剪枝極其魯棒。它同時非常容易實現,使用 TensorFlow 或 PyTorch 等主流框架只需要修改兩行程式碼。此外,該網路非常明確,我們所需要的稀疏性程度都可以自行設定。
評審員對該方法總體是肯定的,但對其收斂性,也提出了質疑。由於對神經元(權重)重要性的估計,是基於 Dropout(剪枝)前的情況,而不是實際 Dropout(剪枝之後,這樣估值誤差有可能在優化迭代過程中累積,最終導致發散的結果。論文作者承諾,在最終版的附錄中,會給出更詳細的證明。
最後,Hinton 等研究者開源了實驗程式碼,感興趣的讀者可以參考原始碼:
在專案中,我們會發現對 Dropout 重要的修正主要是如下程式碼。其中模型會對權重矩陣求絕對值,然後在根據 targ_rate 求出要對多少「不重要」的權重做 Dropout,最後只需要對所有權重的絕對值進行排序,並 Mask 掉前面確定具體數量的「不重要」權重。
norm = tf.abs(w)
idx = tf.to_int32(targ_rate * tf.to_float(tf.shape(w)[0]))
threshold = tf.contrib.framework.sort(norm, axis=0)[idx]
mask = norm < threshold[None, :]複製程式碼
確定哪些權重不重要後,接下來的 Dropout 操作就和和一般的沒什麼兩樣了。下面,我們具體看看這篇論文吧。
論文:Targeted Dropout
論文地址:openreview.net/pdf?id=Hkgh…
神經網路因為其有大量引數而顯得極為靈活,這對於學習過程而言非常有優勢,但同時也意味著模型有大量冗餘。這些引數冗餘令壓縮神經網路,且還不會存在大幅度效能損失成為可能。我們介紹了一種 Targeted Dropout,它是一種用於神經網路權重和單元后分析(Post hoc)剪枝的策略,並直接將剪枝機制構建到學習中。
在每一次權重更新中,Targeted Dropout 會使用簡單的挑選準則確定一組候選權重,然後再將 Dropout 應用到這個候選集合以進行隨機剪枝。最後的神經網路會明確地學習到如何對剪枝變得更加魯棒,這種方法與更復雜的正則化方案相比非常容易實現,同時也容易調參。
2 Targeted Dropout
2.1 Dropout
我們的研究工作使用了兩種最流行的伯努利 Dropout 技術,即 Hinton 等人提出的單元 Dropout [8, 17] 和 Wan 等人提出的權重 Dropout[20]。對於全連線層,若輸入張量為 X、權重矩陣為 W、輸出張量為 Y、Mask 掩碼 M_io 服從於分佈 Bernoulli(α),那麼我們可以定義這兩種方法為:
單元 Dropout 在每一次更新中都會隨機刪除單元或神經元,因此它能降低單元之間的相互依賴關係,並防止過擬合。
權重 Dropout 在每一次更新中都會隨機刪除權重矩陣中的權值。直觀而言,刪除權重表示去除層級間的連線,並強迫神經網路在不同的訓練更新步中適應不同的連線關係。
2.2 基於數量級的剪枝
目前比較流行的一類剪枝策略可以稱之為基於數量級的剪枝,這些策略將 k 個最大的權重數量級視為最重要的連線。我們一般可以使用 argmax-k 以返回所有元素中最大的 k 個元素(權重或單元)。
單元剪枝 [6],考慮權重矩陣列向量的 L2 範數:
權重剪枝 [10],若 top-k 表示相同卷積核中最大的 k 個權值,考慮權重矩陣中每一個元素的 L1 範數:
其中權重剪枝一般能保留更多的模型準確度,而單元剪枝能節省更多的計算力。
2.3 方法
若有一個由θ引數化的神經網路,且我們希望按照方程 (1) 和 (2) 定義的方法對 W 進行剪枝。因此我們希望找到最優引數θ*,它能令損失函式ε(W(θ*)) 儘可能小的同時令|W(θ* )| ≤ k,即我們希望保留神經網路中最高數量級的 k 個權重。一個確定性的實現可以選擇最小的 |θ| − k 個元素,並刪除它們。
但是如果這些較小的值在訓練中變得更重要,那麼它們的數值應該是增加的。因此,通過利用靶向比例γ和刪除概率α,研究者將隨機性引入到了這個過程中。其中靶向比例(targeting proportion)表示我們會選擇最小的γ|θ|個權重作為 Dropout 的候選權值,並且隨後以丟棄率α獨立地去除候選集合中的權值。
這意味著在 Targeted Dropout 中每次權重更新所保留的單元數為 (1 − γ · α)|θ|。正如我們在後文所看到的,Targeted Dropout 降低了重要子網路對不重要子網路的依賴性,因此降低了對已訓練神經網路進行剪枝的效能損失。
如下表 1 和表 2 所示,研究者的權重剪枝實驗表示正則化方案的基線結果要比 Targeted Dropout 差。並且應用了 Targeted Dropout 的模型比不加正則化的模型效能更好,且同時引數量還只有一半。通過在訓練過程中逐漸將靶向比例由 0 增加到 99%,研究者表示我們能獲得極高的剪枝率。
表 2:比較 Targeted Dropout 和 ramping Targeted Dropout 的 Smallify。實驗在 CIFAR-10 上使用 ResNet-32 完成。其中左圖為三次 targeted 中最好的結果與 6 次 smallify 中最好結果的對比,中間為檢測出最高的剪枝率,右圖為 ramp targ 檢測出的更高剪枝率。
3 結語
我們提出了一種簡單和高效的正則化工具 Targeted Dropout,它可以將事後剪枝策略結合到神經網路的訓練過程中,且還不會對特定架構的潛在任務效能產生顯著影響。最後 Targeted Dropout 主要的優勢在於簡單和直觀的實現,及靈活的超引數設定。