ニューラルネットワークのクロスエントロピー誤差関数


115

ML初心者向けMNISTでは、クロスエントロピーを次のように定義しています

Hy(y):=iyilog(yi)

i y iyiはクラス予測確率値で、はそのクラスの真の確率です。iyi

質問1

()が0になるのは問題ではありませんか?これはもちろん、本当に悪い分類器を持っていることを意味します。しかし、データセットのエラー、たとえばとしてラベル付けされた「明白な」を考えてください。単にクラッシュしますか?選択したモデル(最後にソフトマックスアクティベーション)は、基本的に正しいクラスに対して確率0を与えませんか?yilog(yi)13

質問2

クロスエントロピーは次のように定義されることを学びました

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

何が正しいのですか?いずれかのバージョンの教科書の参照はありますか?これらの関数は、その特性がどのように異なりますか(ニューラルネットワークのエラー関数として)?



Kullback-Leibler Divergence Explainedのブログ投稿も参照してください。
ピョートルミグダル

回答:


101

クロスエントロピーを解釈する1つの方法は、モデル下で、データ(マイナス)対数尤度とです。yiyi

つまり、クラスの仮説発生確率を予測する固定モデル(別名「仮説」)があるとします。あなたは今、(実際に)を観察したとクラスのインスタンス、クラスのインスタンス、クラスのインスタンス:あなたのモデルによれば、この出来事の可能性があるなど、 対数を取り、符号を変更し n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
右側の合計を観測値の数、経験的確率をとして示すと、クロスエントロピーが得られます: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

さらに、モデルが与えられたデータセットの対数尤度は、「エンコード長」の尺度として解釈できます。エンコード方式が仮説に基づいている場合、この情報のエンコードに費やすと予想されるビット数です。

これは、確率独立イベントがそれをエンコードするために少なくともビットを必要とする(効率的なコーディングを仮定して)結果として、式 が文字通り予想されるエンコードの長さであるというから得られます、ここで、イベントのエンコード長は、「仮説化された」分布を使用して計算されますが、期待値は実際の分布に引き継がれます。yilog2yi

iyilog2yi,

最後に、「予想されるエンコードの長さの尺度」と言う代わりに、「驚きの尺度」という非公式の用語を使用するのが大好きです。分布から予想されるイベントをエンコードするために多くのビットが必要な場合、分布は「本当に驚くべき」ものです。

これらの直感を念頭に置いて、あなたの質問に対する答えは次のように見ることができます。

  • 質問1。はい。対応するが同時にゼロでない場合は常にyi問題です。これは、あるクラスの発生確率がゼロであるとモデルが信じているにもかかわらず、実際にはクラスがポップアップする状況に対応します。その結果、モデルの「驚き」は無限に大きくなります。モデルはそのイベントを考慮しなかったため、エンコードするには無限に多くのビットが必要になります。それがクロスエントロピーとして無限を得る理由です。

    この問題を回避するには、発生する可能性がある間、モデルが不可能なことについて突発的な仮定をしないようにする必要があります。現実には、人々はシグモイドまたは「ソフトマックス」関数を仮説モデルとして使用する傾向があります。これは、すべてのオプションに少なくともある程度のチャンスを残すほど保守的です。

    他の仮説モデルを使用する場合、ゼロにするべきではないという仮説を立てないように、正規化(別名「平滑化」)するのはあなた次第です。

  • 質問2。この式において、一方は通常前提いずれかであることが又はながら、対応する入力のためのモデルの確率の仮説です。よく見ると、それは単にバイナリデータのであり、この回答の2番目の方程式と同等であることがわかります。yi01yilogP[data|model]

    したがって、厳密に言えば、依然として対数尤度ですが、これはクロスエントロピーと構文的に同等ではありません。このような式をクロスエントロピーと呼ぶ場合、実際には、データセット内の個々のポイントのバイナリクロスエントロピーの合計です: where andは、対応するバイナリ分布およびとして解釈する必要があります。

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
を定義するソースを提供できますか?ここでは、現在のクラスラベルのワンホット分布として定義しています。違いはなんですか?yi=kiN
レナーホイト

1
MNIST TensorFlowチュートリアルでは、ワンホットベクトルに関しても定義しています。
レナーホイト

