总结一下遇到的各种名词和关键字:

(1)熵相关: 自信息量,熵,交叉熵(Cross Entropy),相对熵或KL散度(Realtive Entropy),经验条件熵

(2)似然相关: Max Like Hood,  Max Log Like Hood

下面分别对这些东西进行总结,经常会有对同一个概念的不同角度解释,下面也会总结各种不同角度的解释。可能符号上面有点不是很统一。

【自信息】

参考这句话: I(ai)表示一个消息ai出现后所带来的信息量,用其概率的负对数来表示,即I(ai)=-log2p(ai),因此I(ai)是非负值,并且是概率p(ai)的单调递减函数。用公式表达就是下面的这个式子

I(x=ai) = -log(p(x=ai)) = log(1/p(x=ai))

翻译一下这个公式,表达的意思是如果随机变量x=ai发生,并且以概率P(x=ai)发生,那么这个事件的发生带来信息量为I(x=ai),可以发现如果概率越小那么能带来的信息量就越大。

这里自信息量不能代表信源的整体不确定度,或者随机变量的整体不确定度,只能表示是一个消息或者随机变量取某一个值的不确定度,不能反映整体情况,为了反映整体情况,需要引入熵。

【熵】

熵是刻画随机变量本身特性, 熵有两个解释或者两个角度

1 角度:随机变量不确定性的度量,随机变量自信息量的期望

用在决策树中

熵是对随机变量自信息取期望得到。代表的是平均不确定性。熵是对平均不确定性的度量,熵是随机变量不确定性的度量,不确定性越大,熵值越大;若随机变量退化成定值,熵为0。该不确定性度量的本质即为信息量的期望。其中均匀分布是“最不确定”的分布。同时信息熵也反应了一个系统的有序化程度,一个系统越是有序,那么它的信息熵就越低,反之越高。

随机变量X的熵计算公式是:

翻译一下上面的公式,对于随机变量X (离散随机变量), 其取值有n种可能,每种可能的概率为Pi, 那么随机变量去这些可能的

熵越大,则随机变量的不确定性越大

样本与随机变量之间转换或对应的一点思考:正常情况下,如果一个组样本,样本没有label的话,比如无监督学习,那么我们会认为每个样本是一个随机变量的采样,样本通常是被认为一个多维随机变量,每个样本出现的概率是P(x1,x2,...,xn), 随机变量可能是离散的也可能是连续的, 一种是从现有样本的分布情况来理解概率,一种就是纯粹从随机变量的概率值来理解分布。

在决策树这里,当样本有标签考虑标签值的时候,或者只考虑样本某一个维度特征时,这时候所谓的随机变量就和上面的意义不一样,这里的随机变量的取值范围有限,或者说从多维的随机变量变成了单维随机变量(这里确切的说是离散单维随机变量),在离散的每一个取值上,都包含了很多个样本。这些样本本身在其他的维度上可能差异挺大的。通过一个例子理解。比如一组样本有三类数据,每个类别的占比是 {1/3, 1/3, 1/3}, 那么这里的随机变量实际上取值是3个类别,每个类别的概率都是1/3。 这里又有一个随机变量概率到样本分布之间的转换。这组数据的不确定性或者熵是实际上是 -Σ(1/3)Log(1/3)。

在随机变量只能取0或1是,设置随机变量1个种取值的概率值,, 因为就两种取值可能,所以可以做一个二维的图,横轴是P的取值范围0~1,纵轴是随机变量整体的熵H(x), 本来这里是要画一个3维的图,两个x轴是随机变量在不同类别上的取值范围,纵轴是随机变量整体的熵H(x)。由下图可以发现,当随机变量P(x=0)=p(x=1)=0.5的时候,整体随机变量不确定性最大,熵最大。或者熵是整体系统的不确定性最大。

2 角度:信息论中 Optimal number of bits = Entropy

在信息论中,熵是 expected number of bits under optimal encoding. 对于信源符号的编码的平均bit数在最优编码下。

描述的是传递符号y所需要的最佳平均比特数。对于信源符号y可以取y1,y2,y3的三种情况,在信源中出现的概率是 P(y1), P(y2), P(y3), 那么在编码信源符号y1,y2,y3时可以采用对于出现概率大的符号用少的比特数,对于概率小的符号采用多的比特数,所以符号的编码Bit长度和概率是相关的。具体公式是

