【AI数学】交叉熵损失函数CrossEntropy
admin
2024-03-20 03:33:23
0

交叉熵损失(CrossEntropyLoss)函数是分类任务里最常见的损失函数。

当然,CrossEntropy(以下简称“CE”)的作用不仅仅是在简单的分类任务里,比如最近大火的图文多模态模型CLIP就用到CE来进行对比学习,稍微改造一下变成Symmetrical Cross Entropy

交叉熵不具有对称性,所以交换变量位置,会导致数值不同。所以,在使用Pytorch内置交叉熵损失函数时,记得注意顺序:(label记得放在后面)

import torch.nn.functional as F
loss = F.cross_entropy(logits, label)

简单来说,交叉熵可以用来描述两个分布的差别。先看公式,
CrossEntropy(p,q)=−Σk=1Klog(p(k))q(k)CrossEntropy(p, q) = -\Sigma_{k=1}^K log(p(k))q(k)CrossEntropy(p,q)=−Σk=1K​log(p(k))q(k)
这里的p是我们模型输出,而q是我们的label。
通常,在分类任务里,我们的label通常是one-hot类型,假设我们应对三分类任务,有label = [1, 0, 0]代表第0类是正例。那么,CE就变得好算了:

logits = [0.3, 0.5, 0.2]
label = [1, 0, 0]
CE = -(1*log(0.3)) - (0*log(0.5)) - (0*log(0.2)) = -log(0.3)

上面是一段伪代码,代表CE的计算。在Pytorch里,CE里面有一个暗坑,没注意就会犯错,那就是CE会先给你做一个softmax(不了解softmax的,可戳《通俗易懂的Softmax》)再进行上述计算。我们看实验代码便知:

import torch
from math import log
import torch.nn.functional as Flogits = torch.Tensor([[0.8, 0.3, 1.2]]) # pre-softmax
label = torch.Tensor([[1, 0, 0]])
loss = F.cross_entropy(logits, label)
print(loss)softmax_logits = F.softmax(logits, dim=-1) # post-softmax
loss_check = - (log(softmax_logits[0][0]))
print(loss_check)

上面代码的lossloss_check是相等的,由此可知,Pytorch内置的CE函数会将logits加一层softmax,所以,咱们不用画蛇添足在输入CE前再加一个softmax了。


进阶

面对一个batch时,label有两种表达方式。

  1. logits具有相同的shape:
logits = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
label = torch.Tensor([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
loss = F.softmax(logits, label, reduction='mean')

比较好理解,分别算logits[i]和label[i]的CE,最后求平均,或者设置reduction='sum'求和;

  1. 假设batch size为n,label的shape可以为(1, n)
logits = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
label = torch.arange(3)
loss = F.softmax(logits, label, reduction='mean')

这段代码和上面的代码是等效的当label的维度低于logits纬度时,CE函数会把label理解成one-hot的简写,比如label = [1, 2, 0]等效于[[0, 1, 0], [0, 0, 1], [1, 0, 0]]。
第二种用法属实诡异,一不小心就理解不对代码的意思。

参考:https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html#torch.nn.CrossEntropyLoss

相关内容

热门资讯

港股全线回调,关注恒生科技ET... 截至收盘,中证港股通消费主题指数下跌1.9%,中证港股通互联网指数下跌2.6%,恒生科技指数下跌2....
瑞幸2025年四季度营收增长利... 界面新闻记者 | 宋佳楠 2月26日,瑞幸咖啡发布2025年第四季度及全年未经审计财务业绩。财报显...
上市券商新年定增“第一单”!西... 来源:21世纪经济报道 21世纪经济报道记者 易妍君 在沪深北交易所优化再融资一揽子措施背景下,20...
河南牧原离职员工家属发文,吐槽... 近日,一篇名为《一位牧原离职员工家属的自述》的文章引起网友关注。 作者称,丈夫原在牧原从事养猪工作,...
【西街观察】理性看待高位金银:... 春节回来,黄金白银又涨了。 尽管价格尚未突破前期高点,但在大类资产中,累计涨幅依旧一骑绝尘,让金银的...
安徽春节观察:从“打卡”到“入... 这个春节,是丙午马年的开场,也是“史上最长假期”的落幕。 当9天的时光画卷缓缓收起,人们回味的,不只...
杭州银行原监事长王立雄再获任副... 2月26日,杭州银行公告称,王立雄杭州银行副行长任职资格已获浙江金融监管局核准。据公告,王立雄此前曾...
郑华国:白癜风患者的情绪调节要... 情绪波动是白癜风病情反复的重要诱因之一,长期焦虑、抑郁、压力过大,会导致内分泌失调、免疫力下降,损伤...
原创 3... 国内能精准预测房地产市场趋势的人并不多,王健林就是其中之一。早在2017年,王健林就宣布万达集团将走...
裁判太偏了?!赵睿10分+犯满... 北京时间2月26日消息,作为中国男篮队长,今晚在冲绳,赵睿尽了全力。身陷犯规困扰的他利用自己的冲击力...
山东城商行“一哥”之争升温:青... 作为山东地区的两家头部城商行,青岛银行和齐鲁银行近年来的发展呈现“你追我赶”的胶着态势。 据最新披露...
特斯拉,又放大招!汽车市场降价... 汽车市场的降价步伐仍未停歇。 2月26日,特斯拉中国官宣新一轮购车金融政策:3月31日前下单,全系车...
超6亿和解金,欣旺达亏了还是赚... 二线品牌备胎难当。 作者|景行 编辑|古廿 “当年在汽车领域,吉利是最早和欣旺达合作的,就是看中欣旺...
机器人产业指数低开低走,机器人... 截至收盘,中证消费电子主题指数上涨1.3%,中证物联网主题指数上涨0.6%,国证机器人产业指数下跌0...
德邦股份,向上交所提出终止上市... 2月26日晚间,德邦股份(603056,股价18.85元,市值190.68亿元)发布公告称,公司拟以...
帝亚吉欧:从未讨论过出售水井坊... 蓝鲸新闻2月26日讯(记者 朱欣悦)水井坊(600779.SH)控股股东帝亚吉欧拟出售其股权的传闻,...
保持银行体系流动性充裕 央行加... 每经记者|张寿林 每经编辑|张益铭 为保持银行体系流动性充裕,2月25日,央行以固定数量、利率招标...
又有外资理财公司总经理,将离任... 【导读】贝莱德建信理财总经理张鹏军将离任 中国基金报记者 吴娟娟 中国基金报记者获悉,贝莱德建信理财...
CBAM豁免政策深度剖析:哪些... 欧盟碳边境调节机制(CBAM)的豁免政策,是缓解企业合规压力的重要保障,尤其惠及中小出口企业。厘清豁...
私有数据,是AI应用唯一的“护... 文|数据猿 “旧的护城河正在瓦解,AI时代的生存法则,才刚刚开始。 这个春节,你用AI点奶茶、买门...