模型壓縮--概述

目前在深度學習領域分類兩個派別,一派爲學院派,研究強大、複雜的模型網絡和實驗方法,爲了追求更高的性能;另外一派爲工程派,旨在將算法更穩定、高效的落地在硬件平臺上,效率是其追求的目標。複雜的模型當然具備更好的性能,可是高額的存儲空間、計算資源消耗是使其難以有效的應用在各硬件平臺上的重要緣由。html

工業層面

當前各大互聯網公司都開始注意深度學習模型在工業上的落地。模型壓縮工具開始在各家的生產工具中進入主流,而且各家也開源了對應的工具。具體以下:git

整體來看,模型壓縮方法、工具及應用落地已經在各個大互聯網公司呈百花齊放的態勢。各家都在構建本身的模型壓縮工具及生態環境並努力實如今自家產品的落地(做者接下來會對各個工具作一些性能對比,並選出一家作詳細的技術調研)github

算法層面

理論算法層面,早在2015年,韓鬆發表的Deep Compression就是一篇對於模型壓縮方法的綜述型文章,將裁剪、權值共享和量化、編碼等方式運用在模型壓縮上,取得了很是好的效果,做爲ICLR2016的best paper,也引發了模型壓縮方法研究的熱潮。算法

  1. Deep Compressionhttps://arxiv.org/abs/1510.00149

隨着研究的深刻,當前深度學習模型壓縮和加速算法已經成爲一個至關龐大且活躍的研究領域涵蓋軟件和硬件包括衆多的技術方向目前深度學習模型壓縮方法的研究主要能夠分爲如下幾個方向:網絡

  • 輕量網絡設計指從新設計新型網絡結構而不侷限於僅對現有網絡進行優化加速輕量網絡設計方向的主要表明論文是 MobileNet v1 / v2 , ShuffleNet v1 / v2 其主要思想是利用 Depthwise ConvolutionPointwise ConvolutionGroup Convolution 等計算量更小更分散的卷積操做代替標準卷積這類模型的計算量一般僅有幾十到幾百 MFLOPs與傳統的大型網絡例如 VGG / Inception / ResNet等動輒上 GFLOPs 的計算量相比有明顯優點同時在比較簡單的任務上與大模型的準確率差距較小
  1. mobileNet-V1: https://arxiv.org/abs/1704.04861
  2. mobileNet-V2: https://arxiv.org/abs/1801.04381
  3. shuffleNet-V1: https://arxiv.org/abs/1707.01083
  4. shuffleNet-V2https://arxiv.org/abs/1807.11164
  • 模型裁剪相比輕量網絡設計模型裁剪主要關注對現有模型作減法由大化小其主要思想是在保持現有模型的準確率基本不變的前提下設計某種篩選機制稀疏化),在某個尺度上篩選掉卷積層中重要性較低的權重從而達到下降計算資源消耗和提升實時性的效果模型裁剪算法的核心就在於權重篩選機制的設計以及篩選粒度的選擇上這也是本文接下來會着重深刻討論的方向
  1. Learning both weights and connections for efficient neural networkhttps://arxiv.org/abs/1506.02626
  2. Pruning filters for efficient convnetshttps://arxiv.org/abs/1608.08710
  3. Channel pruning for accelerating very deep neural networkshttps://arxiv.org/abs/1707.06168
  4. Learning efficient convolutional networks through network slimminghttps://arxiv.org/abs/1708.06519
  5. Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layershttps://arxiv.org/abs/1802.00124
  6. AMC: AutoML for Model Compression and Acceleration on Mobile Devices https://arxiv.org/abs/1802.03494
  • 模型蒸餾相比於模型裁剪的目標是把大模型逐漸變小同時保持精度損失較小模型蒸餾的目標是利用大模型Teacher Network提供的監督特徵幫助計算量較小的模型Student Network達到近似於大模型的精度從而實現模型加速模型蒸餾的關鍵在於監督特徵的設計例如使用 Soft Target 所提供的類間類似性做爲依據或使用大模型的中間層特徵圖 attention map做爲暗示對小網絡進行訓練
  1. Distilling the Knowledge in a Neural Networkhttps://arxiv.org/abs/1503.02531
  2. FitNets: Hints for thin deep netshttps://arxiv.org/abs/1412.6550v4
  3. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transferhttps://arxiv.org/abs/1612.03928
  • 矩陣分解因爲深度學習模型中計算量最密集的部分就是卷積而卷積能夠通過 im2col 以後用矩陣乘法實現所以咱們可使用多種矩陣低秩近似方法將兩個大矩陣的乘法操做拆解爲多個小矩陣之間的一系列乘法操做下降總體的計算量加速模型的執行速度
  1. Speeding up convolutional neural networks with low rank expansionshttps://arxiv.org/abs/1405.3866
  2. Accelerating very deep convolutional networks for classification and detection  https://arxiv.org/abs/1505.06798
  • 量化與低精度運算深度學習模型在運行過程時須要進行大量的浮點乘加運算通常默認數據位寬是 32bit可是實際上咱們徹底能夠用更低的位寬例如 16bit / 8bit / 4bit / 2bit 甚至 1bit來量化模型的權重和特徵圖完成近似的運算這麼作一方面能夠成倍的下降模型運行時的訪存量一方面在相應硬件指令集的支持下能夠成倍的提升模型的運算速度其重點在於如何控制低精度對模型帶來的精度損失
  1. BinaryConnect: Training Deep Neural Networks with binary weights during propagationshttps://arxiv.org/abs/1511.00363
  2. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networkshttps://arxiv.org/abs/1603.05279
  3. Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activationshttps://arxiv.org/abs/1609.07061v1
  • 計算圖優化深度學習模型的層數一般在幾十層到上百層但實際上層與層之間有不少部分都存在固定的組合關係例如 Conv-BatchNorm-ReLU 組合),所以咱們能夠對計算圖中的這些固定組合進行優化分別在水平和垂直方向上將多層融合爲一層執行從而大量減小層間沒必要要的內存拷貝以及屢次 kernel launch 帶來的開銷有效提高模型的運行速度
  • 卷積算法優化卷積運算自己有多種算法實現方式例如滑動窗im2col + gemmFFTWinograd卷積等方式這些卷積算法在速度上並無絕對的優劣由於每種算法的效率都很大程度上取決於卷積運算的尺寸所以在優化模型時咱們應該對模型的各個卷積層有針對性的選用效率最高的卷積算法從而充分利用不一樣卷積算法的優點
  1. Fast Algorithms for Convolutional Neural Networks: https://arxiv.org/abs/1509.09308
  2. Winograd算法解析:http://www.javashuo.com/article/p-hpvnkqmn-dx.html
  • 硬件加速任何模型的運行都須要依託於某種計算平臺來完成所以咱們能夠直接從計算平臺的硬件設計方面進行加速目前深度學習模型的主流計算平臺是 GPU Volta 架構開始GPU 配備了專門用於快速矩陣乘法運算的硬件計算單元 Tensor Core能夠顯著提高深度學習模型的吞吐量同時以低功耗低延遲爲主要特性的 FPGA / ASIC 加速芯片也開始在業界嶄露頭角

總之,深度學習的模型要真正落地,繞不開對模型進行速度及精度的優化。在模型優化方面,學術界和工業界也都開始發力。創新算法,使用工具,落地案例可能會愈來愈多。架構

相關文章
相關標籤/搜索