はじめに
Imitationの模倣学習モデルを動かす際、batch_sizeの項目が存在したがその値が何を意味するのか分からなかったためバッチサイズについてまとめました。バッチサイズについて簡潔にまとめると、
- バッチサイズの定義
- データセットをいくつかのグループ(バッチ)に分けた際の、ひとつあたりのサイズ。 バッチサイズ=データサイズ/イテレーション
- バッチサイズの性質
-
バッチサイズ トレーニング時間 学習精度 大 短い 低い 小 長い 高い
となります。それぞれの用語や理由について以下でまとめていきます。
-
バッチサイズ トレーニング時間 学習精度 大 短い 低い 小 長い 高い
となります。この性質を頭に入れた上で適切なバッチサイズを学習ごとに調べていく必要があります。
1.バッチサイズの定義について
バッチサイズとはデータセットをいくつかのグループに分割した際の一つあたりのサイズのことです。
機会学習における勾配降下法などでは、学習するデータセットをいくつかのグループ(バッチ)に分けるのが一般的とされています。一つずつバラバラのデータで考えるわけでも、全てを一気に学習するのでもなく、適した一口サイズに区切って学習していきましょうというわけです。その一口がバッチサイズです。
具体例として、データサイズ4000のデータ(例えば4000枚の画像)を10個のグループに分けて学習させていくことを考えます。このとき、バッチサイズは4000/10=400ということになります。
ここで、分割数「10」のことを専門用語でイテレーションと呼びます。よって、上の具体例を用語になおすと、
・データサイズ/イテレーション=バッチサイズ
ということになります。
バッチサイズの意味がわかったところで、このパラメータをどのように扱っていけばいいのでしょうか。この問題に答えるため、バッチサイズが持つ性質について次節で説明していきます。
※注意 ”サイズ”と聞くと、メモリ的なサイズのことを想像しがちですが、ここでのデータサイズの単位はあくまで「個数」であり、ビットやバイトなどのメモリ単位ではないことにも注意が必要です。
2.バッチサイズが持つ性質
バッチサイズが持つ性質を知るために、バッチサイズの変化によって学習器の振る舞いがどのように変化するのかについて見ていきましょう。
まずは学習器が行っている学習手順を以下に示します。
1.データセットからバッチサイズ分のデータを取り出してくる
2.それらを一気に使い、現在のパラメータにてスコアを計算する。
3.スコア結果をもとにパラメータを変更する。
これをイテレーションの数だけ繰り返します。つまり、学習の本質であるパラメータの更新はバッチごとでしか行われないのです。ここにバッチサイズが持つ性質が隠されています。
例えば、バッチサイズを100倍に大きくしたとき、パラメータの更新回数はそれまでの1/100で済むようになるため、学習にかかる時間も単純に100分の1とまではいかないにしても大幅に減らすことができます。その代わり、更新が少ない分データセットに対しての学習精度は低くなってしまいます。
反対に、バッチサイズを1/100に小さくすればそれまでの100倍のパラメータ更新を行うようになるので時間がかかる分学習精度の高い学習を行えるようになります。
まとめると、
さいごに
自分としては、データサイズ4000,学習回数(エポック数)1_000_000なら、単純掛け算で40億回のパラメータ更新をしているとばかり思っていました。バッチサイズも含めて更新の回数を様々なハイパーパラメータから調整していくことで、学習不足も過剰適合も起こさない適切に収束したパラメータを得ることができるようです。みんなで素敵なパラおじになっていきましょうね。