CrossEntropy交叉熵损失函数及softmax函数的理解

article/2025/9/9 16:25:25

参考链接1
参考链接2
参考链接3
参考链接4

(一)什么是Sigmoid函数和softmax函数?

提到二分类问题容易想到逻辑回归算法,而逻辑回归算法最关键的步骤就是将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间,其中Sigmoid函数和softmax函数刚好具有这样的功能。

1.1 Sigmoid函数

Sigmoid =多标签分类问题=多个正确答案=非独占输出(例如胸部X光检查、住院)。构建分类器,解决有多个正确答案的问题时,用Sigmoid函数分别处理各个原始输出值。
在这里插入图片描述Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。

1.2 Softmax函数

Softmax =多类别分类问题=只有一个正确答案=互斥输出(例如手写数字,鸢尾花)。构建分类器,解决只有唯一正确答案的问题时,用Softmax函数处理各个原始输出值。Softmax函数的分母综合了原始输出值的所有因素,这意味着,Softmax函数得到的不同概率之间相互关联。
在这里插入图片描述Softmax直白来说就是将原来输出是3,1,-3通过Softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。

由于Softmax函数先拉大了输入向量元素之间的差异(通过指数函数),然后才归一化为一个概率分布,在应用到分类问题时,它使得各个类别的概率差异比较显著,最大值产生的概率更接近1,这样输出分布的形式更接近真实分布。
在这里插入图片描述

1.3 对于二分类任务

对于二分类问题来说,理论上,两者是没有任何区别的。由于我们现在用的Pytorch、TensorFlow等框架计算矩阵方式的问题,导致两者在反向传播的过程中还是有区别的。实验结果表明,两者还是存在差异的,对于不同的分类模型,可能Sigmoid函数效果好,也可能是Softmax函数效果。
在这里插入图片描述

1.4 总结

1、如果模型输出为非互斥类别,且可以同时选择多个类别,则采用Sigmoid函数计算该网络的原始输出值。
2、如果模型输出为互斥类别,且只能选择一个类别,则采用Softmax函数计算该网络的原始输出值。
3、Sigmoid函数可以用来解决多标签问题,Softmax函数用来解决单标签问题。
4、对于某个分类场景,当Softmax函数能用时,Sigmoid函数一定可以用。
5、对于二分类问题,二者不等同,要结合实际选择处理函数。

补充:
Softmax+交叉熵损失函数在Pytorch中的处理:直接接上torch.nn.CrossEntropyLoss()方法;
Sigmoid+损失函数在Pytorch中的处理:直接接上torch.nn.BCEWithLogitsLoss()方法。
Softmax+交叉熵损失函数在Tensorflow中的处理:tf.keras.losses.categorical_crossentropy()方法;
而Tensorflow中求hardmax也就是直接求最大值时的处理:tf.reduce_max([1, 2, 3, 4, 5])方法,在numpy中求最大值直接用:np.max()方法。

(二)CrossEntropy交叉熵损失函数

1、交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid(或softmax)函数一起出现。
我们用神经网络最后一层输出的情况,来看一眼整个模型预测、获得损失和学习的流程:
在这里插入图片描述

1、神经网络最后一层得到每个类别的得分scores(也叫logits);
2、该得分经过sigmoid(或softmax)函数获得概率输出;
3、模型预测的类别概率输出与真实类别的one hot形式进行交叉熵损失函数的计算。

2、Cross Entropy Loss Function(交叉熵损失函数)表达式
(1)二分类
在这里插入图片描述(2)多分类
在这里插入图片描述
3、图像分类任务实例
(1)我们希望根据图片动物的轮廓、颜色等特征,来预测动物的类别,有三种可预测类别:猫、狗、猪。假设我们当前有两个模型(参数不同),这两个模型都是通过sigmoid/softmax的方式得到对于每个预测结果的概率值:
在这里插入图片描述在这里插入图片描述(2)接下来通过交叉熵损失函数来判断模型在样本上的表现:
根据多分类问题的计算公式可算。
在这里插入图片描述可以看出模型2的预测效果更好。
上述过程可以使用python的sklearn库:

