ミニバッチサイズと学習率の関係2018-07-17宮川 拓
View Slide
動機⚫ 確率的勾配降下法(SGD)では、訓練セット全体ではなく、m個のサンプル=ミニバッチを用いて重みを更新する⚫ mは、メモリが許す限り大きければ大きい方がいいのだろう、と勝手に決めつけていたけど、実はそうでもないらしい2/15
元ネタ⚫ Dominic Masters and Carlo Luschi,“Revisiting Small Batch Training for DeepNeural Networks”◼ 著者はGraphcoreというML用チップ製造スタートアップの人たち◼ ミニバッチサイズと、学習率、モデルの性能の関係を調べた論文3/15
先に結論⚫ ミニバッチのサイズは小さめの方が良い◼ テストデータに対する性能が良くなる◼ 学習が発散しない学習率の幅が広くなる⚫ ミニバッチのサイズを小さくすると、GPU等を使った時に計算の並列度が低くなるが、これは計算を複数のコア、マシンに分散することで相殺できるかも4/15
Background5/15
この章の概要⚫ 小さいミニバッチのほうが優れていそうだ、ということの理論的根拠を示す6/15
一般的なSGDのアルゴリズム⚫ +1= + η − 1σ=1 ∇(2, 3)◼ ただし、η : 学習率◼ ∇: 各featureの傾斜◼ : サンプルiに対する損失⚫ ここでサンプルごとに◼ 重みの更新値の期待値は、/に比例◼ Cov(重みの更新値)の期待値は、m≪Mの時、2/に比例7/15
和で重みを更新するアルゴリズム⚫ ここで、(2, 3)に = を代入◼ +1= + σ=1 ∇(5)◼ つまり、損失の平均ではなく、損失の和を使って重みを更新するように変形した◼ を「ベース学習率」と呼んでいる⚫ ここでサンプルごとに◼ 重みの更新値の期待値は に比例◼ Cov(重みの更新値)の期待値はm≪Mの時、2 ∙ に比例8/15
バッチサイズ変更の意味⚫ (5)において、n回の重み更新は次式のように表される◼ += − σ=0−1 σ=1 ∇++(7)⚫ ここで、バッチサイズをn倍することは、次式による重み更新を行うことを意味する◼ +1= − σ=0 ∇(8)⚫ (8)は、勾配の更新頻度を少なくした、(7)の近似計算とみなせる9/15
バッチサイズ変更の意味⚫ 重みの更新に損失の平均を使う式(2, 3)の観点では、mが大きい方がよく見える。訓練データ全体を使う場合(m=M)のより正確な近似になるから⚫ しかし、サンプルごとの重み更新値の期待値を一定化する観点からは、逆に見える。⚫ また、Cov(重みの更新値)は 2 ∙ に比例するので、mが小さければより大きなベース学習率が許容できる10/15
バッチサイズ変更の意味?⚫ 「バッチサイズが小さいと、複数エポック回した時に、ミニバッチのバリエーションが増えるからいいんじゃないか」みたいな議論をどこかで読んだけど、本論文では触れられてなかった11/15
Batch Normalizationに関する議論⚫ 省略!12/15
実験13/15
実験ベ ー ス 学 習 率 が 大 き い 場 合 、バ ッ チ サ イ ズ を 小 さ く 保 つ必 要 が あ るバ ッ チ サ イ ズ が 小 さ け れ ば 、大 き な ベ ー ス 学 習 率 が 許 容で き るデータセット、ネットワーク、BN有無、Augmentation有無などによらず、傾向は同じ14/15
実験結果最良の結果はm=2~32の範囲に集中実験ごとに、どの(ベース学習率xバッチサイズ)で良い結果が得られたか。縦棒の太いところが良い結果15/15