首页 > 其他分享 >信息论-交叉熵

信息论-交叉熵

时间:2023-04-18 10:12:21浏览次数:56  
标签:information log 交叉 信息量 self entropy 信息论

信息论

参考教程: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

相关文章

  • 实验一 密码引擎-4-国䀄算法交叉测试
    目录实验一密码引擎-4-国䀄算法交叉测试一、任务详情二、实验过程1.创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名,并在Ubuntu中使用OpenSSL用SM4算法加密2.用龙脉eKey解密3.在Ubuntu中基于OpenSSL产生一对公私钥对4.在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Ha......
  • 实验一 密码引擎-4-国䀄算法交叉测试
     实验一密码引擎-4-国䀄算法交叉测试 任务详情02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3在Ubuntu中......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    实验一密码引擎-4-国䀄算法交叉测试小组成员:20201316陈鑫20201332杨赛一、在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图(代码见附件)1.生成待加密文件2.使用OpenSSL用SM4算法加密文件生成密文密钥为0123456789012343.密文4.mak......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    目录1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)2.1创建EC参数和原始私钥文件2.2将原始的私钥文件,转换为pkcs8格式:2.3利用原始的私钥,生成对应的公钥:3在Ubuntu中使用OpenSSL用SM3算......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    任务详情02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash......
  • # 密码引擎-4-国䀄算法交叉测试
    任务详情2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用O......
  • 信息论之从熵、惊奇到交叉熵、KL散度和互信息
    一、熵(PRML)考虑将A地观测的一个随机变量x,编码后传输到B地。这个随机变量有8种可能的状态,每个状态都是等可能的。为了把x的值传给接收者,需要传输⼀个3⽐特的消息。注意,这个变量的熵由下式给出:⾮均匀分布⽐均匀分布的熵要⼩。如果概率分布非均匀,同样使用等长编码,那么并不是最......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    任务详情02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后......
  • blockchain | 交叉编译armv8的pbc库
    blockchain|交叉编译armv8的pbc库这块儿网上是没啥具体的资料的,因为要测试pbc库在安卓上的性能,但是网上pbc的支持只到armv7,就只能自己编译了。大致流程:下载gmp库源码下载pbc库源码编译gmp编译pbc编译测试程序这里使用的是aarch64-linux-gnu-g++andaarch64-linux-gnu......
  • 交叉编译
    什么是交叉编译?交叉编译是在一台机上编译,编译生成的可执行程序在另一台机上运行。如c51单片机的可执行程序,在pc机上编译,下载到C51上执行为什么需要交叉编译?1.因为目标机上资源贫乏,无法运行我们的编译器。难道由编译器的平台就不用编译器了吗(如树莓派)?......