機械学習モデルの「損失」と「正確さ」を解釈する方法


201

TheanoまたはTensorflowでニューラルネットワークをトレーニングすると、エポックごとに「損失」と呼ばれる変数が報告されます。

この変数をどのように解釈すればよいですか?損失が大きいほど良くなったり悪くなったりしますか、それとも私のニューラルネットワークの最終的なパフォーマンス(精度)にはどのような意味がありますか?

回答:


284

損失が少ないほど、モデルは優れています(モデルがトレーニングデータに過剰適合している場合を除く)。損失はトレーニング検証で計算され、その相互作用は、モデルがこれらの2つのセットに対してどの程度うまく機能しているかを示します。精度とは異なり、損失はパーセンテージではありません。これは、トレーニングセットまたは検証セットの各例で発生したエラーの合計です。

ニューラルネットワークの場合、通常、損失は負の対数尤度と、分類および回帰の残差平方和です。次に、当然ながら、学習モデルの主な目的は、ニューラルネットワークでの逆伝播などのさまざまな最適化手法を通じて重みベクトル値を変更することで、モデルのパラメーターに対する損失関数の値を減らす(最小化する)ことです。

損失値は、最適化を繰り返すたびに、特定のモデルの動作の良し悪しを示します。理想的には、1回または複数回の反復後に損失が減少すると予想されます。

モデルの精度は通常、モデルのパラメーターが学習および修正され、学習が行われなくなった後で決定されます。次に、テストサンプルがモデルに供給され、真のターゲットと比較した後、モデルで発生したミス(ゼロワンロス)の数が記録されます。次に、誤分類の割合が計算されます。

たとえば、テストサンプルの数が1000で、モデルがそれらの952を正しく分類している場合、モデルの精度は95.2%です。

ここに画像の説明を入力してください

損失額を減らしながら、微妙な点もいくつかあります。たとえば、モデルがトレーニングの例を「記憶」し、テストセットに対して一種の効果がなくなるオーバーフィットの問題に遭遇する場合があります。過剰適合は、正則化を使用しない場合、非常に複雑なモデル(自由パラメーターの数Wが多い)の場合、またはデータポイントの数Nが非常に少ない場合にも発生します。


2
こんにちは@アミール、あなたの非常に詳細な説明をありがとう。ただし、問題があります。ニューラルネットワークでは、トレーニングしたとき(エポックが増加したとき)に常に損失が減少しますが、精度は良くありません。
mamatv

8
@mamatvコストが減少している限り、問題はありません。コストと精度は通常、反比例の関係にありますが、精度はゼロ1エラーの合計であり、コストは浮動小数点数の合計です。したがって、コストが0.001%減少しても、必ずしも精度が0.001%増加するとは限りません。コストの減少が無形の場合(コストが極小値に非常に近い場合)、精度を上げるのははるかに困難です
Amir

2
@mamatvトレーニングと検証の両方のコストが減少している限り、あなたは行ってもいいはずだと私は言ったはずです。また、各エポックの検証精度を確認することもできます。上昇し始めた場合は、モデルが適合しすぎている可能性があるため、トレーニングを停止する必要があります。
Amir

1
損失を最小限に抑えるのではなく、精度を上げるようにモデルをトレーニングしてみませんか?
bikashg

2
@bikashgの精度は区別できないため、バックプロップすることはできません。
DharmaTurtle

23

これらは、通常異なるフェーズで使用されているモデルのパフォーマンスを評価するための2つの異なるメトリックです。

損失は​​、モデルの「最適な」パラメーター値(ニューラルネットワークの重みなど)を見つけるためのトレーニングプロセスでよく使用されます。これは、重みを更新することによってトレーニングで最適化しようとするものです。

精度は、適用される観点からより多くなります。上記の最適化されたパラメーターを見つけたら、このメトリックを使用して、モデルの予測が実際のデータと比較してどの程度正確かを評価します。

おもちゃの分類例を使用してみましょう。体重と身長から性別を予測したい。あなたは3つのデータを持っています、それらは次のとおりです:(0は男性を表し、1は女性を表します)

y1 = 0、x1_w = 50kg、x2_h = 160cm;

y2 = 0、x2_w = 60kg、x2_h = 170cm;

y3 = 1、x3_w = 55kg、x3_h = 175cm;

y = 1 /(1 + exp-(b1 * x_w + b2 * x_h))である単純なロジスティック回帰モデルを使用します

どのようにしてb1とb2を見つけますか?最初に損失を定義し、最適化方法を使用して、b1とb2を更新することにより、反復的な方法で損失を最小化します。

この例では、このバイナリ分類問題の一般的な損失は次のようになります(マイナス記号を合計記号の前に追加する必要があります)。

b1とb2がどうあるべきかわかりません。ランダムな推測をしてみましょうb1 = 0.1とb2 = -0.03。それでは、今の私たちの損失は何ですか?

だから損失は

次に、学習アルゴリズム(たとえば、勾配降下法)は、損失を減らすためにb1およびb2を更新する方法を見つけます。

b1 = 0.1およびb2 = -0.03が最後のb1およびb2(勾配降下からの出力)である場合はどうなりますか?

y_hat> = 0.5の場合、予測がfemale(1)であると仮定します。それ以外の場合は0になります。したがって、このアルゴリズムでは、y1 = 1、y2 = 1、y3 = 1と予測します。精度はどのくらいですか?y1とy2で誤った予測を行い、y3で正しい予測を行います。つまり、精度は1/3 = 33.33%になります。

PS:アミールの回答では、逆伝播はNNの最適化手法であると言われています。NNで重みの勾配を見つける方法として扱われると思います。NNの一般的な最適化方法は、GradientDescentとAdamです。


数学をありがとう。コンセプトの明確化に役立ちました。
Finn Frotscher、

6

@Aadnanトレーニング/検証/テストデータセットを明確にするために:トレーニングセットは、モデルの初期トレーニングを実行するために使用され、ニューラルネットワークの重みを初期化します。

検証セットは、ニューラルネットワークがトレーニングされた後に使用されます。これは、ネットワークのハイパーパラメーターを調整し、それらの変更がモデルの予測精度にどのように影響するかを比較するために使用されます。トレーニングセットは、ニューラルネットワークのゲートの重みを構築するために使用されると考えることができますが、検証セットでは、ニューラルネットワークモデルのパラメーターまたはアーキテクチャを微調整できます。パラメータやアーキテクチャの変更がネットワークの予測能力にどのように影響するかを観察するために、同じデータおよびネットワークの重みに対するこれらの異なるパラメータ/アーキテクチャの繰り返し可能な比較を可能にするため、これは便利です。

次に、テストセットは、トレーニングと検証および検証データセットを使用したトレーニングとパラメーター/アーキテクチャーの選択後、以前に表示されていないデータでトレーニング済みニューラルネットワークの予測精度をテストするためにのみ使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.