第26回 全脳アーキテクチャ若手の会 勉強会 「バイナリーニューラルネットとハードウェアの関係」に参加してきました
第26回 全脳アーキテクチャ若手の会 勉強会 「バイナリーニューラルネットとハードウェアの関係」に参加してきました。
当日の資料は公開されています。
www.slideshare.net
バイナリーニューラルネット(以下、BNN)は私も興味があり調べていたので、発表を聞くのが楽しみでした。
発表者は、筑波大博士過程の田尻さん。
発表は、BNNの論文を、
- Binary Connect
- Binarized Neural Network
- XNOR-Net
の、投稿順に比較しながら説明するスタイルでした。
私は各論文についてそれぞれ概要は知っていましたが、より情報を整理できました。発表の構成が良かったですね。
それぞれ比較すると各論文のモチベーションやアルゴリズムの違いが明確にわかりますね。
私も論文を読むときは、参考にしようと思いました。
今回の発表と既存の知識から、BNNのポイントを私なりにまとめると、
- 学習時の特徴
- 認識時の特徴
- バイナリ化した重みのみ使う
- その他
- 論文によって、どこがバイナリ化されてるか異なる
- 重み
- 活性化関数の出力
- 論文によって、どこがバイナリ化されてるか異なる
- メリット
- リソース削減
- メモリ使用量が削減できるので、重みをオンチップにし易い
- 高速化
- RAMにアクセスせずオンチップでデータを流せるため
- 積和演算をバイナリ演算に置き換えられるため
- 小規模なデータなら、普通のNNに近い精度
- 情報量を減らすことが、正則化に繋がる
- リソース削減
- デメリット(課題)
- 大規模データでは認識精度がでない
- ImageNetで6割くらい
- 標準で対応したフレームワークがない??
- 大規模データでは認識精度がでない
★OSSで標準で対応した汎用のフレームワークあるんでしょうか?
質疑応答でも以下のようなやり取りがありましたが、
- 実用ではBNNより固定小数点やDSP活用の方が現実的では?
- ⇒ 二値化という概念のポテンシャルは高い
- ⇒ 学習方法の発達などで今後見込みがあると思う
HW化する上での実用化的な手法は、他にもありそう。
ただし、クラス数を絞れたり、メモリが少ない特定のユースケースには、BNNが向きそうだと思いました。
以下、メモ
それぞれ、論文の実装のリンクを貼っておきます
Binary Connect
学習方法
- 元々の重みをバイナリ化して、順伝播する
- 素の浮動小数点の重みを保持しておくことが重要
- 逆伝播時
- バイナリ化した重みの勾配を計算
- 更新対象は、保持しておいた素の重み
- クリップすることで、実数重みの発散を防ぐ
- 推論時はバイナリ化した重みだけ持てば良い
- バイナリ化には正則化の効果がある
- 表現力を落とし、過学習を防げる
- 学習
- データセット毎にモデル構成が異なる
Permutation-invariant MNIST
- 回転とか拡大とか、事前の画像処理を禁止したデータセット
Binarized Neural Network
活性もバイナリ化。これもBengioグループの論文。
- 活性をバイナリ化は課題があったが、この論文ではそれを解決
- 活性をバイナリ化する課題は、勾配の消失
- ⇒ HTanhなら、バイナリ化できるし、勾配も消えない
- 前の層からの入力は活性化関数でバイナリ化されてる
- 順伝播の1層目は特別扱い。ここはバイナリでない8bit固定小数点。
学習
- BinaryConnect同様、実数重みを更新
Shift-basedなBatch Normalization
- 浮動小数点でのBatch Normalizationが遅い問題を解決
- 分散と正規化の計算をシフト演算に置き換え
- 論文では確率的バイナリ化でのみ使っていて、決定的バイナリ化では普通のBNを使っている
- シフト演算にすることで、2のべき乗しか表現できないが、精度は落ちるのか?
- ⇒論文に数値の記載はないが、精度は落ちないぽい
その他
- 積和演算が並列のビット演算に置き換えられる。p.49の図わかりやすい
- 論文でも、Clippingしないと精度落ちることは言っている
XNOR-Net
GitHub - allenai/XNOR-Net: ImageNet classification using binary Convolutional Neural Networks
YOLOの人の論文
- 今までのBNNの論文は10クラス程度の小規模なデータでし か検証していない
- 今回は、ImageNetの1000クラス認識で検証し、top-5で69.2%まで達成
バイナリ化の緩和 スケーリングがポイント
- 普通のCNNとバイナリCNNではフィルタ後の値差が大きすぎる
- バイナリ化を維持したまま、もとの畳込みに近づけたい
- ⇒ スケーリングで差を埋めよう
スケーリング
レイヤの順番をBianryConvに合わせて変えてるぽい
論文での評価の仕方は微妙かも?理想値だったり。
FINN
- 要求速度から適切な並列度を計算する
- Batch Nomalization正規化の近似が正答率向上にきいてる
- 実験シナリオは、maxとfix
- fixは9000FPS
- 後続の論文あり
- FINNはPaddingを実装していなかったので、そこを改良した
その他
発表者の田尻さんは、現在筑波大学の博士課程で衛生リモートセンシングの研究をされてるとのこと。
夢があっていいですね!
次回の若手の会は、7/20(たしか)に強化学習のN本ノックやってみたという内容で開催されるようです。
強化学習は、私も興味があるので参加したいです。
ブログ書こう書こうと思っていたのですが、先週はバタバタしていて書けませんでした…
今度はインプットが新しいうちにブログに書きたいです