TIM Labs

Chainer:AutoEncoderのOptimizerを変えてみた

| コメント(0) | トラックバック(0)
28x28のオートエンコーダだが、ちゃんとエンコードできるまでには100万エポック程度教えこまないといけない。
つまり、とても学習がのろく、馬鹿である。
もうちょっと賢く、さっさと学習できるようにしたいものである。
# Initialize model        
model = MyAE()
optimizer = optimizers.SGD()
optimizer.setup(model)
ここで、Chainerのマニュアルの該当部分を読もう。
Docs ≫ chainer Reference Manual ≫ Optimizers

どうやら何種類も用意されているようで、何を選ぶべきか困る。 いままでは、optimiers.SGD()により、SGD(Vanilla Stochastic Gradient Descent)というタイプのOptimizerを生成していたようだ。 でも、これは頭が悪そうなので、別のにしよう。 Deep Learningの本で時々出てくるAdamというのがあるので、とりあえずこれを使ってみよう。
変更は、以下の1行のみである。

optimizer = optimizers.Adam()

Adamの説明が、"Adam optimization algorithm." となっているが、これではどんな最適化が行われるのかさっぱり分からない。 Adamの説明についてもネット上に情報があるので、ここでは説明を省略し、さっそく実行してみよう。

とりあえず、前回と同じ10000エポック時の出力を示す。
mnistae10000Adam.png
SGDでは10000エポックでは何も分からない状態だったが、今回のAdamでは、もう十分な再現性があり、数字が判別できる。SGDの100万エポックに近い状態である。 ならば、1000エポックでどこまで判別できるか調べてみた。
mnistae1000Adam.pngたった1000エポックでも、そんなに悪くない。 ということで、Optimizerの選択は非常に重要なようだ。

Optimizerは、AutoEncoderだけでなく、もっと他の場合でも有効であるに違いない。
とうことで、普通のDeep Learning の学習に戻ろう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/590

コメントする

このブログ記事について

このページは、fujiが2017年3月30日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「トークショー:岩波データサイエンスVol.5刊行記念」です。

次のブログ記事は「データ解析のための統計モデリング入門 GLMの尤度比検定と検定の非対称性 読書メモ5」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。