web-dev-qa-db-ja.com

KerasとTensorFlowのこれらすべてのクロスエントロピー損失の違いは何ですか?

これらすべてのクロスエントロピー損失の違いは何ですか?

ケラスは話している

  • バイナリクロスエントロピー
  • カテゴリクロスエントロピー
  • スパースカテゴリクロスエントロピー

TensorFlowには

  • ロジットを使用したSoftmaxクロスエントロピー
  • ロジットを使用したスパースsoftmaxクロスエントロピー
  • ロジットを使用したシグモイドクロスエントロピー

それらの間の違いと関係は何ですか?それらの典型的なアプリケーションは何ですか?数学的背景は何ですか?知っておくべき他のクロスエントロピータイプはありますか?ロジットのないクロスエントロピータイプはありますか?

24

次のように定義されるクロス(シャノン)エントロピーは1つだけです。

_H(P||Q) = - SUM_i P(X=i) log Q(X=i)
_

機械学習の使用法では、Pは実際の(グラウンドトゥルース)分布であり、Qは予測された分布です。リストしたすべての関数はヘルパー関数であり、PQを表すさまざまな方法を受け入れます。

基本的に考慮すべき3つの主なことがあります:

  • 2つの可能な結果(二項分類)以上のいずれかがあります。結果が2つしかない場合は、Q(X=1) = 1 - Q(X=0)であるため、(0,1)の単一のfloatが分布全体を識別します。これが、バイナリ分類のニューラルネットワークが単一の出力を持つ理由です(ロジスティック回帰も同様です)。 K> 2の可能な結果がある場合、K個の出力を定義する必要があります(Q(X=...)ごとに1つ)

  • 1つは適切な確率を生成します(つまり、Q(X=i)>=0およびSUM_i Q(X=i) =1を生成するか、または単に「スコア」を生成し、スコアを確率に変換する固定メソッドを持ちます。たとえば、単一の実数は次のようになります。シグモイドを取ることで「確率に変換」され、ソフトマックスなどを取ることで実数のセットを変換できます。

  • P(X=j)=1(「真のクラス」が1つあり、ターゲットは「この画像は猫を表す」のように「ハード」)または「ソフトターゲット」(のように)のようなjがあります。 「これは猫だと60%確信していますが、40%は実際には犬です」)。

これらの3つの側面に応じて、異なるヘルパー関数を使用する必要があります。

_                                  outcomes     what is in Q    targets in P   
-------------------------------------------------------------------------------
binary CE                                2      probability         any
categorical CE                          >2      probability         soft
sparse categorical CE                   >2      probability         hard
sigmoid CE with logits                   2      score               any
softmax CE with logits                  >2      score               soft
sparse softmax CE with logits           >2      score               hard
_

結局、これが数学的に定義される方法であるため、「カテゴリクロスエントロピー」を使用することもできますが、ハードターゲットやバイナリ分類などが非常に人気があるため、最新のMLライブラリは、これらの追加のヘルパー関数を提供して、物事を簡単にします。特に、「スタッキング」シグモイドとクロスエントロピーは数値的に不安定な場合がありますが、これら2つの操作が一緒に適用されることがわかっている場合は、数値的に安定したバージョンが組み合わされています(TFで実装されます)。

間違ったヘルパー関数を適用した場合、コードは通常は実行されますが、結果は間違っていることに注意することが重要です。たとえば、1つの出力でバイナリ分類にsoftmax_ *ヘルパーを適用すると、ネットワークは常に出力で「True」を生成すると見なされます。

最後の注意として、この回答は分類を考慮しますが、マルチラベルケース(単一のポイントが複数のラベルを持つことができる場合)を考慮すると、わずかに異なります。合計を1にすると、複数の出力ユニットがあるにもかかわらず、sigmoid_cross_entropy_with_logitsを使用する必要があります。

24
lejlot

ロジット

この目的のために、「ロジット」はモデルの非アクティブ化出力と見なすことができます。

  • Keras損失は常に"アクティブ化"出力を取ります( "sigmoid"または "softmax"はすでに適用されています)
  • Tensorflow「ロジット」または「非アクティブ化」(「シグモイド」または「ソフトマックス」を適用せずに)

「ロジット付き」の損失は、内部的にアクティベーションを適用します。一部の関数では、logits=Trueまたはlogits=Falseを選択できます。これにより、アクティベーションを「適用」するか「適用しない」かが関数に指示されます。


スパース

  • スパース関数は出力を「整数ラベル」として使用します:0、1、2、3、4...。
  • 非スパース関数はouptutsを「ワンホットラベル」として使用します:[1,0,0]、[0,1,0]、[0,0,1]

バイナリクロスエントロピー=シグモイドクロスエントロピー

  • 問題の種類:単一クラス(false/true)または非排他的マルチクラス
  • モデル出力形状:(batch, ..., >=1)
  • アクティベーション:"sigmoid"

カテゴリクロスエントロピー= Softmaxクロスエントロピー

  • 問題の種類:排他的クラス。
  • モデル出力形状:(batch, ..., >=2)
  • アクティベーション:"softmax"
0
Daniel Möller