logo

機械学習におけるオンライン学習とバッチ学習とは? 📂機械学習

機械学習におけるオンライン学習とバッチ学習とは?

概要

オンライン学習、バッチ学習、ミニバッチ学習について説明する。これらの名前や違いが実際に重要なわけではなく、大したことではないという点を述べたい。実際、最近のディープラーニングではミニバッチ学習だけが使われると考えてよい。

定義

真の値$\mathbf{y} = \left\{ y_{i} \right\}_{i=1}^{N}$とそれに対する推定値$\hat{\mathbf{y}} = \left\{ \hat{y}_{i} \right\}_{i=1}^{N}$が与えられたとしよう。パラメータ$\theta$に対する損失関数を$L(y, \hat{y}) = L(y, \hat{y} ;\theta)$としよう。パラメータを最適化するメソッドを$f(L, \theta)$とするとき、すべての$i$に対して一度にパラメータを更新する方法をバッチ学習batch learningという。

$$ \theta \leftarrow f(L(\mathbf{y}, \hat{\mathbf{y}}), \theta) $$

それぞれの$i$に対して個別にパラメータを更新する方法をオンライン学習online learningという。

$$ \begin{align*} &\text{For $i=1$ to $N$} \\ &\qquad \theta \leftarrow f(L(y_{i}, \hat{y}_{i}), \theta) \end{align*} $$

説明

勾配降下法を例に挙げると、すべてのデータに対して一度に勾配を求めてそれで更新すればバッチ学習である。

$$ \text{Batch learning: } \theta \leftarrow \theta - \alpha \nabla_{\theta}L(\mathbf{y}, \hat{\mathbf{y}}) $$

それぞれのデータに対して勾配を求めてパラメータを更新することを繰り返せばオンライン学習である。

$$ \text{Online learning: } \text{For $i=1$ to $N$,}\quad \theta \leftarrow \theta - \alpha \nabla_{\theta}L(y_{i}, \hat{y}_{i}) $$

ディープラーニングの優れたパフォーマンスを可能にした理由の一つが巨大なデータセットであるが、これに対してバッチ学習を適用することはハードウェア的に事実上不可能である。またオンライン学習を適用するには時間がかかりすぎるという欠点がある。したがってディープラーニングでは事実上バッチ学習、オンライン学習は使われず、データセットの部分集合を単位として学習するミニバッチ学習minibatch learningだけが使われる。そのためミニバッチ学習という言葉も実質的には使われない。単に学習といえば当然ミニバッチ学習を指すと考えてよく、バッチ学習という言葉も(ミニ)バッチ学習を意味すると見てよい。

ミニバッチ学習

ミニバッチ学習とは、データセットのサイズが$N = n \times m$のとき、データを$m$個ずつまとめて$n$個の部分集合を作り、これを一つの学習の単位とすることをいう。$\mathbf{y} = \mathbf{b}_{1} \cup \cdots \mathbf{b}_{n}$ $(\left| \mathbf{b}_{i} \right| = m)$とすれば、

$$ \text{Minibatch learning: } \text{For $i=1$ to $n$,}\quad \theta \leftarrow \theta - \alpha \nabla_{\theta}L(\mathbf{b}_{i}, \hat{\mathbf{b}}_{i}) $$

このとき$m$をバッチサイズbatch sizeと呼び、$16, 32, 64$など$2$の累乗にすることが一般的だが、必ずしもそうする必要はない。

特に勾配降下法をミニバッチで適用することを確率的勾配降下法と呼ぶ。