深度学习如何处理信息实现智慧之信息熵、相对熵、交叉熵等

谁说胖子不能爱 提交于 2020-01-25 01:19:48

“啤酒与尿布”的故事产生于20世纪90年代的美国沃尔玛超市中,沃尔玛的超市管理人员分析销售数据时发现了一个现象:在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关系的商品会经常出现在同一个购物篮中,后经管理人员调查研究发现,这种现象出现在年轻的父亲身上,父亲在购买婴儿尿片时,常常会顺便搭配几瓶啤酒来犒劳自己,于是尝试推出了将啤酒和尿布摆在一起的促销手段。没想到这个举措居然使尿布和啤酒的销量都大幅增加。

如今,“啤酒+尿布”的大数据挖掘分析成果早已成了大数据技术应用的经典案例,被人津津乐道。啤酒尿布这一看似可笑的现象之所以能被发现,正是“大数据”惊人威力的体现。

今天,大量数据、大量信息充斥我的日常生活和工作中,仿佛生活在数据和信息的海洋中,各类信息严重影响了我们的生活,碎片、垃圾、过时信息耗费了我们宝贵时间,最后可留在我们大脑中的知识少之又少,如何提高有效信息转化率、加快知识积累,更高效的创新,成为我们信息化社会、智慧企业新课题。
在这里插入图片描述
信息化社会、智慧企业构成如上图的金字塔模型,基础是数据,通过信息化技术进行数字化;第二层是信息,通过流程上下文,对数据处理;第三层是知识,对信息分类、分层次、归纳梳理;最后,顶端形成人工智能,实现决策支持。

  • 智慧是指人工智能,人工智能是系统基于数据、信息和知识,形成类似于人脑的思维能力(包括学习、推理、决策等)。
  • 知识是对信息的总结和提炼,例如问题诊断、预测和最佳做法。
  • 信息是被组织起来的数据,让数据有意义。信息=数据+处理。
  • 原始资料(raw data),包括结构化数据和非结构化数据

信息是如何度量的呢?

假设中国足球队与德国足球队历史交手20次,其中中国队获胜1次,120\frac{1}{20}是大家认可的中国获胜概率,这个也是先验概率。那么,“中国队获胜”的信息的信息量有多大呢?

I(x)=log2120=4.3219I\left ( x \right ) = -log_{2}\frac{1}{20}= 4.3219

也就是说,中国队获胜的信息量比较大,能引起人们的惊讶!“德国队获胜”信息的信息量有多大呢?

I(x)=log21920=0.074I\left ( x \right ) = -log_{2}\frac{19}{20}= 0.074

德国队获胜是很正常的,信息量也就比较小。所以,中国足球队与德国足球队比赛的结果,这一信息的信息熵约为:

H(x)=(120log2120)+(1920log21920)=0.2864H\left ( x \right ) = \left (- \frac{1}{20} log_{2}\frac{1}{20}\right )+ \left ( - \frac{19}{20} log_{2}\frac{19}{20}\right )=0.2864

这里开始引入了信息熵,熵的概念来源于信息论,可以代表一个事件的复杂度,或者不确定性。一个事件越是不确定性大,那么就是越复杂,所提供的信息就会越多。

量化信息——信息熵

信息可不可以被量化,怎样量化?答案当然是有的,那就是“信息熵”。早在1948年,香农(Shannon)在他著名的《通信的数学原理》论文中指出:“信息是用来消除随机不确定性的东西”,并提出了“信息熵”的概念(借用了热力学中熵的概念),来解决信息的度量问题。

首先,给出自信息(self-information)概念,是从概率角度给出,对信息量的描述:I(x)=log(p(x))I\left ( x \right ) = -log\left ( p\left ( x \right ) \right )。对概率取对数,是为了满足联合概率的信息的可加性,即两个事件均发生的概率要相乘,但反映在信息量上要相加;再取负值,是因为小概率的事件信息量更大,大概率事件的信息量更小。

信息熵(Information Entropy),是自信息的期望值,是一个概率分布的自信息的加权平均。
在这里插入图片描述

如果把中国足球队换成巴西足球队,巴西足球队与德国足球队历史交手40次,其中德国队获胜20次,2040\frac{20}{40}是大家认可的德国获胜概率,这个也是先验概率。那么,“德国队获胜”的信息的信息量有多大呢?

I(x)=log22040=1.0I\left ( x \right ) = -log_{2}\frac{20}{40}= 1.0

巴西足球队与德国足球队比赛信息熵为:

H(x)=(2040log22040)+(2040log22040)=1.0H\left ( x \right ) = \left (- \frac{20}{40} log_{2}\frac{20}{40}\right )+ \left ( - \frac{20}{40} log_{2}\frac{20}{40}\right )=1.0

