ML笔记(6)

week 11,12

小平学得很辛苦, 不懂的证明反复再三地看, 还抄在笔记上背下来。这么一来好像懂了。

——《游里工夫独造微,小平邦彦传》

这句话其实适合上一章的内容:对于我贫乏的脑子来说很抽象的东西,抄几遍好像就懂了。虽然说这一章比较简单,但是抄书还是有帮助的。况且,从前学的时候,概率相关的很多东西当成数学课来学,对于我现在的脑子来说,motivation也不知道,对知识结构的划分和重要性的判断都很差,近乎于没有。讲义是物理学家的角度写下来的,我个人觉得写得不错,抄一遍可以厘清这些东西。

另外,kunihiko貌似是氼畚儿国一个很常见的男性用名。Kunihiko Kaneko 和 Kunihiko Kodaira,光我听说过的学者就有两个。

Monte Carlo Sampling

动机

从概率分布里面抽取iid(独立同分布)的sample,主要是有以下几个应用场合:

  • 积分的数值结果
  • 算Bayesian posterior
  • 数值优化
  • 计算物理的一些别的场景。

特别的,考虑到电脑里头伪随机数的生成特点,很重要的是怎样把任意的分布的sampling转化为均匀分布的sampling。

概率复习

从相空间体积元不变的想法,可以写出

pY(y1,,yn)dy=pX(x1(y),,xn(y))dxp_{Y}\left(y_{1}, \ldots, y_{n}\right)d\mathbf{y}=p_{X}\left(x_{1}(\mathbf{y}), \ldots, x_{n}(\mathbf{y})\right)d\mathbf{x}

因此

pY(y1,,yn)=pX(x1(y),,xn(y))J(y1,,yn;x1,,xn)1p_{Y}\left(y_{1}, \ldots, y_{n}\right)=p_{X}\left(x_{1}(\mathbf{y}), \ldots, x_{n}(\mathbf{y})\right)\left|J\left(y_{1}, \ldots, y_{n} ; x_{1}, \ldots, x_{n}\right)\right|^{-1}

其中

J(y1,,yn;x1,,xn)=y1x1y1x2y1xny2x1y2x2y2xnynx1ynx2ynxnJ\left(y_{1}, \ldots, y_{n} ; x_{1}, \ldots, x_{n}\right)=\left|\begin{array}{cccc}{\frac{\partial y_{1}}{\partial x_{1}}} & {\frac{\partial y_{1}}{\partial x_{2}}} & {\cdots} & {\frac{\partial y_{1}}{\partial x_{n}}} \\ {\frac{\partial y_{2}}{\partial x_{1}}} & {\frac{\partial y_{2}}{\partial x_{2}}} & {\cdots} & {\frac{\partial y_{2}}{\partial x_{n}}} \\ {\vdots} & {\vdots} & {\vdots} & {\vdots} \\ {\frac{\partial y_{n}}{\partial x_{1}}} & {\frac{\partial y_{n}}{\partial x_{2}}} & {\cdots} & {\frac{\partial y_{n}}{\partial x_{n}}}\end{array}\right|

  • 举例:X和Y是独立分布的。取Z=X+YZ=X+Y,想知道Z的分布。取W=Y,J(X,Y;Z,W)=1|J(X, Y ; Z, W)|=1,再考虑独立性,pZ,W(z,w)=pX(zw)pY(w)p_{Z, W}(z, w)=p_{X}(z-w) p_{Y}(w)。因此,独立分布随机变量之和,其分布是卷积:

    pZ(z)=pZ,W(z,w)dw=pX(zw)pY(w)dw=(pXpY)(z)p_{Z}(z)=\int p_{Z, W}(z, w) d w=\int p_{X}(z-w) p_{Y}(w) d w=\left(p_{X} * p_{Y}\right)(z)

  • 又举一例:FX(x)F_{X}(x)是cumulative distribution,其密度为p。定义

    Y=FX(X)=Xp(t)dtY=F_{X}(X)=\int_{-\infty}^{X} p(t) d t

    那么

    p(y)=p(x(y))J(x;y)=p(x(y))(dydx)1=p(x(y))p(x(y))1=1p(y)=p(x(y)) J(x ; y)=p(x(y))\left(\frac{d y}{d x}\right)^{-1}=p(x(y)) p(x(y))^{-1}=1

    所以说分布曲线下的面积是均匀的,这提供了p值的合法性。

    原则上讲,可以直接在[0,1]去sample Y,然后x=FX1(y)x=F_{X}^{-1}(y)得到x。可惜,大多数实际情况下,后一步不那么容易,所以一般不这么做。

  • 比如最正常的gaussian,p(x)=12πe12x2p(x)=\frac{1}{\sqrt{2 \pi}} e^{-\frac{1}{2} x^{2}}

    Φ(x)=x12πe12x2dx=12+12erf(x2)\Phi(x)=\int_{-\infty}^{x} \frac{1}{\sqrt{2 \pi}} e^{-\frac{1}{2} x^{2}} d x=\frac{1}{2}+\frac{1}{2} \operatorname{erf}\left(\frac{x}{\sqrt{2}}\right)

    这玩意的反函数就很不好办。实际上,可以采用一个技巧,正如计算高斯积分的时候那样,引入第二维

    p(x,y)=12πe12(x2+y2)p(x, y)=\frac{1}{2 \pi} e^{-\frac{1}{2}\left(x^{2}+y^{2}\right)}

    参数化成

    p(R,θ)=eR2πp(R, \theta)=\frac{e^{-R}}{2 \pi}

    θ\theta直接就是均匀分布。这样,sample了两个参数之后,直接就把x,y也算出来。

