質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

3412閲覧

深層学習における損失関数の値の停滞について

minase_1224

総合スコア12

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2019/10/09 18:15

U-Netを使用したセマンティックセグメンテーションについての質問です。
現在、自作データを用いて、セマンティックセグメンテーションに取り組んでいるのですが、損失関数の値が0.75、ダイス係数が0.25で停滞してしまいます。
理由がわかりそうな方がいらっしゃいましたらご教授ください。

バッチ数やエポック数、学習率を変化させてもあまり変化が見られませんでした。
学習データは850枚ほど作成し、最適化アルゴリズムにはAdam、評価関数にはダイス係数、損失関数は(1-(ダイス係数))を使用し、対象物体と背景との2クラス分類をしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

停滞そのものの原因がどこにあるか、コードもデータもないので、その停滞が妥当な値なのか、ネットワークに問題があるのかわかりませんが、損失関数が気になります。

損失関数に1-ダイス係数(F値の名称の方が一般的?)を使用するとのことですが、これはつまり、ダイス係数を最大化しようとしているということですよね?

ダイス係数はRecallとPrecisionから求まります。
さらに、Recall,Precisionは、クラス分類の正解数と不正解数から求まります。

ここで、一般にDeeplearningにおける出力値は0~1の範囲(活性化関数によって異なる)で出力され、その値を閾値をもって、正クラスか、負クラスかを分類します。

このとき、損失関数をRecallとPrecisionから求めるダイス係数を使用してしまうと、例えば、出力値の閾値を0.5、正解クラスが正クラス(出力値0.5以上)とした場合、出力値が0で負クラスと分類した場合でも、出力値が0.499でも、損失関数は同じ値(不正解扱い)となります。
なぜなら、損失関数は正解数と不正解数でのみ、求めているからです。

確かに、モデルが正解を出力すればよいので、これで良いように思えますが、出力値0.499の場合と、出力値0の場合とでは、不正解度合いが異なります。
0.499の場合であれば、いわば惜しい状態なので、もう少し学習すれば正解にたどり着けるわけです。

損失関数をダイス係数にした場合、このもう少しかどうかというのが、一切分からなくなってしまうわけです。

そこで、損失関数は正解ラベル(0または1)に対する出力値(0~1)の値によるクロスエントロピー誤差や二乗平均誤差を使うのが一般的です。

これらは、正解ラベルに対して、0~1の値をもつ出力値から求まるので、出力値によって損失を変えることができるのです。

投稿2019/10/09 22:50

編集2019/10/09 22:52
qax

総合スコア622

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qax

2019/10/11 00:30

補足しますと、そういった理由で、ダイス係数を損失関数に設定してしまうと、閾値ギリギリであっても学習が完了してしまうため、早い段階で学習が停滞しているのではないでしょうか。という意見です。 通常は、閾値ギリギリの場合は、もっとはっきり分類できるように学習が進みます。
minase_1224

2019/10/11 01:37

とても丁寧に説明してくださり、ありがとうございます。早速、損失関数を最小二乗誤差にしたところ、損失関数の値が0に近似していきましたがダイス係数が0.01ほどで停滞してしまいました。損失関数以外に問題がありそうですので探ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問