muchpomper
@muchpomper

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

多クラス分類の損失について

現状課題

現在、多クラス分類を行っており、学習の損失関数にCrossEntropyLoss、精度指標にAccuracyを用いています。
学習はうまくいっているように見えるものの、損失値だけ途中から上昇している状況です。

行ったこと

  • FocalLossでも同じような上昇が見られました。
  • 学習率を下げるとそういった上昇が見られなりますが、次はAccuracyが下げる前ほど上がってくれません。
  • データ拡張を行っても同じような上昇が見られました。

何か考えられることがあれば、ご教授お願いします。

以下の図はCrossentropyLossを使用した例です。

UniFuse_arg_loss.png
UniFuse_arg_acc.png

【更新】

  • Dropoutを挿入する
    UniFuse_dropout_loss.png

  • L2損失を設ける
    L2norm_loss.png

0

1Answer

過学習を起こしているので,モデルの性能を低下させる案が考えられます.

1つの方法として,Dropoutレイヤを挿入することによる汎化性能の向上や,重みパラメータに対するペナルティとして$L_1$もしくは$L_2$損失を設けることで,モデルの高性能化をある程度防ぐことができます.

これで過学習を防止できないのであれば,学習可能なパラメータを直接削減してください.

1Like

Comments

  1. @muchpomper

    Questioner

    @PondVillege 様
    ご回答ありがとうございます。
    回答をもとに以下に取り組んでみました。

    ・Dropoutを挿入すること
    ・L2損失を設けること

    結果を投稿に反映させていただきました。
    どちらかというとL2損失の方が効いているようです。
    ValidationのAccuracyが何も対策をしていないときより低くなってしまうのですが、未知データに対する汎化性能を得るためにはこれでよいのでしょうか?
  2. DO率は何%に設定しましたか?
    また,BatchNormalizationとの併用は性能悪化に繋がることが知られています.モデルの全体を知らないので提案しましたが,気を付けて利用ください
  3. @muchpomper

    Questioner

    レートは50%に設定して行ってみました。
    確認してみるとBatchNormalizationを使用している箇所がありました...
    併用はよくないのですね。勉強になります。
    もう一つ提案いただいた学習可能なパラメータの削除についても検証してみようと思います。
    ご教授ありがとうございます。

Your answer might help someone💌