teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

2020/03/10 15:03

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > batch_size = 1のパラメータをいじって挙動を見てみるとbatch_size = 1よりもbatch_size = 100の方が学習速度が速く、batch_size = 1000000000にすると学習速度が飛躍的に早くなりました。
2
2
 
3
- GPU で演算を行なう場合、バッチサイズが大きいほうが、GPU とのデータ転送の回数がすくななるので、学習速度が早くなります。(GPU は一度に大量のデータを計算するのが得意)
3
+ GPU で演算を行なう場合、バッチサイズが大きいほうが、GPU とのデータ転送の回数がすくななるので、学習速度が早くなります。(GPU は一度に大量のデータを計算するのが得意)
4
4
  では、単純にバッチサイズを大きくすればいいのかというとそうではなく、以下の点を考慮して適当な値にします。
5
5
 
6
6
  * バッチサイズが大きいほど、GPU の消費メモリが増えるので、大きくしすぎると、メモリ不足でエラーになります。
@@ -11,4 +11,17 @@
11
11
  > バッチサイズがサブセットに含まれるデータ数なら、455行しか持たない時点でエラーが起きるはずですし(データセットを超える量のデータを一度に学習している)、そもそも一度に1000000000ものデータを学習するとかなり学習速度が遅くなると予想していたのですが、予想に反して学習速度が速くなりました。
12
12
 
13
13
  ライブラリの実装によりますが、データセットのサンプル数より多い数をバッチサイズに指定した場合、「バッチサイズ = データセットのサンプル数」となります。(Pytorch ではそうなってます)
14
- 質問の例の場合だと、1000000000 を指定してもサンプルが114個しかないなら batchsize=114 と同じ
14
+ 質問の例の場合だと、1000000000 を指定してもサンプルが114個しかないなら batchsize=114 と同じ
15
+
16
+ ## 追記
17
+
18
+ > その理由はイテレーション数(データセットに含まれるデータが少なくとも1回は学習に用いられるのに必要な学習回数であり、バッチサイズが決まれば自動的に決まる数値)が少なくなることと同義でしょうか。
19
+
20
+ 「学習が早い」の定義について書いていませんでしたが、回答で言っている学習の速さとは、1エポックが完了するのにかかる時間のことを言っています。
21
+ 例えば、100個のサンプルがあったとしたとき、バッチサイズが5の場合は1エポックが20イテレーション、バッチサイズが20の場合は1エポックが5イテレーションで完了します。
22
+ イテレーションのたびにデータを GPU との間で転送する必要があるので、このイテレーションが少ないバッチサイズ20のほうが1エポックにかかる時間が少なくなります。
23
+
24
+ > 基本的な質問で恐縮ですが、バッチサイズは一行単位なのでしょうか?すなわち、(455,30)のデータセットに対してバッチサイズ1なら、「バッチサイズはデータポイントのすべての列を含む(一列目から30列目まで)」ということで合っているでしょうか。
25
+
26
+ 1行単位です。
27
+ コメントの例で batchsize = 32 なら、1つのミニバッチは (32, 30) の配列になります。

2

修正

2020/03/10 15:03

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > batch_size = 1のパラメータをいじって挙動を見てみるとbatch_size = 1よりもbatch_size = 100の方が学習速度が速く、batch_size = 1000000000にすると学習速度が飛躍的に早くなりました。
2
2
 
3
- GPU で演算を行なう場合、バッチサイズが大きいほうが、GPU とのデータ転送の回数がすくなるなるので、学習速度が早くなります。
3
+ GPU で演算を行なう場合、バッチサイズが大きいほうが、GPU とのデータ転送の回数がすくなるなるので、学習速度が早くなります。(GPU は一度に大量のデータを計算するのが得意)
4
4
  では、単純にバッチサイズを大きくすればいいのかというとそうではなく、以下の点を考慮して適当な値にします。
5
5
 
6
6
  * バッチサイズが大きいほど、GPU の消費メモリが増えるので、大きくしすぎると、メモリ不足でエラーになります。

1

修正

2020/03/10 11:41

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -10,4 +10,5 @@
10
10
 
11
11
  > バッチサイズがサブセットに含まれるデータ数なら、455行しか持たない時点でエラーが起きるはずですし(データセットを超える量のデータを一度に学習している)、そもそも一度に1000000000ものデータを学習するとかなり学習速度が遅くなると予想していたのですが、予想に反して学習速度が速くなりました。
12
12
 
13
- ライブラリの実装によりますが、データセットのサンプル数より多い数をバッチサイズに指定した場合、「バッチサイズ = データセットのサンプル数」となります。(Pytorch ではそうなってます)
13
+ ライブラリの実装によりますが、データセットのサンプル数より多い数をバッチサイズに指定した場合、「バッチサイズ = データセットのサンプル数」となります。(Pytorch ではそうなってます)
14
+ 質問の例の場合だと、1000000000 を指定してもサンプルが114個しかないなら batchsize=114 と同じ