バイナリクロスエントロピーロス(Binary Cross-Entropy Loss、BCE Loss)は、二値分類問題における損失関数(ロスファンクション)の一種です。これは、ニューラルネットワークが出力する確率と実際のラベルとの間の誤差を測定し、モデルの予測精度を改善するために使用されます。以下に、BCE Lossの詳細を説明します。
定義
BCE Lossは、モデルが出力する確率 𝑝p と実際のラベル 𝑦y の間のクロスエントロピーを計算します。
損失は以下の式で定義されます。
BCE(𝑦,𝑝)=−(𝑦log(𝑝)+(1−𝑦)log(1−𝑝))BCE(y,p)=−(ylog(p)+(1−y)log(1−p))
ここで、
- 𝑦y は実際のラベル(0または1)
- 𝑝p はモデルの予測する確率(0から1の範囲)
複数サンプルの場合
データセットに複数のサンプルが含まれる場合、BCE Lossは各サンプルの損失の平均を取ります。データセットに 𝑁N 個のサンプルがあるとき、損失は以下のように計算されます。
BCE Loss = - 1/N * Σ_{i=1}^{N} [ y_i * log(p_i) + (1 - y_i) * log(1 - p_i) ]
理論的背景
クロスエントロピーは情報理論に由来し、予測分布と実際の分布との間の不一致を測定するために使用されます。
バイナリクロスエントロピーは特に二値分類問題に適用されます。
例(スパムメール検出のモデル)
例えば、スパムメール検出のモデルを考えます。
ここで、モデルは各メールがスパム(1)か否か(0)を確率で出力します。
実際のラベルとモデルの予測を比較することで、BCE Lossを計算し、モデルのパフォーマンスを評価します。
BCE Lossの計算方法
BCE(Binary Cross-Entropy)Lossを計算するためのJavaScriptコードを以下に示します。このコードでは、実際のラベルとモデルの予測を入力として受け取り、BCE Lossを計算します。
function calculateBCELoss(trueLabels, predictions) {
// 確認: trueLabels と predictions の長さが同じであること
if (trueLabels.length !== predictions.length) {
throw new Error("trueLabels と predictions の長さが一致しません");
}
let bceLoss = 0;
const epsilon = 1e-15; // ログの0による問題を防ぐための微小値
for (let i = 0; i < trueLabels.length; i++) {
const y = trueLabels[i];
const yHat = predictions[i];
// 予測値の範囲を [epsilon, 1 - epsilon] にクランプ
const clampedPrediction = Math.min(Math.max(yHat, epsilon), 1 - epsilon);
// BCE Loss の計算
bceLoss += y * Math.log(clampedPrediction) + (1 - y) * Math.log(1 - clampedPrediction);
}
// 負の平均を取る
bceLoss = -bceLoss / trueLabels.length;
return bceLoss;
}
// 使用例
const trueLabels = [0, 1, 0, 1]; // 実際のラベル
const predictions = [0.1, 0.9, 0.4, 0.6]; // モデルの予測値
const bceLoss = calculateBCELoss(trueLabels, predictions);
console.log(`BCE Loss: ${bceLoss}`);
このスクリプトでは、trueLabels
と predictions
の長さが一致することを確認し、それぞれのラベルと予測値に対してBCE Lossを計算しています。epsilon
はログの0によるエラーを防ぐために使用され、予測値はクランプされます。最終的なBCE Lossは全サンプルの平均を取り、負の値で計算されます。
このHTMLファイルをブラウザで開くと、コンソールにバイナリクロスエントロピーロスが出力されます。
解説
epsilon
は、計算中にゼロ割りエラーを防ぐための非常に小さな値です。clipped_y_p
は、予測確率を0と1の間にクリップすることで、ログ関数の無限大エラーを防ぎます。- 損失は、各サンプルに対してクロスエントロピーを計算し、それらの平均を取ることで求められます。
まとめ
バイナリクロスエントロピーロスは、二値分類問題におけるモデルの性能を評価し、最適化するための重要な指標です。モデルの予測が実際のラベルと一致するほど、損失は小さくなります。これにより、モデルの精度を向上させるためのフィードバックが提供されます。