Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20180831 [DeLTA TECH] 深く青い脂

456 views

Published on

深く青い脂

ニューラルネットワークの量子化とは、通常32bitや16bitの浮動小数点数が用いられるパラメータや演算を、高速化や学習済みモデル容量の削減のため、より低いbitの数値表現で置き換える事です。今回は、様々なニューラルネットワークの量子化の手法のうち、低い(1~4) bitで学習時に量子化を行い、さらに量子化の閾値を学習する研究の紹介をします。

講演者:
LeapMind Inc,
Full Stack Engineer
脇坂 琢也

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

20180831 [DeLTA TECH] 深く青い脂

  1. 1. Full Stack Engineer 脇坂 琢也 2018/8/31 深く青い脂
  2. 2. Ref: http://src-h.slav.hokudai.ac.jp/literature/sorokin-4.html 青い脂 ウラジーミル ソローキン Владимир Георгиевич Сорокин 1999 望月 哲男 (翻訳), 松下 隆志 (翻訳) 河出書房新社
  3. 3. Ref: http://src-h.slav.hokudai.ac.jp/literature/sorokin-4.html 青い脂 “ 物語は「青脂(голубое сало=水色の脂身)」と呼ばれる物質を中心に展開する。 これは薄青い光を発する特殊原子構造を持った物質で、その属性のひとつはゼロ・ エントロピー、すなわち外部環境に関わらず定温を保つという点にある。これは超 絶縁体としての機能を意味し、超伝導体との組み合わせによって、永久エネルギー 機械に利用できる(ここに「熱力学の第4法則」が働くらしい)。もちろん他にも この物質の多様な用途がほのめかされている。 青脂の産出法は限定されている。すなわちまずロシアの作家たちのクローンを作 成し、彼らに執筆させた後、仮死状態になったその肉体に、ライトブルーの脂身が 蓄積されるのを待つのである。 ” 青い脂の書評より
  4. 4. Ref: http://src-h.slav.hokudai.ac.jp/literature/sorokin-4.html 青い脂 青脂の産出法は限定されている。すな わちまずロシアの作家たちのクローン を作成し、彼らに執筆させた後、仮死 状態になったその肉体に、ライトブル ーの脂身が蓄積されるのを待つのであ る。
  5. 5. Ref: http://src-h.slav.hokudai.ac.jp/literature/sorokin-4.html 自己紹介 - 脇坂琢也 Twitter で低ビットCNNや、Efficient CNNなどの 論文概要のつぶやきなどしております。 Twitter: @rui_mashita 夢: 機械人間になる (パラリンピックでメダル ) OSSにちょこっとコミットしてたり: Tensorflow, Chainer, ONNX
  6. 6. 自己紹介 - 主なお仕事 FPGA向けのCNNの開発 トレーニングしてモデルを出力する環境( ライブラリ)の開発 dataset loader, multi gpu training, network archic, post/pre process, data augmentation, quantization...
  7. 7. 青い脂 ローエンドFPGAで、高速に実行され るCNNモデルの産出法は限定されてい る。すなわちまず効率的なネットワー クを作成し、量子化されたネットワー クで、精度低下を抑えたパラメータが 学習されるのを待つのである。
  8. 8. 8 Contents 1. Deep Neural Network の量子化の 1. なぜ 2. なにを 3. いつ 4. どうやって 1. Leapmindのプロダクトでの量子化 1. 量子化tips
  9. 9. CNNの量子化の話 効率的なCNNを作るには 今日は、Quantization(量子化)の話 他にも色々あるよー。Pruning, Distilition, Efficient convolution & Network architecture (group conv, shuffle, shift..), Tensor decompose ... 9
  10. 10. なぜ量子化するんでしたっけ? なぜ量子化するんでしたっけ? 10
  11. 11. なぜ量子化するんでしたっけ? 浮動小数点数 32bit から低bitにすることで、モデルのサイズ・メモリ容量の削減。 浮動小数点数を使わないことで推論時の計算がはやくなる トレードオフ 基本的には、低ビットだとメモリ容量が小さくて実行がはやいが、逆にモデルの精度 は低くなってしまう。 11
  12. 12. どこを量子化するんでしたっけ? どこを量子化するんでしたっけ? 12
  13. 13. どこを量子化するんでしたっけ? CNNの演算の中で計算量の大きいfully connected, convolutionを速くしたい。 fully connnected も convolution にも、 input (画像, feature map) と weight がある。 Output = Input ⊗ Weight weight convolution() Input Output 13
  14. 14. どこを量子化するんでしたっけ? このinputとweightを量子化する。慣習的にinputの事をactivationという。 Output = activation_quantize(Input) ⊗ weight_quantize(Weight ) weight convolution() Input Output weight_quantize() activation_quantize() 14
  15. 15. いつ量子化するんでしたっけ? いつ量子化するんでしたっけ? 15
  16. 16. いつ量子化するんでしたっけ? 16 出来上がったfloatのモデル(トレーニング後)に量子化にやるヤツーと トレーニング時に量子化するヤツーがいる (それっぽい図を入れる)
  17. 17. いつ量子化するんでしたっけ? 17 出来上がったモデル (トレーニング後) を量子化 トレーニング時に 量子化
  18. 18. いつ量子化するんでしたっけ? 18 出来上がったモデル (トレーニング後) を量子化 トレーニング時に 量子化
  19. 19. トレーニング後の量子化のメリット 19 トレーニング後の量子化は、量子化のためだけに再トレーニングしなくて良いので 学習の時間も計算リソースもかからなくて嬉しい。 しかし、低いbitを使おうとするとすると精度的に厳しい。 8bitでだいたいfloatと同じclassification accuracy (1~2point, ImageNet). ただし、MobileNetV2みたいな既に効率的なネットワークだと若干下げ幅が大きい
  20. 20. トレーニング後の量子化の精度低下 20 Quantizing deep convolutional networks for efficient inference https://arxiv.org/abs/1806.08342
  21. 21. いつ量子化するんでしたっけ? 21 出来上がったモデル (トレーニング後) を量子化 トレーニング時に 量子化
  22. 22. いつ量子化するんでしたっけ? 22 出来上がったモデル (トレーニング後) を量子化 トレーニング時に 量子化
  23. 23. トレーニング時に量子化のメリット 23 トレーニング後にやるよりも低いビットで高いモデルの精度を期待できる。 つまり、小さいモデル(メモリ)のサイズで実行速度の早い、効率的なモデルが作 成できる。 activation: 4bit, weight: 4bit で、floatとほぼほぼ同じ精度 (1~2point, ImageNet).
  24. 24. トレーニング時に量子化の精度低下 24 PACT: Parameterized Clipping Activation for Quantized Neural Networks https://arxiv.org/abs/1805.06085
  25. 25. トレーニング時に量子化の精度低下 25 LQ-Nets: Learned Quantization for Highly Accurate and Compact Deep Neural Networks https://arxiv.org/abs/1807.10029
  26. 26. 26 トレーニング時に量子化ってどうやるんでしたっけ? トレーニング時に量子 化ってどうやるんでし たっけ?
  27. 27. 27 トレーニング時に量子化ってどうやるんでしたっけ? forward時にはfloatのweightやactivationの量子化を行いますが 、量子化を行う関数はstep関数なので、普通に勾配を求める とうまく学習できません。 そこでbackward時には量子化を行う関数を近似してから、勾 配を求めます。 weightの値はfloatで保持しておいて、その勾配で値を更新す ると、高い精度が得られる事が知られています。
  28. 28. 量子化関数 quantize() 近似した量子化関数 approximate_quantize()
  29. 29. 29 トレーニングで量子化ってどうやるんでしたっけ? weight weight_quantize() convolution() activation_quantize() Wf Wq Af Aq forward
  30. 30. 30 トレーニングで量子化ってどうやるんでしたっけ? gradient weight ∂L /∂Wf = ∂L /∂Wq * ∂Wq /∂Wf conv_backward() ∂L /∂Af = ∂L /∂Aq * ∂Aq /∂Af ∂L /∂Wq ∂L /∂Wf ∂L /∂Aq ∂L /∂Af ∂Aq /∂Af = Δapproximate_activation_quantize() ∂L /∂Af ∂Wq /∂Wf = Δapproximate_weight_quantize() backward
  31. 31. 31 Leapmindでの量子化 Leapmindのプロダクト DeLTA での 量子化
  32. 32. 32 アグレッシブに低ビットで量子化してます Leapmindではトレーニング時に量子化を行う手法を採用しています。 ローエンドなFPGAで高速に推論させるためには、4bit以下の weight: 1 bit activation: 2 bit
  33. 33. 33 低ビット量子化 tips 低ビット量子化あるある
  34. 34. 34 トレーニング時の量子化tips floatで学習したweightを、量子化の学習の初期値とし て(pre-train) 使う?
  35. 35. 35 トレーニング時の量子化tips floatで学習したweightを、量子化の学習の初期値とし て(pre-train) 使う? -> w:1, a:2 の量子化だと精度向上見られない。floatの weightとの乖離が激しいため(?)。 ただし、float学習にreluではなくclipを使ってpretrain として使うと良いという研究も。 Bi-Real Net: https://arxiv.org/abs/1808.00278
  36. 36. 36 トレーニング時の量子化tips なんか、validationの精度がstep毎にめちゃくちゃブ レるんですけど。 画像サイズが小さいとかなり精度が落ちるんですが。
  37. 37. 37 トレーニング時の量子化tips なんか、validationの精度がstep毎にめちゃくちゃブ レるんですけど。 -> batch norm の moving average mean, var が原因 ?batch normのdecayの値を大幅に変えてみると良い かも。 画像サイズが小さいとかなり精度が落ちるんですが。 -> 一度大きめの画像サイズで量子化学習して、小さ い画像を使った学習の初期値にすると良い場合も。
  38. 38. 38 トレーニング時の量子化tips 最初のレイヤーと最後のレイヤーを量子化する? あれ。floatだと精度良いのに、量子化したら精度が全 然出ない。
  39. 39. 39 トレーニング時の量子化tips 最初のレイヤーと最後のレイヤーを量子化する? -> classificationだとそんなに影響なかったりしますが 、最初のレイヤーを量子化するとだいぶ精度がさがっ ちゃいますねー。。。 あれ。floatだと精度良いのに、量子化したら精度が全 然出ない。 -> channel-wise な weight quantization がおすすめで す。
  40. 40. LeapMind Inc. © 2018 deltatech@leapmimd.io http://leapmind.io/ ご質問などございましたら、お気軽にご連絡ください。

×