技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

PyTorchで作るRNN 検証編

皆様こんにちは。


新年度が始まりましたがいかがお過ごしでしょうか?


私は3月入ってから本業のみならず副業や家事育児に忙殺されてほぼ休みがない日々を過ごしております(現在進行形)。


前回のRNNで、活性化関数がtanhやReLuよりも予測結果が悪かった件について、色々試してみました。


合間合間を見つけては、ちょこちょこソースコードいじったり、パラメータをいじったりしてました。


結論として、


本質的な問題の原因はよくわかりませんでした。。


とはいえわかったことのひとつとして、パラメータがいけてないことがわかりましたので、その結果をご紹介します。

エポック数と隠れ層のノード数がいけてない


前回のエポック数は100で、隠れ層のノード数は10でした。


前回のtanhのlossの結果から、test(validation)側の結果を見ると、100epochから上昇していました。


train側は下がっているのにtest側があがるということは、train側に偏った学習をしている(過学習)の傾向があることが推測されます。


なので、まずはモデルの表現の幅を広げるためにもノード数を増やしてみることにしました。


また100epochではまだまだ収束途中であることが予想されるので、こちらも300に増やしてみました。


その状態のtanhの結果がこちら。

eval_tanh_epoch300
loss_tanh_epoch300


かなり予測精度があがったことがわかるかと思います。


lossもtrain, test両方が順調に下がっていることがわかります。


これで同様にReLuも試してみたのですが、ReLuはまだまだ全然ダメでしたね。。


パラメータの問題の可能性は高いですが、じゃあいくつならいいのか、というとやってみないとわからないというのが正直なところです。


ただ今回の結果からわかることのひとつとして、パラメータは解く問題によって非常に重要な要素となりうるということがわかりました。


パラメータを自動で最適化してくれるOptunaというツールをChainerで触ったことがありますが、こういう自動化ツールも今後調べて紹介していこうかなと思います。


このRNNについては一旦ここでクローズしようと思います。これ以上やって深みにハマっても先に進めない。。


次回はLSTMの実装をやっていこうと思います。


今回はここまで!