Binary Neural Network その1:「BinaryConnect」を読みました
この記事は6/8に開催されたMETRICAエンジニア勉強会の発表資料です。
今回は参加者の西本くんがBinaryConnectについて発表してくれました。
背景
近年、計算可能性が新しいアルゴリズム開発のネックになる場面が散見されるようになった。また、実際の応用において、GPUよりもパワーの弱いデバイスにDeepLearningのモデルを載せたいというニーズも出てきた。そこで、DeepLearningの学習、予測の際の計算高速化に関心が集まっている。
モデルの重みを2値化することで、積和操作を単なる和に置き換える事ができる。乗算器は、Deep Learning の計算において、メモリとパワーを大変多く消費するので、これは利点が大きい。
著者は、重みの2値化によるDeepLearningの計算高速化の手法の1つとして、BinaryConnect(BC)を提案した。
BinaryConnect
重みの2値化
決定的(Deterministic)な方法と、確率的(Stochastic)な方法がある。
Deterministicな方法:
Stochasticな方法
( \sigma(x))はハードシグモイド関数である。ソフトなシグモイド関数を用いなかったのは、計算量を減らすためである。
学習時
- 順伝播、逆伝播の際は2値化された重みを用いる。
- 勾配が蓄積されて更新される重みは、高精度の実数値のままにしておく。
Binary ConnectとSGDの互換性
重みの2値化をノイズとみなすと。noisyで微小なステップで重みが更新され、更新が進むにつれてノイズは相殺される。よってBinarry Connect はSGDにより学習を行うことができる事がわかる。うまく更新が行われるためには、更新される重みは高精度実数である必要がある。
予測時
次の3通りの方法のうち、どの方法で予測を行うのがが合理的な方法だろうか?
- 2値化された重み$( w_b )$を用いて予測する。
- 高精度実数の重み$(w)$を用いて予測する。
- アンサンブル法で予測する。
Det.では、2値化された重み$ ( w_b )$ を用いて予測する。 こうすることで、予測の際の乗算を取り除くことができる。
Stoc.では、高精度実数の重み $( w )$ を用いて予測する。
これは、学習時にノイズを加え、予測時はノイズを除くというDropoutの考え方に通じるものがある。
結果
Binary Connect を用いることで、学習時の乗算を1/3に減らし、学習時間が約3倍短くなった。 特にDeterministicなBCでは、予測時の乗算がすべて取り除かれて、必要なメモリが16倍以上少なくなった。
また、DropOut同様、BinaryConnectは正則化として作用し、汎化性能向上に寄与することもわかった。
重みの離散化は、重みへのノイズ付与とみなせる。重みにノイズを加えることが正則化として作用し、モデルの汎化性能を向上させる。
これは、伝播計算の際に半数の重みを0にするDrop Connectと似ている。
類似研究との比較
重みを2値化したDeep Neural Networkに関する他の研究と比較して、本研究は以下の特徴がある。
- 既存研究では、重みの更新にExpectation Back Propagetion (EBP) を用いていたが、本研究ではBAck Propagation (BP)を行った。
- CNNの学習に成功した。
今後
- 他のモデルやデータセットで性能を試してみる
- 重みの更新の計算を必要なくして、学習時の掛け算を完全に除去したい