1. HOME
  2. ブログ
  3. IT技術
  4. 【後編】Pytorchの様々な最適化手法(torch.optim.Optimizer)の更新過程や性能を比較検証してみた!

【後編】Pytorchの様々な最適化手法(torch.optim.Optimizer)の更新過程や性能を比較検証してみた!

後編~最適化手法の更新過程や性能を比較検証してみよう!~

前回に引き続き、Pytorchに用意されている各種最適化手法(torch.optim.Optimizer)の学習過程がどのように異なるのかについて、「損失関数」や「精度の比較」により検証します。

本記事は「前編」「後編」でお届けいたします。

前編はこちら

こちらの記事もオススメ!

全結合層ニューラルネットワークによる検証

では続いて、ニューラルネットワークのモデルで実際にデータを与えて、各種最適化手法の検証を行っていきたいと思います。

学習データには、「MNISTデータセット」を用います。

コード

学習モデルはシンプルな全結合層ネットワークで、上記で行ったように各 optimizer 毎に学習を行い、「学習中の損失関数」と「精度の推移」を記録します。

各optimizerのパラメータ

各 optimizer には、「model.parameters()」によるモデルのパラメータと学習率 (lr = 0.01) を渡しています。

また、それ以外はデフォルトの値となっています。

損失関数の値の比較

まず以下が、損失関数の値の推移の結果になります。

「Adagrad」、「Adam」、「AdamW」は早期に損失関数の値が小さい値に収束しています。

それに比べて、「Adadelta」、「RMSprop」、「SGD」は学習の速度が遅いということがわかります。

また「RMSprop」については、他と比べて値が大きく上下しており安定していない様子が見られます。

精度の比較

さらに、以下のグラフが精度の推移になります。

損失関数の値と同様に、「Adagrad」、「Adam」、「AdamW」の精度は他と比べ高いことがわかります。

また、損失関数のグラフにノイズが大きかった「RMSprop」では、精度も安定していません。

学習初期を比較

精度の学習初期(~100 iterations)を拡大すると、以下のようになります。

いずれも学習が進めば精度が向上するものの、 「Adadelta」や「SGD」は初期の精度が他と比べると低いことが分かります。

また、損失関数の挙動にも現れているように、学習収束速度は比較的遅いという結果になりました。

CNNモデルによる検証

次に、 CNN モデルにより、先ほどと同様に検証したいと思います。

コード

比較結果

モデルの違いにより、損失関数の収束値と精度は共に向上しています。

特に、「RMSprop」はノイズが抑えられ、精度共に改善されたと思います。

全結合層ネットワークの場合と同様に、「Adadelta」と「SGD」では学習速度が他に比べ遅い結果となりました。

以下は、各比較結果のグラフです。

損失関数の値の比較

精度の比較

学習初期の比較

学習初期は、やはり学習速度に違いが出ていることがわかります。

まとめ

今回は、「Adagrad」や「Adam」が、学習速度や精度共に優れているという結果となりました。

しかし厳密には、各 optimizer 毎の詳細なチューニング(学習率など各パラメータの設定)や、ネットワークモデル、学習データにより結果が変わってきます

また、向き不向きが方法によって違うので、optimizer 毎に詳細な検討は必要かと思います。

さいごに

今回は、 Pytorch を使用して、各種最適化手法の違いについて検証しました。

最適化手法は、ここで紹介したものだけでなく、どんどん新しいものも提案されています。

目的に合わせて、自分の環境や設定の中で変数を変えながら、色々な最適化手法を試してみてください!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

前回の記事

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事