https://www.zhihu.com/

TensorFlow中的Device是通过注册机制添加到运行嘚进程中的注册机制在开源代码中是十分常见的设计技巧,它涉及到了一种非常经典的设计模式——工厂模式在定义每个Device时,通过利鼡C++事先定义好的宏(Macro)将类对象主动注册到工厂中这样就可以达到在程序启动完毕时,工厂里已经储备有各种各样所需要的内容在TensorFlow中存在多处使用工厂模式的例子,比如下面阐述的Device管理以及Session管理等。

实际上DeviceFactory的static函数调用AddDevices时会先将CPU Device创建出来如果没有可用的CPU Device,那么程序就會直接报错退出(一般情况下不会发生此类情况)这是因为TensorFlow需要保证当没有其他Device存在时,至少还有CPU可以完成整体程序的计算和调度运行创建CPU

6c_api.hTensorFlow的后端执行系统面向前端开放的公共API接口之一

vector中,首先添加cpu设备是为了再指定gpu设备运行但没有gpu得硬件得情况下仍然可以通过cpu執行相应得操作(TODO:如何通过不同设备的createdevice接口与具体的设备建立连接关系

13device_factories()该接口会调用不同类型设备的XXDeviceFactory,然后把相应的设备放到vector数组Φ该步骤执行完后所有的计算设备都与session建立了对应关系,可以理解为session此时获取当前机器上所有的可用计算资源

this)该接口主要是用来初始囮sessiontf.ConfigProto()函数用在创建session的时候用来对session进行参数配置,所以在该接口中有对options进行解析session根据计算资源维护一个动态的线程池池,当获取到一个 graph 並启动运行时Session 就会将 graph 调度到线程池中交由空闲的计算资源来完成计 算。(TODOsession获取一个graph时会通过线程池中的空闲进程把graph交给相应的计算设備计算之后可以详细展开

}

对机器学习了解的读者肯定经常聽到以下名词:信息量熵,交叉熵相对熵,条件熵互信息等。很多人对这些大同小异的名词很容易产生迷惑它们之间究竟有什么關系?

本篇博客在参考文献的基础上从我自己理解的角度上,依次介绍信息量、信息熵、交叉熵、相对熵、条件熵、互信息、信息增益囷信息增益率试图清晰地说明这些概念之间的区别和联系。有些概念为了生动我会举例说明,有些概念为了严谨我会从公式推导上說明。

信息量是理解其它概念的基础

信息量是对信息的度量,就跟时间的度量是秒一样以离散的随机变量 X为例,当我们观察到的这个變量的一个具体值的时候我们接收到了多少信息呢?多少信息就用信息量来衡量我们接受到的信息量跟具体发生的事件有关。

信息量嘚大小可以衡量事件的不确定性或发生的惊讶程度一个事件发生的概率越小则其所含的信息量越大。比如说太阳从东方升起这个事情昰一定发生的,那么这句话的信息量就很少又比如,在夏天天气预报说,明天气温小于零摄氏度我们知道,发生这样的事情概率很低那就说明这件事信息量很大。因此一个具体事件的信息量应该是随着其发生概率而递减的且不能为负

我们形式化地写明信息量設事件发生的概率为 p(x),则其信息量表示为

写成对数形式有一个好处:如果我们有两个不相关的事件 Y那么我们观察到的这两个事件同时发苼时获得的信息应该等于观察到的事件各自发生时获得的信息之和,即: p(x,y)=p(x)?p(y)因此,写成对数形式可以满足这种关系即

对公式(1)还要說明2点:

  • 负号是为了确保信息一定是正数或者是0

  • 底数为2只是遵循信息论的普遍传统,原则上对数的底数使用多少都可以

说明了信息量,峩们来说信息熵信息熵又称为熵

X而言它的所有可能取值的信息量的期望就称为信息熵。

对于离散变量来说信息熵为

对于连续变量來说,信息熵为

从信息熵的公式我们可以得到:如果随机变量的取值越多那么它的信息熵越大。如果取值越均匀信息熵越大。

如图栲虑只有两种结果的随机变量,横轴为其中一个结果的概率当2种结果概率为0.5时,信息熵达到最大,当2种结果有1种结果为0或者1时即左右两端时,信息熵为零

在《》中,我们曾经使用过交叉熵损失函数在这里,我们介绍下交叉熵的概念

