tkato’s blog

ブログ名は暫定。

第26回 全脳アーキテクチャ若手の会 勉強会 「バイナリーニューラルネットとハードウェアの関係」に参加してきました

第26回 全脳アーキテクチャ若手の会 勉強会 「バイナリーニューラルネットとハードウェアの関係」に参加してきました。

wbawakate.connpass.com

当日の資料は公開されています。

www.slideshare.net

バイナリーニューラルネット(以下、BNN)は私も興味があり調べていたので、発表を聞くのが楽しみでした。

発表者は、筑波大博士過程の田尻さん。

発表は、BNNの論文を、

  1. Binary Connect
  2. Binarized Neural Network
  3. XNOR-Net

の、投稿順に比較しながら説明するスタイルでした。

私は各論文についてそれぞれ概要は知っていましたが、より情報を整理できました。発表の構成が良かったですね。
それぞれ比較すると各論文のモチベーションやアルゴリズムの違いが明確にわかりますね。
私も論文を読むときは、参考にしようと思いました。

今回の発表と既存の知識から、BNNのポイントを私なりにまとめると、

  • 学習時の特徴
    • 学習時から、重みをバイナリ化して扱う
      • 浮動小数点で学習した重みを認識時だけバイナリにするのは、順伝播によって各レイヤで誤差が蓄積するためうまくいかないらしい
    • バイナリ化した重みの勾配で、元の重みを更新
    • 更新時にクリッピング
    • 通常のNNより学習時間は長くなる傾向
      • 正則化による
      • バイナリ化などで計算量増えるため
    • Batch NormalizationをHW最適化した方法がキモ
  • 認識時の特徴
    • バイナリ化した重みのみ使う
  • その他
    • 論文によって、どこがバイナリ化されてるか異なる
      • 重み
      • 活性化関数の出力
  • メリット
    • リソース削減
      • メモリ使用量が削減できるので、重みをオンチップにし易い
    • 高速化
      • RAMにアクセスせずオンチップでデータを流せるため
      • 積和演算をバイナリ演算に置き換えられるため
    • 小規模なデータなら、普通のNNに近い精度
      • 情報量を減らすことが、正則化に繋がる
  • デメリット(課題)
    • 大規模データでは認識精度がでない
      • ImageNetで6割くらい
    • 標準で対応したフレームワークがない??

OSSで標準で対応した汎用のフレームワークあるんでしょうか?

質疑応答でも以下のようなやり取りがありましたが、

  • 実用ではBNNより固定小数点やDSP活用の方が現実的では?
    • ⇒ 二値化という概念のポテンシャルは高い
    • ⇒ 学習方法の発達などで今後見込みがあると思う

HW化する上での実用化的な手法は、他にもありそう。
ただし、クラス数を絞れたり、メモリが少ない特定のユースケースには、BNNが向きそうだと思いました。

以下、メモ

それぞれ、論文の実装のリンクを貼っておきます

Binary Connect

GitHub - MatthieuCourbariaux/BinaryConnect: Training Deep Neural Networks with binary weights during propagations

  • 重みの行列だけバイナリ化
  • 活性化関数の出力は浮動小数点のまま
  • biasも浮動小数点のまま

学習方法

  • 元々の重みをバイナリ化して、順伝播する
  • 素の浮動小数点の重みを保持しておくことが重要
  • 逆伝播時
    • バイナリ化した重みの勾配を計算
    • 更新対象は、保持しておいた素の重み
      • クリップすることで、実数重みの発散を防ぐ
    • 推論時はバイナリ化した重みだけ持てば良い
  • バイナリ化には正則化の効果がある
    • 表現力を落とし、過学習を防げる
  • 学習

Permutation-invariant MNIST

  • 回転とか拡大とか、事前の画像処理を禁止したデータセット

Binarized Neural Network

GitHub - MatthieuCourbariaux/BinaryNet: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1

活性もバイナリ化。これも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ではフィルタ後の値差が大きすぎる
  • バイナリ化を維持したまま、もとの畳込みに近づけたい
    • ⇒ スケーリングで差を埋めよう

スケーリング

  • 僅かな乗算の増加と引き換えに量子化誤差をへらした (p.59)
  • スケーリング係数は最適化問題を解いて求めるぽ
  • 素のConvと結果が変わらないようなαを求める

レイヤの順番をBianryConvに合わせて変えてるぽい

論文での評価の仕方は微妙かも?理想値だったり。

FINN

  • 要求速度から適切な並列度を計算する
  • Batch Nomalization正規化の近似が正答率向上にきいてる
  • 実験シナリオは、maxとfix
    • fixは9000FPS
  • 後続の論文あり
    • FINNはPaddingを実装していなかったので、そこを改良した

その他

発表者の田尻さんは、現在筑波大学の博士課程で衛生リモートセンシングの研究をされてるとのこと。

  • 衛生と地上の通信をせず、衛生内で画像処理をするためにFPGA実装
  • モチベーション
    • 通信の遅延を削減できる
    • 衛星は回収できないので、データさえ送ればHWを書き換えられるFPGAに利点がある

夢があっていいですね!

次回の若手の会は、7/20(たしか)に強化学習のN本ノックやってみたという内容で開催されるようです。

強化学習は、私も興味があるので参加したいです。

ブログ書こう書こうと思っていたのですが、先週はバタバタしていて書けませんでした…
今度はインプットが新しいうちにブログに書きたいです