XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
概要
[1603.05279] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
- CNNのカーネル行列$ \bf{W} $を$ \pm 1 $に2値化することで、Convolutionの計算量を減らして高速化。
- カーネル行列だけでなく入力$ \bf{I} $を2値化するモデルも提案。58倍の高速化に成功したが精度は結構落ちた。
手法
カーネル行列$ \bf{W} $の2値化(Binary-Net)
各要素が$ \pm 1 $のいずれかである行列$ \bf{B} $と、スケール変数$ \alpha $を用いて$ \bf{W} $を近似する。
近似誤差$ J \left( \bf{B}, \alpha \right) $の最小化問題を考える。 誤差はL2ノルムを考える。
これは解析的に解けて、
となる。ただし、$ n $は$ \bf{W} $の要素数。
学習
Forward propagation
binarizeしたフィルタ$ \tilde{\bf{W}} = \alpha \bf{B} $を用いてconvolutionを計算する。 ウィンドウ内の入力をすべて加減算したあと、最後に$ \alpha $を乗じる。
Backward propagation
Forward propagation同様、$ \tilde{\bf{W}} $を用いる。
Update
$ \tilde{\bf{W}} $を用いて計算した誤差勾配$ \dfrac{\partial \mathcal{L}}{\partial \tilde{\bf{W}}} $を用いて$ \bf{W} $を更新する。
入力行列$ \bf{I} $もbinarizeする場合(XNOR-Net)
基本は$ \bf{W} $と同じようにbinarizeすればよい。 ただし、スケール変数の計算の無駄をなくすため、Convolutionに工夫がされている。
結果
- 速度:VGG, ResNet, AlexNetについて検証
- 実測値で58倍速を達成した
- カーネルのチャンネル数が少ない場合、フィルタのサイズが小さい場合は効果が薄い
- 精度:ImageNetのClassification
- ResNet18で、Binary-Netの場合10%程度Top1低下
- XNOR-Netだと約20%の低下