信息论-交叉熵
信息论
参考教程:22.11. Information Theory — Dive into Deep Learning 1.0.0-beta0 documentation (d2l.ai)
信息代表事件的意外程度,或者说事件的抽象可能性
- self-information
一个事件包含多少信息量,可以看有几个bit数。self-information就代表一个事件的bit数:
例如序列"0010"的self-information为:
self-attention只能衡量一个离散事件如"0010"的信息量,可以看到,事件的概率越小,信息量越大。要想更广泛的描述信息量,我们引入熵的概念:
熵
熵的定义
给定一个随机变量, 遵循概率分布,概率分布函数为,则我们通过熵来衡量的信息量:
如果是离散的,则熵为:
如果是连续的,则熵为:
代码为:
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大的时候q大,那么CE会越小。相反,分布越不同,即p大的时候q小,那么更大,那么交叉熵越大。
对于分类问题,随机变量表示n个样本,每个。因此给定标签和预测概率,则交叉熵为:
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~