Large BatchでのDeep Learning
の学習時における性能低下につ
いて
株式会社レトリバ 西鳥羽 二郎
自己紹介
• 西鳥羽 二郎(ID: jnishi)
• 取締役
• リサーチャー
• 自然言語処理
• 音声認識
• 情報検索
• アルゴリズムとデータ構造
• 最適化の数理
今日の話(前回の全体セミナーから再掲)
収束を早める工夫 バッチサイズの大きさ
SGDベースの最適化 勾配
momentum
second-momentum
gradient clipping
〜128 or 256
Hessianを用いた最適化 勾配+曲率情報 数千
© 2017 Retrieva, Inc. 3
このバッチサイズが
大きくできないこと
について
GPUにおけるDeep Learningの学習
• 一回の学習で以下のような単位で計算する
データ
転送
forward
損失の
計算
backward
データ
転送
この演算が重いので
GPUで高速化したい
行列演算
• 1layerあたりm*n(=input size * output size)要素の演算が行わ
れる
• 5-layer 400個のDNNだと8,000,000 (=400*400*5)要素の演算
が行われる
𝑎11 𝑎12
𝑎21 𝑎22
⋯
𝑎1𝑛
𝑎2𝑛
⋮ ⋱ ⋮
𝑎 𝑚1 𝑎 𝑚2 ⋯ 𝑎 𝑚𝑛
∗
𝑏1
𝑏2
⋮
𝑏 𝑛
n = input size
m=outputsize
GPUによる高速化
• GTX TITAN X
• CUDAコア: 3072
• クロック: 1GHz
• 行列の各要素の演算は独立して行えるので、GPUによる並列演
算が行いやすい
• 同時の行える演算の並列度を上げれば上げるほどGPUの性能を活かし
て高速に計算が行える
GPUにおけるDeep Learningの学習
• 一回の学習で以下のような単位で計算する
データ
転送
forward
損失の
計算
backward
データ
転送
データ転送が遅いのでなる
べくまとめて処理したい
GPUで計算する量を多くする
© 2017 Retrieva, Inc. 8
学習データ
• 入力データの次元
• (RNNの場合)系列の長さ
ミニバッチのサイズx転送するデータ量 ≒
こちらを変えると
モデルが変わってしまう
モデルのサイズ
• 層の大きさ
• 層の数
• (RNNの場合)系列の長さ
ミニバッチのサイズxDeep Learningの計算量の
オーダー ≒
こちらを大きくしたい
バッチサイズを大きくしたい
• バッチサイズを大きくしても学習は収束する
• 但し学習データの損失の値を小さくできるという意味での収束
• ただし、テストデータ(学習データに入っていないデータ)での
精度が下がる
精度の例(DNN, CNN)
バッチサイズに関わらず学
習データへの精度は上がる
バッチサイズ大の時のテスト
データに対する精度は下がる
収束時に起こっていること
バッチサイズ小
バッチサイズ大
ギャップが小さい
ギャップが
大きい
損失関数の平坦さ
• Deep Learningの性能に関わ
る議論にもなるので平坦さに
ついては定義が色々ある
• ε-flatness(Hochreiter &
Schmidhuber, 1997)
• 二次微分の曲率による情報
(Chaudhari et al., 2017)
• ε-sharpness(Kesker et al.,
2017)
(Hochreiter &
Schmidhuber, 1997) の例
損失の最小値から少し(ε)
大きいところまでの領域(赤
い部分)の大きさ
ε
平坦さの指標に関する議論
• バッチサイズに関する議論だけでなくDeep Learningの精度の
話にも関わってくるので研究トピックとしてはとてもhotであ
り決着はついていない
ε-sharpnessと精度が
関係あるのではないか
(Kesker et al.,
2017)@ICLR(4月)
いや、ε-sharpnessって精度に
関わらずに自由に変えられるよ
(Dinh et al., 2017)@ICML(8月)
ここまでのまとめ
• Deep Learningだと学習の高速化のためにバッチサイズを大き
くしたい
• しかしバッチサイズを大きくすると汎化誤差が大きくなる
• 何故だかは不明だし研究的にもとてもHot!
それでも、バッチサイズを大きくしたい
• 理論的解析は難しいものの、実験的に良くなる方法が幾つかあ
る
• 学習方法の工夫(Hoffer et al., 2017)
• 最適化手法の選択(Wilson et al. 2017)
手法その1: 学習率を上げる
• バッチサイズが大きくなると勾配の分散がバッチサイズの平方
根に反比例する
• そのため、学習率をバッチサイズの平方根倍して移動を大きく
する必要がある
その2: Ghost Batch Normalization(GBN)
• 通常のBatch Normalization
Large Batch
BN
(出力)
通常のBatch Normalization(BN)
その2: Ghost Batch Normalization(GBN)
• 小さいバッチに分けてそれぞれのバッチごとにBNを行う
Small Batch
Small Batch
Small Batch
Small Batch
BN
BN
BN
BN
Large Batch
Ghost Batch Normalization(BN)
分割
出力
結合
その3: 学習回数を増やす
• バッチサイズを大きくすると1 epochあたりの学習回数は減っ
てしまう
Small Batch
Small Batch
Small Batch
Small Batch
Large Batch
Large Batch
4回 2回
DNN及びCNNにおけるlarge batchでの精度
Large Batchの方が
精度が低い
3手法全部入れるとSmall
Batchより精度高い
ImageNetとAlexNetでの比較
Large Batchの方が
精度が低い
単純なLarge Batchに比べ
ると精度が上がっている
汎化性能を上げたい
Adaptiveな最適化手法
• それまでの学習に応じて反映
させる更新量を調整する
• Adam
• AdaGrad
• RMSProp
Non-Adaptiveな最適化手法
• 過去の学習には関係なく更新
する
• SGD
• SGD w/ momentum
• Nesterovの加速勾配
一般的にはAdaptiveな
手法の方が収束が早い
最適化手法ごとの収束の違い
Adam及びRMSProp
の方が収束が早い
SGDの方が汎化誤
差が小さい
まとめ
• バッチサイズを大きくしたいときは以下のことをためそう
• 学習率を大きくする
• イテレーション回数を増やす
• Ghost Batch Normalizationを入れる
• SGDやNesterovの加速勾配などnon-Adaptiveな手法を試す
参考文献
• (Hoffer et al., 2017): Train longer, generalize better: closing the
generalization gap in large batch training of neural networks.
• (Wilson et al., 2017): The Value of Adaptive Gradient Methods in
Machine Learning.
• (Dinh et al., 2017): Sharp Minima Can generalize For Deep Nets.
• (Kesker et al., 2017): On Large-Batch Training For Deep Learning:
Generalization Gap and Sharp Minima.
• (Chaudhari et al., 2017): Entropy-sgd: Biasing gradient descent
into wide valleys.
• (Hochreiter & Schmidhuber, 1997): Flat minima.

全体セミナー20170629