{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Metropolis-Hastings算法(后面简称MH算法)是MCMC的代表算法,下面先对MH做一个简单的推导,然后写出MH算法流程,最后再对细节做讨论分析,本部分内容主要参考了[刘建平:《MCMC(三)MCMC采样和M-H采样》](https://www.cnblogs.com/pinard/p/6638955.html)\n", "\n", "### 一.算法推导\n", "\n", "根据上一节的讨论,我们知道只要找到一个概率转移函数$p(x\\rightarrow x')$,使得它与我们的目标分布$p(x)$满足如下的一个细致平衡方程: \n", "\n", "$$\n", "p(x)p(x\\rightarrow x')=p(x')p(x'\\rightarrow x)\n", "$$ \n", "\n", "那么,就能保证对马尔科夫链$p(x\\rightarrow x')$随机游走采样的经验分布近似于我们的目标分布$p(x)$,但是这样的$p(x\\rightarrow x')$没有那么容易构造,这里借鉴接收-拒绝采样的思路,首先我们造一个容易采样的分布$q(x\\rightarrow x')$,称为建议分布,利用它来采样,显然这时它们很难满足细致平衡方程: \n", "\n", "$$\n", "p(x)q(x\\rightarrow x')\\neq p(x')q(x'\\rightarrow x)\n", "$$\n", "\n", "然后,我们再造一个接收概率$\\alpha(x\\rightarrow x')$来调节: \n", "\n", "$$\n", "p(x)q(x\\rightarrow x')\\alpha(x\\rightarrow x')= p(x')q(x'\\rightarrow x)\\alpha(x'\\rightarrow x)\n", "$$ \n", "\n", "很Nice的思路!将一个难的问题拆解为两个相对容易解决的问题,那么$\\alpha(x\\rightarrow x')$如果构造勒,这就很简单了,可以令: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=p(x')q(x'\\rightarrow x)\\\\\n", "\\alpha(x'\\rightarrow x)=p(x)q(x\\rightarrow x')\n", "$$ \n", "\n", "简直是完美,$\\alpha(x\\rightarrow x')$也不用费解心机去造了,我们只要找一个好抽样的$q(x\\rightarrow x')$就可以啦,所以捋一下现在的采样流程:\n", "\n", "#### 采样流程\n", "\n", "输入:抽样的目标分布密度函数$p(x)$,正整数$m,n,m(1)任意选择一个初始值$x_0$; \n", "\n", ">(2)对$i=1,2,...,n$循环执行: \n", "\n", ">>(a)设状态$x_{i-1}=x$,按照建议分布$q(x\\rightarrow x')$随机抽取一个候选状态$x'$; \n", "\n", ">>(b)计算接收概率: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=p(x')q(x'\\rightarrow x)\n", "$$ \n", "\n", ">>(c)从区间$(0,1)$中按均匀分布随机抽取一个数$u$,如果$u\\leq \\alpha(x\\rightarrow x')$,则取状态$x_i=x'$,否则取$x_i=x$ \n", "\n", ">(3)得到样本集合$\\{x_{m+1},x_{m+2},...,x_n\\}$\n", "\n", "但是呢,这里有个问题,那就是$\\alpha(x\\rightarrow x')=p(x')q(x'\\rightarrow x)$可能会低哟,这样会导致很多采样样本被拒绝,效率低下,那么有没有可能找到一个方法提高$\\alpha(x\\rightarrow x')$呢?有的,那就是MH算法...." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 二.MH算法\n", "MH算法的思想很朴实,那就是等比例的提升$\\alpha(x\\rightarrow x')$与$\\alpha(x'\\rightarrow x)$,但又不能超过1,这样既能保证细致平衡方程成立,又能提高接受率,举一例子来直观理解一下,比如我们在$(0,1)$上做均匀采样,接受率为0.1和接受率为1其实效果是一样的,采样结果最终都符合$(0,1)$上的均匀分布,但前者会拒绝掉90%的样本,那MH是怎么调整的勒,很简单,它分两种情况: \n", "\n", ">(1)若$p(x)q(x\\rightarrow x')>p(x')q(x'\\rightarrow x)$,那么,对等式两边同除以$p(x)q(x\\rightarrow x')$:\n", "\n", "$$\n", "1\\cdot\\alpha(x\\rightarrow x')=\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\alpha(x'\\rightarrow x)\n", "$$ \n", "\n", ">所以,我们可以令: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\\\\n", "\\alpha(x'\\rightarrow x)=1\n", "$$\n", "\n", ">(2)反过来,若$p(x')q(x'\\rightarrow x)>p(x)q(x\\rightarrow x')$,那么,对等式两边同除以$p(x')q(x'\\rightarrow x)$:\n", "\n", "$$\n", "\\frac{p(x)q(x\\rightarrow x')}{p(x')q(x'\\rightarrow x)}\\cdot\\alpha(x\\rightarrow x')=1\\cdot\\alpha(x'\\rightarrow x)\n", "$$ \n", "\n", ">所以,我们可以令: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=1\\\\\n", "\\alpha(x'\\rightarrow x)=\\frac{p(x)q(x\\rightarrow x')}{p(x')q(x'\\rightarrow x)}\n", "$$\n", "\n", "而对于这两种情况,我们其实是可以综合一下,那就是: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=min\\{1,\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\}\\\\\n", "\\alpha(x'\\rightarrow x)=min\\{1,\\frac{p(x)q(x\\rightarrow x')}{p(x')q(x'\\rightarrow x)}\\}\n", "$$ \n", "\n", "到这里,$\\alpha(x\\rightarrow x')$的接收率一定比之前高($p(x)q(x\\rightarrow x')$大部分情况是远小于1的正数),即: \n", "\n", "$$\n", "min\\{1,\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\}>p(x')q(x'\\rightarrow x)\n", "$$\n", "\n", "所以,MH的算法流程就可以梳理出来了\n", "\n", "#### MH采样流程\n", "\n", "输入:抽样的目标分布密度函数$p(x)$ \n", "输出:$p(x)$的随机样本$x_{m+1},x_{m+2},...,x_n$\n", ">(1)任意选择一个初始值$x_0$; \n", "\n", ">(2)对$i=1,2,...,n$循环执行: \n", "\n", ">>(a)设状态$x_{i-1}=x$,按照建议分布$q(x\\rightarrow x')$随机抽取一个候选状态$x'$; \n", "\n", ">>(b)计算接收概率: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=min\\{1,\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\}\n", "$$ \n", "\n", ">>(c)从区间$(0,1)$中按均匀分布随机抽取一个数$u$,如果$u\\leq \\alpha(x\\rightarrow x')$,则取状态$x_i=x'$,否则取$x_i=x$ \n", "\n", ">(3)得到样本集合$\\{x_{m+1},x_{m+2},...,x_n\\}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 三.细致平衡方程校验\n", "\n", "下面我们还是对MH算法做个检验,看它是否满足细致平衡方程(虽然它就是从该方程推导来的...),此时的转移概率为建议分布和接收概率之积: \n", "\n", "$$\n", "p(x\\rightarrow x')=q(x\\rightarrow x')\\alpha(x \\rightarrow x')\n", "$$ \n", "\n", "那么,我们需要检验的就是下面的等式是否成立: \n", "\n", "$$\n", "p(x)p(x\\rightarrow x')=p(x')p(x'\\rightarrow x)\n", "$$ \n", "\n", "证明一下: \n", "\n", "$$\n", "p(x)p(x\\rightarrow x')=p(x)q(x\\rightarrow x')min\\{1,\\frac{p(x')q(x'\\rightarrow x)}{p(x)q(x\\rightarrow x')}\\}\\\\\n", "=min\\{p(x)q(x\\rightarrow x'),p(x')p(x'\\rightarrow x)\\}\\\\\n", "=p(x')q(x'\\rightarrow x)min\\{1,\\frac{p(x)q(x\\rightarrow x')}{p(x')q(x'\\rightarrow x)}\\}\\\\\n", "=p(x')q(x'\\rightarrow x)\n", "$$ \n", "\n", "好勒,最关键的一步得到了证明,接下来就到了放心的造$q(x\\rightarrow x')$的时候了" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 四.$q(x\\rightarrow x')如何选择$ \n", "\n", "$q(x\\rightarrow x')$比较省事儿的一种方法就是选择对称的建议分布,即: \n", "\n", "$$\n", "q(x\\rightarrow x')=q(x'\\rightarrow x)\n", "$$ \n", "\n", "这时接收概率的计算也变得简单了: \n", "\n", "$$\n", "\\alpha(x\\rightarrow x')=min\\{1,\\frac{p(x')}{p(x)}\\}\n", "$$ \n", "\n", "\n", "$q(x\\rightarrow x')$通常可以选择: \n", "\n", "(1)以$x$为均值,其协方差为常数矩阵的高斯分布; \n", "\n", "(2)或者选择: \n", "\n", "$$\n", "q(x\\rightarrow x')\\propto exp(-\\frac{(x-x')^2}{2})\n", "$$ \n", "\n", "接下来,就用一个案例来实操一下" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 五.案例\n", "\n", "我还是选择前面的那个分布,哈哈哈哈哈~~~ \n", "\n", "$$\n", "p(x)=\\frac{1}{1179}[(x-2)^2+(x-5)^3+100cos(x)+106],0]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def func(x):\n", " #注意,超出范围的概率要设置为0\n", " w=np.ones_like(x)\n", " w=np.where(x<0,0,w)\n", " w=np.where(x>10,0,w)\n", " return w*((x-2)*(x-2)+(x-5)*(x-5)*(x-5)+100*np.cos(x)+106)/1179\n", "x=np.linspace(0,10,100)\n", "plt.plot(x,func(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们的$q(x\\rightarrow x')$可以任意选择(但是要包含到区间$(0,10)$),比如均值为$x$,方差为1的建议分布: \n", "\n", "$$\n", "q(x,x')=\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x'-x)^2}{2}}\n", "$$ \n", "\n", "接下来采样看看效果" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#采样的样本量\n", "nums=10000\n", "count=0\n", "points=[]\n", "#采样x0\n", "point=np.random.randn()\n", "points.append(point)\n", "while count" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#看看效果\n", "plt.plot(x,func(x))\n", "plt.hist(points,normed=True,bins=100)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 六.小结\n", "这一节的主要内容是将细致平衡方程成功落地到MH算法中,但是对于实际问题中建议分布$q(x\\rightarrow x')$的采样往往比较麻烦,因为实际数据中,随机变量$x$往往都是高维数据,比如对于文本数据,用单词做随机变量的话,能高达上万维,在那么高维的空间造一个容易采样的建议分布极其困难,那我们借鉴一下优化中常使用的坐标轮换法(比如SVM中所使用的SMO)思路,采样有没有可能只需在单个维度上进行呢?然后遍历随机变量的所有维度完成一次采样,可以的,那就是下一节将要介绍的单分量MH算法...." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }