首页 > 其他分享 >熵,交叉熵

熵,交叉熵

时间:2023-04-28 16:44:06浏览次数:22  
标签:编码 frac log 交叉 sum 分布 长度

熵(Entropy)

定义

可以从两个角度理解熵:

  • 最小平均编码长度
  • 信息量

最小平均编码长度

信息论中熵的概念首次被香农提出,目的是寻找一种高效/无损地编码信息的方法:以编码后数据的平均长度来衡量高效性,平均长度越小越高效;同时还需满足“无损”的条件,即编码后不能有原始信息的丢失。这样,香农提出了熵的定义:无损编码事件信息的最小平均编码长度

\[以离散概率分布举例\\ i的最小编码长度=-log(P(i))\\ Entropy=平均最小编码长度=-\sum_i{P(i)log(P(i))} \]

当然这里 \(i\) 的最小编码长度的计算方式是理论最小,实际不可能出现小数

信息量

一条信息的信息量大小和它的不确定性有直接的关系。我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。

比如,有人说广东下雪了。对于这句话,我们是十分不确定的。因为广东几十年来下雪的次数寥寥无几。为了搞清楚,我们就要去看天气预报,新闻,询问在广东的朋友,而这就需要大量的信息,信息熵很高。

比如,中国男足进军2022年卡塔尔世界杯决赛圈。对于这句话,因为确定性很高,几乎不需要引入信息,信息熵很低。

考虑一个离散的随机变量 \(x\),由上面两个例子可知,信息的量度应该依赖于概率分布 \(p(x)\) ,因此我们想要寻找一个函数 \(I(x)\) ,它是概率 \(p(x)\) 的单调函数,表达了信息的内容。怎么寻找呢?如果我们有两个不相关的事件 \(x\) 和 \(y\) ,那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即:\(I(x,y)=I(x)+I(y)\)。

因此,我们取 \(I(x)=−log(p(x))\)

  • 负号是用来保证信息量是正数或者零
  • 而 log函数基的选择是任意的

现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量为:

\[H(x)=-\sum^n_i{P(x_i)log(P(x_i))} \]

\(H(X)\) 就被称为随机变量 \(x\) 的,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。

相对熵(KL散度)

相对熵可以用来衡量两个概率分布之间的差异

设 \(p(x)、q(x)\) 是 离散随机变量 \(X\) 中取值的两个概率分布,则 \(p\) 对 \(q\) 的相对熵是:

\[D_{KL}(p||q)=\sum_x{p(x)log(\frac{p(x)}{q(x)})} \]

性质:

  • 如果 \(p(x)\) 和 \(q(x)\) 两个分布相同,那么相对熵等于0
  • \(D_{KL}(p||q)≠D_{KL}(q||p)\),相对熵具有不对称性。

交叉熵

现在有关于样本集的两个概率分布 \(p(x)\) 和 \(q(x)\) ,其中 \(p(x)\) 为真实分布, \(q(x)\) 非真实分布。

如果用真实分布 \(p(x)\) 来衡量识别一个样本所需要编码长度的期望(平均编码长度)为:

\[H(p)=\sum_xp(x)log(\frac{1}{p(x)}) \]

如果使用非真实分布 \(q(x)\) 来表示来自真实分布 \(p(x)\) 的平均编码长度,则是:

\[H(p,q)=\sum_xp(x)log(\frac{1}{q(x)}) \]

\(H(p,q)\) 即交叉熵

\[D_{KL}(p||q)=\sum_x{p(x)log(\frac{p(x)}{q(x)})}\\=\sum_xp(x)log(\frac{1}{q(x)})-\sum_xp(x)log(\frac{1}{p(x)})\\ =H(p,q)-H(p) \]

在机器学习中,我们希望训练数据上模型学到的分布 \(P(model)\) 和真实数据的分布 \(P(real)\) 越接近越好,所以我们可以使其相对熵最小。又因为训练数据的分布是固定的( \(H(p)\) 为常量),最小化相对熵 \(DKL(p||q)\) 等价于最小化交叉熵 \(H(p,q)\) 也等价于最大化似然估计

  • 希望学到的模型的分布和真实分布一致,\(P(model)≃P(real)\)
  • 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的\(P(train)≃P(real)\)
  • 因此,我们希望学到的模型分布至少和训练数据的分布一致,\(P(train)≃P(model)\)