log(1/P(y))

对于y1符号,编码时的比特数为 log(1/P(y1)).

那么对于信源y编码的,在所有可能的符号下,对于一个符号所需要的最佳平均比特数是

翻译一下上面的公式,i代表信源的取值符号,而yi是信源取符号i的概率 (yi is the probability of i-th symbol),对所有信源符号取值可能进行遍历,求出各个符号编码bit长度,然后按概率求期望,得到编码信源所有符号所需要的平均bit数

参考文献1中,总结的:

If you have access to the underlying distribution y, then to use the smallest number of bits on average, you should assign log(1/yi) bits to the i-th symbol.(yi is the probability of i-th symbol).

By fully exploiting the known distribution y in this way, we achieve an optimal number of bits per transmission. The optimal number of bits is known as entropy.

上面两个对熵的不同角度的理解实际上是相关的,对于第二个解释,对于实际上也是反映了信源符号的不确定度,如果信源在各个符号上取概率一样,那么需要更多的bit数来编码信源符号。

【交叉熵 Cross Entropy】

废话不多说,先给出交叉熵的公式

首先翻译一下上面的公式,对于随机变量i的所有取值可能进行遍历,随机变量的可能会有两个不同的分布, 分布y和分布y^ . (i的取值范围一样,但是取值的概率是不一样的,比如预测图片的概率,1000个类别,实际上类别的取值都是一样,只是真实和实际的1000个类别的概率分布不一样)。这里相当于是认为,随机变量是来自于y分布,然后对于每个可能的取值符号i,在y的分布中出现的概率是yi, 而编码这个符号时,采用的bit数目是 log(1/y^i),然后对i的所有可能取值范围进行遍历,求得这样编码时,对于每个符号所需要的平均编码比特数。

按上述方法,进行编码的时候,所得到的平均比特数,肯定要比按熵编码的bit数目要多,当交叉熵最小时,说明两个分布一样,那么这时候所需要的bit数是最小的。

参考文献1总结

交叉熵可以用来衡量两个分布y和y^的差异,可以作为训练数据时的损失函数,其中y表示真实标记的分布,y^则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量y和y^的差异。H(y,y^)的最小值是等于H(y), 这里的H(y)是多少,最小值就是多少。

那么在实际应用中,和对分类任务,通常y是一个one hot编码的分布,比如(0,0,0,1,0), 这里的1代表的是指定类别概率为1,其他的都为0。这里y分布代表的是样本概率的真实分布,而y^代表的是预测输出的概率分布。两个分布求交叉熵,只有真实类别的yi=1,其他yi=0, 那么最后两个分布的交叉熵归结到了,H(y,y^) = -1*log(y^i=label) = - log(y^i=label), 训练的时候相当于最小化这个值,那么和极大似然估计又是能够对应上。

理解交叉熵或者是相对熵的一个点是,随机变量的取值在两个分布下都有取值的可能性,换句话说,两个分布的X的取值范围,函数的定义域都是一样的,如果不一样,那么可以强行一样,然后把没有取值的地方的概率负0值,这样理解可行否,不不考虑概率为0也会发生这种抽象的东西,我感觉是可以这样理解。

【相对熵 Relative Entropy - KD divergence】

对于分布y和y^的相对熵,是就y和y^之间的交叉熵减去y的熵,用英语就是

The KL divergence from y^ to y is simply the difference between cross entropy and entropy.

废话不多说,上公式

翻译一下这个公式,真实分布是y, 而预测分布是y^, 相对熵是y和y^之间的交叉熵 减去 y的熵,KL 散度不是对称的,因为交换y和y^,则意味真实分布的变化,所以肯定不是对称的。

参考文献1总结 ,总结的很好

实际上交叉熵和相对熵,都是描述的两个概率分布之间的差异,而且只是相差了一个常数项目,所以可以不加区分对待。

【从极大似然来推导交叉熵优化公式】

从极大似然估计(是Max Likelihood吗?),来推导交叉熵的优化目标公式,相当于是从另外的角度来推导出同样的目标公式

根据参考文献1,一个通常的做法是,tune our model parameters so that the likelihood of our data under the model is maximized. 

