【生成模型】极大似然估计,你必须掌握的概率模型

article/2025/7/20 1:37:10

上一期为大家说明了什么是无监督生成模型。在无监督生成模型中,极大似然法一直扮演着非常核心的位置,我们必须对它有深刻的理解,本期小米粥将为大家讲一下极大似然法的那些事情。

                                          作者&编辑 | 小米粥

1 一个小游戏:取球猜概率

我们先来看一个简单有趣的例子。一个盒子中有黑色、白色两种颜色的球,然后你从盒子中取出一个球,记下其颜色,将球放回到盒子里,再取出一个球记录其颜色......重复1000次上述操作,这时你发现黑球出现了600次,白球出现了400,那我若问你盒子中黑球的概率是多少?你会不假思索回答:0.6。

我们对上述回答进行几个讨论。首先,0.6的答案是否正确?可以明确的是,这不是一个严谨的答案,若盒子中黑球的概率不是0.6而是0.5,0.4甚至0.0001,也有可能在1000次的取球中出现600次黑球,400次白球的情况,只不过黑球概率越偏离0.6,出现这样情况的可能性越小,故严谨的回答是:黑球概率最可能是0.6。这便是一个简单的使用极大似然的场景,根据黑白球的出现情况去对黑球概率这个参数进行估计,做估计的依据是:概率是什么数值时最符合当前的情况,即当前情况的可能性最大,换成数学点的语言就是似然极大。因为黑球概率为0.6时最可能出现这样的情况,故“盲猜”为0.6。需要说明的是,我们仅将讨论范围限制在频率学派,并不涉及贝叶斯学派的想法。

第二个讨论是,如果小明想复刻一个完全一样的盒子,需要怎么做?有放回地取1000次球,发现黑球出现了600次,白球出现了400,然后使用极大似然法估计黑球出现概率为0.6,接着他可以在盒子里放置若干数量的球,将黑球概率调整为0.6。其实他已经搭建了一个生成模型,他从训练数据集中估计出了黑球概率这个参数,接着调整盒子中黑球的数量,然后以后需要产生样本时,只需在他复刻的盒子中有放回采样即可。这只是一个十分简单的例子,实际使用极大似然法时要复杂得多,但是其本质是一样的。

2 极大似然法

在生成模型中,概率密度函数p(x)一直扮演着核心的位置。对于一批从pdata(x)中独立采样得到的训练样本集x(1),x(2)...x(N),(注意我们要求训练样本集的数据是独立同分布的),我们希望用训练数据来训练一个生成模型pg(x),这个生成模型可以显式或隐式地学习到数据的分布pdata(x)或者获得pg(x)的(近似)表达式,即pdata(x) ≈pg(x)。接下来在推断过程中,可以通过在pg(x)上显式或隐式地采样而得到一批样本,并且使获得的样本(近似)符合概率分布pdata(x)。

我们先介绍使用极大似然估计的生成模型,充分理解极大似然原理对理解生成模型有非常重要的意义。需要说明,并不是所有的生成模型都使用极大似然法,有些生成模型默认不使用极大似然法, 但是也可以做一些修改令其使用最大似然法 (GAN就属于这一类)。

极大似然估计是对概率模型参数进行估计的一种方法,例如有一个包含N个样本的数据,数据集中每个样本都是从某个未知的概率分布pdata(x)中独立采样获得的,若我们已经知道pg的形式,但是pg的表达式里仍包含未知参数θ,那问题就变成了:如何使用数据集来估算pg(x)中的未知参数θ?例如 pg(x) 是一个均值和方差参数还未确定的正态分布,那么如何用样本估计均值和方差的准确数值?

在极大似然法中,首先使用所有样本计算似然函数L(θ):

似然函数是一个关于模型参数θ的函数,当选择不同的参数θ时,似然函数的值是不同的,它描述了在当前参数θ下,使用模型分布pg(x;θ)产生数据集中所有样本的概率。一个朴素的想法是:在最好的模型参数θML下,产生数据集中的所有样本的概率是最大的,即