得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异

标签:编码,frac,log,交叉,sum,分布,长度
From: https://www.cnblogs.com/shiiiilong/p/17362596.html

相关文章

  • rust交叉编译配置:windows上编译linux可执行程序
    rust交叉编译配置:windows上编译linux可执行程序简述交叉编译大概指在在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码.本次,我们配置的是在windows上编译出在linux上运行的rust可执行程序.我们在安装rust之后,默认会安装跟机器环境搭配的编译相关工具.......
  • idea - 在Terminal 交叉编译golang 解决
    1. 背景在ideaTerminal栏执行gobuildxxx.go打包的是exe文件交叉编译配置SETCGO_ENABLE=0SETGOOS=linuxSETGOARCH=arm64gobuildxxx.go发现编译文件仍然是exe2.解决需要切换为cmd指令执行cmd然后在执行交叉编译即可 ......
  • RK3588 Qt 交叉编译之四:配置及编译报错记录
    运行时出现错误提示:QIconvCodec::convertToUnicode:usingLatin-1forconversion,iconv_openfailedQIconvCodec::convertFromUnicode:usingLatin-1forconversion,iconv_openfailed原因是缺少iconv库,解决方案如下:./configure后添加编译-no-iconv运行时出现错误提......
  • RK3588 Qt 交叉编译之三:编译 eglfs_kms 版本
    由于RK3588NVR方案的内核不支持Framebuffer显示,没有/dev/fb0,所以不支持LinuxFB平台插件。所以要编译一个eglfs_kms的版本。前面的安装交叉编译工具链、安装QtCreator等步骤这里都省略了,不清楚的可以看上一篇博客:RK3588Qt交叉编译之二:编译LinuxFB版本一、交叉......
  • KL散度和交叉熵的对比介绍
    KL散度(Kullback-LeiblerDivergence)和交叉熵(CrossEntropy)是在机器学习中广泛使用的概念。这两者都用于比较两个概率分布之间的相似性,但在一些方面,它们也有所不同。本文将对KL散度和交叉熵的详细解释和比较。完整文章:https://avoid.overfit.cn/post/030de9dfd01e45e5ba23bf1a9b......
  • 交叉编译gRPC
    重点要参考官方文档:https://github.com/grpc/grpc/blob/master/test/distrib/cpp/run_distrib_test_cmake_aarch64_cross.sh如果要支持AG35或AG55X,要修改camkeconfig.按官方文档可能还需要安装libssl-dev.此次编译源码选的grpc-v1.45.2,官网下载,或gitbub下载都可以. ......
  • 一套完整的基于随机森林的机器学习流程(特征选择、交叉验证、模型评估))...
    机器学习实操(以随机森林为例)为了展示随机森林的操作,我们用一套早期的前列腺癌和癌旁基因表达芯片数据集,包含102个样品(50个正常,52个肿瘤),2个分组和9021个变量(基因)。(https://file.biolab.si/biolab/supp/bi-cancer/projections/info/prostata.html)数据格式和读入数据输入数据为......
  • 龙芯派二代2k1000la开发——交叉编译环境搭建(C/C++和Qtcreator)
    龙芯派二代2k1000la开发——交叉编译环境搭建(C/C++和Qtcreator)一、下载脚本文件这个脚本文件可以在龙芯技术支持QQ群中找到二、编译C/C++程序在下载目录下执行该脚本./poky-glibc-x86_64-my-qt5-image-loongarch64-ls3a5000-toolchain-3.3+snapshot.shBash设置环境变量source/opt......
  • 密码引擎-4-国䀄算法交叉测试
    实验一密码引擎-4-国䀄算法交叉测试02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)在安装了正确版本的openss......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    实验一密码引擎-4-国䀄算法交叉测试1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3.在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSLSM2算法计算Hash值的......