EpochとBatch SizeとIterationsの違い

AI

1.EpochとBatch SizeとIterationsの違いまとめ

・1エポックとはデータセット全体をニューラルネットワークに1回与えて処理を行う事
・バッチサイズとは1つのバッチ内に存在するトレーニング事例(training samples)の総数
・反復とは1つのエポックを完了するために必要なバッチの数(Batch size)の事

2.エポックとバッチサイズとは?

以下、towardsdatascience.comより「Epoch vs Batch Size vs Iterations」の意訳です。元記事の投稿は2017年9月23日、SAGAR SHARMAさんによる投稿です。

バッチサイズやエポックを決定するためのベストプラクティスって何かあるのだろうか?と思って調べてみたのですが、データのサイズ、偏り具合、実行環境によって異なるのでトライアンドエラーで動かしつつ探っていくしかない、と言う事ですかね。

アイキャッチ画像はEpochで検索すると出てきたイタリアはトリノの彫刻でクレジットはPhoto by Alexander Schimmeck on Unsplash

はじめに

あなたも画面を見て頭をかいて不思議に思っていた時代があったに違いありません。

「何故、epoch(エポック)、Bath size(バッチサイズ)、Iteration(イテレーション、反復)、これら3つの数値を入力する必要があるのだろうか?これらの違いは何なのだろうか?」どれもよく似ているからです。

これらの用語の違いをしるためには、勾配降下法(Gradient descent)などの機械学習用語のいくつかを知って、理解を深める必要があります。以下が勾配降下法の簡単な要約です。

勾配降下法(Gradient descent)

勾配降下法は、機械学習で使用される反復最適化アルゴリズムであり、目的は最良の結果(曲線の最小値)を見つける事です。

勾配とは、斜面の傾斜を意味します。降下とは、下降していく事を意味します。アルゴリズムは反復的です。つまり、最適な結果を得るには、結果を複数回取得する必要があります。勾配降下法の反復品質は、グラフがデータに適合するようにするために役立ちます。

勾配降下法には、学習率と呼ばれるパラメーターがあります。 あなたが左上の図で見ることができるように最初はステップを大きくします。つまり、学習が進み、ポイントが下がるにつれて、ステップのサイズが短くなり、学習率が小さくなります。また、コスト関数が減少しているか、コストが減少しています。

損失関数(Loss Function)が減少している、または損失(Loss)が減少していると言う人を時々目にするかもしれません。コスト(Cost)も損失(loss)も同じことを表現しています。(ところで、損失/コストが減少しているのは良いことです)

エポック、バッチサイズ、反復などの用語が必要なのは、データが大きすぎて(機械学習では頻繁に発生する事です)、全てのデータを一度にコンピューターが読み込む事ができない場合のみです。

従って、この問題を克服するには、データを小さなサイズに分割して1つずつコンピューターに渡し、すべてのステップの最後にニューラルネットワークの重みを更新して、与えられたデータに適合させる必要があります。

Epochs(エポック)

1エポックとは、データセット全体をニューラルネットワークに1回与えて処理を行う事です。

エポックが大きすぎて一度にコンピューターに与える事が出来ない場合、いくつかの小さなバッチに分割します。

なぜ複数エポックを使用するのでしょうか?

データセット全体をニューラルネットワークに渡すだけでは不十分です。完全なデータセットを同じニューラルネットワークに複数回渡す必要があります。ただし、限られたデータセットを使用している事と、学習とグラフを最適化するために、反復プロセスである最急降下法を使用している事が前提条件にある事に注意してください。反復プロセスであるために、1エポックで重みを更新するだけでは不十分です。

1エポックでは、下図の「適合不足(underfitting)」になります。

エポックの数が増えると、ニューラルネットワークで重みが変更される回数が増え、曲線は適合不足(underfitting)から最適化(optimal)を得て、過剰適合(overfitting)の曲線になります。

それでは、最適なエポック数を求めるにはどうすれば良いですか?
残念ながら、この質問に対する正しい答えはありません。答えはデータセットごとに異なるので、唯一言える事は、エポックの数はデータの多様性に関連していると言えます。

ほんの一例ですが、貴方のデータセット内には黒猫のみが存在するのでしょうか?それともはるかに多様な猫が含まれるデータセットでしょうか?

Batch size(バッチサイズ)

1つのバッチ内に存在するトレーニング事例(training samples)の総数

注:バッチサイズ(Batch size)とバッチ数(number of batches)は2つの異なるものです。

しかし、バッチとは何でしょうか?

先ほど言ったように、データセット全体を一度にニューラルネットに渡すことはできません。
従って、データセットを幾つかの「セット(sets)」または「パーツ(parts)に分割します。
この数の事を「バッチ数」と言います。

本記事は「はじめに」、「勾配降下法」、「エポック」、「バッチサイズ」、「反復」などの複数のセット/パーツ/バッチに分割して、読者が記事全体を読みやすく、理解しやすくしていますが、これと同じ事です。

Iterations(反復)

反復を理解するには、掛け算の九九を知っているか、電卓を持っている必要があります。

反復は、1つのエポックを完了するために必要なバッチの数です。

注:バッチ数は、1つのエポックを処理するための反復回数と同じです。

トレーニング用のサンプルが2000個あるとします。

2000サンプルのデータセットを500のバッチに分割すると、1つのエポックを完了するのに4回の反復が必要になります。

または、バッチサイズが500、反復を4回行う事で、1つの完全なエポックとなります。

あなたは完全に理解しました!

同様な投稿を見るには、Mediumで私をフォローしてださい。

Facebook、Twitter、LinkedIn、Google +で私に連絡してください
コメントや質問がある場合は、コメントに書き込んでください。

お役に立てればれしいです。 頑張って!

3.Webbigdataの捕捉

Epochの決め方

精度をY軸、epoch数をX軸で下図のようにグラフ化し、30epochくらいからTrainingは精度が上がっているけれどもValidationの方の精度が上がらなくなってきているので、この辺りからTrainingデータへの過剰適合が始まっているかなぁ、と当たりを付けます。この辺りはTensorflowやPytorchのようなFrameworkの方で色々と便利な仕組みが用意されています。

データ数を約二倍の増やしてそれ以外は同じ条件が下図。こうなると本当は10 epochくらいで止めておくべきでしょうか。しかし、実は増やす前も10 epoch近辺が妥当だったのかなぁ、などなどと悩みます。

4.EpochとBatch SizeとIterationsの違い関連リンク

1)towardsdatascience.com
Epoch vs Batch Size vs Iterations

コメント

タイトルとURLをコピーしました