但实际在计算机中,多个概率的乘积结果并不方便储存,例如计算过程中可能发生数值下溢的问题,即对比较小的、接近于0的数进行四舍五入后成为0。我们可以对似然函数取对数来缓解该问题,即log[L(θ)],并且仍然求解最好的模型参数θML使对数似然函数最大,即

可以证明两者是等价的,但是将似然函数取对数后会把概率乘积形式转换为对数求和的形式,大大方便了计算。将其展开后,有

可以发现,使用极大似然估计时,每个样本xi都希望拉高它所对应的模型概率值pg(x(i);θ),如图所示,但是由于所有样本的密度函数pg(x(i);θ)的总和必须是1,所以不可能将所有样本点都拉高到最大的概率;一个样本点的概率密度函数值被拉高将不可避免的使其他点的函数值被拉低,最终的达到一个平衡态。

我们也可以将上式除以N,便可以看到极大似然法最大化的目标是在经验分布下样本概率对数的期望值,即

另一种对极大似然估计的理解是:极大似然估计本质在最小化训练集上的经验分布和模型分布pg(x;θ)之间的KL散度值,即

而KL散度的表达式为

由于θ值与第一项无关,故只考虑第二项,有

可以发现两者是完全一样的,也就是说极大似然估计就是希望 pg(x;θ) 和pdata(x)尽量相似,最好相似到无任何差异(KL散度值为0),这与生成模型的思想是一致的。但实际的生成模型一般不可能提前知道pg(x;θ)的表达式形式而只需要估计表达式中的参数,实际中的生成模型非常复杂,往往对pg(x;θ)无任何先验知识,只能对其进行一些形式上的假设或近似。

很多生成模型可以使用最大似然的原理进行训练。只要得到关于参数θ的似然函数L(θ)后,我们只需最大化似然函数即可,只是不同模型的差异在于如何表达或者近似似然函数L(θ)。下图的左边分支均为显式概率模型,其中完全可见置信网络模型对pg(x;θ)做出了形式上的假设,而流模型则通过定义一个非线性变换给出了pg(x;θ)的表达式,这两个模型其实都给出了似然函数L(θ)的确定表达式;而变分自编码器模型则采用近似的方法,只获得了对数似然函数log[L(θ)]的一个下界,通过最大化该下界近似地实现最大似然;玻尔兹曼机使用马尔科夫链对似然函数的梯度进行了近似。接下来,我们将分别介绍这些模型,并讨论他们的优缺点。

[1] 伊恩·古德费洛, 约书亚·本吉奥, 亚伦·库维尔. 深度学习

[2]李航. 统计机器学习

总结

本期带大家学习了非常有用的极大似然法,它对于我们深刻理解生成模型有非常重要的意义。下一期我们将对完全可见置信网络进行探讨。

个人知乎,欢迎关注

GAN群

有三AI建立了一个GAN群,便于有志者相互交流。感兴趣的同学也可以微信搜索xiaozhouguo94,备注“加入有三-GAN群”。

更多GAN的学习

知识星球是有三AI的付费内容社区,里面包超过100种经典GAN模型的解读,了解详细请阅读以下文章:

【杂谈】有三AI知识星球指导手册出炉!和公众号相比又有哪些内容?

有三AI秋季划GAN学习小组,可长期跟随有三学习GAN相关的内容,并获得及时指导,了解详细请阅读以下文章:

【杂谈】如何让2020年秋招CV项目能力更加硬核,可深入学习有三秋季划4大领域32个方向

转载文章请后台联系

侵权必究

