【Chainer実践編4】学習のさせ方にも色々ある。バッチ学習、オンライン学習、ミニバッチ学習について解説

【Chainer実践編4】学習のさせ方にも色々ある。バッチ学習、オンライン学習、ミニバッチ学習について解説

早いもので、2018年が始まって既に4か月です。

私はというと、1人で電気のついてない家のドアを開け、「ただいま~・・・」とボソッと呟く毎日を送っております。

誰もいないので、返事が返ってきた場合はもう家にすら帰れません。

アイーンです。

 

さて、いろいろ調べた結果

学習のさせ方にも色々と違いがあるということが分かりました。

そのため今回は、その学習テクニックについて解説してみたいと思います。

 

本当は、Trainerというモジュールについて解説する予定でしたが

めっちゃめちゃ長い文章になる・・・というか自分の理解が追い付いてないために何とか時間稼ぎをしようというゲスい試みです。

Trainerは使えると便利なので、ぜひすんなり理解できるように一緒に準備しましょう。

 

それでは本題に入ります。

学習テクニックには3種類あり、それぞれ”バッチ学習”、”オンライン学習”、”ミニバッチ学習”と呼ばれます。

 

バッチ学習とは?

バッチ学習とは、学習に使うデータを全て一括で処理する学習テクニックです。

75個の全データを全て計算して損失関数を求め、重みを更新します。

全体から出た誤差を使って重みを更新するので、学習結果にブレが少ないうえに、処理が一気に出来るため、早く学習出来るという利点があります。

逆にいってしまえば、全体のデータが大量にある場合、ある一部のデータが変わっただけでは、得られる結果が変化の乏しいものになる可能性があるということです。

これまでやってきたChainer基礎編、実践編では全てこのバッチ学習でした。

今日知りました。

 

オンライン学習とは?

オンライン学習とは、用意された学習データの中からランダムで1つのデータをピックアップし、それのみを正しく認識するように重みを更新するという学習テクニックです。

次のループでは、残りのデータからまたランダムで1つを選ぶところから始まります。

学習データが大量であり、それらが独立していなければ(りんご画像だらけのなかに、数枚みかんの画像があるとき、みかんは独立している)、バッチ処理よりいい学習結果になるそうです。

たとえば、1億個の車画像について学習させたい場合、バッチ処理では1ループで1億個の画像を読ませることになります。

もうアホかと。10000ループに何時間かかるんだと。

 

また、最新型のドイツ車を見た後に、かわいい車を見るパターンと

かわいい車を見た後に、最新式のドイツ車を見るのでは

もつ印象が違いますよね。

深層学習でも、重みの数値はそれぞれ異なることになります。

というわけで、学習結果が安定しないというのがデメリットがありますが、それがかえって間違った答えにたどり着くのを防ぐことも考えられます。

一長一短ですね。

 

ミニバッチ処理

ミニバッチ学習は、バッチ学習とオンライン学習の中間的テクニックです。

学習データをほぼ等しいサイズのグループに分割して取り出し、それを使って計算を行い重みを更新する方法になります。

一度にまとめるデータ数は、10~100くらいが多いそうです。ただし、全体のデータ数によってグループ数を変えた方がいいようで、分類したい種類が50個であれば、まとめるデータ数は50以上とする方が、各まとまりに最低1つは分類したい物が入りやすいために正解に近づきやすいということです。

 

まとめ

 

どの学習テクニックもそれぞれいいところがありますが、使うときには概要を理解して適切に使うと、正解に近づきやすくなるということですね。

ディープラーニングはそんなのがいっぱいあるんで大変です。

 

これで貴方は「テクニックの違いがわかる人」です。

違いの分かる大人になりましょう。

 

ではでは。