雑多な趣味の記録帳

tom01h.exblog.jp

Binary Weight Network

XNOR-Net の論文 に従い、ウェイトを2値{-1,1}化する Binary Weight Network を実装してみました。
大雑把に言うと実数のウェイトが正または0の時にバイナリウェイトを+1として、負の時は-1とします。ただし、実数のウェイトの各要素の絶対値の平均でスケーリングします。順伝搬、逆伝搬はバイナリウェイトを使って計算し、パラメータの更新時だけは実数のウェイトを使います。
ただし論文にある通り、1層目と出力層は2値化しません。また、値だけを2値化していてデータ型は2値化していないので、シミュレーションは速くなりません。
まずは比較用にベースになるネット。これは昨日の最終形です。
f0054075_18454297.png
Binary Weight Network では、2~3% ほど認識精度が低下してるように見えます。ちなみに、XNOR-Net では Pooling 層の位置を変更するのですが、BWNで試してみても学習が遅くなるだけで認識精度は変わりませんでした。
f0054075_17051075.png
じゃあ、スケーリングの効果はいかほどなんでしょうか?スケーリングなしで試してみました。たぶんこれが Binary Connect の Deterministic binalization なんだと思います。
結果としては、スケーリングの効果なし。実装間違っているのかなぁ?
f0054075_17142205.png
んじゃ、スケーリングなしでアクティベーションも2値化したらどうなるのでしょうか。Binary Neural Network がこれなんだと思いますが… さすがにだいぶ認識精度が下がりました。
f0054075_17172556.png

スケーリングを導入した XNOR-Net になるとどこまで回復するのでしょうか?スケーリングの求め方がとっても難しそうなのでまた後日。
しかし、畳み込みを2値化しても BatchNormalization を使っていては… と思ったら、BNN の論文になんか書いてあります。読んでみるか…

[PR]
トラックバックURL : https://tom01h.exblog.jp/tb/28170227
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2017-09-24 22:53 | Trackback | Comments(0)