三步完成吉布斯采样Gibbs sampling

article/2025/9/19 11:22:35

吉布斯采样的具体执行过程只需要三个步骤,非常非常简单好理解,其它相关的背景知识能帮助加深理解。

一、Preliminaries

Monte Carlo methods

  1. 它是很宽泛的一类计算方法,依赖重复的随机采样去获得数值结果。a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results。
  2. 它的本质是使用随机性去解决确定性的问题。The underlying concept is to use randomness to solve problems that might be deterministic in principle。 it solves deterministic problems using a probabilistic analog(模拟退火也是这样)。MC方法在数学和物理上用的很多,在不可能使用别的方法(很难实现)的时候MC就特别有用。
  3. 它主要用于解决三种问题:优化,数值积分numerical integration,从概率分布中采样 generating draws from a probability distribution(采出一组满足那个分布的实际取值)。
    原则上,蒙特卡罗方法可以用来解决任何具有概率解释having a probabilistic interpretation的问题。根据大数定律By the law of large numbers,某一随机变量的期望可以用该变量的样本的经验均值(即样本均值)来近似。当变量的概率分布参数化时(参数确定下来时),数学家们经常使用马尔可夫链蒙特卡罗(MCMC)采样器 a Markov chain Monte Carlo (MCMC) sampler。
  4. 其核心思想 central idea是设计一个具有给定平稳概率分布的马尔科夫链模型 a prescribed stationary probability distribution。根据遍历理论By the ergodic theorem,用MCMC采样器的随机状态的经验测度来近似平稳分布the stationary distribution is approximated by the empirical measures of the random states of the MCMC sampler。

