クロスエントロピー損失の説明


35

分類用のNNを作成するとします。最後のレイヤーは、ソフトマックスアクティベーションを使用した高密度レイヤーです。分類するクラスは5つあります。単一のトレーニングの例でtrue label[1 0 0 0 0]、予測はであると仮定します[0.1 0.5 0.1 0.1 0.2]。この例のクロスエントロピー損失はどのように計算しますか?

回答:


50

クロスエントロピ式は二つの分布にかかるp(x)、真の分布、及びq(x)離散変数上で定義され、推定分布、xとによって与えられます。

H(p,q)=xp(x)log(q(x))

ニューラルネットワークの場合、計算は以下に依存しません。

  • 使用されたレイヤーの種類。

  • どの種類のアクティベーションが使用されましたか?多くのアクティベーションは、出力が確率として解釈できないため、計算と互換性がありません(つまり、出力が負、1より大きい、または合計が1になりません)。Softmaxは、適切に機能する確率分布関数を保証するため、マルチクラス分類によく使用されます。

ニューラルネットワークのために、あなたは、通常の形式で書かれた数式が表示されますyグランドトゥルースベクトルとあるy^または最終層の出力から直接撮影したいくつかの他の値)を推定値です。単一の例では、次のようになります。

L=ylog(y^)

ここで、はベクトルの内積です。

あなたの例のグランドトゥルースy最初の値にすべての確率を与える、と私たちはそれらを無視し、ちょうどあなたの見積りと一致する用語を使用することができますので、他の値は、ゼロであるYy^

L=(1×log(0.1)+0×log(0.5)+...)

L=log(0.1)2.303

コメントからの重要なポイント

ことを意味する予測である場合には、損失は関係なく同じである[0.1,0.5,0.1,0.1,0.2]または[0.1,0.6,0.1,0.1,0.1]

はい、これはマルチクラスログロスの重要な機能であり、正しいクラスの確率のみに報酬を与えます。値は、残りの確率が誤ったクラス間でどのように分割されるかには依存しません。

多くの場合、この式はすべての例にわたってコスト関数として平均化されます。説明で常に厳密に順守されているわけではありませんが、通常、損失関数はより低いレベルであり、単一のインスタンスまたはコンポーネントがエラー値を決定する方法を説明し、コスト関数はより高いレベルであり、完全なシステムが最適化のために評価される方法を説明します。サイズNデータセットのマルチクラスログ損失に基づくコスト関数は、次のようになります。

J=1N(i=1Nyilog(y^i))

多くの実装では、グラウンドトゥルース値をワンホットエンコード(単一の真のクラスで)する必要があります。これにより、追加の最適化が可能になるためです。ただし、そうでない場合は、原則としてクロスエントロピー損失を計算し、最適化することができます。


1
はい。つまり、予測が[0.1 0.5 0.1 0.1 0.2]でも[0.1 0.6 0.1 0.1 0.1]でも、損失は同じになります。
ナイン

@Nain:それはあなたの例にとって正しいです。クロスエントロピー損失は、誤ったクラス確率の値が何であるかに依存しません。
ニールスレーター

8

ニールからの答えは正しいです。ただし、損失は誤ったクラス間の分布(正しいクラスと他のクラス間の分布のみ)には依存しませんが、この損失関数の勾配は、誤ったクラスにどのように影響するかを指摘することが重要だと思います間違っています。したがって、機械学習でcross-entを使用する場合、[0.1 0.5 0.1 0.1 0.2]と[0.1 0.6 0.1 0.1 0.1]の重みを別々に変更します。これは、正しいクラスのスコアが他のすべてのクラスのスコアによって正規化され、確率に変換されるためです。


3
適切な例で詳しく説明できますか?
ナイン

@ルーカス・アダムス、例を挙げてください。
koryakinp

EACH y_i(ソフトマックス出力)と各logit z(またはパラメーターw自体)の導関数は、すべてのy_iに依存します。medium.com/@aerinykim/…–
アーロン

2

損失の勾配がどのように振る舞うかを見てみましょう...

