tensorflow 训练权重不更新_TensorFlow模型剪枝原理
本文是對論文“To prune, or not to prune: exploring the efficacy ofpruning for model compression”的摘抄。這篇文章是TensorFlow模型優化工具文檔中推薦的,作者Michael H. Zhu,來自斯坦福大學。在這里可以找到論文原文。背景
對于資源有限的移動終端設備來說,內容帶寬通常是一個重要的限制因素。模型壓縮至少有兩點好處:減少耗電的內存訪問次數;同等帶寬下提升壓縮模型參數的獲取效率。剪枝將不重要的模型權重歸零,實現了模型壓縮的同時只帶來了較小的質量損失。剪枝之后的模型是稀疏的,在支持稀疏矩陣加速運算的硬件上可以進一步獲得加速效果。
國冰提示:英偉達的第三代張量核心(Tensor Core)對于稀疏矩陣的運算有約5倍的性能提升。這一點我們在文章“RTX30系列,香嗎”中有過介紹。在模型內存足跡(memory footprint)一定的前提下,如何獲得最準確的模型,是本文的核心內容。作者通過對比兩種模型來回答這個問題。第一種,先訓練一個大模型,然后通過剪枝將其轉換為一個強稀疏模型;第二種,直接訓練一個非稀疏模型,尺寸與稀疏模型相當。在具體的模型架構與任務上,作者做出以下選擇:
圖像分類:Inception V3與MobileNets
序列分析:stacked LSTMs與seq2seq
90年代的剪枝通過將權重置零時網絡損失函數增量的二階泰勒級數近似來實現。最近的工作中,基于數量級的權重剪枝開始流行。這種方式簡單易行,并且適用于大型網絡與數據集。本文通過剪去最小數量級的權重來控制模型稀疏程度。這種策略不需要人工選擇權重閾值,不僅適用于CNN也可以用于LSTM。
方案作者在TensorFlow的基礎上實現了訓練中剪枝。針對每一個選定的layer,增加同尺寸同形狀的二元mask變量作為該layer的權重張量,并決定在哪個權重參數參與網絡的前向傳播。同時,在訓練圖中注入算子對該層的權重按照絕對值大小排序,將最小的權重置零直到該層的稀疏程度達到預定指標。反向傳播的梯度同樣會經過該二元mask,但是不會更新被置零的權重。
稀疏程度隨著訓練的進程逐漸增加,并滿足公式:
其中si為初始稀疏率,sf為最終稀疏率,n為修剪總步數,t為訓練步數,Δt為修剪頻率。
二元mask每Δt更新一次,這有助于網絡的準確率從修剪后的狀態逐步恢復。作者的實驗表明當Δt的取值在100到1000之間時剪枝對最終的模型質量影響可以忽略。一旦模型達到預定的稀疏指標,權重mask停止更新。按照稀疏率變化公式,訓練早期頻繁剪枝,隨著訓練進展,剪枝的頻率越來越低——因為可供剪枝的權重越來越少。如下圖所示。
實際剪枝過程中,網絡會先訓練若干epoch或者加載一個已經訓練好的網絡,這就決定了t0。參數n則很大程度上取決于學習率曲線。作者觀察到隨著學習率的下降,剪枝后的模型準確率可能會很難恢復過來。反過來,過高的學習率則可能導致權重在收斂到較優值之前被剪掉。因此需要將兩者緊密結合起來。例如上圖中,對Inception V3剪枝的過程安排在學習率相對較大的階段。
下圖則展示了訓練過程中模型準確率的變化。對于稀疏率達87.5%的模型,隨著稀疏程度的上升,模型經歷了“幾乎災難性”的衰退,但是隨后又很快恢復了過來。這種現象在高稀疏率的模型中更加常見。
下表展示了稀疏程度與模型準確率之間的關系。隨著稀疏程度的增加,模型的準確率開始下降。不過即便有一半的權重被裁剪,模型的準確率也只下降了一點。
比較“大稀疏”與“小密實”模型對于緊湊模型來說剪枝仍然是有效的,可以與width multiplier相比。同等大小的模型,稀疏模型優于非稀疏模型。訓練也很簡單,只是初始學習率小10倍。
國冰提示:
這一章節的模型都為常見模型,且數據較多,因此只說結論。感興趣的讀者可以查閱原文。另外兩個子章節涉及模型與圖像無關,故此跳過。
討論稀疏模型的內存足跡包括非零參數的保存以及索引它們所需的數據結構。模型剪枝可以減少非零參數之間的連接數,但是稀疏矩陣的存儲不可避免的減小了壓縮率。無論權重是否為0,二元mask稀疏矩陣都需要為之存儲1bit,同時還需要一個向量存儲非0值。無論稀疏率的大小,這部分開銷無法避免。
另外,大稀疏模型比同體積非稀疏模型的表現更好。而且隨著模型規模的擴大,這種差異越發明顯。
總結經過剪枝之后的稀疏大模型要優于同體積的非稀疏模型。作者提出的遞進剪枝策略可以廣泛的應用于各種模型。有限資源環境下,剪枝是有效的模型壓縮策略。深度學習加速硬件應當將稀疏矩陣的存儲與運算提供支持。
TensorFlow支持剪枝,請參閱官方文檔:https://www.tensorflow.org/model_optimization/guide/pruning/針對HRNet的剪枝可能會晚一點。因為目前剪枝不支持 subclassed model。參見issue:https://github.com/tensorflow/model-optimization/issues/155
??推薦閱讀??
總結
以上是生活随笔為你收集整理的tensorflow 训练权重不更新_TensorFlow模型剪枝原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 畅捷通t+标准版操作手册_外网IP访问畅
- 下一篇: u盘扩容软件_扩容盘的认识与检测和量产还