首页 > 其他分享 >信息量,熵,交叉熵,相对熵的定义

信息量,熵,交叉熵,相对熵的定义

时间:2025-01-19 18:54:04浏览次数:1  
标签:编码 定义 真实 信息量 交叉 KL 分布

本文将介绍信息量,熵,交叉熵,相对熵的定义,以及它们与机器学习算法中代价函数的定义的联系。转载请保留原文链接:http://www.cnblogs.com/llhthinker/p/7287029.html

1. 信息量

信息的量化计算:

解释如下:

信息量的大小应该可以衡量事件发生的“惊讶程度”或不确定性:

如果有⼈告诉我们⼀个相当不可能的事件发⽣了,我们收到的信息要多于我们被告知某个很可能发⽣的事件发⽣时收到的信息。如果我们知道某件事情⼀定会发⽣,那么我们就不会接收到信息。 也就是说,信息量应该连续依赖于事件发生的概率分布p(x) 。因此我们想要寻找⼀个基于概率p(x)计算信息量的函数h(x),它应该具有如下性质:

  1. h(x) >= 0,因为信息量表示得到多少信息,不应该为负数。
  2. h(x, y) = h(x) + h(y),也就是说,对于两个不相关事件x和y,我们观察到两个事件x, y同时发⽣时获得的信息应该等于观察到事件各⾃发⽣时获得的信息之和;
  3. h(x)是关于p(x)的单调递减函数,也就是说,事件x越容易发生(概率p(x)越大),信息量h(x)越小。

又因为如果两个不相关事件是统计独⽴的,则有p(x, y) = p(x)p(y)。根据不相关事件概率可乘、信息量可加,很容易想到对数函数,看出h(x)⼀定与p(x)的对数有关。因此,有

满足上述性质。

2. 熵(信息熵)

