二值化網路如何實現加速?

在基於Caffe實現二值化網路的時候,雖然可以將卷積核或者神經元進行二值化,但是在進行卷積計算的時候,還是調用了cudnn關於前向卷積計算的庫,速度並沒有明顯提高,請教一下,基於二值化網路,如何實現預測加速呢?


按位與 + popcnt,一般人我不告訴他~


現在由於還比較缺乏成熟的二值化(或者其他多值化)的計算框架,但是做研究的時候不能被這個給阻礙到,於是我們只能先另闢蹊徑,在現有的框架如tensorflow,caffe等中直接先將參數以及特徵二值化之後再進行正常的卷積或者矩陣計算,以求達到一個「模擬」真正的二值化計算的目的。

真正的二值化計算一般使用的是位運算加上bitcount來執行兩個向量的內積,用此再組合出更加複雜的卷積等操作。如果在通用CPU上執行就需要藉助位運算指令,如果在FPGA上實現的話還可以有其他的硬體實現方式。

而且,通常來說二值網路在訓練的時候也需要保持一份完整浮點精度的參數用來累積梯度,不然每一次梯度更新的細小改動就被淹沒掉了。因此一般在訓練模型的時候也不太適合使用專有的硬體,基本還是先在GPU上用「模擬」的方法訓練好了,再將模型轉移到加速的硬體上去執行。

而由於1bit的二值網路對於精度的下降實在也是比較嚴重,因此現有的研究也將目標指向了使用更多的bit。2bit到4bit的量化(quantization)神經網路的研究也已經比較普遍了。使用稍微多一點的位數,性能的損失就已經幾乎可以忽略不計了。


二值化主要是為了預測的時候CPU加速,GPU沒必要。


應該是為了開發晶元加速,例如FPGA來實現前向運算的時候的大量並行,就可以結合門電路和二值神經網路


自己再做一塊晶元 一般人我不告訴他


請參考:Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1


二值化網路加速在於省掉了乘法運算,只考慮加減,但實際加速效果並不明顯


推薦閱讀:

美國數據挖掘研究生?
arXiv怎麼發音?
在 DeepMind 工作是一種怎樣的體驗?
業界現在有哪些比較成熟的基於深度學習(deep learning)的應用?
強化學習演算法都需要建立一個類似Qtable的表格嗎?

TAG:機器學習 | 二值化演算法 | 深度學習DeepLearning | Caffe深度學習框架 |