量化模型(Quantized Model)是一種模型加速(Model Acceleration)方法的總稱,包括二值化網絡(Binary Network)、三值化網絡(Ternary Network),深度壓縮(Deep Compression)等。鑑於網上關於量化模型的很少,並且比較零散,本文將結合 TensorLayer 來說解各種量化模型,並討論一下咱們過去遇到的各類坑。文章最後會介紹一些關於人工智能芯片的技術。git
TensorLayer 是一個基於 TensorFlow 的高級開發工具,提供大量數據處理和建模 API,具有靈活性高、運行速度快等優勢。今年 3 月,TensorLayer 提供了一套搭建量化網絡的試驗版本 API,不過目前這套 API 依然用矩陣乘法而不是加減或 bitcount 運算來加速(咱們等會會提到)。github
所以,這套 API 並不能加速,關於產品部署,目前能夠用 TensorLayer 訓練模型,而後用自定義的 C/C++ 實現的二值化計算(TensorLayer 有可能會提供一套額外的專門運行二值化網絡的框架,並支持能夠從 TensorLayer 那讀取模型)。算法
注意,做爲試驗版本,這套 API 有可能會被修改。更多關於模型加速的技術,可關注:https://github.com/tensorlayer/tensorlayer/issues/416網絡
Keywords:模型壓縮(Model Compression),模型加速(Model Acceleration),二值化網絡(Binary Network),量化模型(Quantized Model)框架
隨着神經網絡深度增長,網絡節點變得愈來愈多,規模隨之變得很是大,這是對移動硬件設備很是不友好的,因此想要在有限資源的硬件設備上佈置性能良好的網絡,就須要對網絡模型進行壓縮和加速,其中量化模型因爲在硬件上移植會很是方便,在理論上來說,是很是有發展潛力的。工具
比較有名氣的量化模型有 Deepcompression,Binary-Net,Tenary-Net,Dorefa-Net,下面對這幾種量化模型進行介紹。性能
DeepCompression開發工具
SongHan 這篇文章能夠說是神經網絡壓縮領域開山之做,怎麼說呢這篇文章很早就注意到了,也復現了,作了不少實驗。也一直想用到硬件參數壓縮以及模型加速當中,在這個過程當中遇到了不少問題,如今提出來跟你們一塊兒探討。編碼
算法總體框架如圖:人工智能
DeepCompression 主要分爲三個主要的部分:剪枝,量化,哈夫曼編碼,下面分別探討這幾種方法而且分析他們在硬件前向配置的加速潛力。
剪枝(purning):其實這個思路的核心很是簡單,就是當網絡收斂到必定程度的時候,做者認爲閾值小於必定權重的權重對網絡做用很小,那麼這些權重就被無情的拋棄了。注意,是拋棄,完全拋棄,在復現的時候這個地方是一個大坑,被剪掉的權重不會再接收任何梯度。
而後下面的套路簡單了,就是很簡單的將網絡 reload,而後從新訓練至收斂。重複這個過程,直到網絡參數變成一個高度稀疏的矩陣。這個過程最難受的就是調參了,因爲小的參數會不斷被剪枝,爲了持續增大壓縮率,閾值必須不斷增大,那麼剩下的就看你的調參大法 6 不 6 了。
當初爲了解決這個問題還專門設計了一個基於準確率損失和壓縮率上升的公式,用於壓縮。算是效果還能夠,本身調參真的很難受。