Rejection Sampling

核心思想是把较难sample的pX(x)p_{X}(x)通过容易些的q(x)q(x)sample出来。有的时候,甚至很难归一化成p,需要以未归一化的形式g来处理:p=g(x)/cp=g(x) / c。这个时候,取M,令在全空间g(x)Mq(x)g(x) \leq M q(x)。现在,先从q里面sample一个值x,再取r=g(x)Mq(x)r=\frac{g(x)}{M q(x)}为接受这个x的概率。取够足够被接受的x后,停止sample。

原理上是清楚的:这是利用了q分布下面积的均匀性。从理论上说,可以这样证明:

p(x accept )=p(x, accept )P( accept )=p(acceptx)q(x)P( accept )=g(x)Mq(x)q(x)g(x)Mq(x)q(x)dx=g(x)c=pX(x)p(x | \text { accept })=\frac{p(x, \text { accept })}{P(\text { accept })}=\frac{p(\operatorname{accept} | x) q(x)}{P(\text { accept })}=\frac{\frac{g(x)}{M q(x)} q(x)}{\int_{-\infty}^{\infty} \frac{g(x)}{M q(x)} q(x) d x}=\frac{g(x)}{c}=p_{X}(x)

为了能够把P(accept)P(accept)搞大一些,我们最好把Mq弄的几乎是紧贴着g。

  • 这个还可以用来sample贝叶斯后验分布:

P(θx)=P(xθ)P(θ)P(x)=likelihoodpriorpartitionP(\theta | \mathbf{x})=\frac{P(\mathbf{x} | \theta) P(\theta)}{P(\mathbf{x})}=\frac{likelihood\cdot prior}{partition}

L=maxθP(xθ)L=\max _{\theta} P(\mathbf{x} | \theta),那么

M=L/P(x)M=L / P(\mathbf{x})。可以转化成从先验分布中sample。

  • 这个还可用来sample nonhomogeneous的泊松分布:

首先,回忆(预习)泊松分布。ΩRd\Omega \in \mathbb{R}^{d}上有测度μ\muμ(A)\mu(A)给出A的面积。点过程满足

P(N(A)=n)=μ(A)neμ(A)n!P(N(A)=n)=\frac{\mu(A)^{n} e^{-\mu(A)}}{n !}

且对于不重合的A1,,AkΩA_{1}, \ldots, A_{k} \subset \OmegaN(A1),,N(Ak)N\left(A_{1}\right), \ldots, N\left(A_{k}\right)是独立的。有表示A的面积的不均匀(nonhomogeneous)性质的rate function λ\lambda使得

μ(A)=Aλ(x)dx\mu(A)=\int_{A} \lambda(x) d x

可以证明,固定N(A)N(A)的情况下,这n个点是从