@LenarHoyt場合、はワンホットに相当します。ワンホットは、その経験的(実際の)カテゴリ確率に基づいた1つのアイテムのエンコードと考えることができます。N=1ki/N
-THN

「独立したイベントには...エンコードする必要があります」-このビットについて教えてください。
アレックス

@Alexこれを適切に理解するには、より長い説明が必要な場合があります-シャノン-ファノコードと、最適なコーディングとシャノンエントロピー方程式の関係を読んでください。物事を言えば、イベントの確率が1/2である場合、最善の策は1ビットを使用してコーディングすることです。確率が1/4の場合、エンコードに2ビットを使用する必要があります。一般に、イベントのセットに1/2 ^ kの形式の確率がある場合、長さkを指定する必要があります-このようにコードはシャノンの最適な長さに近づきます。
KT。

22

最初に使用する対数損失式は、マルチクラスの対数損失です添え字は、例でさまざまなクラスを列挙します。この式で、各例の単一のが1で、残りがすべて0であると想定しています。iyi

つまり、式はターゲットクラスのエラーのみをキャプチャします。「誤検知」とみなされる可能性のあるエラーの概念はすべて破棄され、真のクラスの予測確率以外の予測確率がどのように分布するかは気にしません。

別の仮定は、各例の予測に対してであるということです。softmaxレイヤーはこれを自動的に行います-異なるものを使用する場合、その制約を満たすために出力をスケーリングする必要があります。iyi=1

質問1

()が0になることは問題ではありませんか?yilog(yi)

はい、それは問題になる可能性がありますが、通常は実用的なものではありません。ランダムに初期化されたsoftmaxレイヤーは0、どのクラスでも正確に出力されることはほとんどありません。しかし、それは可能ですので、それを許可する価値があります。まず、負のクラスは常にエラーに0を与えるため、を評価しないでください。第二に、実用的なコードでは、数値の安定性のようなものに値を制限することができます-多くの場合、それは必要ではありませんが、これは賢明な防御的プログラミングです。log(yi)yi=0log( max( y_predict, 1e-15 ) )

質問2

クロスエントロピーはとして定義されることを学びましたHy(y):=i(yilog(yi)+(1yi)log(1yi))

この定式化は、2つのクラスを予測する1つの出力を持つネットワークでよく使用されます(通常、1の場合は正のクラスメンバーシップ、0の出力の場合はネガティブクラスメンバーシップ)。その場合、値は1つだけです合計を失う可能性があります。ii

そのようなネットワークを2つの反対の出力を持つように変更し、softmaxと最初のlogloss定義を使用すると、実際には同じエラー測定であるが、2つのクラスのエラーメトリックを1つの出力に折り畳むことがわかります。

メンバーシップを予測するクラスが複数あり、それらのクラスが排他的でない場合、つまり、例が同時にまたはすべてのクラスである場合、この2番目の定式化を使用する必要があります。そうでない数字認識の場合(書かれた数字には「true」クラスが1つだけあるはずです)


第二式のプレゼンテーションでは、いくつかの曖昧さがあることに注意してください-それは理論的にはただ1つのクラスを想定する可能性があり、、その後の例を列挙します。i
ニールスレーター

申し訳ありませんが、私が知りたいこととは違うことを尋ねました。私は、問題が表示されていないが、中ための、。それに対する答えを調整してください。log(yi)=0yi=0log(yi)
マーティントーマ

@NeilSlaterクラスが相互に排他的ではない場合、各入力の出力ベクトルに複数の1が含まれる場合があります。2番目の式を使用する必要がありますか?
メディア

1
@メディア:そうでもない。ただし、階層的な分類などを検討する必要があります。。。
ニールスレーター

1
@Javi:OPの質問では、はグラウンドトゥルースなので、通常は0または1です出力はです。ただし、は浮動小数点の丸めにより、実際にはゼロになる場合があります。これは実際に起こります。yiyiyi
ニール・スレーター

11

与えられた場合、をできるだけ近づけるように機械学習法を最適化します。ytrueypredictytrue

最初の質問:

上記の答えは、最初の式の背景、情報理論で定義されているクロスエントロピーを説明しています。

情報理論以外の意見から:

最初の式には偽陽性に対するペナルティがありません(真実は偽ですが、モデルは正しいと予測します)が、2番目の式には偽陽性に対するペナルティがあります。したがって、最初の式または2番目の式の選択は、メトリックに影響します(別名、モデルの評価に使用する統計量)。