翻译一下,就是在现有的模型下,让训练数据出现的的概率最大,那么实际上就是归结为一个求各个数据在现有模型下出现概率的问题,求得这个概率以后,然后最后的问题就是让这个概率,在多数据情况下最大化的问题。

Max likelihood的核心思想就是在当前model下,让各个样本或者数据出现的整体概率最大化,那么首先就是要求出各个样本数数据在当前模型下出现的概率,然后做一个概率相乘,接着取log, 然后优化

翻译一下上面的公式,意思是说整体数据的Likelihood是各个样本Likelihood的乘积,这里的L理解为数据在模型下计算出来的出现概率,下面这句话也印证了

那么对于若干数据的整体Likelihood是,

翻译一下上面的公式,公式左边是数据的Likelihood整体,右边是模型预测得到的各个真实Label下的概率值,这里的(1)(2)(3)(4)代表的是样本索引,下标1~3是代表的label.

Max Likelihood 实际上就是让上面这个式子值最大,先取个Log, 然后是Minimize - Log, 目标优化公式是变为,下面这个公式就是所谓的 Negative Log Likelihood,目标是让这个式子的值最小化。

最后考虑到目标标签的概率分布是one hot编码,那么对于一个样本的Likelihood又可以写成

翻译一下这个公式,i是随机变量的所有可能取值范围,对i进行遍历,因为是yi是one hot编码,所以可以加上去。这样就得到了Negative Log Likelihood的最后优化目标公式。

可以发现Negative Log Likelihood最小化的优化公式和最小化交叉熵的优化公式是一样。

CS231N里面推导分类任务的优化目标公式 -- Max Log likelihood

实际上在CS231N里面,对于分类任务来说,实际上就是很直接,

直接给出Max Log Likelihood, 根本没有引出所谓的交叉熵。

实际上神经网络就是可以直接给出一个结果的目标函数,然后对这个函数进行梯度上升或者梯度下降,反正都是对一个函数求网络系数的梯度,而这个函数可以任意定义。

【Pytorch 对于交叉熵相关的函数】

在Pytorch中和交叉熵损失函数相关有如下一些函数

(1) torch.nn.CrossEntropyLoss() --- 输入的是原始score值

这个函数的输入是类别的Score值,从上面可以看出来,是对score值,先做一个softmax,转换到了概率值,然后在取log, 并且计算Negative Log likelihood损失。示例代码。

>>> loss = nn.CrossEntropyLoss()
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.empty(3, dtype=torch.long).random_(5)
>>> output = loss(input, target)
>>> output.backward()

(2)torch.nn.NLLLoss() -- 输入的数据是需要对score值,手动调用一下LogSoftmax()函数

示例代码。

>>> m = nn.LogSoftmax()
>>> loss = nn.NLLLoss()
>>> # input is of size N x C = 3 x 5
>>> input = torch.randn(3, 5, requires_grad=True)
>>> # each element in target has to have 0 <= value < C
>>> target = torch.tensor([1, 0, 4])
>>> output = loss(m(input), target)
>>> output.backward()

在Pytorch代码里面一般写

mrcnn_class_logits -> 代表是类别的score值

mrcnn_class -> 代表的是类别的概率值

在CS231N中,scores = unnormalized log probabilities of the classes. 这点还是不是很清楚,在CS231n中的原话是

We can see that the Softmax classifier interprets every element of f (这里是score) as holding the (unnormalized) log probabilities of the three classes. We exponentiate these to get (unnormalized) probabilities, and then normalize them to get probabilites.

不过理解不了问题不大,反正就是有人把score叫做 unnormalized log probabilities of the classes

http://cs231n.github.io/neural-networks-case-study/#scores

【参考文献】

【1】A Friendly Introduction to Cross-Entropy Loss

【2】https://blog.csdn.net/young_gy/article/details/69666014

【3】CS231N

