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

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

相关推荐
guoji77883 分钟前
安全与对齐的深层博弈:Gemini 3.1 Pro 安全护栏与对抗测试深度拆解
人工智能·安全
实在智能RPA11 分钟前
实在 Agent 和通用大模型有什么不一样?深度拆解 AI Agent 的感知、决策与执行逻辑
人工智能·ai
独隅15 分钟前
PyTorch 模型部署的 Docker 配置与性能调优深入指南
人工智能·pytorch·docker
lihuayong22 分钟前
OpenClaw 系统提示词
人工智能·prompt·提示词·openclaw
黑客说36 分钟前
AI驱动剧情,解锁无限可能——AI游戏发展解析
人工智能·游戏
踩着两条虫42 分钟前
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
android·前端·vue.js·人工智能·低代码·系统架构·rxjava
小仙女的小稀罕1 小时前
听不清重要会议录音急疯?这款常见AI工具听脑AI精准转译
开发语言·人工智能·python
reesn1 小时前
qwen3.5 0.8B纠正任务实践
人工智能·语言模型
实在智能RPA1 小时前
实在Agent 制造业落地案例:探寻工业大模型从实验室走向车间的实战路径
人工智能·ai