BCE Loss和CE Loss求导对比
交叉熵损失函数(CrossEntropyLoss)作为分类问题常见的损失函数,自己并为对其具体的细节展开理解。同时二元交叉熵损失函数(BCELoss)是交叉熵损失函数的特例,因此同样需要对二元交叉熵损失函数作出进一步的理解。
一般来说,交叉熵损失函数是需要用到softmax函数。
从公式上来看(这里以Pytorch官网的介绍为例),交叉熵损失函数表示为:
\[\boldsymbol{L}_{CE} = - \sum_{i=1}^N y_iln(\hat{y}(x_i))\\
\hat{y}(x_i) = \frac{e^{x_i}}{\sum_{k=1}^C e^{x_k}}
\]
对于softmax函数来说,其导数可以表示为:
\[\begin{align}
\frac{\mathrm{d} \hat{y}}{\mathrm{d} \hat{x_i}} & = \frac{e^{x_i}\sum_{k=1}^C e^{x_k}-(e^{x_i})^2}{(\sum_{k=1}^C e^{x_k})^2} \\
&=\hat{y}-(\hat{y})^2 \\
&=\hat{y}(1-\hat{y})
\end{align}
\]
那么交叉熵损失函数的导数可以表示为:
\[\begin{align}
\frac{\partial \boldsymbol{L}_{CE}}{\partial x_i} &= \frac{\partial \boldsymbol{L}_{CE}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial x_i} \\
& = - \sum_{i=1}^N y_i \cdot \frac{1}{\hat{y}} \cdot (\hat{y}(1-\hat{y})) \\
& = \sum_{i=1}^N y_i (\hat{y}-1)
\end{align}
\]
对于二分类来说,只有当\(y_i=1\)时,梯度才有回传,梯度值当大小正比于网络预测值与真值之差。
由于softmax输出的概率值之和为1,网络的优化方向时提升对\(y_i=1\)的分类能力,自然其他类别的预测得分就会下降,因此就不必担心假阴性的问题。
那么对于二元交叉熵来说,其表示为:
\[\boldsymbol{L}_{BCE} = - \sum_{i=1}^N[y_i \cdot ln(\hat{y})+(1-y_i) \cdot ln(1-\hat {y})]
\]
对于二分类问题来说,经常用BEC Loss + sigmoid函数的组合,因此\(\hat {y}(x_i)=\sigma{(x_i)}\)。
这样的话\(\hat {y}(x_i)\)的导数为(也就是sigmoid函数的导数)\(\sigma(x_i)(1-\sigma(x_i))\)。
那么\(\boldsymbol{L}_{BCE}\)损失函数的导数表示为:
\[\begin{align}
\frac{\partial \boldsymbol{L}_{BCE}}{\partial x_i} &= \frac{\partial \boldsymbol{L}_{BCE}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial x_i} \\
&=-\sum_{i=1}^N[\frac{y_i}{\sigma} + \frac{(y_i-1)}{1-\sigma}] \cdot(\sigma(1-\sigma))\\
&=\sum_{i=1}^N(\sigma-y_i)
\end{align}
\]
此时就可以看出,BCE其实是考虑了标签为0的信息情况(虽然CE Loss使用了softmax,但是我还是感觉不如BCE Loss更能直观考虑标签为0的信息)。

浙公网安备 33010602011771号