对于一个随机变量X而言,它的所有可能取值的信息量的期望就称为熵。熵的本质的另一种解释:最短平均编码长度(对于离散变量

离散变量:

连续变量:

3. 交叉熵

现有关于样本集的2个概率分布p和q,其中p为真实分布,q非真实分布。按照真实分布p来衡量识别一个样本的熵,即基于分布p给样本进行编码的最短平均编码长度为:

如果使用非真实分布q来给样本进行编码,则是基于分布q的信息量的期望(最短平均编码长度),由于用q来编码的样本来自分布p,所以期望与真实分布一致。所以基于分布q的最短平均编码长度为:

 上式CEH(p, q)即为交叉熵的定义。

4. 相对熵

将由q得到的平均编码长度比由p得到的平均编码长度多出的bit数,即使用非真实分布q计算出的样本的熵(交叉熵),与使用真实分布p计算出的样本的熵的差值,称为相对熵,又称KL散度

KL(p, q) = CEH(p, q) - H(p)=

 

相对熵(KL散度)用于衡量两个概率分布p和q的差异。注意,KL(p, q)意味着将分布p作为真实分布,q作为非真实分布,因此KL(p, q) != KL(q, p)。

5. 机器学习中的代价函数与交叉熵

p(x) 是数据的真实概率分布,q(x) 是由数据计算得到的概率分布。机器学习的目的就是希望q(x)尽可能地逼近甚至等于p(x) ,从而使得相对熵接近最小值0. 由于真实的概率分布是固定的,相对熵公式的后半部分(-H(p)) 就成了一个常数。那么相对熵达到最小值的时候,也意味着交叉熵达到了最小值。对q(x) 的优化就等效于求交叉熵的最小值。另外,对交叉熵求最小值,也等效于求最大似然估计(maximum likelihood estimation)。 特别的,在logistic regression中, 
p:真实样本分布,服从参数为p的0-1分布,即X∼B(1,p)  p(x = 1) = y p(x = 0) = 1 - y
q:待估计的模型,服从参数为q的0-1分布,即X∼B(1,q)  p(x = 1) = h(x) p(x = 0) = 1-h(x) 其中h(x)为logistic regression的假设函数。
两者的交叉熵为: 

对所有训练样本取均值得: 
这个结果与通过最大似然估计方法求出来的结果一致。使用最大似然估计方法参加博客 Logistic Regression. 

 

Ref:

《模式识别与机器学习》1.6节

http://blog.csdn.net/rtygbwwwerr/article/details/50778098

https://www.zhihu.com/question/41252833

标签:编码,定义,真实,信息量,交叉,KL,分布
From: https://www.cnblogs.com/gongzb/p/18679802

相关文章

  • java变量及八大基本数据类型的定义
    变量变量是什么:就是可以变化的量!java是一种强类型语言,每个变量都必须声明其类型java变量是程序中最基本的存储单元,其中要素包括变量名,变量类型,作用域注意事项每个变量都有类型,类型可以是基本类型,也可以是引用类型变量名必须是合法的标识符变量声明是一条完整的语句,因此......
  • java 方法的定义
    什么是方法(类似于函数)System.out.println()//调用系统out中的println方法类对象方法方法的定义及调用方法定义:修饰符:public,static,....返回值:int,void...方法名:驼峰命名规则参数类型:(形参—用来定义参数add(inta,intb)——inta,intb),(实参—实际传递......
  • 扬帆数据结构算法之雅舟航程,漫步C++幽谷——链表分类探析与双链表之定义与构筑
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、链表的分类二、双链表的实现1.双链表结构的定义2.双链表的初始化和销毁初始化函数1初始化函数2销毁函数3.双链表的打印以及节点的申请打印函数节点的申请4.双链表的头插和尾插头插函数尾插函数5.双链表的查找和......
  • RK3588+linux系统下交叉编译开发记录
    基础开发路线先用树莓派验证交叉编译可行性,或者直接利用树莓派开发项目树莓派运算速度不足时考虑一下方案采用windows环境下vscode加cmake实现交叉编译,将可执行文件直接考入RK3588自带的debian系统运行采用套接字通信,可直接用linux下的网络库开发记录24/12/27T......
  • Vue3 自定义Hooks完全指南
    目录1.前言2.什么是Hooks2.1Hooks的定义2.2为什么需要Hooks2.3与Vue2的区别3.Hooks的实现原理3.1响应式系统3.2生命周期集成3.3依赖注入系统4.Hooks的作用与应用场景4.1常见应用场景4.2实际案例分析5.Hooks的优缺点5.1优点5.2缺点6.Hooks的书写规范6......
  • Cesium+Vue3教程(004):基于Vue3的Cesium添加地形和自定义地形
    文章目录03-添加地形与自定义地形添加地形添加水纹和光照效果加载自定义地形03-添加地形与自定义地形添加地形实现代码:constviewer=newCesium.Viewer("cesiumContainer",{terrainProvider:Cesium.createWorldTerrain(......
  • go项目zero中自定义sdk的引用与使用规范
    在Go项目中,`gomodtidy`命令会自动删除没有直接引用的依赖。如果你的项目中某个SDK被引用但是没有在业务代码中直接使用,`gomodtidy`可能会将其清理掉,因为它被认为是"未使用"的依赖。如果你希望保留这些依赖(例如某些SDK),可以采取以下几种方法:###1.显式调用SDK中......
  • SQL-按自定义格式进行编号的SQL自定义函数.090119
    生成格式如:DT.EMP.0000000001的自增emp_id,加入EmpBaseINfo表中。--生成格式如DT.EMP.0000000001  【Vegas Add】ALTERFUNCTION[dbo].[Get_EmpBaseInfo_AccountID](@RowIDasint)RETURNSnvarchar(50) as begin    declare@oidnvarchar(50)    dec......
  • 走进数据中心:了解定义、作用、分类,洞悉云计算大数据时代发展新趋势
    一、数据中心的定义、作用及分类数据中心是一整套复杂的设施,它不仅包括计算机系统和其他与之配套的网络、存储等设备,还包含冗余的数据通信连接设备、环境控制设备、监控设备以及各种安全装置。Google在其发布的《TheDatacenterasaComputer》一书中,将数据中心定义为:多功能......
  • 数组的定义和初始化
    数组的定义和初始化publicclassarrayDemo01{publicstaticvoidmain(String[]args){//1.声明数组int[]nums;//intnums02[];不常用//2.创建nums=newint[10];//可以存放十个Int类型的数字//1,2两个步骤可......