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

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

相关推荐
强哥之神9 分钟前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
yusaisai大鱼13 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
18号房客13 分钟前
一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。
人工智能·深度学习·机器学习·生成对抗网络·语言模型·自然语言处理·tensorflow
神秘的土鸡21 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
数据分析能量站22 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习
Jaly_W30 分钟前
用于航空发动机故障诊断的深度分层排序网络
人工智能·深度学习·故障诊断·航空发动机
小嗷犬32 分钟前
【论文笔记】Cross-lingual few-shot sign language recognition
论文阅读·人工智能·多模态·少样本·手语翻译
夜幕龙39 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
吃个糖糖1 小时前
36 Opencv SURF 关键点检测
人工智能·opencv·计算机视觉
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化