那好,最后我们再看足球世界杯决赛,假设32支球队获得冠军等概率等情况下,即p(xi)=120p\left ( x_{i}\right ) = \frac{1}{20},则世界杯等信息熵为:

足球队1获胜的信息量:I(x1)=log2132=5.0I\left ( x_{1} \right ) = -log_{2}\frac{1}{32}= 5.0

以此类推,世界杯等信息熵为:H(x)=i=132P(xi)log2P(xi)=5.0H\left ( x \right )=-\sum_{i=1}^{32}P\left ( x_{i} \right )log_{2}P\left ( x_{i} \right )=5.0

信息熵代表的是随机变量或整个系统的不确定性,熵越大,随机变量或系统的不确定性就越大。

信息差异的度量——相对熵

假如有一个箱子,里面有红、橙、绿、蓝四种颜色的小球任意个,各颜色小球的占比不清楚,现在我从中拿出一个小球,你猜我手中的小球是什么颜色?
在这里插入图片描述
红、橙、绿、蓝四种颜色小球实际分布情况分别是:12141818\frac{1}{2}、\frac{1}{4}、\frac{1}{8}、\frac{1}{8}

预测方案一:

在这种情况下,你什么信息都不知道,假设认为四种颜色的小球出现的概率是一样的,也就是14141414\frac{1}{4}、\frac{1}{4}、\frac{1}{4}、\frac{1}{4}。我取出一个球之后, 你可以每次问一个任何问题, 然后做出判断,目标是问最少的问题,得到正确答案,其中一个预测设计问题的策略如下:
在这里插入图片描述
每一个球有1/4的概率被选中, 4颗球合计为 2,平均需要问两道题目才能找出不同颜色的球,也就是说期望值为2,就是熵(entropy)。

预测方案二:

假如,你再基于一个概率分布方案进行猜测,红、橙、绿、蓝四种颜色小球假设分布情况分别是:13131616\frac{1}{3}、\frac{1}{3}、\frac{1}{6}、\frac{1}{6}
在这里插入图片描述
如图所示,12\frac{1}{2} 的概率是红色, 只需要1个问题就可以知道是不是, 14\frac{1}{4} 的概率是橙色, 需要2个问题, 依此类推,猜中球颜色需要的问题的期望是 12×1+14×2+18×3+18×3=1.75\frac{1}{2}×1+\frac{1}{4}×2+\frac{1}{8}×3+\frac{1}{8}×3=1.75

基于上述方案和实际情况,小球的自信息及信息熵计算结果如下表所示:
在这里插入图片描述
预测方案一与实际分布的信息量差异计算如下:

DKL(pq)=14×log(1/41/2)+14×log(1/41/4)+14×log(1/81/4)+14×log(1/81/2)=0.075D_{KL}\left ( p||q \right )=\frac{1}{4}\times log\left ( \frac{1/4}{1/2} \right )+ \frac{1}{4}\times log\left ( \frac{1/4}{1/4} \right )+ \frac{1}{4}\times log\left ( \frac{1/8}{1/4} \right )+ \frac{1}{4}\times log\left ( \frac{1/8}{1/2} \right )=0.075

DKL(pq)D_{KL} \left ( p||q \right )是相对熵也叫信息增益,在概率论和信息论中,相对熵是非对称的,用以度量两种概率分布p和q的差异,是度量二者之间差异的一种不对称度量,可以看做是概率分布p到目标概率q之间距离。设 p(x)、q(x) 是离散随机变量x中取值的两个概率分布,则p 对q的相对熵是:
在这里插入图片描述

#P和Q是两个概率分布,np.array格式
P = np.array()
Q = np.array()
def KL(P,Q):
    sum = P*(log(P/Q))#计算相对熵
    all_value= [x for x in sum if str(x) != 'nan' and str(x)!= 'inf']#除去inf值
    return np.sum(all_value)#计算总和,要用np.sum,不能直接用sum

KL(P,Q)#得出相对熵的值

按公式分别计算方案一、方案二的相对熵,结果如下表所示:
在这里插入图片描述
从相对熵结果来分析,猜测出红球的概率,方案二更高些,也就是方案二与实际分布更接近些。

如何快速找到信息偏差小的分布——交叉熵

为了快速、准确的猜测到球的颜色,我们在假设彩色球的分布情况,那么,当我们使用非最优策略消除系统的不确定性,所需要付出的努力的大小我们该如何去衡量呢?

再回顾下、总结案例的信息,如下表所示四种颜色球的分布概率,分别给出了实际分布、预测方案一分布、预测方案二分布。
在这里插入图片描述