from sklearn.metrics import log_loss y_true = [[0, 0, 1], [0, 1, 0], [1, 0, 0]] 
y_pred_1 = [[0.3, 0.3, 0.4], [0.3, 0.4, 0.3], [0.1, 0.2, 0.7]] 
y_pred_2 = [[0.1, 0.2, 0.7], [0.1, 0.7, 0.2], [0.3, 0.4, 0.3]] 
print(log_loss(y_true, y_pred_1)) 
print(log_loss(y_true, y_pred_2)) 
____________ 
1.3783888522474517 
0.6391075640678003 

(三)加深理解–交叉熵损失函数

1、信息熵
在这里插入图片描述
2、相对熵(KL散度)
在这里插入图片描述3、交叉熵
在这里插入图片描述在这里插入图片描述

在机器学习中,信息熵在这里就是一个常量。由于KL散度表示真实概率分布与预测概率分布的差异,越小表示预测的结果越好,所以最小化KL散度的值;交叉熵等于KL散度加信息熵(常量),相比KL散度更加容易计算,所以一般在机器学习中直接用交叉熵做loss。
交叉熵表示为真实概率分布与预测概率分布之间的差异,并且交叉熵的值越小,说明模型结果越好。其通常与softmax搭配进行分类任务的损失计算。

在分类任务中,交叉熵损失函数定义成这样:
在这里插入图片描述4、交叉熵损失函数计算案例
假设有一个3分类问题,某个样例的正确答案是(1, 0, 0)
甲模型经过softmax回归之后的预测答案是(0.5, 0.2, 0.3)
乙模型经过softmax回归之后的预测答案是(0.7, 0.1, 0.2)
在这里插入图片描述


http://chatgpt.dhexx.cn/article/IT99Hu05.shtml

相关文章

【基础篇】交叉熵损失函数(Cross Entropy Loss)

