クロスエントロピー損失とは何か?コード付きチュートリアル
クロスエントロピー損失に関するチュートリアル、PyTorchとTensorflowでクロスエントロピー損失関数を実装するためのコードサンプル、インタラクティブなビジュアライゼーション。
Created on August 5|Last edited on August 5
Comment
ニューラルネットワークのトレーニングによく使用される損失関数の1つはクロスエントロピーこの記事では、その導出と実装について説明します。パイトーチと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 tffrom wandb.keras import WandbCallbackdef build_model():...# Define the Model Architecturemodel = tf.keras.Model(inputs = ..., outputs = ...)# Define the Loss Function -> BinaryCrossentropy or CategoricalCrossentropyfn_loss = tf.keras.losses.BinaryCrossentropy()model.compile(optimizer = ..., loss = [fn_loss], metrics= ... )return modelmodel = build_model()# Create a W&B Runrun = wandb.init(...)# Train the model, allowing the Callback to automatically sync lossmodel.fit(... ,callbacks = [WandbCallback()])# Finish the run and sync metricsrun.finish()
PyTorchでクロスエントロピー損失関数をコーディングする方法
import wandbimport torch.nn as nn# Define the Loss Functioncriterion = nn.CrossEntropyLoss()# Create a W&B Runrun = wandb.init(...)def train_step(...):...loss = criterion(output, target)# Back-propagationloss.backward()# Log to Weights and Biaseswandb.log({"Training Loss": loss.item()})# Finish the run and sync metricsrun.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