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的信息)。

posted @ 2024-06-07 09:22  昭建  阅读(358)  评论(0)    收藏  举报