H(p,q)=i=1np(xi)log(q(xi))=(p(x1)log(q(x1))++p(xn)log(q(xn))

ここから行く..いくつかのに関する導関数を知りたい: xi 他のすべての条件は差別化のためキャンセルされます。この方程式をさらに一歩進めて、

xiH(p,q)=xip(xi)log(q(xi)).
xiH(p,q)=p(xi)1q(xi)q(xi)xi.

このことから、真のクラス(値がある)のみにペナルティを課していることがわかります。それ以外の場合は、勾配がゼロになります。p(xi)

真の値がゼロより大きかったのに、パッケージが0の予測値をどのように処理するのか疑問に思います。


あなたが望むのは、wrt x_iではなく、パラメータの微分を取ることだと思います。
アーロン

1

情報理論のエントロピーを理解することから始めましょう。アルファベット文字列「aaaaaaaa」を伝えたいとします。8 * "a"として簡単にできます。次に、別の文字列「jteikfqa」を取得します。この文字列を通信する圧縮された方法はありますか?ありません。2番目の文字列のエントロピーは、それを伝えるために、より多くの「ビット」の情報が必要であると言えます。

この類推は確率にも当てはまります。果物などのアイテムのセットがある場合、それらの果物のバイナリエンコーディングはlog2(n)になります。ここで、nは果物の数です。8個の果物には3ビットが必要です。この別の見方は、それがランダムに果物を選択する誰かの可能性を与えている1/8、選択された果物がある場合は不確実性の低減であるlog2(1/8)具体的には3です。

i=1818log2(18)=3
このエントロピーは、特定の確率分布に伴う不確実性を示しています。確率分布の不確実性/変動が大きいほど、エントロピーは大きくなります(たとえば、1024個の果物の場合、10になります)。

「クロス」エントロピーでは、名前が示すように、2つの異なる確率分布の違いを説明するために必要なビット数に焦点を当てます。最良のケースのシナリオは、両方の分布が同一である場合です。この場合、必要なビット量は最小、つまり単純なエントロピーです。数学的には、

H(y,y^)=iyiloge(y^i)

どこyは予測確率ベクトル(ソフトマックス出力)であり、yは地上真実ベクトル(例えばワンホット)です。自然対数を使用する理由は、微分が容易であるため(勾配の計算を参照)、グラウンドトゥルースベクトルの対数を取得しない理由は、合計を単純化する0が多数含まれているためです。y^y

結論:素人の用語では、クロスエントロピーは、その距離を説明するために必要な情報量(ビット)の観点から2つの確率分布間の距離と考えることができます。これは、損失を定義する適切な方法であり、確率ベクトルが互いに近づくにつれて減少します。


0

私はルーカスに同意しません。上記の値はすでに確率です。元の投稿では、値にsoftmaxアクティベーションがあることが示されていることに注意してください。

エラーは「ホット」クラスにのみ伝播され、他のクラス内の確率が相互にシフトしても、確率Q(i)は変わりません。


2
ルーカスは正しい。OPで記述されたアーキテクチャでは、softmax関数がすべてを接続するため、すべてのロジット(出力ではなく)の勾配はゼロではありません。したがって、「ホット」クラスでの[勾配]エラーは、すべての出力ニューロンに伝播します。
ニールスレーター

ニールとルーカスの+1
アーロン

-1

問題は、確率が他の出力を与えられた値に組み込む「複雑な」関数に由来することです。結果は相互に関連しているため、この方法では、実際の結果に関してではなく、すべての結果について、最後のアクティベーション関数(softmax)のすべての入力によって導出しています。

deepnotes.io/softmax-crossentropyで非常に良い説明を見つけました。著者は実際の導関数がpiyiことを示しています。

gombru.github.io/2018/05/23/cross_entropy_lossのその他のきちんとした説明。

最後のアクティベーションレイヤーとして単純なシグモイドを使用すると、承認済みの回答が得られると思いますが、softmaxを使用すると異なる回答が示されます。


1
Stack Exchangeへようこそ。しかし、あなたが書いたことは、クロスエントロピー損失の計算に関するOPの質問の答えではないようです。
user12075
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.