Cross-Entropy(交叉熵)

参考视频:https://www.youtube.com/watch?v=ErfnhcEV1O8

信息论

Entropy

对于一个事件,每传输 1bit 可将不确定度降低一半
对于一个概率为p的事件,需要传递 xbit(编码长度) 的数据,有 p = 1 2 x p=\frac{1}{2^{x}} p=2x1

故Entropy定义为:
H ( p ) = − Σ i p i log ⁡ 2 ( p i ) H(p)=-\Sigma_{i} p_{i} \log _{2}\left(p_{i}\right) H(p)=Σipilog2(pi)
表示传递一个信息样本所需要的最小编码长度

Cross-Entropy:

假设现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。
Cross-Entropy定义为:
H ( p , q ) = − Σ i p i log ⁡ 2 ( q i ) H(p,q)=-\Sigma_{i} p_{i} \log _{2}\left(q_{i}\right) H(p,q)=Σipilog2(qi)

其中 log ⁡ 2 ( 1 q i ) \log _{2}\left(\frac{1}{q_{i}}\right) log2(qi1)表示为实际编码长度
故交叉熵表示使用概率分布为q的编码方式传递信息的实际编码长度

深度学习

原理

做softmax后得到q,将label作为p,使用Cross-Entropy,并使该值最小
计算上使用自然对数,简化计算,即 H ( p , q ) = − Σ i p i log ⁡ ( q i ) H(p,q)=-\Sigma_{i} p_{i} \log\left(q_{i}\right) H(p,q)=Σipilog(qi)
在分类任务中,label为one-hot向量,假设 p x = 1 p_{x}=1 px=1,可化简为:
H ( p , q ) = − log ⁡ ( q x ) H(p,q)=- \log\left(q_{x}\right) H(p,q)=log(qx)

PyTorch

默认对一个batch中每个数据做Cross-Entropy后取平均值

import torch
import torch.nn as nn
input = torch.randn(3,3)
target = torch.tensor([0,2,1])

法一:NLLLoss

sm = nn.Softmax(dim=1)
loss = nn.NLLLoss()
loss(torch.log(sm(input)), target)

法一:CrossEntropyLoss = Softmax + NLLLoss

loss = nn.CrossEntropyLoss()
loss(input,target)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值