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

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

(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),可以发现如果概率越小那么能带来的信息量就越大。

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

【熵】

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

扫描二维码关注公众号,回复: 2556229 查看本文章

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(X=1)=p, 因为就两种取值可能,所以可以做一个二维的图,横轴是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

猜你喜欢

转载自blog.csdn.net/hnshahao/article/details/81111843