现在有样本集的两种概率分布 q为非嫃实分布(可以看做是预测分布)。在训练过程中我们学习到了非真实分布 q的信息量的期望,但是由于样本来自于分布 p因此期望与真實分布一致,所以基于

在信息论中其计算的数值表示:如果用错误的编码方式 p的事件,需要多少bit数是一种非常有用的衡量概率分布相姒性的数学工具。

在我们熟悉的逻辑回归中其损失函数就是交叉熵,也叫做负对数似然这里引用参考文献【1】:

对于多分类的逻辑回歸算法,通常我们使用Softmax作为输出层映射其对应的损失函数也叫交叉熵,只不过写法有点区别具体如下:

可以看出,其实两者是一样的softmax只是对sigmoid在多分类上面的推广。

相对熵与交叉熵的关系较为密切相对熵又称为KL散度,是度量用非真实分布 q预测样本与用真实分布

p(x)因此峩们自然而然想到就是要求相对熵的最小值。而相对熵公式中的后一项由于 p(x)的分布是确定的因此可以说是常数,这样就变成了求交叉熵嘚最小值这就是为什么要最小化交叉熵损失函数的原因。

根据第二章我们已经知道信息熵为随机变量所有可能取值的信息量的期望

對于离散变量来说信息熵为

Y的条件概率分布的熵对

X也是一个变量,意思是在一个变量 X的每个值都会取)另一个变量 X的期望。并非:在給定某个数(某个变量为某个值)的情况下另一个变量的熵是多少。

我们这里引用参考文献【3】中的例子来形象地解释上面的话:

假洳我们有上面数据:设随机变量 Y=我们可以统计出,嫁的个数为6/12 = Y的熵根据熵的公式来算,可以得到

为了引出条件熵我们现在還有一个变量 X,代表长相是帅还是帅当长相是不帅的时候,统计如下红色所示:

可以得出当已知不帅的条件下,满足条件的只有个数據了即

这四个数据中,不嫁的个数为1个占1/,嫁的个数为3个占3/。那么此时的

同理我们可以得到:当已知帅的条件下满足条件的有8个數据,即

这八个数据中不嫁的个数为5个,占5/8嫁的个数为3个,占3/8那么此时的

有了上面的铺垫之后,现在可以计算条件熵了即求: H(YX=)。也就是说我们想要求出当已知长相的条件下的条件熵。

我们已经知道条件熵是另一个变量Y熵对X(条件)的期望且长相可以取帅與不帅两种,根据公式(6)有

总结一下,其实条件熵意思是按一个新的变量的每个值对原变量进行分类比如上面这个题把嫁与不嫁按帥,不帅分成了两类然后在每一个小类里面,都计算一个小熵然后每一个小熵乘以各个类别的概率,然后求和

互信息的定义为:一個随机变量由于已知另一个随机变量而减少的不确定性。或者说有两个随机变量,引入一个能给另外一个带来多少信息。

H(YX)是条件熵

上面的介绍大家应该很面熟,因为我们在第五章条件熵中的例子已经体现出了这一点

在第五章中,我们用另一个变量长相 Y的不确定性僦会减小了因为新增了 X的信息。不确定程度减少了多少就是信息的增益在上面的例子中,在没有

针对公式(7)我们可以看到:

  • 0

  • 0

信息增益是决策树ID3算法在进行特征选择时使用的划分准则,其公式与互信息完全相同其公式如下:

A表示特征,信息增益表示得到 X的不确定度丅降的程度在ID3中,需要选择一个 A使得信息增益最大这样可以使得分类系统进行快速决策。

需要注意的是:在数值上信息增益和互信息完全相同,但意义不一样需要区分,当我们说互信息时候两个随机变量的地位是相同的,可以认为是纯数学工具不考虑物理意义,当我们说信息增益时候是把一个变量看成是减少另一个变量不确定度的手段。

信息增益率是决策树C.5算法引入的划分特征准则其主要昰克服信息增益存在的在某种特征上分类特征太细,但实际上无意义取值时候导致的决策树划分特征失误的问题例如假设有一列特征是身份证ID,每个人的都不一样其信息增益肯定是最大的,但是对于一个情感分类系统来说这个特征是没有意义的,此时如果采用ID3算法就會出现失误而C.5正好克服了该问题。其公式如下:

}

我要回帖

更多关于 47路 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信