Skip to main content

クロスエントロピー損失とは何か?コード付きチュートリアル

クロスエントロピー損失をカバーするチュートリアルと、PyTorchおよびTensorFlowでクロスエントロピー損失関数を実装するコードサンプル、およびインタラクティブなビジュアライゼーション。
Created on August 1|Last edited on August 1
ニューラルネットワークを訓練するために使用される最も一般的な損失関数の一つは交差エントロピーこの記事では、その導出と実装について説明します。パイトーチとTensorFlow、ログに記録し、視覚化する方法を学びます。重みとバイアス


目次



さあ始めましょう!

クロスエントロピー損失とは何ですか。

クロスエントロピー損失は、分類モデルのパフォーマンスを評価するために使用される機械学習における指標です。損失(または誤差)は0から1の間の数値で測定され、0は完全なモデルを意味します。目標は一般的に、モデルを可能な限り0に近づけることです。
クロスエントロピー損失はしばしばロジスティック損失(またはログ損失、バイナリクロスエントロピー損失とも呼ばれる)と同じと見なされますが、これは常に正しいわけではありません。
クロスエントロピー損失は、機械学習分類モデルの発見された確率分布と予測された分布の違いを測定します。予測のすべての可能な値が保存されるため、たとえばコイントスの確率を求めるときには、その情報が0.5と0.5(表と裏)として保存されます。
一方、バイナリ交差エントロピー損失は、のみを保存します。一つ値。それは0.5のみを保存することを意味し、残りの0.5は他の問題で仮定されます。最初の確率が0.7だった場合、もう一方は0.3と仮定します。また、対数を使用します(したがって「ログ損失」)。
このため、二値交差エントロピー損失(または対数損失)は、二つの可能な結果しかない状況で使用されますが、もし三つ以上の結果がある場合すぐに失敗することが容易にわかります。そのため、三つ以上の分類の可能性があるモデルでは、交差エントロピー損失がよく使用されます。

クロスエントロピー損失の理論

ディープラーニングでは、通常、勾配に基づく最適化戦略を使用してモデルを訓練します。モデルf(x)f(x))いくつかのを使用して損失関数l(f(xi),yi)l \, (f(x_i), \, y_i)どこ(xi,yi)(x_i, y_i)いくつかの入力と出力のペアがあります。損失関数は、モデルがどれだけ「間違っている」かを判断し、その「間違い」に基づいて改善するのを助けます。これは誤差の尺度です。トレーニング全体の目標は、この誤差や損失を最小化することです。
損失関数の役割は重要です。誤った出力に対して適切にその大きさに応じたペナルティを与えないと、収束が遅れ、学習に影響を及ぼす可能性があります。
学習パラダイムと呼ばれるものがあります。最尤推定モデルにそのパラメーターを推定させることにより、基礎的なデータ分布を学習します。こ���ために、損失関数を使用してモデルがデータ分布にどれだけ適合しているかを評価します。
クロスエントロピーを使用すると、2つの確率分布間の誤差(または差異)を測定できます。
たとえば、バイナリ分類の場合、クロスエントロピーは次のように表されます。
l=(ylog(p)+(1y)log(1p))l = - (\,y \, log(p)\,\,+ \,\, (1-y) \, log(1-p)\,)

どこ
  • pp予測確率は、そして
  • yyは指標です00 または11バイナリー分類の場合、
特定のデータポイントで何が起こるかを見てみましょう。正しい指標が例えば、y=1y = 1この場合、
l=(1×log(p)+(11)log(1p))l = - ( \, \,1 \times log(p) + (1 - 1) \, \, log (1- p) \, \,)

l=(1×log(p))l = - ( \, \, 1 \times log(p) \, \,)

損失の価値llしたがって、確率に依存します。ppしたがって、損失関数は正しい予測を与えるモデルを報酬します。pp損失が低い場合。ただし、確率が低い場合、誤差の値は高くなります(より大きな負の値になり)、したがって誤った結果に対してモデルを罰します。
マルチ分類への簡単な拡張(例えば、NNクラス)問題は次のとおりです。
c=1Nyclog(pc)- \sum_{c=1}^{N} y_c log(p_c)


クロスエントロピー損失関数のコーディング

このセクションでは、クロスエントロピー損失関数の使用方法について説明します。テンソルフローおよびパイトーチおよびWeights & Biasesにログインします。

TensorFlowでクロスエントロピー損失関数をコーディングする

import tensorflow as tf from wandb.keras import WandbCallback def build_model(): ... # Define the Model Architecture model = tf.keras.Model(inputs = ..., outputs = ...) # Define the Loss Function -> BinaryCrossentropy or CategoricalCrossentropy fn_loss = tf.keras.losses.BinaryCrossentropy() model.compile(optimizer = ..., loss = [fn_loss], metrics= ... ) return model model = build_model() # Create a W&B Run run = wandb.init(...) # Train the model, allowing the Callback to automatically sync loss model.fit(... ,callbacks = [WandbCallback()]) # Finish the run and sync metrics run.finish()

PyTorchでクロスエントロピー損失関数をコーディングする

import wandb import torch.nn as nn # Define the Loss Function criterion = nn.CrossEntropyLoss() # Create a W&B Run run = wandb.init(...) def train_step(...): ... loss = criterion(output, target) # Back-propagation loss.backward() # Log to Weights and Biases wandb.log({"Training Loss": loss.item()}) # Finish the run and sync metrics run.finish()

Run set
0


要約

以上でクロスエントロピー損失に関する短いチュートリアルを終了します。重みとバイアスの機能この短いものを確認してください。5分ガイド

いくつかの関連リソース

  • ネガティブロジック確率を使用すべき理由を知りたい場合は、これを確認してください。ビデオ🎥
  • より厳密な数学的説明を求める場合は、こちらをご覧ください。
こちらがそのビデオです。クリックを省略します。

Mahmoud Limam
Mahmoud Limam •  
Hi thanks for the article. I noticed it says in the beginning that the loss is between 0 and 1, which isn't the case with cross entropy as -log(p) can certainly exceed 1 when p is close enough to 0.
Reply