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.

全体セミナー20180124 final

865 views

Published on

2018年1月27日のレトリバセミナーで発表した資料です。ニューラルネットワークの二次最適化について話しています。

Published in: Technology
  • Be the first to comment

全体セミナー20180124 final

  1. 1. Neural Networkの二次最適化 株式会社レトリバ 西鳥羽二郎
  2. 2. 自己紹介 • レトリバの取締役副社長及びChief Research Officer • 自然言語処理、音声認識など • 研究開発にまつわるetc. • 最近の目標 • 旅行で全都道府県めぐる • 旅行で日本の全世界遺産をめぐる
  3. 3. 趣味: 旅行ですべての県に行く
  4. 4. セミナーについて • ローテーションの編成を以下の交互にします • エンジニア・リサーチャー: 配信 • セールス・バックオフィス: 希望者のみ配信 • 今後は基本的に隔週の配信になります
  5. 5. Deep Learning あるある 学習の高速化したい!! よし、バッチサイズを増やすぞ
  6. 6. バッチサイズと高速化 ※ Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Minutes https://www.preferred-networks.jp/docs/imagenet_in_15min.pdf 高速化のためにバッチサイズ を増やしている
  7. 7. バッチサイズと学習時間 100% 87% 69% 0% 20% 40% 60% 80% 100% 120% 学習時間 バッチサイズ16 バッチサイズ32 バッチサイズ64 バッチサイズ16での学習時間を100%とした時の相対的な学習時間(cuDNN使用時)
  8. 8. バッチサイズと学習時間 100% 58% 34% 0% 20% 40% 60% 80% 100% 120% 学習時間 バッチサイズ16 バッチサイズ32 バッチサイズ64 バッチサイズ16での学習時間を100%とした時の相対的な学習時間(cuDNN非使用時)
  9. 9. バッチサイズをひたすら 増やせばよいか?
  10. 10. ※PFN鈴木さんの「分散深層学習とChainerMNについて 」 https://www.slideshare.net/pfi/20171128chainermn
  11. 11. 巨大バッチによる学習 • バッチサイズを大きくすると精度が悪くなる可能性がある • とはいえ、大規模分散による学習の時だけじゃないのか? • きっと数十くらいなら問題ないだろう
  12. 12. 0.00% 2.00% 4.00% 6.00% 8.00% 10.00% 12.00% 14.00% 1 2 3 4 5 6 7 8 9 10 バッチサイズ16 バッチサイズ32 バッチサイズ64 バッチサイズとエラー率 系列長5~1000 Bidirectional LSTM x 4, Linear x 1, CTC 各epochでの音素誤り率(PER) バッチサイズが大きいほど エラー率が高い…
  13. 13. バッチサイズとエラー率 8.00% 9.00% 10.00% 11.00% 12.00% 13.00% 14.00% 15.00% 16.00% データセットE1 データセットE2 データセットE3 バッチサイズ16 バッチサイズ32 バッチサイズ64 系列長5~1000 Bidirectional LSTM x 4, Linear x 1, CTC 10epoch学習後の単語誤り率(WER) バッチサイズが大きいほど エラー率が高い…
  14. 14. RNNにおける学習 LSTMLSTM LSTMLSTM LSTMLSTM LSTMLSTM W2 W2 W2 W2 W1 W1 W1 W1 系列の長さの回数分適用し、誤差を集約するの で大きいバッチで計算しているのと似ている?
  15. 15. Neural Networkにおける二次最適化
  16. 16. 勾配法とニュートン法 • 勾配法 • δ: 一次微分(= f’(x(t))の値 • ニュートン法 • H: Hessian(但し半正定値行列の時) 𝑥(𝑡+1) = 𝑥(𝑡) − 𝛿 𝑥(𝑡+1) = 𝑥(𝑡) − 𝐻−1 𝛿
  17. 17. Hessian https://ja.wikipedia.org/wiki/%E3%83%98%E3%83%83%E3%82%BB%E8%A1%8C%E5%88%97
  18. 18. ニュートン法の利点 • ニュートン法は二次収束なので勾配法よりも収束が早い • ニューラルネットワーク以外ではニュートン法ベースのものを 用いられることが多い
  19. 19. Deep Learningにおける変数の数 • input, outputの大きさが300のLSTM • 300 x 300 x 8 = 720,000変数 • 5層のBidirectional LSTM • 720,000 x 2 x 5 = 7.2M変数 https://qiita.com/t_Signull/items/21b82be280b46f467d1b
  20. 20. 5層Bidirectional LSTMのHessian 7.2M 7.2M
  21. 21. 5層Bidirectional LSTMのHessian 7.2M 7.2M 7.2M x 7.2M x 4byte = 207TB
  22. 22. Deep Learningにおけるニュートン法 • Hessianを求めるのは難しい… • 冷静に考えてみると直接微分を求めるのも難しいから逆誤差伝搬法が 編み出された • そもそもHessianが半正定値行列とは限らない • 逆行列を求めるのも難しい… • 「最適化対象の全変数x最適化対象の全変数」の大きさ • レイヤーサイズ300のLSTMだけで72万個の変数
  23. 23. ニューラルネットワークでのニュートン法 Training Loss K-FAC converges at the same rate, regardless of batch size! Per-Example Progress: Loss Matthew Johnson&Daniel Duckworth - “KFAC and Natural Gradients” NIPS 2017 Workshop: Deep Learning At Supercomputer Scale バッチサイズ4096でも
  24. 24. ニューラルネットワークでのニュートン法 バッチサイズの大きいAdamが性能を下げ ているのに対してHF(ニュートン法の近 似)は6000でも性能が上がっている BLOCK-DIAGONAL HESSIAN-FRE EOPTIMIZATION FOR TRAINING NEURAL NETWORKS https://arxiv.org/abs/1712.07296
  25. 25. RNNの学習に有効なのか バッチサイズ 200でAdamよ りも精度が良い
  26. 26. RNNの学習に有効なのか? バッチサイズ 200でAdamよ りも精度が良い
  27. 27. ここまでのまとめ • ニューラルネットワークの高速な学習のためにはバッチサイズ を大きくすることが必須 • バッチサイズを大きくしても精度が悪化しない手法として二次 最適化が期待されている • しかしニューラルネットワークは変数が多すぎてHessianを計 算することが困難
  28. 28. Deep Learning向け 二次最適化アルゴリズムの紹介
  29. 29. Deep Learning二次最適化アルゴリズムのポイント • Hessianの近似方法 • 逆行列を高速に計算するための手法
  30. 30. アプローチ1: KFAC • Kronecker Factored Approximate Curvature (KFAC) • HessianをFisher情報量行列で近似 • Fisher情報量行列をKronecker積で分解することにより逆行列を求める 部分を高速に ※Marten et al., Optimizing Neural Networks with Kronecker-factored Approximate Curvature
  31. 31. Hessian行列の近似 • 半正定値性の保証のためにFisher情報量行列でHessianを近似 全パラメータにおける微分
  32. 32. Fisher情報量行列の大きさ • レイヤーサイズ300のLinear 5層の場合 450k 450k 450k x 450k x 4byte = 810GB
  33. 33. Fisher情報量行列を近似 • 𝑎𝑖 : 𝑖 番目の層の出力 𝑔𝑖 : 𝑖 番目の層に伝搬する微分値
  34. 34. Kronecker積 Kronecker積の性質 1. 𝐴 ⊗ 𝐵 −1 = 𝐵−1 ⊗ 𝐴−1 2. 𝐴 ⊗ 𝐵 𝑣𝑒𝑐 𝑋 = 𝑣𝑒𝑐(𝐵𝑋𝐴 𝑇) Kronecker積の定義
  35. 35. block-diagonal行列へ近似 𝐹 = 𝐴0,0 ⊗ 𝐺0,0 𝐴1,1 ⊗ 𝐺1,1 0 0 ⋱ 𝐴𝑙−1,𝑙−1 ⊗ 𝐺𝑙−1,𝑙−1
  36. 36. 補足: A及びG • k層目のLinearにおいて W forward時 入力: 𝑎 𝑘 W backward時 入力: 𝑔 𝑘 𝐴 𝑘,𝑘 = 𝔼[𝑎 𝑘 𝑎 𝑘 𝑇] 𝐺 𝑘,𝑘 = 𝔼[𝑔 𝑘 𝑔 𝑘 𝑇 ]
  37. 37. レイヤーごとへの計算へ分解 • block-diagonal行列にしたことにより、レイヤーごとの演算に 分解される • しかしレイヤーごとでもまだ大きい • レイヤーサイズ300でも(90000 x 90000)の行列になる 𝐴 𝑘,𝑘 ⊗ 𝐺 𝑘,𝑘
  38. 38. Kronecker積で表された行列の逆行列 • ニュートン法の更新式 𝑥(𝑡+1) = 𝑥(𝑡) − 𝐻−1 𝛿 必要なのは逆行列とベクトルの積 KFACにおける更新式は 𝐴 ⊗ 𝐺 −1 𝑣𝑒𝑐 𝑑
  39. 39. 更新式のベース 𝐴 ⊗ 𝐺 −1 𝑣𝑒𝑐 𝑑 = 𝑣𝑒𝑐(𝐺−1 𝑑𝐴−1 ) 𝐴 ⊗ 𝐵 𝑣𝑒𝑐 𝑋 = 𝑣𝑒𝑐(𝐵𝑋𝐴 𝑇 ) 更新式のベース 𝐴 ⊗ 𝐵 −1 = 𝐵−1 ⊗ 𝐴−1 Kronecker積の性質 (300 x 300)の行列の演算になる Kronecker積の演算がなくなる
  40. 40. アプローチ2: KFRA • Kronecker Factored Recursive Approximation (KFRA) • Hessianをガウスニュートン行列で近似 • ガウスニュートン行列をKronecker積で分解し、逆行列を高速に求め られるようにした ※Botev et al., Practical Gauss-Newton Optimization for Deep Learning
  41. 41. Hessian行列の近似 • 𝐻 ≈ 𝐺 = 𝐽 𝑇ℋ𝐽 • 𝐺: Gauss Newton行列 • 𝐽: Jacobian • ℋ: ニューラルネットワークの出力層のHessian
  42. 42. Gauss Newton行列の近似 • 先程のKFACと同様にGauss Newton行列もblock diagonalに近 似するとKronecker積で分解できる Linearの層に対応した Gauss Newton行列 KFACの𝐴 𝑘,𝑘 = 𝔼[𝑎 𝑘 𝑎 𝑘 𝑇 ] と同じ
  43. 43. Pre-activation Gauss Newton 行列 • 残る𝒢 𝜆はback propagation時に伝搬させる変数を追加すること により求めることが可能 Back propagation時に伝 搬してくる誤差から構成 Linearの行列 一つ上の層の𝒢
  44. 44. アップデートの計算 • pre-activation Gauss Newton行列は上位の層から伝搬させる ことにより求められる 𝐺𝜆 −1 𝛿 = (𝒬 𝜆 ⊗ 𝒢 𝜆)−1 𝛿 = (𝒢 𝜆 −1 𝛿𝒬 𝜆 −1 ) (300 x 300)の行列の演算になる Kronecker積の演算がなくなる
  45. 45. 実際にやってみた… • KFRAにおいて必要な処理 • 損失関数の二次微分 -> Chainer ver 3.0で対応 • RNNへの拡張 -> LSTMを活性関数とし、前時刻のWと前レイヤーのW にて別々に計算することで対応可能(そう) • 逆誤差伝搬時に微分の値の他にパラメータ更新量とガウスニュートン 行列を伝搬
  46. 46. 実際にやってみた…かった • KFRAにおいて必要な処理 • 損失関数の二次微分 -> Chainer ver 3.0で対応 • RNNへの拡張 -> LSTMを活性関数とし、前時刻のWと前レイヤーのW にて別々に計算することで対応可能(そう) • 逆誤差伝搬時に微分の値の他にパラメータ更新量とガウスニュートン 行列を伝搬 -> できず…
  47. 47. まとめ • Deep Learningの学習の高速化にはバッチサイズを大きくする ことが欠かせない • RNNの学習においてはバッチサイズを大きくすることが難しい • 巨大なバッチでも性能が良い二次最適化アルゴリズムの紹介 • Hessianの近似を層ごとに分解して近似 • 逆行列を求められるようにKronecker積による分解

×