信息论
参考教程:22.11. Information Theory — Dive into Deep Learning 1.0.0-beta0 documentation (d2l.ai)
信息代表事件的意外程度,或者说事件的抽象可能性
- self-information
一个事件包含多少信息量,可以看有几个bit数。self-information就代表一个事件的bit数:
\[I(X) = -log_2(p) \]例如序列"0010"的self-information为:
\[I(\text{"0010"}) = - \log (p(\text{"0010"})) = - \log \left( \frac{1}{2^4} \right) = 4 \text{ bits}. \]self-attention只能衡量一个离散事件如"0010"的信息量,可以看到,事件的概率越小,信息量越大。要想更广泛的描述信息量,我们引入熵的概念:
熵
熵的定义
给定一个随机变量\(X\), 遵循概率分布\(P\),概率分布函数为\(p(x)\),则我们通过熵来衡量\(X\)的信息量:
\[H(X) = - E_{x \sim P} [\log p(x)]. \label{2} \]如果\(X\)是离散的,则熵为:
\[H(X) = - \sum_i p_i \log p_i \text{, where } p_i = P(X_i). \]如果\(X\)是连续的,则熵为:
\[H(X) = - \int_x p(x) \log p(x) \; dx. \]代码为:
def entropy(p):
entropy = - p * torch.log2(p)
# Operator `nansum` will sum up the non-nan number
out = sum(entropy) #求和
return out
熵的公式\(\eqref{2}\)可以理解为:self-information的平均和。因为self-information就代表了一个事件的信息量,也就是惊异程度,那么取该事件每个独立部分的信息量的平均值,就可以认为是整个事件的信息量。
交叉熵
交叉熵衡量两个分布的相似程度。越相似,那么信息量越少,交叉熵越小。因此,可以应用在下面这个例子。
给定一个真实的分布\(P\),其分布函数为\(p(x)\)。我们要为其估计一个分布\(Q\),其分布函数为\(q(x)\)。那么分布\(P\)和分布\(Q\)的交叉熵为:
\[\mathrm{CE}(P, Q) = - E_{x \sim P} [\log(q(x))]. \]写成离散形式即为:
\[\mathrm{CE}(P, Q) = - \sum_{i}p(x_i) [\log(q(x_i))]. \]可以看到,分布越相同,即p大的时候q大,那么CE会越小。相反,分布越不同,即p大的时候q小,那么\(-log\ q\)更大,那么交叉熵越大。
对于分类问题,随机变量\(X=(x_1,...,x_n)\)表示n个样本,每个\(p(x_i)=\frac{1}{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)
标签:information,log,交叉,信息量,self,entropy,信息论
From: https://www.cnblogs.com/fyqs/p/17328589.html