クロスエントロピー誤差とは何か?コード付きチュートリアル
クロスエントロピー損失を解説するチュートリアル。PyTorchとTensorFlowでクロスエントロピー損失関数を実装するコードサンプルとインタラクティブな視覚化を含む。
Created on August 1|Last edited on August 1
Comment
ニューラルネットワークの訓練によく使われる損失関数の一つは交差エントロピーこの記事では、その導出と実装について説明します。パイトーチとTensorFlowを使用して、それらをログおよび可視化する方法を学びます。ウェイトとバイアス。

目次
目次クロスエントロピー誤差とは、分類問題において予測確率と実際のクラスとの不一致を測定するための損失関数です。クロスエントロピー損失の理論交差エントロピー損失関数のコーディングTensorFlowでクロスエントロピー損失関数をコーディングするPyTorchでクロスエントロピー損失関数をコーディングするまとめいくつかの関連リソース
さあ始めよう!
クロスエントロピー誤差とは、分類問題において予測確率と実際のクラスとの不一致を測定するための損失関数です。
クロスエントロピー損失は、分類モデルの性能を評価するために使用される機械学習の指標です。損失(または誤差)は0から1の間の数値で測定され、0は完璧なモデルを表します。目標は一般的に、モデルを可能な限り0に近づけることです。
クロスエントロピー損失はしばしばロジスティック損失(またはログ損失、時には二項クロスエントロピー損失とも呼ばれる)と互換性があると考えられますが、これは常に正しいわけではありません。
交差エントロピー損失は、機械学習分類モデルの発見された確率分布と予測された分布の違いを測定します。予測のすべての可能な値が保存されるため、例えば、コイントスの確率を求める場合、その情報は0.5と0.5(表と裏)として保存されます。
バイナリークロスエントロピーロスは、一方で、のみを格納します。一値。それは0.5のみを格納することを意味し、残りの0.5は別の問題で仮定されます。最初の確率が0.7であれば、もう一方は0.3であると仮定されます。また、対数を使用します(したがって「ログ損失」)。
この理由から、バイナリークロスエントロピー損失(またはログ損失)は、2つの可能な結果しかないシナリオで使用されますが、3つ以上の場合にはすぐに失敗することが容易に分かります。その場合に、クロスエントロピー損失がよく用いられます。3つ以上の分類の可能性があるモデルで使用されます。
クロスエントロピー損失の理論
深層学習では通常、勾配ベースの最適化戦略を使用してモデルを訓練します。モデル)いくつか使用して損失関数どこいくつかの入力-出力ペアがあります。損失関数は、モデルがどの程度「間違っている」かを判断し、その「間違い」に基づいて自己改善を行うために使用されます。それは誤差の尺度です。トレーニング全体を通じての目標は、この誤差/損失を最小化することです。
損失関数の役割は重要です。誤った出力をその大きさに応じて適切にペナルティを与えない場合、収束が遅れ、学習に影響を与える可能性があります。
学習パラダイムというものがあります。最尤推定このモデルは、そのパラメーターを推定して基礎となるデータ分布を学習します。そのため、損失関数を使用してモデルがデータ分布にどれだけ適合しているかを評価します。
クロスエントロピーを使用して、2つの確率分布間の誤差(または差異)を測定できます。
例えば、バイナリ分類の場合、クロスエントロピーは以下によって与えられます。
どこ
- は予測確率です。
- インジケーターはまたはバイナリ分類の場合、
特定のデータポイントの処理を確認してみましょう。正しい指標は、すなわち、この場合、
損失の価値したがって、確率に依存します。したがって、損失関数は正しい予測をしたモデルに報酬を与える(高い値)。しかし、確率が低い場合、誤差の値が高く(より大きな負の値)なり、そのため間違った結果に対してモデルを罰します。
多クラス分類への簡単な拡張(例えばクラスの問題は以下のとおりです:
交差エントロピー損失関数のコーディング
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
まとめ
いくつかの関連リソース
- もっと厳密な数学的説明をお求めの場合は、こちらをご覧ください。
こちらのビデオです。クリックする手間を省くためにお送りします。
Add a comment
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