深度学习系列36:交叉熵笔记

本文深入探讨了信息论中的熵概念,以及在机器学习中如何用于最小化编码长度。交叉熵作为衡量非最优分布的编码长度,常用于模型训练的损失函数。KL散度则表示实际分布与最优分布之间的差距。在二分类问题中,交叉熵损失(BCE-Loss)被广泛使用。此外,InfoNCE损失函数在多类别分类时提供了一种高效的近似方法,将多分类问题转换为二分类问题,降低了计算复杂性。

1 熵

出现概率p越高的信息,编码长度L越短。这样的话,总的编码长度能够最小化。
L与p之间的关系可以用下图的二分搜索来展示。概率为p的实体,对应的编码长度为log⁡21/p\log_2{1/p}log21/p能够将期望编码长度最小化。
在这里插入图片描述
熵则是编码长度的期望:H=−plog⁡2pH = -p\log_2{p}H=plog2p

2 交叉熵和KL散度

交叉熵用来计算非最优分布的期望编码长度
在这里插入图片描述
与最优编码之间的差值称为KL散度:Dq(p)=Hq(p)−H(p)D_q(p)=H_q(p)-H(p)Dq(p)=Hq(p)H(p)

一般预测模型中会使用softmax函数将列表转化为概率分布,用来计算交叉熵。

3. 交叉熵损失

二分类问题:假设我们有一堆猫和不是猫的图片,我们用[p猫,p不是猫][p_{猫}, p_{不是猫}][p,p]的onehot表示作为输出。
针对一张猫的图片,真实的onehot应该是[1,0][1, 0][1,0],因此交叉熵为:−log(p猫)-log (p_{猫})log(p)
针对一张不是猫的图片,真实的onehot应该是[0,1][0, 1][0,1],因此交叉熵为:−log(1−p猫)-log (1-p_{猫})log(1p)
把所有图片求平均即可,可以表示为:−Σi(yilogpi+(1−yi)log(1−pi))/n-\Sigma_i (y_ilogp_i+(1-y_i)log(1-p_i))/nΣi(yilogpi+(1yi)log(1pi))/n,其中yiy_iyi是标签(真的猫为1,假的猫为0)。
在二分类问题下的交叉熵损失又称为BCE-Loss。

我们来看下GAN中的判别损失:
第一步是训练判别器D,真实图片的损失为−E(logD)-E(logD)E(logD),假图片的损失为−E(1−logD(G))-E(1-logD(G))E(1logD(G))
第二步是训练生成器G,目标是经过D后被判别为真的,因此损失为−E(log(D(G)))-E(log(D(G)))E(log(D(G)))

4. InfoNCE

如果类别特别多,要计算softmax的话会非常耗时,因此改成NCE损失。抽象来说,就是:
原先要计算N分类的概率列表然后结合标签计算交叉熵,现在改成计算标签和预测结果是否匹配的2分类问题(负样本需要随机采样)。
InfoNCE则是将采样出来的k个负样本还是看做k个类,计算交叉熵。InfoNCE loss的任务是一个k+1类的分类任务,目的就是想把样本图片分到标签这个类里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值