文档章节

从信息熵的角度来理解机器学习要优化的目标

saintqdd
 saintqdd
发布于 2017/07/20 17:36
字数 1977
阅读 458
收藏 13

 

摘要:机器学习任务中最核心的工作是对构造合适的损失函数,并对其进行优化,得到最终的模型。那么如何来构造损失函数,常用的构造函数背后有哪些理论的支撑,本篇文章从熵的角度来解析,希望对对读者起到抛装引玉的作用。

一、 基础概念

信息量

对于离散概率,定义p_i的信息量为

wpsD01C.tmp

可以理解为需要查找多少次可以找到对应的离散值,比如概率0.125,对应的信息量是3,也就是说需要至少折半查找3次才能找到对应的离散取值。

信息熵(Information entropy

衡量信息的不确定性(对于人来说),熵越小,信息就越确定。通俗的说,可以从几个方面来描述,比如人判断一件事情时有把握的程度、信息压缩编码时最小需要的位数。简单的说,熵反应了信息量。定义如下wpsD01D.tmp

交叉熵(Cross Information entropy)

如果一件事情的不确定性为0,那么信息熵也为0,所以信息熵可以理解为消除事件不确定性所要付出的代价,而实际当中很难采用最真实的概率分布来对事件进行判断,而是采用一种接近真实的概率分布,比如q来拟合真实的场景,将q带入信息熵的公式就可以得出交叉熵的定义

wpsD01E.tmp

交叉熵所代表的含义是,采用非真实概率分布q下,要消除事件的不确定性所付出的代价,通常情况下,交叉熵要比信息熵大,证明的方法可参考Gibbs inequality

相对熵(relative Information entropy

交叉熵减去信息熵即是相对熵的定义

wpsD01F.tmp

实际上相对熵和交叉熵只相差了一个常量,代表了采用非真实概率分布q下,消除事件不确定性所付出的代价比采用真实概率分布下所付出的代价的差距,也可以看做是两个概率分布的差异性,和KL散度是等价的。

接下来举个例子来真切的感受下不同熵指标的变化。

举个例子A: 箱子里有4个球,2个白色,2个黑色,现在从中随即拿出来一个,猜测下颜色,猜对有奖。那么我们需要猜测几次才能中奖呢?很明显,白色和黑色的概率相同,那么最优的策略是随即选个颜色了,白色吧,如果不对,那就肯定是黑色了,所以最多只需要猜一次就可以完成。此时信息熵为

wpsD020.tmp

举个例子B:箱子里有4个球,1个白色,3个黑色,现在从中随机拿出来一个,猜测下颜色。很显然,黑色概率更高,此时肯定不会向例子A那样随即选择颜色了,更好的策略是先选择黑色,如果错了,在选择白色了。显然此时,能够猜对的概率要比A例子高很多,也就是意味着这个时间的不确定性相比A下降了。此时信息熵为

wpsD030.tmp

举个例子C: 箱子里有四个球,全是黑色,现在从中随即选择一个,猜测下颜色。太明显了,不用猜了。时间完全是确定性的,熵为0

wpsD031.tmp

举个例子D: 箱子里有四个球,1白3黑,但是不告诉真实的概率分布,现在从中选择一个,猜测下颜色。此时对时间完全一无所知,只能随机的来猜,默认黑白各半,试想这个肯定是不够优秀的策略,此时的交叉熵为

wpsD032.tmp

和例子B相比,使用随机猜测,事件的熵上升,说明基于的概率分布猜测不好,如果能够知道真实的概率分布,那么信息熵将为最低,H4-H2的差(相对熵)0.19,就是我们做模型、做特征工程、做优化的奋斗目标啊。

二、 损失函数

相对熵是要优化的目标,而相对熵和交叉熵相差一个常量,一般使用交叉熵来推导模型。因为本篇使用概率输出,所以选择二元分类逻辑回归模型和多元分类逻辑回归模型来描述基于熵的模型优化。

拿点击率预估来阐述,来了一条样本,要预估它的点击概率P(click),当然P(click)+P(nonclick)=1。显然对点击还是不点击这件事情来说,真实的概率分布就是(P(click)=100%,P(nonclick)=0%)或者(P(click)=0%,P(nonclick)=100%)。

那么我们已经知道了真实的概率分布,但是无法确切的知道具体的概率公式或者具体形式,所以只能通过构造一个概率公式比如

wpsD033.tmp

来近似真实的概率分布,那么我们就可以计算交叉熵了,形式如下

wpsD034.tmp

其中参数含义为

wpsD035.tmp

代入具体的构造概率公式,可以得到

wpsD036.tmp

其中y_hat是真实的label(1,0),这个形式和基于最大似然推导出来的损失函数形式上是一样了。

对于多类逻辑回归,最常见的场景为文本分类,此时有多个输出目标,也就是说有多个输出概率值,此时构造的概率公式为

wpsD037.tmp

针对每个输出,都一组对应的参数来进行拟合。此时的交叉熵形式如下

wpsD038.tmp

wpsD039.tmp

如果将k设置为2,就和二元分类一样了,但是形式看上仍然多了一组参数,而二元逻辑回归只有一组参数,实际上这一组参数是W0和W1的差值,为了节省空间,自然就没有多增加一组参数了。

有了交叉熵,也即要求的损失函数,剩下的事情就是通过梯度下降法来找到最优解了,在附录中,会把梯度推导的过程也粘贴过来,以备查阅。

三、 总结思考

本文从熵的角度来思考模型的优化问题,对于以概率输出的模型,都可以通过交叉熵的方式来定义优化目标,通过定义不同的概率公式,可以形成不同的模型。

交叉熵并不是概率输出模型的唯一优化方式,这是频率学派的常规思路,还可以通过贝叶斯的方式优化以概率输出为目标的模型,下一篇文章将对此阐述。

附录:

多元逻辑回归的梯度计算

对于输出label为i的样本进行交叉熵损失函数的梯度计算,求导的参数有W_0~W_k(k为分类数)

wpsD03A.tmp

先对W_i进行求导

wpsD03B.tmp

令:wpsD03C.tmp wpsD03D.tmp,则有

wpsD03E.tmp

wpsD03F.tmp

然后在对其余W_j请求求导

wpsD040.tmp

综合一下,可以得到多元分类逻辑回归模型损失函数的梯度计算公式为

wpsD051.tmp

实际应用中,损失函数使用自然对数而非以2为底对数,这样可以去掉ln(2)这个常数,同时并不改变模型本身的性质。

二元逻辑回归的梯度计算

此时参数只有一组,直接对W进行求偏导数,也分成两种情况下来计算,先看下Label=0的情况下的梯度

wpsD052.tmp

在看下Label=1的情况下的梯度

wpsD053.tmp

综合一下,可以得到二元分类逻辑回归模型的梯度计算公式

wpsD054.tmp

和多元回归一样,损失函数一般采用自然对数,可以消除常数ln(2)

© 著作权归作者所有

共有 人打赏支持
saintqdd
粉丝 1
博文 3
码字总数 1977
作品 0
私信 提问
机器学习各种熵:从入门到全面掌握

信息熵是信息论和机器学习中非常重要的概念,应用及其广泛,各种熵之间都存在某些直接或间接的联系,本文试图从宏观角度将各种熵穿插起来,方便理解。本文首先讲解机器学习算法中常用的各种熵...

机器学习算法全栈工程师
03/19
0
0
《统计学习方法》笔记(五)逻辑斯蒂回归与最大熵模型

LR回归(Logistic Regression) LR回归,虽然这个算法从名字上来看,是回归算法,但其实际上是一个分类算法。在机器学习算法中,有几十种分类器,LR回归是其中最常用的一个。 LR回归是在线性...

ch1209498273
05/23
0
0
干货丨一份机器学习的初学者指南

机器学习: 引言 听过人们谈论过机器学习,但对它的概念却是一知半解? 想要从零开始机器学习,却被网络上的海量资源冲昏头脑? 不用担心,我们给你们提供了机器学习从0到1系列,这个系列可以让...

r1unw1w
04/11
0
0
深度神经网络基本问题的原理详细分析和推导

目录 神经网络算法的直观了解 21 表征假设和激活函数 1 神经网络过程描述 2 神经网络相关的几个问题 22 结构设计Architecture Design 23 代价函数Cost Function和优化目标Optimization obje...

技术小能手
07/30
0
0
观点 | 从信息论的角度理解与可视化神经网络

  选自TowardsDataScience   作者:Mukul Malik   机器之心编译   参与:Pedro、思源      信息论在机器学习中非常重要,但我们通常熟知的是信息论中交叉熵等模型度量方法。最近...

机器之心
04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

并发+超时示例

func installMantisAgent() {log.Println("begin auto repair mantis agent")num := 0succNum := 0failNum := 0var Q *queue.Queueswitch g.Config().RepairType {ca......

我爱吃葱花
12分钟前
0
0
增加一列自增id

ALTER TABLE xxxx ADD iSiteId INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

colin_86
21分钟前
2
0
开发函数计算的正确姿势 —— 爬虫

在 《函数计算本地运行与调试 - Fun Local 基本用法》 中,我们介绍了利用 Fun Local 本地运行、调试函数的方法。但如果仅仅这样简单的介绍,并不能展现 Fun Local 对函数计算开发的巨大效率...

阿里云官方博客
26分钟前
0
0
安卓代码混淆

Proguard是安卓提供的方便开发者对代码和apk进行保护和精简的工具,可在SDK/tools文件夹下找到。 proguard的作用 : 1,代码混淆 2,精简代码,删掉没有用到的代码,减小apk的体积。 使用场景...

whoisliang
31分钟前
1
0
配置Tomcat虚拟主机

12月13日任务 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 配置tomcat监听80端口 默认tomcat监听的是8080端口,如果想直接输入ip就访问到网页,就需要进行...

robertt15
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部