"Towards Accurate Binary Convolutional Neural Network"這篇文章提出了ABCnet,是一種表示精度較高的二值化網絡結構(作爲XNORnet的演進)。有關XNORnet及其優勢可以參考論文:"XNORNet: ImageNet Classification Using Binary Convolutional Neural Networks"。
論文地址:https://arxiv.org/abs/1711.11294
ABCnet GitHub:https://github.com/layog/Accurate-Binary-Convolution-Network
XNORnet GitHub:https://github.com/ayush29feb/Sketch-A-XNORNet
1、權重參數二值化的線性組合
文章採用一組二值化基(binary filter base)的線性組合來表示網絡層參數:
線性組合係數與二值化基的求解問題如下:
針對每個網絡層,文章採用一組固定數值的矢量表示二值化基,並且由網絡層參數的均值與標準差決定:
由此便可以獲得單一求解線性組合係數的優化問題:
2、權重參數的STE求導
當參數二值化之後,由於估計取值的離散性,不能直接求解損失函數關於原參數的導數,只能用STE(Straight Through Estimator)方法近似求解:
其中c 爲損失函數,O 表示網絡層輸出。
3、網絡層輸入的量化
當網絡參數二值化之後,便可以消除卷積或矩陣乘法涉及的乘法操作(multiplier-free),若進一步將網絡層輸入量化爲1bit,那麼卷積或矩陣乘法便可以簡化爲bit-wise XNOR與bit-count運算:
實施二值化操作時,網絡層輸入仍然採用一組二值化基的線性組合予以估計:
其中scale係數(beta)、shift係數(v)是可訓練參數,類似於Batch Normalization的仿射變換系數。最終二值化網絡層的構造及計算方式如下:
若網絡層同時包含pooling、batch normalization及activation操作,則類似於XNORnet的做法,網絡層可構造爲bn -> conv2d -> pooling -> activation的形式:
並且BN(仿射變換)與網絡層輸入的二值化可以合併在一起:
4、實驗結果
針對ImageNet2012分類任務,以Resnet18爲例,ABCnet結構相比於原網絡、以及其他二值化網絡的推理精度對比如下: