MachineLearning(9)-最大似然、最小KL散度、交叉熵损失函数三者的关系

最大似然-最小KL散度-最小化交叉熵损失-三者的关系

问题缘起:给定一组数据(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到这组数据服从的分布。此种情况下,分布规律用概率密度p(x)表征。

问题归处:如果能够建模/近似建模p(x),就能够利用p(x)进行采样/数据生成。离散化x的空间{xi}i=1n\{x_i\}_{i=1}^n{xi}i=1n, 计算{p(xi)}i=1n\{p(x_i)\}_{i=1}^n{p(xi)}i=1n,取概率最大的xkx_kxk作为生成样本。

最大似然:常用来解决这类问题。具体做法:参数还一个概率分布qθ(x)q_\theta(x)qθ(x),是的观测样本(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm)qθ(x)q_\theta(x)qθ(x)的似然函数最大。

似然函数:表示的是已知随机变量的取值时,未知参数的取值可能性:L(θ|x)=P(X=x|θ)。直观理解就是在参数θ\thetaθ情况下,出现(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm)这组数据的可能性,数学表达式为(概率密度积分记为概率):
L(θ∣x)=∏i=1mpθ(xi)(1)L(θ|x)=\prod_{i=1}^m p_\theta(x_i)\tag{1}L(θx)=i=1mpθ(xi)(1)

我们需要调整参数θ\thetaθ来使这个出现这组数据的可能性最大,即最大似然。

为了简化似然函数中的连乘计算,常常会使用对数似然函数,使得连乘转变为连加(取对数不会改变似然的最优解–最优解是自变量的值,最优解值才是因变量的值)。

最大化对数似然问题可以统一为下式,即 最优的参数 是使 对数似然的值最大的θ\thetaθ
θ∗=arg⁡max⁡θlog⁡∏i=1mpθ(xi)=arg⁡max⁡θ∑i=1mlog⁡pθ(xi)=arg⁡max⁡θ∑i=1m1mlog⁡pθ(xi)≈arg⁡max⁡θEx∼p[log⁡pθ](2)\theta^* = \arg \max_{\theta} \log\prod_{i=1}^m p_\theta(x_i)\\ =\arg \max_{\theta} \sum_{i=1}^m\log p_{\theta}(x_i)\\ =\arg \max_{\theta} \sum_{i=1}^m\frac{1}{m}\log p_{\theta}(x_i)\\ \approx\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log p_{\theta}]\tag{2}θ=argθmaxlogi=1mpθ(xi)=argθmaxi=1mlogpθ(xi)=argθmaxi=1mm1logpθ(xi)argθmaxExp[logpθ](2)

上式子第三行到第四行的转换 为 均值 近似 期望 的离散化计算过程。ppp为目标函数,pθp_\thetapθ用于近似目标函数为了避免混淆,将pθp_\thetapθqθq_\thetaqθ表示。上式子可改写成:
θ∗=arg⁡max⁡θEx∼p[log⁡qθ](3)\theta^* =\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log q_{\theta}]\tag{3}θ=argθmaxExp[logqθ](3)

最小KL散度:在上式子中加上一项与优化无关的常数项:
θ∗=arg⁡max⁡θ{Ex∼p[log⁡qθ]−Ex∼p[log⁡p]}=arg⁡max⁡θ{∫xp(x)log⁡qθ(x)p(x)dx}=arg⁡max⁡θ−KL(p,q)=arg⁡min⁡θKL(p,q)(4)\theta^* =\arg \max_{\theta}\{\mathbb{E}_{x\sim p}[\log q_{\theta}]-\mathbb{E}_{x\sim p}[\log p]\}\\ =\arg \max_{\theta}\{\int_xp(x)\log\frac{q_\theta(x)}{p(x)}dx\}\\ =\arg \max_{\theta} -KL(p,q)\\ =\arg \min_{\theta} KL(p,q)\tag{4}θ=argθmax{Exp[logqθ]Exp[logp]}=argθmax{xp(x)logp(x)qθ(x)dx}=argθmaxKL(p,q)=argθminKL(p,q)(4)

