一、信息熵

若一个离散随机变量 \(X\) 的可能取值为 \(X = \{ x_{1}, x_{2},...,x_{n}\}\),且对应的概率为:

\[p(x_{i}) = p(X=x_{i})
\]

那么随机变量 \(X\) 的熵定义为:

\[H(X) = -\sum_{i=1}^{n}p(x_{i})logp(x_{i})
\]

规定当 \(p(x_{i})=0\) 时,\(H(X)=0\)。

通过公式可以看出,若随机变量 \(X\) 的取值等概率分布,即 \(p(x_{i} = p(x_{j}), i \neq j\) 时,\(H(X)\) 最大。

直观理解:信息熵表达的时随机变量 \(X\) 所含的信息量,当 \(X\) 中所有取值都等概率时,包含的信息量就越多,就需要用更多的信息来描述它。如果知道了 \(X\) 中取哪个值概率最大,那么描述它所需要的信息就越少,\(H(X)\) 就越小。换句话说,信息熵表明了信息的无序状态。

二、交叉熵

交叉熵定义为用模拟分布 \(q\) 来编码真实分布 \(p\) 所需要的平均编码长度比特个数:

\[H(p,q) = \sum_{i=1}^{n}p_{i}log\dfrac{1}{q_{i}} = -\sum_{i=1}^{n}p_{i}q_{i}
\]

拿一个三分类问题举例,加入标签通过 one-hot 编码后的目标为 \([1,0,0]\),那么当预测完全准确时,模拟分布 \(q\) 的熵为:

\[H(q) = -\sum_{i=1}^{n}q_{i}log(q_{i}) = -(1 \times log 1 + 0 \times log 0 + 0 \times log(0)) = 0
\]

因此,在使用交叉熵作为损失函数执行分类任务时,通常使目标函数趋近于0。加入模型预测出来的结果为:\(p = [0.7, 0.2, 0.1]\),那么 \(p, q\) 的交叉熵为:

\[H(p,q) = -\sum_{i=1}^{n}p_{i}log(q_{i}) = -(1 \times log (0.7) + 0 \times log (0.2) + 0 \times log(0.1)) = -log(0.7)
\]

为什么在分类任务中多用交叉熵而不是MSE作为损失函数?我们以二分类问题为例来解释这个问题。假设训练数据集为:\(T = \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n})\}\),其中 \(y_{i} \in \{0,1\}\)。网络的输出为:\(z = w^{T}x\),标签为 \(p = \{1,0\}\)。于是最后对网络所预测的概率值为:\(q = \sigma(z)\),其中 \(\sigma()\) 代表 sigmoid 激活函数:

\[\sigma(z) = \dfrac{1}{1+e^{-z}}\quad\sigma'(z) = \sigma(z)(1-\sigma(z))
\]

若使用 MSE 作为损失函数,则:

\[L = \dfrac{1}{2}||q-p||^{2} \\
\dfrac{\partial L}{\partial w} = \dfrac{\partial L}{\partial q} \times \dfrac{\partial q}{\partial z} \times \dfrac{\partial z}{\partial w} = (q-p)\sigma'(z)x = (q-p)\sigma(z)(1-\sigma(z))x
\]

而使用交叉熵作为损失函数,则:

\[L = -\sum_{i=1}^{n}p_{i}ln(q_{i}) = -(pln(q)+(1-p)ln(1-q))\\
\dfrac{\partial L}{\partial w} = \dfrac{\partial L}{\partial q} \times \dfrac{\partial q}{\partial z} \times \dfrac{\partial z}{\partial w} = (-\dfrac{p}{q}+\dfrac{1-p}{1-q})\sigma'(z)x = (q-p)x
\]

对比之下发现,由于sigmoid 函数在输出接近0和1时,梯度很小,而使用 MSE 做损失函数时模型参数w会更新的比较慢,因此分类问题多采用交叉熵作为损失函数。

个人认为,使用交叉熵而不是用MSE的另一个原因在于,交叉熵损失函数的理想分类结果只与正确样本有关,而MSE损失函数与正误样本都有关系。

三、相对熵(\(KL\)散度)

相对熵用来表示两个概率分布的差异,它表示2个函数或概率分布的差异性:差异越大则相对熵越大,差异越小则相对熵越小,特别地,若2者相同则熵为0。公式表示如下:

\[D_{KL}(p||q) = -\sum_{i=1}^{n}p(x_{i})log(\dfrac{p(x_{i})}{q(x_{i}))} = H(p,q)-H(p)
\]

