二元交叉熵损失函数(Binary Cross Entropy Loss,BCELoss)是交叉熵损失函数(CrossEntropyLoss)的特殊情况

一直以来看到二元交叉熵损失函数(Binary Cross Entropy Loss,BCELoss)

还以为是很复杂的东西,原来其实是交叉熵损失函数(CrossEntropyLoss)的特殊情况,也就是二元交叉熵损失函数其实就是交叉熵损失函数。

推导如下:

对于多分类问题,交叉熵损失函数的一般形式如下:

CrossEntropyLoss ( input , target ) = − ∑ i = 1 C target i ⋅ log ⁡ ( softmax ( input ) i ) \text{CrossEntropyLoss}(\text{\textbf{input}}, \text{target}) = -\sum_{i=1}^{C} \text{target}_i \cdot \log(\text{softmax}(\text{\textbf{input}})_i) CrossEntropyLoss(input,target)=−∑i=1Ctargeti⋅log(softmax(input)i)

其中:

  • input 是模型的输出,是一个包含了未归一化的分数(logits)的向量。
  • target 是真实的标签,是一个表示类别的 one-hot 编码向量。
  • C 是类别的数量。
  • softmax(⋅) 是 softmax 函数,将输入的分数转换成概率分布。softmax(input )~i~表示取softmax运算后结果向量的第i个分量(标量,值)

对于二元分类问题,我们可以将多分类问题中的公式特殊化。假设只有两个类别(C = 2),我们可以将多分类交叉熵损失函数中的求和项简化为只有两项,如下:

CrossEntropyLoss ( input , target ) = − ( target 1 ⋅ log ⁡ ( softmax ( input ) 1 ) + target 2 ⋅ log ⁡ ( softmax ( input ) 2 ) ) \text{CrossEntropyLoss}(\text{\textbf{input}}, \text{target}) = -(\text{target}_1 \cdot \log(\text{softmax}(\text{\textbf{input}})_1) + \text{target}_2 \cdot \log(\text{softmax}(\text{\textbf{input}})_2)) CrossEntropyLoss(input,target)=−(target1⋅log(softmax(input)1)+target2⋅log(softmax(input)2))

在二元分类中,因为只有两个类别target~1~和target~2~,且概率和为1,因此,我们可以将上述公式中的 softmax(input )~2~替换为 1 - softmax(input )~1~,softmax(input )~2~替换为1 - softmax(input )~1~。得到如下形式:

BCELoss ( input , target ) = − ( target 1 ⋅ log ⁡ ( softmax ( input ) 1 ) + ( 1 − target 1 ) ⋅ log ⁡ ( 1 − softmax ( input ) 1 ) ) \text{BCELoss}(\text{\textbf{input}}, \text{target}) = -(\text{target}_1 \cdot \log(\text{softmax}(\text{\textbf{input}})_1) + (1 - \text{target}_1) \cdot \log(1 - \text{softmax}(\text{\textbf{input}})_1)) BCELoss(input,target)=−(target1⋅log(softmax(input)1)+(1−target1)⋅log(1−softmax(input)1))

在二元分类中,比如在推荐系统里,算出来的结果往往是 user 对 item 的评分预测,是个值,不是上面 input

向量,所以直接对这个评分预测套个Sigmoid,将最终的评分预测的范围整到表示概率的 (0, 1) 的范围里去,我感觉这样操作起来更方便。所以,我们可以将上式中的 softmax(input ) ~1~换成Sigmoid(y^^^~uv~) ,得到如下二元交叉熵损失函数的形式:

BCELoss ( input , target ) = − ( target ⋅ log ⁡ ( sigmoid ( y ^ u v ) + ( 1 − target ) ⋅ log ⁡ ( 1 − sigmoid ( y ^ u v ) ) ) \text{BCELoss}(\text{\textbf{input}}, \text{target}) = -(\text{target} \cdot \log(\text{sigmoid}(\hat{y}{uv}) + (1 - \text{target}) \cdot \log(1 - \text{sigmoid}(\hat{y}{uv}))) BCELoss(input,target)=−(target⋅log(sigmoid(y^uv)+(1−target)⋅log(1−sigmoid(y^uv)))

这个形式的损失函数是从多分类问题中的交叉熵损失函数推导得到的,并在二元分类问题中特殊化。

相关推荐
Yuleave13 分钟前
高效流式大语言模型(StreamingLLM)——基于“注意力汇聚点”的突破性研究
人工智能·语言模型·自然语言处理
cqbzcsq15 分钟前
ESMC-600M蛋白质语言模型本地部署攻略
人工智能·语言模型·自然语言处理
Erik_LinX22 分钟前
day1-->day7| 机器学习(吴恩达)学习笔记
笔记·学习·机器学习
刀客1231 小时前
python3+TensorFlow 2.x(四)反向传播
人工智能·python·tensorflow
SpikeKing1 小时前
LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)
人工智能·llm·预训练·scalinglaws·100b·deepnorm·egs
时间很奇妙!2 小时前
decison tree 决策树
算法·决策树·机器学习
小枫@码2 小时前
免费GPU算力,不花钱部署DeepSeek-R1
人工智能·语言模型
liruiqiang052 小时前
机器学习 - 初学者需要弄懂的一些线性代数的概念
人工智能·线性代数·机器学习·线性回归
Icomi_2 小时前
【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法
c语言·c++·人工智能·深度学习·神经网络·机器学习·计算机视觉
微学AI2 小时前
GPU算力平台|在GPU算力平台部署可图大模型Kolors的应用实战教程
人工智能·大模型·llm·gpu算力