"SNIP: single shot network pruning based on connection sensitivity" 這篇文章提出了基於權重連接重要性(saliency)的剪枝方法,能夠在深度模型訓練之前(初始化階段),通過mini-batch的多次採樣,決定不同權重連接的重要性,進而根據剪枝目標生成剪枝模板(prunning mask)、應用於稀疏剪枝,從而節省了相對耗時的剪枝-微調迭代週期。
通常,深度網絡的稀疏剪枝可以視作如下優化問題,即通過對參數集合的L0 範數施加不等式約束,確保模型收斂:
網絡中第j 個權重連接的重要性(saliency)記作sj,則可按權重wj 的幅度或Hessian矩陣元素決定sj 的大小:
此外,文章提出了一種新的saliency 衡量準則,即損失函數關於權重連接的梯度。首先,剪枝優化問題重新定義如下:
其中矩陣c 表示深度網絡的連接模板,數值1表示連接,數值0表示斷接。cj 從1變爲0所引起的loss變化,可以反映權重連接的重要性,並進一步等價於loss關於cj 的梯度:
在剪枝階段,爲了跨層比較sj,梯度gj 的大小需要做標準化處理,然後根據剪枝目標可決定剪枝模板:
基於新定義的saliency,整體剪枝流程如下圖所示。在初始化階段完成單次操作之後,便可以按照常規方式訓練剪枝後模型,避免了耗時的剪枝-微調迭代過程:
文章最後在Tiny-ImageNet等數據集上做了實驗驗證,具體見實驗部分。
Paper地址:https://arxiv.org/abs/1810.02340
GitHub地址:https://github.com/gahaalt/ICLR-SNIP-pruning
GitHub地址:https://github.com/mi-lad/snip