BCE Loss vs CE Loss

CELoss是用于多分类问题的交叉熵损失函数,常与softmax激活函数结合,而BCELoss则适用于二分类或多标签分类,通常与sigmoid激活函数一起使用。两者都衡量预测概率与真实标签的差异,损失值越小表示分类效果越好。在二分类问题中,两者基本等效,但在优化过程中可能有微妙差别。BCELoss直接优化分类准确率,不受异常值影响,且能处理多标签问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CE loss vs BCE loss

CE Loss和BCE Loss的区别主要有以下几点:

  • CE Loss是交叉熵损失函数,BCE Loss是二元交叉熵损失函数。
  • CE Loss一般用于多分类问题,BCE Loss一般用于二分类问题或者多标签分类问题。
  • CE Loss在输出层使用softmax激活函数,BCE Loss在输出层使用sigmoid激活函数。
  • CE Loss只考虑了正样本的损失,BCE Loss同时考虑了正样本和负样本的损失。
  • CE Loss和BCE Loss在二分类问题中本质上没有太大区别,但可能优化上有细微不同。
1.1 BCE (Binary Cross Entropy) Loss 的分析与推导

BCE Loss是二元交叉熵损失函数,它用于衡量**一个样本的真实标签(0或1)预测概率(0到1之间)**之间的差异。

  1. 前置条件

    (1)Target是one-hot形式,如[0,1,0,0]

    (2)output的值经过sigmoid操作变为0~1之间,如[0.33,0.66,0.32,0.15]

  2. 公式
    L = − 1 N ∑ i = 1 N [ y i log ⁡ p ( x i ) + ( 1 − y i ) log ⁡ ( 1 − p ( x i ) ) ] L=-\frac{1}{N} \sum_{i=1}^{N}\left[y_{i} \log p\left(x_{i}\right)+\left(1-y_{i}\right) \log \left(1-p\left(x_{i}\right)\right)\right] L=N1i=1N[yilogp(xi)+(1yi)log(1p(xi))]

  • 对于每个样本,如果真实标签是1,就用预测概率的对数乘以-1;如果真实标签是0,就用1减去预测概率的对数乘以-1。然后对所有样本求和或求平均,得到总的损失。
  • BCE Loss的值越小,表示预测概率越接近真实标签,分类效果越好;反之,BCE Loss的值越大,表示预测概率越远离真实标签,分类效果越差。
  1. 反向传播推导过程

BCE Loss

上图可见,损失对网络输出的偏导数正比于S(x)-y ,当sigmoid之后的结果和真值y差的比较多的时候,梯度大,修正的更快。BCE Loss的优点是,它可以直接优化分类准确率,而不像平方损失那样受到异常值的影响。它也可以用于多标签分类问题,即一个样本可以有多个标签

1.2 CE (Cross Entropy) Loss 的分析与推导

CE Loss是交叉熵损失函数的简称,它是一种常用的分类问题的损失函数,它衡量的是真实类别和预测概率之间的差异。

  1. 前置条件

(1)Target是one-hot形式,如[0,1,0,0]

(2)output的值经过softmax操作变为0~1之间,如[0.33,0.66,0.32,0.15]

  1. 公式

CE Loss的公式如下:

L = − 1 N ∑ i = 1 N ∑ k = 1 K y i k log ⁡ p ( x i k ) L=-\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i k} \log p\left(x_{i k}\right) L=N1i=1Nk=1Kyiklogp(xik)

其中:

  • N是样本数量, K K K是类别数量
  • y_{ik}是第i个样本的第k个类别的真实值(0或1),也就是one-hot编码
  • p(x_{ik})是第i个样本的第k个类别的预测概率(softmax输出)
  • 对于每个样本,对于每个类别,将真实类别的值(0或1)乘以预测概率的对数,然后对所有类别求和,得到该样本的损失。然后对所有样本求和或求平均,得到总的损失。