往期精选

  • 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

  • 【GAN的优化】从KL和JS散度到fGAN

  • 【GAN优化】详解对偶与WGAN

  • 【GAN优化】详解SNGAN(频谱归一化GAN)

  • 【GAN优化】一览IPM框架下的各种GAN

  • 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程

  • 【GAN优化】GAN训练的几个问题

  • 【GAN优化】GAN训练的小技巧

  • 【GAN优化】从动力学视角看GAN是一种什么感觉?

  • 【GAN优化】小批量判别器如何解决模式崩溃问题

  • 【GAN优化】长文综述解读如何定量评价生成对抗网络(GAN)

  • 【技术综述】有三说GANs(上)

  • 【模型解读】历数GAN的5大基本结构

  • 【百战GAN】如何使用GAN拯救你的低分辨率老照片

  • 【百战GAN】二次元宅们,给自己做一个专属动漫头像可好!

  • 【百战GAN】羡慕别人的美妆?那就用GAN复制粘贴过来

  • 【百战GAN】GAN也可以拿来做图像分割,看起来效果还不错?

  • 【百战GAN】新手如何开始你的第一个生成对抗网络(GAN)任务

  • 【百战GAN】自动增强图像对比度和颜色美感,GAN如何做?

  • 【直播回放】80分钟剖析GAN如何从各个方向提升图像的质量

  • 【直播回放】60分钟剖析GAN如何用于人脸的各种算法


http://chatgpt.dhexx.cn/article/57KDLG93.shtml

相关文章

透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)

文章目录 相关资料一、什么是概率,什么是似然二、极大似然估计 Maximum Likelihood Estimation (MLE) 的含义2.1 机器学习中的极大化似然函数2.2 极大似然估计和损失函数的关系VAE最大化似然函数推导出损失函数 三、代码可视化:极大似然估计3.1 似然函数…

C#RSA密码以及利用欧几里得算法实现两数互质的判断

最近做课程设计,想到以前看过RSA密码的相关内容,于是就想用刚学的C#做一个数字加密系统。RSA加密的流程如下: 来看一个“玩具式”的例子: (1)选取两个素数p2,q11,于是N22. (2)构造数,这是小于22且不含因数2和11的自然数的个数。 (3)选一个…

判断两数互质,java实现

