MCMC
MCMC
MCMC算法的核心思想是我们已知一个概率密度函数,需要从这个概率分布中采样,来分析这个分布的一些统计特性,然而这个这个函数非常之复杂,怎么去采样?这时,就可以借助MCMC的思想。
它与变分自编码不同在于:VAE是已知一些样本点,这些样本肯定是来自于同一分布,但是我们不知道这个分布函数的具体表达式,然而我们需要从这个分布中去采取新的样本,怎么采样,这时,就需要借助VAE的思想。
MCMC原理讲解
以下内容博客转自: https://www.cnblogs.com/xbinworld/p/4266146.html
背景
随机模拟也可以叫做蒙特卡罗模拟(Monte Carlo Simulation)。这个方法的发展始于20世纪40年代,和原子弹制造的曼哈顿计划密切相关,当时的几个大牛,包括乌拉姆、冯.诺依曼、费米、费曼、Nicholas Metropolis, 在美国洛斯阿拉莫斯国家实验室研究裂变物质的中子连锁反应的时候,开始使用统计模拟的方法,并在最早的计算机上进行编程实现。[3]
随机模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。一般而言均匀分布 Uniform(0,1)的样本是相对容易生成的。 通过线性同余发生器可以生成伪随机数,我们用确定性算法生成[0,1]之间的伪随机数序列后,这些序列的各种统计指标和均匀分布 Uniform(0,1) 的理论计算结果非常接近。这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。
下面总结这么几点:
1、蒙特卡洛数值积分
2、均匀分布,Box-Muller 变换
3、Monte Carlo principle
4、接受-拒绝抽样(Acceptance-Rejection sampling)
5、重要性抽样(Importance sampling)
6、马尔科夫链,马尔科夫稳态
7、MCMC——Metropolis-Hasting算法
8、MCMC——Gibbs Sampling算法
蒙特卡洛数值积分
如果我们要求f(x)的积分,而f(x)的形式比较复杂积分不好求,则可以通过数值解法来求近似的结果。常用的方法是蒙特卡洛积分:
\[ \int_{a}^{b} \frac{f(x)}{q(x)} q(x) dx \]
这样把q(x)看做是x在区间内的概率分布,而把前面的分数部门看做一个函数,然后在q(x)下抽取n个样本,当n足够大时,可以用采用均值来近似:
因此只要q(x)比较容易采到数据样本就行了。随机模拟方法的核心就是如何对一个概率分布得到样本,即抽样(sampling)。下面我们将介绍常用的抽样方法。
均匀分布,Box-Muller 变换
在计算机中生成[0,1]之间的伪随机数序列,就可以看成是一种均匀分布。而随机数生成方法有很多,最简单的如:
\[X_{n+1} = (ax_n+c) \mod m\]
当然计算机产生的随机数都是伪随机数,不过一般也就够用了。
[Box-Muller 变换] 如果随机变量 U1,U2 独立且U1,U2∼Uniform[0,1],则 Z0,Z1 独立且服从标准正态分布。
最新文章
- S5P4418开发板介绍
- Poj(1251),Prim字符的最小生成树
- 一、HTML和CSS基础--网页布局--实践--导航条菜单的制作
- PIVOT 用于将列值旋转为列名
- Install and configure Intel NIC teaming on R420
- 【Python】可变对象和不可变对象
- nodejs 批处理运行 app.js
- 内核级HOOK的几种实现与应用
- webots自学笔记(五)使用物理插件ODE建立铰链
- [07] String字符串
- 配置sonarqube与gitlab sso认证集成
- 使用这些 HTTP 头保护 Web 应用
- 三个水杯——java,广度优先搜索
- Qt编写自定义控件3-速度仪表盘
- 利用RSACryptoServiceProvider进行RSA加密解密
- linux系统最小化安装后的初始化脚本
- sublime插件开发手记
- shell文件描述符和重定向
- [USACO07JAN]Balanced Lineup
- Javascript获取IFrame内容(兼容IE&;FF)
热门文章
- MYSQL 优化--inner buffer 与关联查询变等值查询
- Codeforces 1194A. Remove a Progression
- Arkady and a Nobody-men CodeForces - 860E (虚树)
- (转)Redis持久化的几种方式
- java对象的几种创建过程
- 漏洞:阿里云盾phpMyAdmin <;=4.8.1 后台checkPageValidity函数缺陷可导致GETSHELL
- 动态表和C++ vector
- 110、通过案例学习Secret (Swarm17)
- 部署node节点组件
- 19 Python之面向对象(成员)