Markov chain Monte Carlo methods(MCMC方法)

  1. MCMC方法包含了一类用于从特定概率分布中采样的算法。
    Markov chain Monte Carlo methods中的Markov chain 是因为这些方法生成的序列都是马尔科夫链,每个值都只和自己前后几个值有关; Monte Carlo是因为这些方法用的是随机化的方法在解决确定性问题,从已知概率分布中采样出一系列符合这个分布的样本。
  2. 它们是通过构建一个自身的分布接近它的平稳分布的马尔科夫链,这个马尔科夫链就是被采样的分布的一组采样值,这需要观察这个马尔科夫链一些步骤才能完成,且观察的步骤越多,得到的采样值的分布就越接近于想要的分布(即多重复几次以使马尔科夫链达到平稳分布By constructing a Markov chain that has the desired distribution as its equilibrium distribution, one can obtain a sample of the desired distribution by observing[clarification needed] the chain after a number of steps. The more steps there are, the more closely the distribution of the sample matches the actual desired distribution.
  3. MCMC方法最初是被用于计算多维积分的数值近似值。
  4. MCMC方法从一个连续随机变量中,以和已知函数成比例的概率密度生成一组采样样本,这组样本就可以用于计算这个变量的期望和方差

二、基础概念

  1. 吉布斯采样就是一种MCMC方法,用于在直接采样联合分布很困难时,生成某特定多参数的概率分布的一组近似观测值a sequence of observations which are approximated from a specified multivariate probability distribution。

联合分布不被明确知道或者联合分布很难直接采样但每个变量的条件分布已知且容易采样时,吉布斯采样适用is applicable。

比如在RBM的训练中,假设隐层有10个单元,他们的联合分布已知,那么直接采样得到一个十元向量很难,这时候就可以用吉布斯采样(隐层单元的条件独立性是吉布斯采样可以适用的重要的必需的基础)。

  1. 吉布斯采样是一种用于统计推断的方法,尤其是贝叶斯推断 a means of statistical inference, especially Bayesian inference。它是一种随机化算法(即使用随机数的算法),是用于统计推断的确定性算法(如EM算法)的替代品an alternative。
    最初的吉布斯采样是Metropolis–Hastings 算法的一个特例。但后来得到扩展,**它可以被看成是一个通用的用于通过依次采样每一个变量从一组变量中采样的框架,**而且可以把Metropolis–Hastings 算法,甚至更高级的算法比如 slice sampling切片采样, adaptive rejection sampling 自适应拒绝采样and adaptive rejection Metropolis algorithms,合并进来实现采样过程的一些步骤。

  2. 这组生成的近似观测值可以用于近似联合概率分布;也可以去近似某个变量的边缘分布to approximate the marginal distribution of one of the variables;或者近似其中部分变量的联合分布;或者计算某个变量的期望the expected value of one of the variables(通过积分compute an integral)。

  3. 就像其他MCMC算法一样,吉布斯采样生成的一组近似观测值是一个马尔科夫链,即每个观测值只和附近几个值有相关性。所以如果要采样出完全独立的观测值,需要特别注意这一点care must be taken if independent samples are desired。而且一般来自马尔科夫链开端的那些样本不能很好的表示原概率分布,会被去掉be discarded.而且采样值的马尔可夫链越长越有利于逼近原分布。

  4. 吉布斯采样依次in turn从每个变量的分布中生成一个实例instance,基于其他变量的当前值 conditional on the current values of the other variables。可以证明,这样生成的采样值序列是一个马尔科夫链,并且这个马尔科夫链的平稳分布就是我们想要采样的那个后验分布。

  5. 对于从多变量的联合分布中采样出一个向量(所有变量是向量的分量),从条件分布中采样比做积分算边缘概率简单得多。

The point of Gibbs sampling is that given a multivariate distribution it is simpler to sample from a conditional distribution than to marginalize by integrating over a joint distribution.

吉布斯采样尤其适用于采样贝叶斯网络的后验分布,因为一般贝叶斯网络就是用一组条件分布描述的。

Gibbs sampling is particularly well-adapted to sampling the posterior distribution of a Bayesian network, since Bayesian networks are typically specified as a collection of conditional distributions.

三、具体步骤(三步完成吉布斯采样)

假设要采样的联合分布是 P ( x 1 , x 2 , ⋯   , x n ) P(x_1,x_2,\cdots,x_n) P(x1,x2,,xn)
要采样k个样本向量
X ( i ) = ( x 1 ( i ) , x 2 ( i ) , ⋯   , x n ( i ) ) , i = 1 , 2 , ⋯   , k \boldsymbol X^{(i)}=(x_1^{(i)},x_2^{(i)},\cdots,x_n^{(i)}),i=1,2,\cdots,k X(i)=(x1(i),x2(i),,xn(i)),i=1,2,,k

那么we proceed as follows:

  1. 随机初始化一个 X ( i ) \boldsymbol X^{(i)} X(i)
  2. 由于我们想采样到的 X ( i + 1 ) \boldsymbol X^{(i+1)} X(i+1)是一个向量,所以我们对其中的分量依次进行采样 。
    即采样 x j ( i + 1 ) x_j^{(i+1)} xj(i+1)时,是基于取值确定的 x 1 ( i + 1 ) x_1^{(i+1)} x1(i+1) x j − 1 ( i + 1 ) x_{j-1}^{(i+1)} xj1(i+1) x j + 1 ( i ) x_{j+1}^{(i)} xj+1(i) x n ( i ) x_n^{(i)} xn(i)进行的,即从这个条件分布中采样去更新 x j ( i + 1 ) x_j^{(i+1)} xj(i+1)。注意第从j+1个分量开始都是用的 X ( i ) \boldsymbol X^{(i)} X(i)的对应取值哦。
    这样依次更新,j从1取到n,得到 X ( i + 1 ) \boldsymbol X^{(i+1)} X(i+1)
    在这里插入图片描述
  3. 重复第二步k次。

四、数学基础

分量的条件分布和联合分布成正比,分母不是 x j x_j xj的函数,所以对于 x j x_j xj的所有取值都是一样的,所以就相当于一个 x j x_j xj分布上的归一化函数。所以说对条件分布采样实际和对联合分布采样的效果是一样的。
在这里插入图片描述

五、块吉布斯采样Blocked Gibbs sampler

就是把两个或更多的变量组合在一起,对他们的联合分布进行采样,一次更新多个变量,而不是像上面描述地那样一次更新一个变量。

比如,隐马尔科夫模型中,用块吉布斯采样和前向-后向算法forward-backward algorithm一次得到(in one go)所有潜变量的采样值。

在RBM的训练中,显层和隐层的所有单元满足一个多变量概率分布,把显层单元作为一块,隐层单元作为一块,显层块的取值确定时,对隐层块采样,一次得到所有隐层单元的取值,反之亦然。

即,假设显层单元为 v = ( v 1 , v 2 , ⋯   , v n ) \boldsymbol v=(v_1,v_2,\cdots,v_n) v=(v1,v2,,vn)
隐层单元为 h = ( h 1 , h 2 , ⋯   , h m ) \boldsymbol h=(h_1,h_2,\cdots,h_m) h=(h1,h2,,hm)

则直接从联合分布 p ( v , h ) p(\boldsymbol v,\boldsymbol h) p(v,h)中采样很难,所以利用块吉布斯采样,先从 p ( h ∣ v ) p(\boldsymbol h|\boldsymbol v) p(hv)中采样得到 h \boldsymbol h h向量,再从 p ( v ∣ h ) p(\boldsymbol v|\boldsymbol h) p(vh)中采样得到 v \boldsymbol v v向量,从而更新了模型的所有变量。


http://chatgpt.dhexx.cn/article/Bypiqpg4.shtml

相关文章

MCMC笔记:吉布斯采样(Gibbs)

1 介绍 吉布斯采样是一种特殊的MH采样 MCMC笔记Metropilis-Hastings算法(MH算法)_UQI-LIUWJ的博客-CSDN博客 此时我们要采样的分布是一个高维的情况 吉布斯采样的思想就是一维一维地进行采样,采某一个维度的时候固定其他的维度 吉布斯采…

吉布斯采样

回顾一下MC 采样: f(x)是已知 的概率分布函数,现在 找到一系列的x服从这个概率分布。也就是在f(x)当中抽取一些样本x。后来就提出了: F(x)是f(x)的累积概率分布,只需 在0到1上均匀采样得到i,然后将这个样本…

随机采样和随机模拟:吉布斯采样Gibbs Sampling

http://blog.csdn.net/pipisorry/article/details/51373090 吉布斯采样算法详解 为什么要用吉布斯采样 通俗解释一下什么是sampling。 sampling就是以一定的概率分布,看发生什么事件。举一个例子。甲只能E:吃饭、学习、打球,时间T&#xff1a…

吉布斯抽样

吉布斯采样是生成马尔科夫链的一种方法,生成的马尔科夫链可以用来做蒙特卡洛仿真,从而求得一个较复杂的多元分布。 吉布斯采样的具体做法:假设有一个k维的随机向量,现想要构造一条有n个样本的k维向量(n样本马尔科夫序列…

从马尔科夫过程到吉布斯采样(附程序示例)

目标:如何采取满足某个概率分布的一组数据,比如如何给出满足标准正太分布的1000个点,当然该分布比较简单,生成满足此分布的1000个点并不难,对matlab,python 等都是一行语句的事,但是如果是一个不…

sqlloader导出数据指定分隔符_来一份数据库全家桶~

♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩ 点击蓝字关注我们♫. ♪ ~ ♬..♩~ ♫. ♪..♩~ ♫. ♪ ~ ♬..♩..♩~ ♫. ♪ ~ ♬..♩..…

使用sqlloader导入数据(千万级)-oracle

前言:笔者业务场景:当前表无分区,需将数据导出,创建分区后,重新导入当前表;当然,该方法同样使用于普通的数据迁移,或新旧表数据同步(表结构一致) 一、涉及数…

oracle-sqlloader的简单使用

目录 使用场景 简单使用 编写ctl文件 执行命令 使用场景 当你拿到一个txt文件,里面的数据是用统一符号分割的,例如如下文件,就可以考虑使用sqlloader导入到oracle数据库。 简单使用 编写ctl文件 OPTIONS (skip1,rows128) -- sqlldr 命…

使用Sqlloader处理数据

Oracle数据导出工具sqluldr2可以将数据以csv、txt等文件格式导出,适用于大批量数据的导出,导出速度非常快,导出后可以使用Oracle SQL Loader工具将数据导入到数据库中。下面将介绍Sqluldr2和sqlldr在Windows平台下的数据处理过程。 一、获取…

oracle之sqlloader

oracle的sqlloader可以从文件批量的将数据插入到数据库中,避免了使用SQL一句一句插入给数据库带来的压力。在工作中,简单的使用了一下,并没有深入的研究,下面是一个例子。 ① 数据文件信息: tina,12,34…

oracle sqlloader 的简单使用

1、EMP1 建表语句: CREATE TABLE EMP1 (EMPNO NUMBER(8) NOT NULL,ENAME VARCHAR2(10),HIREDATE DATE,JOB VARCHAR2(20),SAL NUMBER(8),DEPTNO NUMBER(8) NOT NULL ); 2、test.txt 数据文件: 1|Abandon1|2022-02-01|销售人员1|2500…

linux sql*loader-704,初见Oracle SqlLoader工具

因为大量的数据存在于文本文件中,需要导入到Oracle,有幸接触到神器SqlLoader. 在安装好Oracle的主机上单独运行sqlldr命令 sqlldr 将看到关于此工具的说明: 也只是简单的一个例子,帮助初次接触的你。 编写一个ctl文件,Oracle数据库…

mysql sql loader_Sql Loader的简单使用

之前总结的关于SQL*Loader的用法,今天又用到,又翻出来看看 SQL*Loader 可将外部文件中的数据加载到Oracle DB的表中。它具有一个功能强大的数据分析引擎,因此对数据文件中数据的格式没有什么限制。 SQL*Loader 使用以下文件:输入数…

Linux中sql*loader-350,SqlLoader

Sqlloader的步骤 1) Oracle 数据库端必须已经建好了需要导入的数据表的结构 2) 存在数据源文件 3) 手工编辑一个XXX.CTL 的控制文件 4) 命令行加载数据 Sqlldr命令具体信息如下图 Sqlldr运行的一个具体例子 sqlldr userid=user1/123456 control=bcp1.ctl log=log/bcp1.log bad=…

