Skip to content

BCELoss

1、真實場景與模型輸入

想像你在做「信用卡詐欺偵測」:每筆交易要判斷是不是詐欺(1=詐欺,0=正常)。模型會輸出「這筆交易是詐欺的機率」。

我們一次看 3 筆交易(batch size = 3),每筆交易都有一個真實標籤 \(y\),模型輸出一個機率 \(\hat{y}\)

\[ y\ (shape=3\times 1)= \begin{bmatrix} 1\\ 0\\ 1 \end{bmatrix} \]
\[ \hat{y}\ (shape=3\times 1)= \begin{bmatrix} 0.90\\ 0.20\\ 0.40 \end{bmatrix} \]

痛點:把真實世界的「是/否」決策變成可訓練的數值目標,讓模型能被監督學習推動改進。


2、從 logits 走到機率(前向傳播)

在真實模型裡,最後一層常先輸出 logits \(z\)(未經壓縮的分數),再用 sigmoid 變成機率:

\[ \hat{y}=\sigma(z)=\frac{1}{1+e^{-z}} \]

我們這次示範一組 logits,經 sigmoid 後會對應到上面的機率(近似即可):

\[ z\ (shape=3\times 1)= \begin{bmatrix} 2.20\\ -1.39\\ -0.41 \end{bmatrix} \]
\[ \hat{y}=\sigma(z)\ (shape=3\times 1)= \begin{bmatrix} 0.90\\ 0.20\\ 0.40 \end{bmatrix} \]

痛點:把任意實數分數壓到 \([0,1]\),才能對應「機率」並與標籤做可比對的損失計算。


3、BCE 的逐筆損失公式(前向計算)

Binary Cross Entropy(BCE)對每一筆樣本的損失定義為:

\[ \ell_i=-\Big(y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\Big) \]

我們把每筆交易代入(只做前向數值計算):

3-1、第 1 筆(\(y_1=1,\ \hat{y}_1=0.90\)

\[ \ell_1=-\log(0.90)=0.1053605 \]

痛點:當真實是正例時,強烈懲罰把機率壓低的模型,逼它「正例要更像正例」。

3-2、第 2 筆(\(y_2=0,\ \hat{y}_2=0.20\)

\[ \ell_2=-\log(1-0.20)=-\log(0.80)=0.2231436 \]

痛點:當真實是負例時,強烈懲罰把機率抬高的模型,減少誤報造成的人工審核成本。

3-3、第 3 筆(\(y_3=1,\ \hat{y}_3=0.40\)

\[ \ell_3=-\log(0.40)=0.9162907 \]

痛點:把「信心不足」的正例(機率偏低)放大懲罰,推動模型把關鍵特徵學得更清楚。


4、把逐筆損失組成向量

我們把每筆損失排成一個向量(方便之後做 batch 平均):

\[ \ell\ (shape=3\times 1)= \begin{bmatrix} 0.1053605\\ 0.2231436\\ 0.9162907 \end{bmatrix} \]

痛點:把單筆誤差整理成批次形式,方便穩定地統計與監控訓練狀態。


5、Batch 平均 BCE Loss(最常用)

整個 batch 的 BCE loss 常用平均:

\[ L=\frac{1}{N}\sum_{i=1}^{N}\ell_i \]

這裡 \(N=3\)

\[ L\ (shape=1\times 1)= \begin{bmatrix} \frac{0.1053605+0.2231436+0.9162907}{3} \end{bmatrix} = \begin{bmatrix} 0.4149316 \end{bmatrix} \]

痛點:用平均讓 loss 不會因 batch 大小改變而失真,訓練更穩定、可比較不同設定。


6、用「矩陣視角」看 BCE(打包成同一個式子)

我們也可以把 \(y\)\(\hat{y}\) 用元素運算打包成矩陣形式(仍是前向):

先算 \(\log(\hat{y})\)\(\log(1-\hat{y})\)

\[ \log(\hat{y})\ (shape=3\times 1)= \begin{bmatrix} \log(0.90)\\ \log(0.20)\\ \log(0.40) \end{bmatrix} = \begin{bmatrix} -0.1053605\\ -1.6094379\\ -0.9162907 \end{bmatrix} \]
\[ \log(1-\hat{y})\ (shape=3\times 1)= \begin{bmatrix} \log(0.10)\\ \log(0.80)\\ \log(0.60) \end{bmatrix} = \begin{bmatrix} -2.3025851\\ -0.2231436\\ -0.5108256 \end{bmatrix} \]

接著用 BCE 的結構把它們組合(元素乘法與加法,仍是逐元素的前向組合):

\[ \ell\ (shape=3\times 1)= -\Big( y\odot \log(\hat{y})+(1-y)\odot \log(1-\hat{y}) \Big) \]

對應到我們前面算出的:

\[ \ell\ (shape=3\times 1)= \begin{bmatrix} 0.1053605\\ 0.2231436\\ 0.9162907 \end{bmatrix} \]

痛點:把正負例兩種情況用同一個公式統一處理,實作簡潔且避免分支錯誤,訓練流程更可靠。