以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频。

假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分布。我们可以用哈夫曼编码作为最佳编码方案编码这些事件,并将多次事件发生的情况信息以哈夫曼编码的形式传递出去。

有一个结论是:在一个数据分布p上,用p对应的最佳编码方案来传递信息,这样传递的信息的期望量。这个期望量也被称为这个数据分布p作为一个信息的信息熵,是一个信息的一种属性。

信息熵就是,在一个数据分布p上,用p对应的最佳编码方案来传递信息,这样传递的信息的期望量。

交叉熵就是,在真实的数据分布p上,用你预测的分布q对应的最佳编码方案来传递信息,这样传递的信息的期望量。如果p和q完全一致,那么q的最佳编码方案就是p的最佳编码方案,传递的信息总量就是最少的,也就是说,交叉熵的值最小。

KL散度就是,【在一个数据分布p上,用分布q对应的最佳编码方案来传递信息,这样传递的信息的期望量】,与【在数据分布p上用分布p对应的最佳编码方案来传递信息,这样传递的信息的期望量】(也即p的信息熵),的差值。它衡量了两个分布的差别,KL散度越大说明两个分布差别越大,KL散度的最小值为0,表示两个分布完全相同。

在深度学习分类任务训练过程中,真实的数据分布就是p(y|x),其中x是样本特征,y是label向量(one-hot形式),用[0,0,0,1,0,0,0,0]这种形式表示,你可以把它看成一个分布,分别表示x是8种东西中的某一种的概率,由于y是label所以有一个是1,其他的全是0。预测的分布就是p(ŷ|x),其中x还是刚才的那个样本特征,ŷ可以是[0.1,0.2,0.05,0.6,0.01,0.01,0.01,0.02]这种形式,表示我们预测出的x可能是8中东西中的某一种的概率的分布。我们在写代码的时候,通常是使用y和ŷ的交叉熵来作为我们的loss。而实际上,我们也使用的是KL散度作为loss,效果和用交叉熵完全一样。这是因为p(y|x)对应的事件的信息熵的值永远为0. 因为p(y|x)的分布是[0,0,0,1,0,0,0,0]这样的,也就是说表示,x一定属于第四类,也就是说哈夫曼编码根本用不上,不需要编码,肯定是第四个,也就是p(y|x)对应的事件的信息熵的值永远为0。所以此时KL散度就等于交叉熵了。

那么如果是在变分推断VI或者变分自动编码器VAE中呢?在这两个场景下,我们通常要计算p(z|x)这个分布,也就是说给定x,把它编码成什么样的z是最好的。其中z是隐变量,不像前面的y一样是ground truth,不像y一样信息量为零。我们在这两种场景下实际上是将x编码为z,z有它自己的复杂的分布。由于我们要把x编码成z,通常是把一个高维的x编码成低维的z,因此我们需要z本身的分布能表示越多的信息越好,也就是z的分布本身的信息熵越大越好。因此此时我们使用的loss函数就是KL散度,假设我们的样本通过编码器后拿到的隐变量是ẑ,它的分布是p,隐空间中关于对于我们的样本最好的隐变量是z,它的分布是q,那我们就有了两个优化目标了,一个就是找到一个信息量最大的分布q,用来承载样本们将要传递过来的信息,另一个就是让编码器编码的分布p尽量接近q,也就是让原来高维的信息x,尽量的充分利用这个低维空间能承载的信息量。在VAE中,我们实际上把这个q固定为标准高斯分布了,因为在有前提(指x)的情况下,把z的分布建模成指数族分布的信息熵是最高的,也就是能承载更多的信息。在VAE的一般情况下,q是无限个高斯分布的混合,因此我们很难找到一个有公式的p(z|x)来逼近这个q,因此我们使用一个神经网络来作为p(z|x)这个分布,让它去接近q。

最新文章

  1. Javascript 代理模式模拟一个文件同步功能
  2. Matlab中的一些小技巧
  3. MySQL查询及删除重复记录的方法
  4. [推荐]看图/图片管理软件XnViewMP
  5. 关于ARP攻击的原理以及在Kali Linux环境下的实现
  6. html5 app图片预加载
  7. BZOJ 1196: [HNOI2006]公路修建问题( MST )
  8. react.js 从零开始(七)React (虚拟)DOM
  9. [PHP] PHP1 与 CGI
  10. C++的入口函数
  11. Linux时间子系统之(十三):Tick Device layer综述
  12. 【python】已安装模块提示ImportError: No module named
  13. logcat命令详解【二】
  14. Android 性能分析工具 TraceView
  15. mongodb cmd 常用命令
  16. 基于Spring Boot和Spring Cloud实现微服务架构学习
  17. Hibernate关联映射之_一对多
  18. django学习笔记(三)模型
  19. Cardboard profile的修改
  20. idea导出配置

热门文章

  1. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal (思维,逆序对)
  2. OkHttp Client Ignore certificate
  3. JSR-303 实现参数校验
  4. windows cmd 查看远程连接端口
  5. 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取
  6. HTML5 Canvas 画图组件 All In One
  7. 前端知名人士 All In One
  8. CSS pseudo classes All In One
  9. 前端监控平台 & 架构
  10. TypeScript Learning Paths