信息论-交叉熵

信息论

参考教程:22.11. Information Theory — Dive into Deep Learning 1.0.0-beta0 documentation (d2l.ai)

信息代表事件的意外程度,或者说事件的抽象可能性

  • self-information

一个事件包含多少信息量,可以看有几个bit数。self-information就代表一个事件的bit数:

I(X)=log2(p)

例如序列"0010"的self-information为:

I("0010")=log(p("0010"))=log(124)=4 bits.

self-attention只能衡量一个离散事件如"0010"的信息量,可以看到,事件的概率越小,信息量越大。要想更广泛的描述信息量,我们引入熵的概念:

熵的定义

给定一个随机变量X, 遵循概率分布P,概率分布函数为p(x),则我们通过熵来衡量X的信息量:

H(X)=ExP[logp(x)].

如果X是离散的,则熵为:

H(X)=ipilogpi, where pi=P(Xi).

如果X是连续的,则熵为:

H(X)=xp(x)logp(x)dx.

代码为:

def entropy(p):
    entropy = - p * torch.log2(p)
    # Operator `nansum` will sum up the non-nan number
    out = sum(entropy) #求和
    return out

熵的公式(???)可以理解为:self-information的平均和。因为self-information就代表了一个事件的信息量,也就是惊异程度,那么取该事件每个独立部分的信息量的平均值,就可以认为是整个事件的信息量。

交叉熵

交叉熵衡量两个分布的相似程度。越相似,那么信息量越少,交叉熵越小。因此,可以应用在下面这个例子。

给定一个真实的分布P,其分布函数为p(x)。我们要为其估计一个分布Q,其分布函数为q(x)。那么分布P和分布Q的交叉熵为:

CE(P,Q)=ExP[log(q(x))].

写成离散形式即为:

CE(P,Q)=ip(xi)[log(q(xi))].

可以看到,分布越相同,即p大的时候q大,那么CE会越小。相反,分布越不同,即p大的时候q小,那么log q更大,那么交叉熵越大。

对于分类问题,随机变量X=(x1,...,xn)表示n个样本,每个p(xi)=1n。因此给定标签和预测概率,则交叉熵为:

def cross_entropy(y_hat, y):
    ce = -torch.log(y_hat[range(len(y_hat)), y])
    return ce.mean()

labels = torch.tensor([0, 2])
preds = torch.tensor([[0.3, 0.6, 0.1], [0.2, 0.3, 0.5]])

cross_entropy(preds, labels)
posted @   KouweiLee  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示