如何使用SqlLoader导入数据

Oracle 使用sqlloader导入数据非常方便,下面是我的导入步骤: 第一步,检查机器安装了sqlldr.exe没? 2、建一张表 CREATE TABLE student1 ( sname varchar (20), sage INTEGER, semall varchar (20), sphone VARCHAR (20), saddress varchar (…

MyBatis select标签

在 MyBatis 中,select 标签是最常用也是功能最强大的 SQL 语言,用于执行查询操作。 select 示例语句如下。 SELECT id,NAME,url FROM website WHERE NAME LIKE CONCAT (‘%’,#{name},‘%’) 以上是一个 id 为 selectAllWebsite 的映射语句&#xff0…

MyBatis标签对postgreSQL中returning返回参数的处理

mybatis中用标签处理SQL语句时,遇到pgsql中比较特殊的returning *。 当INSERT时会返回returning后的字段,但是在mybatis中使用INSERT("${sql}")时会遇到如下错误 ps: Mapper method com.lingtu.mapper.EventMapper.insert has an u…

MyBatis 配置文件标签

文章目录 MyBatis 配置文件标签1. properties2. settings3. plugins4. typeAliases5. environments6. mappers MyBatis 配置文件标签 MyBatis 的全局配置文件习惯上命名为:mybatis-config.xml ,此文件名仅仅是建议,并非是强制要求。配置文件存…

Mybatis值trim标签

Mybatis具有实现动态SQL的能力,使用这个特性免不了会用到trim这个标签,trim标签的功能简单来说就是自定义格式拼凑SQL语句。 trim有4个属性: prefix:表示在trim包裹的SQL前添加指定内容 suffix:表示在trim包裹…

MyBatis foreach标签

前面我们学习了如何使用 Mybatis if、where、trim 等动态语句来处理一些简单的查询操作。对于一些 SQL 语句中含有 in 条件,需要迭代条件集合来生成的情况,可以使用 foreach 来实现 SQL 条件的迭代。 Mybatis foreach 标签用于循环语句,它很…