深層学習 ≒ DNNをSGDでデータに対して最適化する
この手順を好きなだけ繰り返す
1. データをシャッフルしてミニバッチに分割する
2. 分割したミニバッチごとに、モデルに対してまとめて
a. 前向き計算をして推論結果を出す
b. 推論結果と正解データのズレ(距離)を計算
c. ズレをもとに後ろ向き計算(backpropをする)
d. 後ろ向き計算で得られた勾配の平均を計算
e. 勾配をモデルのパラメータに反映
並列化して速くなる、は自明か?
• GPUあたりのバッチサイズはそんな
に変わらない
• GPU数を32倍にすると、全体のバッ
チサイズも32倍
• (2017年までは)バッチサイズをあま
り大きくすると汎化性能にペナルティ
があることが分かっていた
• 頑張って512とか
Keskar et al., “On Large-Batch Training for Deep Learning: Generalization Gap and
Sharp Minima”, arXiv:1609.04836 [cs.LG]
Slide 18
Slide 18 text
並列化するテクニックが上手くいく場合がある
Linear Scaling Rule:
• バッチサイズを k 倍にしたいときは
は学習率も k 倍すればよい
バッチサイズが大きくなるとSharp
minimaに陥ってぬけにくくなるので、そ
の分だけ学習率を大きくすればよい
※他にもさまざまなテクニックがある
Goyal et al., “Accurate, Large Minibatch SGD: Training ImageNet in 1
Hour”, arXiv:1706.02677 [cs.CV]