最近在看深度学习的"花书" (也就是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) 与深度神经网络的更多相关文章

  1. 最大似然估计(Maximum likelihood estimation)(通过例子理解)

    似然与概率 https://blog.csdn.net/u014182497/article/details/82252456 在统计学中,似然函数(likelihood function,通常简写为 ...

  2. 最大似然估计(Maximum likelihood estimation)

    最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:"模型已定,参数未知".简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差 ...

  3. 交叉熵cross entropy和相对熵(kl散度)

    交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...

  4. Maximum Likelihood及Maximum Likelihood Estimation

    1.What is Maximum Likelihood? 极大似然是一种找到最可能解释一组观测数据的函数的方法. Maximum Likelihood is a way to find the mo ...

  5. 似然函数 | 最大似然估计 | likelihood | maximum likelihood estimation | R代码

    学贝叶斯方法时绕不过去的一个问题,现在系统地总结一下. 之前过于纠结字眼,似然和概率到底有什么区别?以及这一个奇妙的对等关系(其实连续才是f,离散就是p). 似然函数 | 似然值 wiki:在数理统计 ...

  6. 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 ...

  7. 均匀分布(uniform distribution)期望的最大似然估计(maximum likelihood estimation)

    maximum estimator method more known as MLE of a uniform distribution [0,θ] 区间上的均匀分布为例,独立同分布地采样样本 x1, ...

  8. 【MLE】最大似然估计Maximum Likelihood Estimation

    模型已定,参数未知 已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值.最大似然估计是建立在这样的思想上:已知某个参数能使这个 ...

  9. 理解交叉熵(cross_entropy)作为损失函数在神经网络中的作用

    交叉熵的作用 通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置n个输出节点,无论在浅层神经网络还是在CNN中都是如此,比如,在AlexNet中最后的输出层有1000个节点: 而即便是R ...

随机推荐

  1. Why does eclipse automatically add appcompat v7 library support whenever I create a new project?

    Best ways to solve these: Firstly in project,Right click->properties->Android.There you can se ...

  2. 转:扩展方法(C# 编程指南)

    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...

  3. 张高兴的 Xamarin.Android 学习笔记:(二)“Hello World”

    完成环境配置后开始第一个简单项目.打开 Visual Studio 新建一个 Xamarin.Android 项目 "HelloAndroid".(GitHub:https://g ...

  4. UWP取出图片主色调

    一切都要从风车动漫的新详情页说起... 当我最初拿到风车动漫新详情页的UI设计概念图时,新详情页中有两点: 1.图片的高斯模糊 2.取出图片的主色调(主要用于tag和相关动漫的标题背景) 大概就是要这 ...

  5. 初学者易上手的SSH-hibernate02 三种查询方式

    在上一章中已经搭建好了一个hibernate的环境,那么这一章我们就使用这个环境来进行基本CRUD.在这之前我们先了解一个东西:主键生成策略.就是当向数据库表中插入记录的时候,这个记录的主键该如何生成 ...

  6. Java中多态的理解

    最近学习Java里面的多态下面是个人的整理: 多态存在的3个必要条件: 1.要有继承 2.要有方法的重写 3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会 ...

  7. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  8. ueditor编辑器插件 chrome中图片上传框延时问题

    最近在项目中使用ueditor插件进行文字的在线编辑功能时,发现这个插件的图片上传弹框在chrome浏览器延迟非常的厉害.经过多方搜索,终于解决.现将解决方案记录如下: 1.修改/Ueditor/di ...

  9. java分页算法,传入当前pageIndex,pageSise,dataTotal可计算出页面上显示的页码,和是否启动上一页下一页

    public class CalculationPage { private Boolean showStartPagerDot; private Boolean showEndPagerDot; p ...

  10. java 调用webservice接口

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...