二元交叉熵损失函数(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))

在二元分类中,因为只有两个类别target1和target2,且概率和为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)))

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

相关推荐
shayudiandian23 分钟前
用PyTorch训练一个猫狗分类器
人工智能·pytorch·深度学习
这儿有一堆花28 分钟前
把 AI 装进终端:Gemini CLI 上手体验与核心功能解析
人工智能·ai·ai编程
子午40 分钟前
【蘑菇识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·python·深度学习
模型启动机1 小时前
Langchain正式宣布,Deep Agents全面支持Skills,通用AI代理的新范式?
人工智能·ai·langchain·大模型·agentic ai
Python私教1 小时前
别让 API Key 裸奔:基于 TRAE SOLO 的大模型安全配置最佳实践
人工智能
Python私教1 小时前
Vibe Coding 体验报告:我让 TRAE SOLO 替我重构了 2000 行屎山代码,结果...
人工智能
prog_61031 小时前
【笔记】和各大AI语言模型写项目——手搓SDN后得到的经验
人工智能·笔记·语言模型
zhangfeng11331 小时前
深入剖析Kimi K2 Thinking与其他大规模语言模型(Large Language Models, LLMs)之间的差异
人工智能·语言模型·自然语言处理
paopao_wu1 小时前
人脸检测与识别-InsightFace:特征向量提取与识别
人工智能·目标检测
Aevget2 小时前
MyEclipse全新发布v2025.2——AI + Java 24 +更快的调试
java·ide·人工智能·eclipse·myeclipse