文章目录 1. 理论知识2. 代码 1. 理论知识 我们需要关注那些按常理来说不太可能发生的事情。『信息量』就是用来度量事件的不确定性, 事件包含的信息量应与其发生的概率负相关 。假设 X X X是一个离散型随机变量,它的取值集合为 { x 1 , x 2 , . . . ,…

损失函数-交叉熵的推导和二分类交叉熵

交叉熵 期望: 期望就是所有随机变量的均值。 E(X)X1*P(X1)X2*P(X2)X3*P(X3) 熵: 熵表示所有信息量的期望。 信息量如何计算呢? 概率值取Log,然后加个负…

深度学习中的损失函数(交叉熵)

0、前景介绍 对于线性回归模型适用于输出为连续值的情景,但是在模型输出是一个像图像类别这样的离散值时。对于这样离散值的预测问题,通常使用一些例如sigmoid/softmax的分类模型。 1. 图像分类任务 假设下面两个模型都是通过softmax的方式得到对于每…

图示Softmax及交叉熵损失函数

Softmax函数 Softmax是将神经网络得到的多个值,进行归一化处理,使得到的值在之间,让结果变得可解释。即可以将结果看作是概率,某个类别概率越大,将样本归为该类别的可能性也就越高。Softmax就如下图(借鉴李…

最全的交叉熵损失函数(Pytorch)

损失函数 引言BCELossBCEWithLogitsLossNLLLossCrossEntropyLoss总结参考 引言 这里主要讲述pytorch中的几种交叉熵损失类,熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真是数据之间的相近程度。交叉熵越小,表示数据越接近真实样…

简单的交叉熵损失函数,你真的懂了吗?

个人网站:红色石头的机器学习之路 CSDN博客:红色石头的专栏 知乎:红色石头 微博:RedstoneWill的微博 GitHub:RedstoneWill的GitHub 微信公众号:AI有道(ID:redstonewill&#xf…

交叉熵损失概念

交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。 1. 信息量 首先是信息量。假设我们听到了两件事,分别如下: 事件A:巴西队进入了2018世界杯决赛圈。 事件B:中国队进入了2…

softmax交叉熵损失函数深入理解(二)

0、前言 前期博文提到经过两步smooth化之后,我们将一个难以收敛的函数逐步改造成了softmax交叉熵损失函数,解决了原始的目标函数难以优化的问题。Softmax 交叉熵损失函数是目前最常用的分类损失函数,本博文继续学习Softmax 交叉熵损失函数的改…

史上最全交叉熵损失函数详解

在我们自学神经网络神经网络的损失函数的时候会发现有一个思路就是交叉熵损失函数,交叉熵的概念源于信息论,一般用来求目标与预测值之间的差距。比如说我们在人脑中有一个模型,在神经网络中还有一个模型,我们需要找到神经网络模型…

交叉熵损失函数原理详解

交叉熵损失函数原理详解 之前在代码中经常看见交叉熵损失函数(CrossEntropy Loss),只知道它是分类问题中经常使用的一种损失函数,对于其内部的原理总是模模糊糊,而且一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softm…

损失函数——交叉熵损失函数

一篇弄懂交叉熵损失函数 一、定义二、交叉熵损失函数:知识准备:1、信息熵:将熵引入到信息论中,命名为“信息熵”2、 KL散度(相对熵): 交叉熵:结论: Softmax公式Sigmoid常…

交叉熵损失函数详解

我们知道,在二分类问题模型:例如逻辑回归「Logistic Regression」、神经网络「Neural Network」等,真实样本的标签为 [0,1],分别表示负类和正类。模型的最后通常会经过一个 Sigmoid 函数,输出一个概率值&am…

交叉熵损失函数(CrossEntropy Loss)(原理详解)

监督学习主要分为两类: 分类:目标变量是离散的,如判断一个西瓜是好瓜还是坏瓜,那么目标变量只能是1(好瓜),0(坏瓜)回归:目标变量是连续的,如预测西瓜的含糖率…

nn.CrossEntropyLoss()交叉熵损失函数

1、nn.CrossEntropyLoss() 在pytorch中nn.CrossEntropyLoss()为交叉熵损失函数,用于解决多分类问题,也可用于解决二分类问题。在使用nn.CrossEntropyLoss()其内部会自动加上Sofrmax层 nn.CrossEntropyLoss()的计算公式如下: 其中&#xff0c…

损失函数——交叉熵损失函数(CrossEntropy Loss)

损失函数——交叉熵损失函数(CrossEntropy Loss) 交叉熵函数为在处理分类问题中常用的一种损失函数,其具体公式为: 1.交叉熵损失函数由来 交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。首先…

损失函数——交叉熵损失(Cross-entropy loss)

交叉熵损失(Cross-entropy loss)是深度学习中常用的一种损失函数,通常用于分类问题。它衡量了模型预测结果与实际结果之间的差距,是优化模型参数的关键指标之一。以下是交叉熵损失的详细介绍。 假设我们有一个分类问题&#xff0…

【Pytorch】交叉熵损失函数 CrossEntropyLoss() 详解

文章目录 一、损失函数 nn.CrossEntropyLoss()二、什么是交叉熵三、Pytorch 中的 CrossEntropyLoss() 函数参考链接 一、损失函数 nn.CrossEntropyLoss() 交叉熵损失函数 nn.CrossEntropyLoss() ,结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。 它在做分类&a…

一文读懂交叉熵损失函数

进行二分类或多分类问题时,在众多损失函数中交叉熵损失函数较为常用。 下面的内容将以这三个问题来展开 什么是交叉熵损失以图片分类问题为例,理解交叉熵损失函数从0开始实现交叉熵损失函数 1,什么是交叉熵损失 交叉熵是信息论中的一个重…

交叉熵损失函数

目录 一、交叉熵损失函数含义 二、交叉熵损失函数定义为:​ 三、交叉熵损失函数计算案例 一、交叉熵损失函数含义 交叉熵是一个信息论中的概念,它原来是用来估算平均编码长度的。给定两个 概率分布p和q,通过q来表示p的交叉熵为 交叉熵刻画…

交叉熵损失函数(Cross Entropy Loss)

基础不牢,地动山摇,读研到现在有一年多了,发现自己对很多经常打交道的知识并不了解,仅仅是会改一改别人的代码,这使我感到非常焦虑,自此开始我的打基础之路。如果博客中有错误的地方,欢迎大家评…