CE Loss的值越小,表示预测概率越接近真实类别,分类效果越好;反之,CE Loss的值越大,表示预测概率越远离真实类别,分类效果越差。

  1. 反向传播推导过程

    (1)softmax推导

    Softmax的一阶导数是指对Softmax函数求偏导数,得到一个Jacobian矩阵,表示每个输出对每个输入的偏导数。

    Softmax函数的定义如下:

    Softmax ( z i ) = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) \text{Softmax}(z_i) = \frac{\exp(z_i)}{\sum_j \exp(z_j)} Softmax(zi)=jexp(zj)exp(zi)

    其中:

    • z z z是一个向量, z i z_i zi z j z_j zj是其中的一个元素。
    • i i i j j j是从1到 n n n的索引, n n n是向量的维度,也就是类别的数量。

    Softmax函数的一阶导数可以用链式法则求得:

    ∂ Softmax ( z i ) ∂ z k = ∂ exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) ∂ z k \frac{\partial \text{Softmax}(z_i)}{\partial z_k} = \frac{\partial \frac{\exp(z_i)}{\sum_j \exp(z_j)}}{\partial z_k} zkSoftmax(zi)=zkjexp(zj)exp(zi)

    根据 i i i k k k是否相等,可以分为两种情况:

    • i = k i=k i=k时,有:

    ∂ Softmax ( z i ) ∂ z k = ∂ exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) ∂ z k = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) − exp ⁡ ( z i ) exp ⁡ ( z k ) ( ∑ j exp ⁡ ( z j ) ) 2 = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) ( 1 − exp ⁡ ( z k ) ∑ j exp ⁡ ( z j ) ) = Softmax ( z i ) ( 1 − Softmax ( z k ) ) \begin{align*} \frac{\partial \text{Softmax}(z_i)}{\partial z_k} &= \frac{\partial \frac{\exp(z_i)}{\sum_j \exp(z_j)}}{\partial z_k} \\ &= \frac{\exp(z_i) \sum_j \exp(z_j) - \exp(z_i) \exp(z_k)}{(\sum_j \exp(z_j))^2} \\ &= \frac{\exp(z_i)}{\sum_j \exp(z_j)} (1 - \frac{\exp(z_k)}{\sum_j \exp(z_j)}) \\ &= \text{Softmax}(z_i) (1 - \text{Softmax}(z_k)) \end{align*} zkSoftmax(zi)=zkjexp(zj)exp(zi)=(jexp(zj))2exp(zi)jexp(zj)exp(zi)exp(zk)=jexp(zj)exp(zi)(1jexp(zj)exp(zk))=Softmax(zi)(1Softmax(zk))

    • i ≠ k i \neq k i=k时,有:

    ∂ Softmax ( z i ) ∂ z k = ∂ exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) ∂ z k = − exp ⁡ ( z i ) exp ⁡ ( z k ) ( ∑ j exp ⁡ ( z j ) ) 2 = − exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) exp ⁡ ( z k ) ∑ j exp ⁡ ( z j ) = − Softmax ( z i ) Softmax ( z k ) \begin{align*} \frac{\partial \text{Softmax}(z_i)}{\partial z_k} &= \frac{\partial \frac{\exp(z_i)}{\sum_j \exp(z_j)}}{\partial z_k} \\ &= -\frac{\exp(z_i) \exp(z_k)}{(\sum_j \exp(z_j))^2} \\ &= -\frac{\exp(z_i)}{\sum_j \exp(z_j)} \frac{\exp(z_k)}{\sum_j \exp(z_j)} \\ &= -\text{Softmax}(z_i) \text{Softmax}(z_k) \end{align*} zkSoftmax(zi)=zkjexp(zj)exp(zi)=(jexp(zj))2exp(zi)exp(zk)=jexp(zj)exp(zi)jexp(zj)exp(zk)=Softmax(zi)Softmax(zk)

    综合两种情况,可以得到一个通用的公式:

    ∂ Softmax ( z i ) ∂ z k = { Softmax ( z i ) ( 1 − Softmax ( z k ) ) , i = k − Softmax ( z i ) Softmax ( z k ) , i ≠ k \frac{\partial \text{Softmax}(z_i)}{\partial z_k} = \begin{cases} \text{Softmax}(z_i) (1 - \text{Softmax}(z_k)), & i = k \\ -\text{Softmax}(z_i) \text{Softmax}(z_k), & i \neq k \end{cases} zkSoftmax(zi)={Softmax(zi)(1Softmax(zk)),Softmax(zi)Softmax(zk),i=ki=k

    综上,CE Loss 反向传播为:

CE Loss

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值