各种交叉熵损失函数比较及适用范围

本文详细介绍了信息量、熵、相对熵(KL散度)和交叉熵的概念,以及它们在机器学习中的作用。针对二分类和多分类任务,分别探讨了softmax_cross_entropy、binary_cross_entropy和sigmoid_cross_entropy的计算过程,并通过TensorFlow和PyTorch的实例展示了不同损失函数的使用。同时,还讨论了回归任务中的L1Loss和SmoothL1Loss,以及分类任务中的CrossEntropyLoss、BCELoss、NLLLoss和MultiLabelSoftMarginLoss。这些损失函数在实际问题中各有优缺点,适用于不同的场景和任务需求。

各种交叉熵损失函数比较及适用范围

一、基本概念

1、信息量

当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。

I(x0)=−log⁡(p(x0))I(x_0)=-\log(p(x_0))I(x0)=log(p(x0))

2、熵

对于某个事件,有nnn种可能性,每一种可能性都有一个概率p(xi)p(x_i)p(xi).熵用来表示所有信息量的期望

H(X)=−∑i=1np(xi)log⁡(p(xi))H(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)H(X)=i=1np(xi)log(p(xi))

3、相对熵(KL散度)

对于有两个单独的概率分布P(x)和Q(x)的同一个随机变量X。可以用KL散度衡量两个分布的差异。

在ML中P一般用来表示样本的真实分布,e.g.[1,0,0];Q一般用来表示模型所预测的分布,e.g.[0.6,0.2,0.2]。

DKL(p∣∣q)=Σi=1np(xi)log⁡(p(xi)q(xi))D_{KL}(p||q)=\Sigma_{i=1}^n p(x_i)\log(\frac{p(x_i)}{q(x_i)})DKL(pq)=Σi=1np(xi)log(q(xi)p(xi))

KL散度越小代表两者分布越接近。

4、交叉熵

对KL散度进行变形可以看到

DKL(p∣∣q)=−H(p(x))+Σi=1np(xi)log⁡(q(xi))D_{KL}(p||q)=-H(p(x))+\Sigma_{i=1}^n p(x_i)\log(q(x_i))DKL(pq)=H(p(x))+Σi=1np(xi)log(q(xi))

其中p代表groundtruth的熵值,q代表预测值。

在优化过程中,-H(p(x))保持不变,只关注后面部分的部分就可以,一般在ML的优化过程中直接用交叉熵做loss评估模型。

H(p,q)=−Σi=1np(xi)log⁡(q(xi))H(p,q)=-\Sigma^n_{i=1}p(x_i)\log(q(x_i))H(p,q)=Σi=1np(xi)log(q(xi))

二、各种熵

(一)以tensorflow为例

1、softmax_cross_entropy

二分类或者类别相互排斥多分类问题,计算 logits 和 labels 之间的 softmax 交叉熵。

计算过程

  1. 对输入进行softmax

    Sj=eaj∑k=1TeakS_{j}=\frac{e^{a_{j}}}{\sum_{k=1}^{T} e^{a_{k}}}Sj=k=1Teakeaj

    例如输入为[1,2,3],输出[0.09,0.24,0.67]。

  2. 计算交叉熵

    LLL是损失,SjS_jSj是softmax的输出向量SSS的第jjj个值,表示这个样本属于第j个类别的概率。yjy_jyj前面有个求和符号,jjj的范围也是1到类别数TTT,因此label——y是一个1∗T1*T1T的向量,里面的T个值,而且只有1个值是1,其他T-1个值都是0。真实标签对应的位置的那个值是1,其他都是0。

    所以该公式可以化简为L=−log⁡SjL=-\log S_jL=logSj

    例如五分类问题,Y=[0,0,0,1,0]。如果model的softmax输出为p=[0.1,0.15,0.05,0.6,0.1],对应的损失为L=−log(0.6)=0.511L=-log(0.6)=0.511L=log(0.6)=0.511,如果输出为p=[0.15,0.2,0.4,0.1,0.15],对应的损失L=−log(0.1)=2.3L=-log(0.1)=2.3L=log(0.1)=2.3

2、binary_cross_entropy

binary_cross_entropy是二分类的交叉熵,实际是多分类softmax_cross_entropy的一种特殊情况,当多分类中,类别只有两类时,即0或者1,即为二分类,二分类也是一个逻辑回归问题,也可以套用逻辑回归的损失函数。

例如一个batch中含有两个样本,label作为vector制成2D之后,比如y=[[1,0],[0,1]]。模型预测也为二维,例如模型预测输出p=[[0.8,0.2],[0.4,0.6]],则对应的损失为L=(−log(0.8)−log(0.6))/2=0.3669L=(-log(0.8)-log(0.6))/2=0.3669L=(log(0.8)log(0.6))/2=0.3669

3、sigmoid_cross_entropy

测量每个类别独立且不相互排斥的离散分类任务中的概率。适用于多标签分类

设x=logits, z=labels,那么Logistics损失值为:

L=z∗−log(sigmoid(x))+(1−z)∗(−log(1−sigmoid(x)))=z∗−log(1/(1+exp(−x)))+(1−z)∗(−log(exp(−x)/(1+exp(−x))=z∗log(1+exp(−x))+(1−z)∗(−log(exp(−x))+log(1+exp(−x)))=z∗log(1+exp(−x))+(1−z)∗(x+log(1+exp(−x))=(1−z)∗x+log(1+exp(−x))=x−x∗z+log(1+exp(−x))L=z*-log(sigmoid(x))+(1-z)*(-log(1-sigmoid(x)))\\=z*-log(1/(1+exp(-x)))+(1-z)*(-log(exp(-x) / (1 + exp(-x))\\= z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))\\=z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))\\=(1 - z) * x + log(1 + exp(-x))\\=x-x*z+log(1+exp(-x))L=zlog(sigmoid(x))+(1z)(log(1sigmoid(x)))=zlog(1/(1+exp(x)))+

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值