于是,相对熵=交叉熵-信息熵。而在有监督的机器学习和深度学习中,往往已经有了真实的样本(随机变量)和标签(label),因此可以理解为实际的概率分布 \(p\) 已知,而训练所得到的分布为 \(q\),那么信息熵 \(H_{p}\) 相当于常量,所以可以直接用交叉熵 \(H(p,q)\) 来衡量两个独立概率分布的差异。

信息熵,交叉熵与KL散度的更多相关文章

  1. 深度学习中交叉熵和KL散度和最大似然估计之间的关系

    机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...

  2. 【机器学习基础】熵、KL散度、交叉熵

    熵(entropy).KL 散度(Kullback-Leibler (KL) divergence)和交叉熵(cross-entropy)在机器学习的很多地方会用到.比如在决策树模型使用信息增益来选择 ...

  3. [ML]熵、KL散度、信息增益、互信息-学习笔记

    [ML]熵.KL散度.信息增益.互信息-学习笔记 https://segmentfault.com/a/1190000000641079

  4. 机器学习、深度学习中的信息熵、相对熵(KL散度)、交叉熵、条件熵

    信息熵 信息量和信息熵的概念最早是出现在通信理论中的,其概念最早是由信息论鼻祖香农在其经典著作<A Mathematical Theory of Communication>中提出的.如今 ...

  5. 熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)

    1.介绍: 当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练模型的时候就不停地调整参数使得我们预测出来的概率和真是的概率更加接近. 这篇文章我们关注在我们的模型假设这些类 ...

  6. [转]熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)

    https://www.cnblogs.com/silent-stranger/p/7987708.html 1.介绍: 当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练 ...

  7. 信息论相关概念:熵 交叉熵 KL散度 JS散度

    目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...

  8. 从香农熵到手推KL散度

    信息论与信息熵是 AI 或机器学习中非常重要的概念,我们经常需要使用它的关键思想来描述概率分布或者量化概率分布之间的相似性.在本文中,我们从最基本的自信息和信息熵到交叉熵讨论了信息论的基础,再由最大似 ...

  9. KL散度相关理解以及视频推荐

    以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频. 假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分 ...

随机推荐

  1. Visual Lab Online —— 事后分析

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:事后分析 事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件使得编写简 ...

  2. ES6对象的新增方法的使用

    Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...

  3. Ansible命令行方式执行

    Ansible ad-hoc 什么是ad-hoc? 临时命令,执行完不会保存,类似于批量执行命令. ansible的选项 -i # 指定主机清单 ansible rsync -m ping -i 1. ...

  4. docker部署harbor私有镜像库(3)

    一.harbor介绍 在实际生产运维中,往往需要把镜像发布到几十.上百台或更多的节点上.这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的,我 ...

  5. STM32 KEIL 下的 printf 函数

    1 //加入以下代码,支持printf函数,而不需要选择use MicroLIB 2 #if 1 3 #pragma import(__use_no_semihosting) 4 //标准库需要的支持 ...

  6. 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结

    安装了Python2.X和Python3.X后Python2.X IDLE打不开,两个版本都卸载后重装仍然打不开,在网上找了几种办法,希望对大家能有所帮助 1.首先查看环境变量是否配置正确 配置方法网 ...

  7. python内存管理总结

    之前在学习与工作中或多或少都遇到关于python内存管理的问题,现在将其梳理一下. python内存管理机制 第0层 操作系统提供的内存管理接口 c实现 第1层 基于第0层操作系统内存管理接口包装而成 ...

  8. windows server 2008 rdp停止服务 - windows server 2012 R2 远程桌面授权模式尚未配置,远程桌面服务将在120天内停止工作

    目录 问题现象 增长rdp服务可使用时长的配置 Via & reference: 问题现象 windows server 2008作为测试环境跳板机,但是没有配置官方的rdp授权,限制用户登录 ...

  9. Linux(CentOS7)下rpm安装MySQL8.0.16

    记录一下自己在 CentOS7 下 rpm 安装 MySQL8.0.16 的过程. 一.准备工作 1. 下载MySQL所需要的安装包 从 MySQL官网 下载,上传至 CentOS 系统 /usr/l ...

  10. 第三方跨平台进程和系统监控库gopsutil

    gopsutil psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现.本文介绍了它的基本使用. Go语言部署简单.性能好的特点非常适合做一些诸如采集系统信 ...