数学基础 (2) - 熵相关以及优化目标函数相关推荐

  1. 【数据竞赛】kaggle竞赛宝典-多分类相关指标优化​

    ↑↑↑关注后"星标"kaggle竞赛宝典 kaggle竞赛宝典 作者: 尘沙杰少.谢嘉嘉.DOTA.有夕 赛题理解,分析,规划之多分类相关指标优化 这是一个系列篇,后续我们会按照我 ...

  2. 【机器学习基础】回归相关指标优化​

    作者: 尘沙杰少.谢嘉嘉.DOTA.有夕 赛题理解,分析,规划之回归相关指标优化 此处我们列举kaggle过往几年中,在回归问题中经常出现的一些评估指标,因为在数据竞赛中我们更多的是考虑在特定评测指标 ...

  3. 梯度下降法优化目标函数_如何通过3个简单的步骤区分梯度下降目标函数

    梯度下降法优化目标函数 Nowadays we can learn about domains that were usually reserved for academic communities. ...

  4. 新站长更要努力做好SEO相关的优化

    网站经营是很累的,特别是新站长更要努力做好SEO相关的优化,同时要选择好网站的域名.关键词.做好内容和静态页面等,这样才能使网站优化起一点的作用,48论坛一直在这样努力进行着. 在准备网站建设的时候, ...

  5. MATLAB实现基本的遗传算法(写成函数形式,可调用),优化目标函数,并举例展示

    遗传算法,其本质上是一种进化算法,相比其他的算法应用范围比较广泛,特别是对于一些非线性.多模型.多目标的函数优化问题,用其他的优化方法较难求解,而遗传算法可以方便的得到较好的结果.不过正如我在PSO粒 ...

  6. matlab已知优化目标函数,fmincon函数对目标函数的要求

    matlab非线性规划fmincon函数中目标函数参数传递问题, 使用匿名函数句柄就可以了fmincon需要的函数fun只有一个输入参数fun(x)而你的函数需要多一个能改变的变量那么形式变成myfu ...

  7. 智能车声标定位相关算法优化

    相关 相关部分比较简单,相关的意义和实现有需要可以参考下面两篇博文, https://blog.csdn.net/jbb0523/article/details/6669883?utm_medium= ...

  8. python实例 优化目标函数_Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

  9. Tomcat 7 相关参数优化说明及配置最佳案例

    目录 前言 环境搭建 目的 服务器资源 优化配置 禁用AJP连接器 前言 基于Tomcat 7,通过调其内部参数,提高tomcat性能. 0.环境搭建 参考:在一台服务器上配置多个Tomcat 教程  ...

最新文章

  1. IDEA 出现 updating indices 卡进度条问题的解决方案并加快索引速度
  2. php适配器模式应用,什么是适配器模式,它有哪些应用场景
  3. java.lang.IllegalArgumentException: Can not set XXX to com.sun.proxy.$Proxy28
  4. Python Django 查询数据缓存
  5. mysql登录不了_登录不了MySQL的解决方法
  6. 在IOC中装配Bean
  7. 【jQuery笔记Part2】04-jQuery淡入淡出动画右下角广告案例
  8. Oauth2与授权管理
  9. Windows内核管理层的部件之I/O管理模块
  10. 一个局域网联机小游戏
  11. android 标准注释方法,android studio 学习笔记之 注释规范化
  12. joomla人人登录
  13. 微信公众平台与微信公众平台的区别与联系
  14. 开发智能名片小程序时遇到的技术问题以及解决办法
  15. 全员营销实施困难,是因为你没有这个神器
  16. 和ts一般怎么玩_AG首发大换血,成功复仇TS,发了工资的TS谁也打不赢?
  17. 以用户需求为核心能玩出什么新花样?魅族 19 主理人计划构建理想机型
  18. 解决硬盘分区错误, 纯Dos磁盘工具Diskpart的用法.
  19. GRUB4DOS(六) find命令的实现
  20. win10系统一直处于欢迎界面

热门文章

  1. 计算杨辉三角的第n行,第m项数字
  2. SQL Server 官方客户端的三种常用工具 SSMS , SQL Server Profiler , Database Enging Tuning Advisor
  3. Python:实现double factorial recursive双阶乘递归算法(附完整源码)
  4. 高速CMOS光耦合器在工业现场总线网络中的应用
  5. 据说是世界上最经典的25句话
  6. Flash 0day CVE-2018-4878 漏洞复现
  7. 关于tableau的tabe calculation详细讲解
  8. oneapm服务器性能调优,中塑在线 · OneAPM 优化应用性能管理,提升用户体验 - OneAPM 电商类客户案例...
  9. iOS学习—设置启动页停留时间
  10. 一个div在另一个div中水平垂直居中