如上表所示样本集中,有两个概率分布p(x)和q(x),其中p(x)为实际分布, q(x)非真实的预测分布(包括方案一、方案二)。如果用真实分布p(x)来度量样本信息,其信息熵计算公式为:
在这里插入图片描述
给定一个策略, 交叉熵就是在该策略下猜中颜色所需要的问题的期望值。更普遍的说,交叉熵用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出成本的大小。对于给定一个越优的策略的方案, 最终的交叉熵越低。而具有最低的交叉熵的策略就是最优化策略。因此, 在机器学习中, 我们需要最小化交叉熵。交叉熵计算公式为:

在这里插入图片描述

计算预测方案一:

H(p,q)=12×log(11/4)+14×log(11/4)+14×log(11/8)+14×log(11/8)=2.250H\left ( p,q \right )=\frac{1}{2}\times log\left ( \frac{1}{1/4} \right )+ \frac{1}{4}\times log\left ( \frac{1}{1/4} \right )+ \frac{1}{4}\times log\left ( \frac{1}{1/8} \right )+ \frac{1}{4}\times log\left ( \frac{1}{1/8} \right )=2.250

按上述公式和方法,依次计算预测方案一、方案二及实际真实分布的交叉熵,如果预测方案与实际分布一致,则为“信息熵”,从交叉熵结果来分析,交叉熵越小,越接近实际真实分布。
在这里插入图片描述
基于上表的计算结果,如果采用预测方案二的策略,那么猜球将相对更容易些。

最后,总结信息熵、相对熵、交叉熵之间的关系为:

DKL(pq)=H(p,q)H(p)D_{KL}\left ( p||q \right )=H\left ( p,q \right )-H\left ( p \right )

并且当 H(p)H\left ( p \right )为常量时,通常在机器学习中,训练数据概率分布是固定的,最小化相对熵 DKL(pq)D_{KL}\left ( p||q \right ) 等价于最小化交叉熵 H(p,q)H\left ( p,q \right ) ,也等价于最大化似然估计(在此略去用极大似然估计法推导交叉熵)。

深度学习应用——交叉熵在损失函数中的使用

交叉熵(cross entropy)是深度学习中常用的一个概念,在梯度下降算法中一般用来求目标与预测值之间的差距。

交叉熵可在深度学习中作为损失函数,p表示实际真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。

当预测类别为二分类时,交叉熵损失函数的计算公式如下所示,其中y是真实类别(值为0或1),y^\widehat{y} 是预测类别的概率(值为0~1之间的小数),则交叉熵损失函数:

L=[ylogy^+(1y)log(1y^)]L=−[ylog \widehat{y} +(1−y)log (1− \widehat{y} )]

当预测类别是多分类时,交叉熵损失函数的计算公式如下所示,其中M是类别个数,y是真实类别(值为0或1),直观上理解就是将所有预测正确的概率,分别取对数,相加求和,再添一个负号。

L=i=1Myilog(y^i)L = - \sum_{i=1}^{M}y_{i}log \left (\widehat{y}_{i} \right )

其中:

  • M ——类别的数量;
  • yiy_{i} ——指示变量(0或1),如果该类别和样本的类别相同就是1,否则是0;
  • y^i\widehat{y}_{i} ——对于观测样本属于类别 i 的预测概率。
import tensorflow as tf
import input_data

x = tf.placeholder("float", shape=[None, 784])
label = tf.placeholder("float", shape=[None, 10])

w_fc1 = tf.Variable(tf.truncated_normal([784, 1024], stddev=0.1))
b_fc1 = tf.Variable(tf.constant(0.1, shape=[1024]))
h_fc1 = tf.matmul(x, w_fc1) + b_fc1

w_fc2 = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1))
b_fc2 = tf.Variable(tf.constant(0.1, shape=[10]))
y = tf.nn.softmax(tf.matmul(h_fc1, w_fc2) + b_fc2)

cross_entropy = -tf.reduce_sum(label * tf.log(y))

cross_entropy = -tf.reduce_sum(label * tf.log(y))是交叉熵的实现。先对所有的输出用softmax进行转换为概率值,再套用交叉熵的公式。

交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid或softmax函数一起出现。

交叉熵其他应用

在特征工程中,可以用来衡量两个随机变量之间的相似度。

在语言模型中(NLP)中,由于真实的分布p是未知的,则语言模型是通过训练集得到的,交叉熵就是衡量这个模型在测试集上的正确率。

由于作者水平有限,欢迎反馈指导。

参考:
[1]《完美解释交叉熵》 AI火箭营 2018年12月
[2]《如何通俗的解释交叉熵与相对熵?》 知乎 CyberRep 2019年1月
[3]《TensorFlow CNN卷积神经网络实现工况图分类识别(一)》 CSDN博客 肖永威 2019年3月

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!