交叉熵损失
式(2)添一个负号后可以转换为最小化交叉熵的问题:
arg⁡max⁡θEx∼p[log⁡pθ]=arg⁡min⁡θcrossentropy(p,qθ)(5)\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log p_{\theta}]\\=\arg \min_{\theta}cross\ entropy(p,q_\theta)\tag{5}argθmaxExp[logpθ]=argθmincross entropy(p,qθ)(5)

综上
1.求解最大似然问题 等价于 最小化参数分布和目标分布的KL散度

2.常用于分类问题中的交叉熵损失函数 本质是 极大似然问题,也就是在最小化 目标分布模型输出分布的之间的KL散度问题。在实际K分类问题中, 目标分布用one-hot编码表示; 神经网络模型最后全联接层输出的K个得分数值 可以通过softmax 归一化成对应类别的概率分布,即模型输出分布。

参考资料:
似然函数参见百度百科:https://baike.baidu.com/item/%E4%BC%BC%E7%84%B6%E5%87%BD%E6%95%B0/6011241?fr=aladdin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP redirect 页面重定向使用详解与实例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以实现页面的重定向(跳转)功能。redirect 方法语法如下:$this->redirect(string url, array params, int delay, string msg) 参数说明:url 必须,重定向的 URL 表达…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的启发,本文提出两个算法用于从数据中学习深度能…

windows下的gvim配置

首要任务是下载安装Gvim7.3 。 安装完后,gvim菜单中文出现乱码,在_vimrcset文件中增加: " 配置多语言环境,解决中文乱码问题 if has("multi_byte") " UTF-8 编码 set encodingutf-8 set termencodingutf…

leetcode104 二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全类型转换的讨论

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于对数似然梯度的难以计算,能量模型的最大似…

leetcode105 前序中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 思路: 1、…

c++的虚拟继承 的一些思考吧

虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class …

对于linux socket与epoll配合相关的一些心得记录

对于linux socket与epoll配合相关的一些心得记录 没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的int nRecvBuf32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉树的前序遍历

给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 思路:模仿递归的思路压栈即可。 /*** Definition for a bi…

AJAX大总结

1、AJAX概述 1.1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。 …

我对STL的一些看法(一)初步认识STL

后面一段时间我将会给大家分享我自己学到STL以及应用的时候遇到的问题还有他的一些精髓,可能开始的逻辑会有些乱吧,不过后面还会不断的整理和优化,让自己看明白也让更多的读者看的清楚。 最近刚闲下来,先说说什么是STL: 不知道你是否有过这样的经历。在大学,你准备着手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive:自身做回归变量,用之前若干时刻的随机变量 来建模 之后某些时刻 随机变量的模型。 N维随机变量的…

我对STL的一些看法(二)认识vector容器

先说vector吧。 C++ Vector(向量容器) 是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 vector 的数据安排以及操作方式,与 array 非常像似。两者的唯㆒差别在于空间的…

git大总结

git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone 获取一个url对应的远程Git repo, 创建一个local copy. 一般的格式是git clone [url]. clone下来的repo会以url最后一个斜线后面的名称命名,创…

我对STL的一些看法(三)认识list容器

C++ List(双向链表) 是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。由于…

C++(4)--初识变量、数据类型

C变量1.C 命名规则2.C 命名规范3.C 数据类型sizeof ()4.声明和使用变量4.1使用整型变量4.2使用单精度浮点型变量4.3使用双精度浮点型变量5.附送-cout 设置宽度,对齐方式6.算术运算符和表达式6.1除法、取余6.2自加、自减7.强制类型转换《老九学堂C课程》《C primer》…

我对STL的一些看法(四)认识deque容器

Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元…

我对STL的一些看法(五)初识关联容器

3关联容器 pair类型 这个是一个简单的标准库类型,该类型在utility头文件中定义,我们来看看他主要的操作: pair<T1 ,T2> p1; 创建一个空的pair对象 pair<T1,T2> p1(v1,v2);创建一个pair对象,他的两个元素分别为T1类型的v1,T2类型的v2 make_pair(v1,v2…

关系数据库——mysql数据类型大总结

整数类型&#xff1a; 实数类型&#xff1a; 定点数&#xff1a;DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值。 DECIMAL(M,D)&#xff0c;其中M表示十进制数字总的个数&#xff0c;D表示小数点后面数字的位数。 如果存储时&#xff0c;整…