素人の言葉で:

ほぼすべての善良な人々を友だちとして受け入れたいが、一部の悪人を受け入れて友だちにしたい場合は、基準として最初の式を使用します。

悪人を友だちとして受け入れて自分を罰したいが、同時に善良な人の受け入れ率が最初の条件よりも低い場合は、2番目の式を使用します。

一方、私たちのほとんどは重要であり、2番目のものを選択したいと思います(多くのMLパッケージがクロスエントロピーであると仮定するため)。

2番目の質問:

クラスごとのサンプルごとのクロスエントロピー:

ytruelog(ypredict)

データセット全体のクロスエントロピークラス全体:

inkKytrue(k)log(ypredict(k))

したがって、クラスが2つしかない場合(K = 2)、2番目の式が得られます。


5

これらの問題は、チュートリアルでのsoftmaxの使用によって処理されます。

1)の場合、softmaxは入力を累乗するため、ゼロ以外の出力を保証します。この保証を与えないアクティベーション(reluなど)の場合、その問題を回避するために、すべての出力に非常に小さな正の項を追加するのは簡単です。

2)に関しては、それらは明らかに同じではありませんが、私が彼らが与えたsoftmax定式化が問題を処理します。softmaxを使用しなかった場合、これにより、入力のクラスごとに1を推測する巨大なバイアス用語を学習することになります。ただし、すべてのクラスでsoftmaxを正規化するため、正しいクラスの出力を最大化する唯一の方法は、不正なクラスに対して相対的に大きくすることです。


「softmaxがゼロ以外の出力を保証することは正しい」-理論的にはそうであることがわかっている。現実には、(数値の問題により)これが0になることはありますか?
マーティントマ

良い質問。入力が浮動小数点数の精度に対して小さすぎる場合、指数関数が0.0を出力することは完全に可能であると思います。ただし、ほとんどの実装ではゼロ以外の入力を保証するために小さな正の項が追加されると思います。
jamesmf

0

()が0になるのは問題ではありませんか?yilog(yi)

はい、そうです。は未定義ですが、実際にはを使用することでこの問題を回避でき。log(0)log(yi+ϵ)

何が正しいのですか?
(a)または (b)?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a)は、マルチクラス予測(実際には二重加算)に適しています。(b)は、2クラス予測の(a)と同じです。両方ともクロスエントロピーです。

例:

各トレーニングデータにラベルがあり、モデルが予測するとします。xici{0,1}ci[0,1]

5つのデータポイントの場合、真のラベルとモデル予測は次のとおりです。 cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1)、

ベクトルおよびを次のように定義します yiyi

  • yik:=1であれば、およびそうでなければ、 ci=k:=0

  • yik:=p(k|xi)は、モデルによって推定されるクラスに属するの確率です。xik

表記の例(1)は次のようになります。 (yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])}

(a)と(b)は両方とも次のように計算されます。

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

導出:

複数のクラスがあるとしに。 トレーニングポイントの、と等価であるに1である別の場所で位置0。場合、我々は、モデルの出力たい 1に近いことがよって、損失のように定義することができる、。すべてのクラスの損失は、次のように組み合わせることができます。1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik)

場合、他のすべてのクラスの損失として無効にされ、例えば真ラベルであるので、、損失が希望される:yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim)

すべてのトレーニングポイントに対する最終的な式は次のとおりです。

Hy(y)=(xi,yi)k=1Kyiklog(yik)

バイナリ分類では、(真のラベル)および(モデル予測)があるため、(a)は次のように書き換えることができます。yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

(b)と同じです。

クロスエントロピー(a)クラス全体(1つの合計)

クラスに対するクロスエントロピー(a)は次のとおりです。

Hy(y)=k=1Kyklog(yk)

このバージョンは分類タスクには使用できません。前の例のデータを再利用してみましょう。

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

経験的クラス確率は次のです:、および、y0=3/5=0.6y1=0.4

モデルによって推定されるクラス確率は、およびy0=3/5=0.6y1=0.4

(a)は次のように計算されます:。y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

2つのデータポイントおよびは分類されますが、およびは正しく推定されます!(0,0.8)(1,0.2)y0y1

5つのポイントすべてが、
(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

(a)が再びとして推定されるため、同じままです。y0y0=3/5

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