深層学習

二値分類損失

二値分類で確率の予測を対数尤度として測る損失です。シグモイドの出力を受け取る形と、ロジットを直接受け取る数値安定な形を使い分けます。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

二値交差エントロピー(BCE)は、正解ラベルが0または1の分類で、予測確率が正解にどれだけ整合するかを測る損失です。正解の確率を高く、誤った確率を低く予測するほど小さくなります。

確率予報に対する採点表です。「晴れ」と断言して外した予報には大きく罰を与え、当たった予報にも確信の度合いに応じた点を付けます。0.5からの距離だけを見る採点ではないため、迷いのない誤答を強く区別できます。

なぜ必要か

二乗誤差は予測値とラベルの距離を測るだけなので、分類器が確率を出す仕組みと勾配の流れが噛み合いません。ロジットを zz、シグモイドを σ(z)\sigma(z) とすると、予測確率は p=σ(z)p=\sigma(z) です。BCEはこの確率をベルヌーイ分布の尤度として扱い、正解が起きる確率を最大化する方向に学習させます。

GANの原論文でも、データ由来か生成由来かを判定する識別器の確率を扱い、識別器と生成器の目的を対数確率で組み立てています。BCEは単なる「0/1との距離」ではなく、確率予測の対数尤度に対応する損失です。

分類器の最終層がすでに確率を返す設計か、ロジットを返す設計かで呼ぶ損失が変わります。ここを取り違えると、シグモイドを二重に通したり、確率でない値を対数に入れたりします。

仕組み

正解を y∈{0,1}y\in\{0,1\}、モデルの予測確率を p∈(0,1)p\in(0,1) とすると、1例の損失は次です。

L=−[ylog⁡p+(1−y)log⁡(1−p)]L=-\left[y\log p+(1-y)\log(1-p)\right]

yy は正解ラベル、pp はクラス1である確率です。y=1y=1なら −log⁡p-\log p、y=0y=0なら −log⁡(1−p)-\log(1-p) だけが残るため、正解側の確率を上げるほど損失が下がります。バッチでは各例の損失を平均または合計します。

ここで p=σ(z)=1/(1+e−z)p=\sigma(z)=1/(1+e^{-z}) と置いて微分すると、シグモイドの微分 p(1−p)p(1-p) と対数の微分が打ち消し合い、

∂L∂z=p−y\frac{\partial L}{\partial z}=p-y

になります。ロジットへの勾配が「予測−正解」だけになるのが、シグモイドとBCEを組み合わせる理由です。

一方、シグモイドの出力に二乗誤差をかけると、勾配には p(1−p)p(1-p) が残ります。pp が0または1に飽和したときこの因子がほぼ0になり、誤答でも更新が進みにくくなります。BCEではその因子が相殺されるため、ロジットが極端な領域でも勾配の形が保たれます。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
損失の式を選ぶylog⁡p+(1−y)log⁡(1−p)y\log p+(1-y)\log(1-p) にマイナスを付ける二乗誤差や符号の落とし忘れ
勾配を求めるシグモイド+BCEなら p−yp-yp(1−p)p(1-p) を残す
入力の種類を判定するBCEは確率、logits版はシグモイド前の値ロジットを確率として二重にシグモイド
飽和の説明二乗誤差ではシグモイド微分が残る「BCEの勾配も常に大きい」とする

実装で確かめる

実装では確率を作ってからBCEを計算するより、ロジットを直接受け取る関数を選びます。下の式は、正のロジット側と負のロジット側を分けて計算する安定な形です。

import numpy as np

z = np.array([20.0, -20.0, 0.0])
y = np.array([1.0, 0.0, 1.0])
stable = np.maximum(z, 0) - z * y + np.log1p(np.exp(-np.abs(z)))
p = 1 / (1 + np.exp(-z))
print(np.round(stable, 6))
print(np.round(p - y, 6))

出力は [0. 0. 0.693147] と [-0. 0. -0.5] です。z が大きいときに p を先に1へ丸めてから log(1-p) を計算すると、有限精度では不安定になります。PyTorchのBCELossも確率入力を対象に境界での対数を扱いますが、モデル出力のロジットを使える場合は、シグモイドとBCEを一体化した関数を使う判断になります。

取り違えやすいもの

用語切り分け
二乗誤差連続値の距離を測る損失。シグモイドと組み合わせると飽和因子が勾配に残る
BCE確率 pp を入力し、ベルヌーイの負の対数尤度を測る
BCE with logitsロジット zz を直接入力し、シグモイドとBCEを数値安定にまとめて計算する
多クラス交差エントロピークラスが2つに限られない設定。今回の二値の出力形式とは異なる

想起チェック

BCEが二乗誤差より二値分類に向く理由は

確率の対数尤度に対応し、シグモイドと組み合わせたロジット勾配が p−yp-y になるためです。

BCEの入力が確率かロジットかを見分けるには

0から1の確率を渡すのがBCE、シグモイド前の実数を渡すのがlogits版です。後者にシグモイドを別途二重適用しません。

シグモイド+二乗誤差で学習が止まりやすい因子は

シグモイドの微分 p(1−p)p(1-p) です。予測確率が0または1に近いとほぼ0になります。

出典