数组下标i和j值互质时,a[i][j] true,反之false Write a program to create an n * n Boolean array. If I and j are coprime, a [i] [J] is true, otherwise it is false /** * When Array index Mutuality ,a[i][j] true,else is false * 数组i和j值互质时&…

两个质数互质是_两个数互质是什么意思 如何判断

互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数,叫做互质数。下面是小编整理的详细内容,一起来看看吧! 两个数互质是什么意思 质数为数学中的一种概念,即两个或多…

char、wchar_t、ACHAR、WCHAR、TCHAR

最近用到上面几种不同的字符类型,下面贴上在网上收集到的资料。 1、char 单字节变量类型,最多表示256个字符。 2、wchar_t 宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned short wchar_t。 定义宽字节类型方法如下: wchar_…

wchar* 转换成 string

wchar* 转换成 string 123 windows 类型转换问题 1 // Your wchar_t* wstring ws(L"Hello World"); // your new String std::string str(ws.begin(), ws.end()); // Show String std::cout << str << std::endl; 2 std::wstring wstr(L"Test&…

wchar_t类型

今天在看前辈的项目的时候学习到了一个以前没有通过的数据类型&#xff1a;宽字符wchar_t类型。 先来看看他占多大的空间吧&#xff0c; 从图中可以看到wchar_t占的空间的大小为2个字节&#xff0c; 然后来确定一下他是无符号还是有符号的 由上图可见&#xff0c;他应该是无符号…

char与wchar_t字符串

C里的字符串类型是比较二的&#xff0c;因为有太多表示方法&#xff1a;char*、string、字符串数组、wchar_t*、wstring&#xff0c;今天就来缕一缕这些玩意。 char* char* 貌似是C字符串最基础最核心的。 看以下四个字符串声明及输出结果&#xff1a; 先说说核心&#xff0c…

wchar_t的用法

wchar_t的解释可以看这里:这里 程序和解析: 1 # include<stdio.h>2 # include<stdlib.h>3 # include<locale.h>//设置本地化<

WCHAR的简单操作

WCHAR 是双字节类型&#xff0c;一般它用来存储那些双字节而不是单字节字符.较长的字节数可以支持 在应用程序的国际发布版本里所使用的扩展字符集(如常用的Unicode字符集). 比如说&#xff1a;在中文系统下开发的软件&#xff0c;当应用到日文操作系统时&#xff0c;如果没有采…

ADI Diff-Amp Calculator差分放大器件计算器使用方法

Diff-Amp Calculator便于计算单端转差分放大&#xff0c;差分转差分放大&#xff0c;在满足输入信号和输出信号的参数要求下&#xff0c;配置元件增益自动计算Rf和Rg阻值大小。 下载地址&#xff1a;https://www.analog.com/cn/design-center/interactive-design-tools/adi-dif…

双电阻差分电流采样_差分信号和差分电路讲解 差分放大电路应用

1、什么是差分信号?为什么要用差分信号? 两个芯片要通信,我们把它们用一根导线连接起来,一个传输 1,另一个接受 1,一个传输 0,另一个接受 0,不是很好吗?为什么还要搞其他的花花肠子。 因为有干扰,各种各样的干扰,比如温度,电磁辐射等等,这些干扰使得传输的 1 不再…

双电阻差分电流采样_差分放大电路的应用

差分运算放大电路,对共模信号得到有效抑制,而只对差分信号进行放大,因而得到广泛的应用。 1、如下图是差分电路的电路构型 目标处理电压:是采集处理电压,比如在系统中像母线电压的采集处理,还有像交流电压的采集处理等。 差分同相/反相分压电阻:为了得到适合运放处理的电…

全差分放大器(FDA)的基本知识

为了获得最佳性能&#xff0c;用户必须在信号链上选择一个balun(平衡不平衡变换器&#xff09;&#xff0c;虽然这可能会导致某些应用中的耦合问题。然而&#xff0c;耦合问题并不是总是发生&#xff0c;特别是在某些需要DC分量的测试和测量应用中更是如此。 全差分放大器 (FDA…

3.0.MATLAB版线性代数-矩阵加法、数乘、乘法、求逆

矩阵运算及其应用(加法、数乘、乘法、求逆) 加法数乘运算规则乘法矩阵乘法定义线性变换多次线性变换等于矩阵的连乘线性方程组看做矩阵乘法矩阵的转置矩阵的逆(“除法”)矩阵逆的定义矩阵逆的性质求逆矩阵的方法(求逆1)MATLAB中求逆矩阵的分块向量等式初等矩阵初等矩阵和…

算法:动态规划—矩阵链相乘

问题描述 给定n个矩阵&#xff5b;A1,A2,…,An&#xff5d;&#xff0c;其中Ai与A i1是可乘的&#xff0c;i1&#xff0c;2…&#xff0c;n-1。如何确定计算矩阵连乘积的计算次序&#xff0c;使得依此次序计算矩阵连乘积需要的数乘次数最少 解法 1.穷举法&#xff1a; 列举…

Java实现矩阵的加、减、乘、数乘、转置、幂运算

Java实现矩阵的加、减、乘、数乘、转置、幂运算 首先需要一个矩阵对应的类 Matrix. 命名为Matrix import java.util.Arrays; /*** author yiran* creat 2021-11-26-13:58*/ public class Matrix{// 矩阵private double[][] matrix;// m x n private int m;private int n;publ…

【数理知识】向量数乘,内积,外积,matlab代码实现

序号内容1【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现2【数理知识】矩阵普通乘积&#xff0c;哈达玛积&#xff0c;克罗内克积&#xff0c;点乘&#xff0c;点积&#xff0c;叉乘&#xff0c;matlab代码实现 文章目录 1. 向量基本形式2. …

Eigen入门系列 —— Eigen::Matrix矩阵基本加减、数乘运算

Eigen入门系列 —— Eigen::Matrix矩阵基本加减、数乘运算 前言程序说明输出结果代码示例 前言 随着工业自动化、智能化的不断推进&#xff0c;机器视觉&#xff08;2D/3D&#xff09;在工业领域的应用和重要程度也同步激增&#xff08;识别、定位、抓取、测量&#xff0c;缺陷…

07-行向量列向量_向量的运算 加法,数乘,减法,转置

行向量和列向量 其实它们非常简单&#xff0c;所谓的行向量就是我们的向量表示&#xff0c;一组数这组数码成一行&#xff0c;那么所谓的列向量呢&#xff1f;就是这组数码成一列而已&#xff0c;那么对于行向量还是列向量&#xff0c;在我们的学习中是并没有区别的&#xff0…