最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络
最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看。今天准备写一写很多童鞋们w未必完全理解的最大似然估计的部分。
单纯从原理上来说,最大似然估计并不是一个非常难以理解的东西。最大似然估计不过就是评估模型好坏的方式,它是很多种不同评估方式中的一种。未来准备写一写最大似然估计与它的好朋友们,比如说贝叶斯估计 (Beyasian Estimation), 最大后验估计(Maximum Posterior Estimation)的关系。
(版权所有,转载请注明出处)
最大似然估计
如果写出最大似然估计的公式的话是这样的:
\[\theta_\text{ML}={arg\,max}_\theta P(Y|X;\theta)\]
假设一个模型是一个图片分类任务,从一个\(256 \times 256\)的图片来识别出模型到底是一个猫,一个狗,还是其他什么东西。那么输入就是\(256 \times 256\)的矩阵(图片),输出就是一个3维的向量,比如说\(\{0.1, 0,2,0.7\}\)代表从图片到对应三个分类的概率。
对于这个任务而言,我们需要学习的是一个给定分类函数的参数\(\theta\), 这个函数可以是任何函数,只要这个函数最终能输出三分类对应的概率向量就可以了。对于\(\theta\)而言,我们的目标是,对于给定的输入,输出值越接近真实值越理想,这个就是所谓的最大似然。
如果用模型训练的角度上来说,我们可以把公式展开成如下的形式:
\[{arg\,max}_\theta \sum_{i=1}^{n} log P(y^\text{(i)}|x^\text{(i)};\theta) \]
在这里,\(x^\text{(i)}\)和\(y^\text{(i)}\)分别代表一张训练数据的图片和训练数据图片代表的分类结果,在公式里面求和是希望考虑所有的样本情况。由于用于训练的图片是事先标注好的属于某一个类别,所以最终的概率向量的每一个分量不是\(0\)就是\(1\),比如说\(\{0, 1,0\}\), \(\{0,0,1\}\)之类的。
那么问题来了,我们如何来判断目前\(\theta\)的输出概率更接近于真实的概率呢?在这里我们能用到一个现成的工具: KL Divergence (KL散度), KL 散度是用来判断两个概率分布的距离,其公式为(假设我们要判断从概率分布P到概率分布Q的距离):
\[D_\text{KL}(P||Q)=-\sum_{i} P(i) log \frac{Q(i)}{P(i)}\]
所以说在我们这里就成为:
\[D_\text{KL}(Y||\hat{Y})=-\sum_{i} y^\text{(i)} log \frac {\hat{y}^\text{(i)}}{y^\text{(i)}}\]
在这里\(y^\text{(i)}\)指的是标注好的输出,而\(\hat{y}^\text{(i)}\)指的是算法的输出。
那么我们的优化目标就变成了使得\(D_\text{KL}\)最小。
交叉熵
这里不想叙述太多关于熵和交叉熵的基本知识,简单来说交叉熵是用来计算两个函数或者概率之间的距离,计算的方式也是使用的KL Divergence,在机器学习的世界里面大概可以认为交叉熵和最大似然估计是一回事,如果看到这两个术语应该把他们联系在一起。
具体可以参考下面的几篇文章:
1) Andrew Moore关于信息论的Tutorial。
2) A Friendly Introduction to Cross-Entropy Loss
与深度学习的关系
那么最大似然估计(交叉熵)与深度神经网络有什么关系呢?如果你写过TensorFlow的程序的话,你会注意到程序的最后往往会加上一个Softmax函数。Softmax函数一个重要的性质就是把输出归一化转换到每一个对应分类的概率。一旦转换为概率之后,我们就可以用到最大似然估计(交叉熵)的方式来求得最大似然或者最小交叉熵。
在这里推荐Tobe同学的一篇总结Cross Entropy在Tensorflow中应用的文章:
其他参考资料
1) https://www.autonlab.org/_media/tutorials/mle13.pdf
2) http://www.mi.fu-berlin.de/wiki/pub/ABI/Genomics12/MLvsMAP.pdf
最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络的更多相关文章
- 最大似然估计(Maximum likelihood estimation)(通过例子理解)
似然与概率 https://blog.csdn.net/u014182497/article/details/82252456 在统计学中,似然函数(likelihood function,通常简写为 ...
- 最大似然估计(Maximum likelihood estimation)
最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:"模型已定,参数未知".简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差 ...
- 交叉熵cross entropy和相对熵(kl散度)
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...
- Maximum Likelihood及Maximum Likelihood Estimation
1.What is Maximum Likelihood? 极大似然是一种找到最可能解释一组观测数据的函数的方法. Maximum Likelihood is a way to find the mo ...
- 似然函数 | 最大似然估计 | likelihood | maximum likelihood estimation | R代码
学贝叶斯方法时绕不过去的一个问题,现在系统地总结一下. 之前过于纠结字眼,似然和概率到底有什么区别?以及这一个奇妙的对等关系(其实连续才是f,离散就是p). 似然函数 | 似然值 wiki:在数理统计 ...
- Linear Regression and Maximum Likelihood Estimation
Imagination is an outcome of what you learned. If you can imagine the world, that means you have lea ...
- 均匀分布(uniform distribution)期望的最大似然估计(maximum likelihood estimation)
maximum estimator method more known as MLE of a uniform distribution [0,θ] 区间上的均匀分布为例,独立同分布地采样样本 x1, ...
- 【MLE】最大似然估计Maximum Likelihood Estimation
模型已定,参数未知 已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值.最大似然估计是建立在这样的思想上:已知某个参数能使这个 ...
- 理解交叉熵(cross_entropy)作为损失函数在神经网络中的作用
交叉熵的作用 通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置n个输出节点,无论在浅层神经网络还是在CNN中都是如此,比如,在AlexNet中最后的输出层有1000个节点: 而即便是R ...
随机推荐
- Java简单工厂模式以及来自lambda的优化
前言 设计模式是软件工程中一些问题的统一解决方案的模型,它的出现是为了解决一些普遍存在的,却不能被语言特性直接解决的问题,随着软件工程的发展,设计模式也会不断的进行更新,本文介绍的是经典设计模式 ...
- 数据库中有的字段为null时,反馈到页面上是什么也不显示?如何用一个【无】字来代替呢?
<asp:ListView ID="listViewCustomer" DataSourceID="ods_Customer" runat="s ...
- Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置
什么是hexo Hexo 是一款基于node 的静态博客网站生成器作者 :tommy351是一个台湾的在校大学生...相比其他的静态网页生成器而言有着,生成静态网页最快,插件丰富(已经移植了大量Oct ...
- 常用Linux操作命令
查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中的核数:cat /proc ...
- HTML配色工具!在线配色工具
url地址: https://color.adobe.com/zh/create/color-wheel/ 编者前语: 很多刚开始编写网页的菜鸟,都不知道怎么搭配色彩,刚开始的时候,我也是这样的. ...
- C 结构体零散知识点
1.结构体无法把自己作为成员,但可以包含指向自己的指针成员 2.定义不完整结构类型(类型,结构,占用空间无法确定,如void指针,声明没有指明数组长度数组)只能使用小标签,即struct struct ...
- zookeeper 笔记-小结
1.zookeeper为分布式应用设计的分布式开源协调服务 2.分布式应用可以建立在同步配置管理,选举,分布式锁,分组和命名等服务的更高级别的实现基础上 3.znode维护数据,ACL时间戳等交换版本 ...
- 静默获取微信用户openid如此简单,只需要一句话
页面A getopenid.php <?php /** * Created by PhpStorm. * User: sunjianyin * Date: 2017/10/7 * Time: 下 ...
- 视频加载logo 2
推荐这个网站 http://www.flaticon.com/ http://www.flaticon.com/search?word=spinner 旋转图标 http://www.flatico ...
- @RequestBody对象为空,异常Required request body is missing
1.异常 org.springframework.http.converter.HttpMessageNotReadableException: Required request body is mi ...