私自身の理解度チェックと備忘を兼ねて何回かに分けて記事にしておこうというのが目的です.
はじめに
私が記事にしたこれやこれでは,学習データをすべて使うものでした.
そして精度はデータ数が多ければ多いほど良い(Under fittingしてたら意味ないけど).
しかし,学習データを全てメモリ上に展開するのは現実的ではない.そのため,学習方法に工夫を加えその問題を改善することが出来る.
バッチ学習
バッチ学習(Batch)は,一番わかりやすい学習方法だと思う.
学習データのすべてを使って,一番フィットしているパラメータを導き出す方法である.
勾配降下法で必要な$J(\Theta)$や$\Theta$の更新値の演算量はデータ数とパラメータ数に比例して大きくなっていく.
確率的勾配降下法 SGD
確率的勾配降下法(Stochastic Gradient Descent)は,1回の更新ですべてのデータを使わず,データを1つずつ用いる方法である.
当然のことながら,すべてのデータを使わないため演算量が格段に下がる.そして,1データずつパラメータを更新していく.
そのため収束速度はそれなりに良い.その反面,「1つずつ」という点から「いつまで経っても最小値周辺でウロチョロする」ということがある.
「およそ最小値周辺にいる」という意味なので,結果からみるとバッチ学習のときと近しいパラメータを早い段階で見つけることが出来る.
ミニバッチ法
ミニバッチは,上記2つの間を取ったような方法である.つまり,1度のパラメータ更新で2~100程度のデータを使用する.
仮説関数$h_\Theta(x)$やデータの性質からミニバッチ法が最速で収束するときもある.しかし,使用データ数のチューニングが必要となるため,一長一短である.
オンライン学習
バッチ処理では,手元にある学習データを全て使って高次の予測曲線や境界線を見つけることをやっている.
しかし,逐次現れる行動履歴から見つかるパターンには対応しきれない.
また,文章の単語や音声の音素などの構成要素の前後に関連がある場合にも対応できない.
そこで,現れるデータを次々と学習させていく逐次処理をオンライン学習と呼ぶ.
この学習方法は,市場の動向やトレンドを捕捉したり、購入情報から関連のある商品を提示するリコメンド機能などに活用できる.
オンライン学習の特徴は,学習に使ったデータは2度と使わないということ.
まとめ
データの性質と予測したいものによって学習方法をバッチ学習にするかオンライン学習にするか変わってくる.
またバッチ学習には,パラメータ更新で利用するデータ数を変えるバッチ(batch)・確率的(stochastic)・ミニバッチ(mini-batch)の3パターンある.