検証損失が下がらない

事前学習モデルResNet101を用いたファインチューニングを行っています.
学習の進行状況について,エポック数を増やしても,学習損失の減少速度に比べ,検証損失が横ばい又は減少が遅く,中々学習が上手に進みません.
考える原因としてどのようなものが挙げられるでしょうか.
ご回答よろしくお願いします.
(学習オプション
Optimizer : sgdm
MinibatchSize : 256
MaxEpochs : 12)

 Accepted Answer

Hiro Yoshino
Hiro Yoshino on 9 Jun 2023
Edited: Hiro Yoshino on 12 Jun 2023

0 votes

結果だけを見ると、
  • 学習データと 検証データの分布が異なる
ように思えます。データが少ないと思いましたが、学習データはどのくらいありますか?

7 Comments

YoSa Akida
YoSa Akida on 9 Jun 2023
御回答ありがとうございます。
学習データは200前後になります。
Hiro Yoshino
Hiro Yoshino on 12 Jun 2023
検証用データはどの様に与えていますか?念のため。
コードを示していただけると助かります。
YoSa Akida
YoSa Akida on 13 Jun 2023
コード自体を提示することはできないので,
学習データ:検証データ = 9:1の割合で,分けています.
稀に,最初から検証損失が上がる場合があるのですが,その場合も初期の段階から過学習が起きているのでしょうか.それとも,損失が収束していない関係で上がるのでしょうか.
Hiro Yoshino
Hiro Yoshino on 14 Jun 2023
検証データも改善しているので、過学習じゃなさそうですね。ごめんなさい訂正します。
「検証データの分布が学習データと大きく異なる」のでは?と思います。学習用のメトリクスと検証用のそれに大きな開きがあるので、つまりそういうことかと。
データ全体をよく混ぜて、再度学習データと検証データを分けて学習するとどうなりますか?
YoSa Akida
YoSa Akida on 14 Jun 2023
データ全体を組み直して、新しいデータセットで試した場合では、良い学習曲線を描きます。 結論として、検証データと学習データの分布が大きく異なる場合、データセットを組み直したほうがいいのですか? それとも検証損失を気にせず、テストデータで精度を確認したり、2次元可視化により分布図を見ることで、エポックなどを変えていく方向でもいいのでしょうか。
Hiro Yoshino
Hiro Yoshino on 14 Jun 2023
機械学習の目標は汎化誤差を最小にすることです。(しかしデータの確率密度分布が分からないので、期待値を計算することができなないため) 汎化誤差を経験誤差で代用します。
そもそも、検証データと学習データは同じ母集団からのサンプリングと見なせないと、学習後のモデルを評価することが出来ません。「分布が大きく異なる場合 ...」 というか、異なる想定ではないと言う事です。データを分けた時点で、異なる分布だとするのであれば、それは正しい分け方ではありません。
「結論として ...」というよりも、犬を分類したいのに、猫の画像データだけで学習して、犬の検証データを持ってきて”精度が上がらない!”と言っている様なもので、学習の方法の仮定に沿っていない状況だと思います。
データがまずしっかりした状態で、精度については検証データで評価していくのが普通かなと思います。エポック数、学習率などを操作して過学習にならないように適当なところで学習をストップさせるのが NN の学習方法です。
YoSa Akida
YoSa Akida on 15 Jun 2023
説明ありがとうございます.検証データに関して,少し分布に偏りがあるので,改善して適切な学習を行いたいと思います.

Sign in to comment.

More Answers (0)

Categories

Find more on Deep Learning Toolbox in Help Center and File Exchange

Products

Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!