Skip to main content

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

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


目次



さあ始めましょう!

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

クロスエントロピー損失は、分類モデルの性能を評価するために使用される機械学習の指標です。損失(またはエラー)は0から1の間の数値で測定され、0は完璧なモデルを示します。目標は一般的に、モデルを可能な限り0に近づけることです。
クロスエントロピー損失はロジスティック損失(またはロス損失、バイナリクロスエントロピー損失と呼ばれることもあります)と交換可能だと考えられることがありますが、これは常に正しいわけではありません。
交差エントロピー損失は、機械学習分類モデルの発見された確率分布と予測された分布との違いを測定します。予測のすべての可能な値が保存されるため、例えばコイントスの確率を探している場合、それは0.5と0.5(表と裏)としてその情報を保存します。
一方、バイナリークロスエントロピー誤差はのみを保存します。値。それは0.5のみを格納し、他の0.5は別の問題で仮定されることを意味します。最初の確率が0.7の場合、他の確率は0.3と仮定します。また、対数を使用します(したがって「対数損失」)。
このため、バイナリクロスエントロピー損失(またはログ損失)は、2つの結果のみが考えられるシナリオで使用されますが、3つ以上の場合にはすぐに不適切になることが容易にわかります。そこでクロスエントロピー損失がよく使われます。分類の可能性が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