けの〜のブログ

ガッキーでディープラーニングして教育界に革命を起こす

学習を上手く行うために どのように学習を見守るか Babysitting the learning process , Hyper parameter optimization

まず学習を行う手順を確認しよう

 

1.Input data が Zero-Centeredになるように前処理 preprocessingを行う

2.CNNの構造を決定する 畳み込み層は何層にするかなど

3.Softmaxなどの損失関数で得られた値が妥当性のある値かチェックする この時reguralizationは無効にする

4.損失関数で得られた値が妥当性のある値であると確認できたら、reguralizationを設定していく 適用した際、手順3で得られた値より大きな値が得られていることを確認する

1~4までの手順は学習データの中から一部を取り出して行う ここで過学習を行い正確性が100になるのを確認する ここまで上手く行ったらようやく学習の準備が整ったということになる

 

全学習データを用いて学習を行う

1.reguralizationの値を小さめに設定して、損失関数の値が小さくなるようなLearning Rateの値を模索する

値があまり変わらないようであればLearning Rateが小さすぎるということなので大きくする。

値がNANあるいはInfとなるようであればLearning Rateが大きすぎるということなので小さく設定する

f:id:keno-lasalle-kagoshima:20171117172159p:plain

 

これらのHyperparameterの値はcross Validationを用いることで効果的に得られる。

初めはepoch数(学習回数)を小さめに設定し大体の予測を立てる

予測を立てたらepoch数を増やし、より詳細にHyperparameterの値を見ていく
設定したHyperparameterの値で学習を行い、最初の損失関数の値より3倍大きい状態が変わらないようであればそのHyperparameterの値の適用をやめる。

 

f:id:keno-lasalle-kagoshima:20171117172558p:plain

 

 

大体の予測を立てた値の範囲の最大、最小に近い値で学習が上手く行われている場合、最初に立てた予測の範囲が適切でない恐れがあるため予測の範囲を拡大することも必要である。

ex

1<x<10の値で調べた結果 x= 9.6でいい結果が得られた

その場合はxの範囲を 8<x<20のように設定して学習し直してみるなど

 

cs231n.github.io