p(x)={λ(x)μ(A),xA0,xAp(x)=\left\{\begin{array}{ll}{\frac{\lambda(x)}{\mu(A)},} & {x \in A} \\ {0,} & {x \notin A}\end{array}\right.

sample的iid。

Ω=R+\Omega=\mathbb{R}_{+},即一维泊松过程,有

P(Tn+1Tn>t)=P(N([Tn,Tn+t])=0)=exp(TnTn+tλ(τ)dτ)P\left(T_{n+1}-T_{n}>t\right)=P\left(N\left(\left[T_{n}, T_{n}+t\right]\right)=0\right)=\exp \left(-\int_{T_{n}}^{T_{n}+t} \lambda(\tau) d \tau\right)

pTn+1Tn(t)={λ(t+Tn)exp(TnTn+tλ(τ)dτ),t00t<0p_{T_{n+1}-T_{n}}(t)=\left\{\begin{array}{ll}{\lambda\left(t+T_{n}\right) \exp \left(-\int_{T_{n}}^{T_{n}+t} \lambda(\tau) d \tau\right),} & {t \geq 0} \\ {0} & {t<0}\end{array}\right.

我们可以sample一个均匀的二维泊松分布(取λ(x)\lambda(x)和x轴围的面积),然后以此来sample这个一维的不均匀泊松分布。

泊松分布有种“thinning”操作,是说取λ(t)λ(t)\lambda^{\prime}(t) \geq \lambda(t)的泊松过程N’,然后以概率1λ(x)/λ(x)1-\lambda(x) / \lambda^{\prime}(x)拒掉N’的sample结果,得到N的sample结果。实际操作中我们可以取λ\lambda'max(λ)max(\lambda)

Importance Sampling

举个例子。我们若想sample一些点来确定积分

f(z)=z12πex2/2dxf(z)=\int_{z}^{\infty} \frac{1}{\sqrt{2 \pi}} e^{-x^{2} / 2} d x

的取值,我们可以写出

f(z)=I(xz)p(x)dxf(z)=\int_{-\infty}^{\infty} I(x \geq z) p(x) d x

相当于从p里面sample,然后用I来判断是否接受sample结果。这样,得到

f^(z)1Ni=1NI(xiz)f(z)\hat{f}(z) \equiv \frac{1}{N} \sum_{i=1}^{N} I\left(x_{i} \geq z\right) \approx f(z)

显然这是一个无偏估计,但是它的坏处在于,当z离0太远的时候,方差会过大

sd[f^(z)]f(z)=1N1f(z)f(z)\frac{\operatorname{sd}[\hat{f}(z)]}{f(z)}=\sqrt{\frac{1}{N}} \sqrt{\frac{1-f(z)}{f(z)}}

并不经济。对此,我们可以改写

f(z)=zI(xz)p(x)q(x)q(x)dxf(z)=\int_{z}^{\infty} I(x \geq z) \frac{p(x)}{q(x)} q(x) d x

然后从q里面sample。比如,对于我们的例子,可以有

q(x)=λeλ(xz)q(x)=\lambda e^{-\lambda(x-z)}

这样,估计量f^\hat{f}的方差

var[f^(z)Imp]=1N(Ep(x)[I(x>z)p(x)q(x)]f(z)2)\operatorname{var}\left[\hat{f}(z)_{I m p}\right]=\frac{1}{N}\left(E_{p(x)}\left[I(x>z) \frac{p(x)}{q(x)}\right]-f(z)^{2}\right)

不至于太大。

马氏链

马尔可夫性就是健忘性:P(xnxn1,,x0)=P(xnxn1)P\left(x_{n} | x_{n-1}, \ldots, x_{0}\right)=P\left(x_{n} | x_{n-1}\right)

这使得我们可以写出

P(xn,,x0)=π(x0)(k=1nTxk1xk)P\left(x_{n}, \ldots, x_{0}\right)=\pi\left(x_{0}\right)\left(\prod_{k=1}^{n} T_{x_{k-1} x_{k}}\right)

并基于此式来分析马尔可夫过程。

  • 一些概念:一个stationary state是说πsT=πs\pi_{s} T=\pi_{s},但不要求全局收敛到它。一个steady state是说limnTn=Iπs\lim _{n \rightarrow \infty} T^{n}=\mathbb{I} \pi_{s},全局收敛。细致平衡是说πxTxy=πyTyx\pi_{x} T_{x y}=\pi_{y} T_{y x}。细致平衡显然stationary,但是不一定steady。irreduciblility是说,任意两个态之间都存在可能的路径,不至于隔断。(对某个态x来说的)周期dxd_x是指一切回到以它为初始态的路径的长度的最大公约数。
  • 定理:有限的马氏链都有stationary state。这是因为TI=IT\mathbb{I}=\mathbb{I},所以它有特征值为1的左本征向量,而我们可以构造得使它所有分量全为正。
  • 定理:steady state若存在,那么它是唯一stationary state。这是由于任何态必然演化到该steady state。而任何stationary state只会演化到它自身。
  • 定理:有限的,irreducible的马氏链存在唯一stationary state。
  • 定理:存在(Tn)xy>0\left(T^{n}\right)_{x y}>0(Tm)yx>0\left(T^{m}\right)_{y x}>0,那么dx=dyd_{x}=d_{y}。证明:dxn+md_{x} | n+m是显然的,故对于所有起终点在y的loop,其长度k都有dxn+k+md_{x} | n+k+m或直接dxkd_{x} | kdyd_y是k的最大公约数,所以dxdyd_{x} | d_{y}。由对称性,dx=dyd_x=d_y

MCMC

我们希望创建一个马氏链,它存在一个steady state,正是我们希望从中sample的πs\pi_s

  • positive recurrence:一个态如果有有限的mean recurrence time,就说它是postitive recurrent的。

  • 各态历经:irreducible,positive recurrent,非周期的马氏链有steady state(不要求有限长)。

  • positive recurrence的检查非常难。然而,有定理:irreducible的马氏链,positive recurrence和有stationary state等价。这个stationary state是唯一的。这样的话,我们就可以从细致平衡入手,把过程弄到stationary state,然后自然而然的就是steady state。这就引出了以下的算法:

  • Metropolis-Hastings 算法。

    • 建立初始的转移矩阵QxyQ_{x y}
    • 利用细致平衡,Txy=Qxymin(1,(πs)yQyx(πs)xQxy)T_{x y}=Q_{x y} \min \left(1, \frac{\left(\pi_{s}\right)_{y} Q_{y x}}{\left(\pi_{s}\right)_{x} Q_{x y}}\right)

    注意到,πs\pi_s只露了个比例,所以我们不需要把它归一化。这是大好事,例如我们若需要sample一个bayesian posterior,这能省掉很多事。

    • poor mixing指的是例如πs\pi_s是双峰分布的时候,马氏链堵在那个谷底过不去的现象。解决办法包括对Q做文章调节步长,或者burn-in,指的是扔掉前面几步,直接从第n步开始sample。
  • Gibbs sampling 算法。

    假设我们遇到一种情形,即我们的多维统计量的分布P(X1,,Xd)P\left(X_{1}, \ldots, X_{d}\right)的sample较为困难,但对于每一个分量,其条件分布P(XiX1,,Xi^,,Xd)P\left(X_{i} | X_{1}, \dots, X_{\hat{i}}, \dots, X_{d}\right)是易于sample的,这时便可以使用gibbs sampling。这是一个十分简单的过程,我们首先从初始的x0=(x1(0),,xd(0))x^{0}=\left(x_{1}^{(0)}, \ldots, x_{d}^{(0)}\right)开始,然后利用条件概率sample出x1(1)x_1^{(1)},并且迭代所有的上指标,然后迭代所有的下指标。可以证明,这是metropolis-hastings的一个特例,具体来说,是后者在min\min函数始终取1的时候得到的结果。

    这种办法在什么地方有用处呢?一个简单的例子是Ising model。考虑

    P(s)=eβ(Hisi+J(i,j)Nsisj)Z,si{1,1}P(s)=\frac{e^{\beta\left(H \sum_{i} s_{i}+J \sum_{(i, j) \in \mathcal{N}} s_{i} s_{j}\right)}}{Z}, s_{i} \in\{-1,1\}

    一次sample完所有的自旋是不现实的。作为替代,我们从一个随机的构型开始,作

    P(sisji)=exp[β(Hsi+Jsij:(i,j)Nsj)]exp[β(H+Jj;(i,j)Nsj)]+exp[β(HJj;(i,j)Nsj)]=exp[β(si+1)(H+Jj;(i,j)Nsj)]1+exp[2β(H+Jj;(i,j)Nsj)]\begin{aligned} P\left(s_{i} | s_{j \neq i}\right)=& \frac{\exp \left[\beta\left(H s_{i}+J s_{i} \sum_{j:(i, j) \in \mathcal{N}} s_{j}\right)\right]}{\exp \left[\beta\left(H+J \sum_{j ;(i, j) \in \mathcal{N}} s_{j}\right)\right]+\exp \left[\beta\left(-H-J \sum_{j ;(i, j) \in \mathcal{N}} s_{j}\right)\right]} \\=& \frac{\exp \left[\beta\left(s_{i}+1\right)\left(H+J \sum_{j ;(i, j) \in \mathcal{N}} s_{j}\right)\right]}{1+\exp \left[2 \beta\left(H+J \sum_{j ;(i, j) \in \mathcal{N}} s_{j}\right)\right]} \end{aligned}

    即可。不过,这毕竟是一个非常naive的算法。我们知道,二维以上的Ising模型是有criticality的,这个时候由于长程序显露出来,gibbs sampling收敛到实际分布的速度将会极其的慢。对于这种情形,人们发明了Swendsen-Wang算法来改进。

  • 收敛性

    检查算法的收敛性是必要的。有两个相关而不同的概念:

    • 马氏链是否收敛到steady state。(实际上,就是看需要取多少burn-in,取足够的burn-in才能在steady state上sample)
    • 各态历经是否达成。亦即,f(x)πs(x)dx1Nn0i=n0+1Nf(xi)\int f(x) \pi_{s}(x) d x \approx \frac{1}{N-n_{0}} \sum_{i=n_{0}+1}^{N} f\left(x_{i}\right)

    对于马氏链收敛的一个比较简单的判断办法是取边缘分布的积分Zn=I(Yny)Z_{n}=I\left(Y_{n} \leq y\right),y是某个先验的值。(非常大胆地)假设Z在0和1 之间变来变去的过程是马氏过程(实际上并不是,会有correlation,叫做high order markov process),看一看这个过程是不是收敛到steady state πs\pi_s,也就是P(Zn0=iZ0=j)(πs)i<ϵ\left|P\left(Z_{n_{0}}=i | Z_{0}=j\right)-\left(\pi_{s}\right)_{i}\right|<\epsilon

    αn0p+qmax(p,q)<ϵn0=[log(ϵ(p+q)max(p,q))logα]\frac{|\alpha|^{n_{0}}}{p+q} \max (p, q)<\epsilon \Rightarrow \quad n_{0}=\left[\frac{\log \left(\frac{\epsilon(p+q)}{\max (p, q)}\right)}{\log |\alpha|}\right]

    从pq的值和我们预设的精度可以确定burn-in的步数。

    接下来我们看大概要多少步才能让各态历经成立。各态历经意味着SN=1Nn0n=n0+1NZnS_{N}=\frac{1}{N-n_{0}} \sum_{n=n_{0}+1}^{N} Z_{n}收敛到p/(p+q)p /(p+q)。考虑到步数较大时,

    Var[SN]=1Nn0pq(2pq)(p+q)3\operatorname{Var}\left[S_{N}\right]=\frac{1}{N-n_{0}} \frac{p q(2-p-q)}{(p+q)^{3}}

    由CLT,

    P(SNpp+q<r)sP\left(\left|S_{N}-\frac{p}{p+q}\right|<r\right) \geq s

    意味着

    rVar[SN]Φ1(1+s2)Nn0[Φ1(1+s2)]2pq(2pq)r2(p+q)3\frac{r}{\sqrt{\operatorname{Var}\left[S_{N}\right]}} \geq \Phi^{-1}\left(\frac{1+s}{2}\right) \Rightarrow N-n_{0} \geq\left[\Phi^{-1}\left(\frac{1+s}{2}\right)\right]^{2} \frac{p q(2-p-q)}{r^{2}(p+q)^{3}}

    这个方法很让人不舒服,因为实际上p和q的取得是通过sample很多步之后用MLE得到的,至少对burn-in步数的选取完全是先验的,这样就造成了一种循环论证的效果。不过,其他一些更加高明的算法,似乎讲起来也要复杂许多。