高方差的问题
根据上一节变分推断一(根据平均场理论求解Q)我们得到了需要求解的分布Q的函数。
L(Q)=Q=∫ZQ(Z)logQ(Z)P(X,Z)dZEQ(Z)[logP(X,Z)−logQ(Z)](1)
我们最终的目的是求解Q,在实际中Q分布是有参数的,参数记为φ,只要求解了参数φ,也就求得了分布Q。因此我们可以将(1)式进一步写成关于未知参数φ的函数。即
L(φ)=Eqφ(z)[logp(xi,z)−logqφ(z)](2)
其中xi表示第i个样本,并且将(1)式中的大写字母全部转化为小写。这对推导并没有影响。
既然题目是用梯度来求未知参数φ,那么就要对(2)式求关于φ的导数。
∇φL(φ)====∇φ(Eqφ(z)[logp(xi,z)−logqφ(z)])∇φ∫zqφ(z)[logp(xi,z)−logqφ(z)]dz∫z∇φqφ(z)[logp(xi,z)−logqφ(z)]dz+∫zqφ(z)∇φ[logp(xi,z)−logqφ(z)]dzA+B(3)
将(3)式第三行的两项分别记为A和B,接下来分别求解。

所以最后L(φ)对φ的导数就可以用(4)式所示的期望来代替。这样我们就可以用蒙特卡洛模拟的方法,从qφ(z)中采样若干个点,然后来近似(4)式的期望,也就是近似∇φL(φ)。这样就可以使用梯度下降的方法来更新φ,最后求得φ。
上面的方法看似可以,但是仔细分析会存在一些问题。(4)式是函数∇φlogqφ(z)[logp(xi,z)−logqφ(z)]在分布qφ(z)下的期望,但是logqφ(z)的梯度变化会非常大(log函数的图像是由陡变缓的)。假如采样了两个点z1,z2,但是qφ(z1)接近0,而qφ(z2)接近1,求导之后这两个点的梯度差是非常大的,所以会存在高方差的问题,高方差问题会导致在梯度更新时不稳定。所以就需要一种方法来降方差,使得梯度能稳定的更新。
重参数化降方差
关于重参数化技巧可以看苏剑林的科学空间漫谈重参数,讲解的很详细。
从(2)式可以看到,问题的根源是z是从分布qφ(z)中采样得到的,所以将(2)式转化为积分形式后(如(3)式所示),里面会出现qφ(z),再对φ求导就会变成(4)式,里面就会出现一项∇φlogqφ(z),这就会导致高方差的问题。
要是z不从qφ(z)中直接采样,而是从一个已知的分布p(ε)中采样得到ε,再通过一个变换z=gφ(ε)得到z,通过这样的过程来采样z,将z的随机性转化为ε的随机性,这样就消除了高方差的问题。下面就通过公式来体验一下。
已知:
ε∼p(ε),z=gφ(ε)。

通过推导我们得到了(6)式。在计算时,先从p(ε)中采样出ε1,,,εk,对于某个εi,求出∇zf(z),∇zf(z)中必定含有z,再将z=gφ(εi)带入计算,最后得到∇zf(zi)∇φgφ(εi),则
∇φL(φ)=φ(t+1)=k1i=1∑k∇zf(zi)∇φgφ(εi)φ(t)+λ(t)∇φL(φ)
通过上面的梯度更新,最后便可算出φ,也就求得了分布qφ(z)。就可以用qφ(z)来近似代替后验分布p(z∣x)。
最后推荐苏剑林的科学空间中的有关博客和b站白板推导系列视频。