Stein variational gradient descent(SVGD)

最近读了Liu Qiang组关于SVGD的几篇文章,和老师讨论了很久、查阅了很多文献后大概了解了它的思路。这篇文章整合一下我所理解的SVGD。由于太笨,不知道Katex怎么像Latex一样写公式标号····所以本文所有公式都没有标号Orz

近似推断被广泛用于概率机器学习与统计中,Stein variational gradient descent (SVGD)是由Liu Qiang等提出的一种近似推断算法。不同于MCMC,它是一种确定性的算法。不同于变分推断(VI),它采用粒子方法直接对目标概率分布进行逼近。

1.Stein’s Identity

首先Liu Qiang组关于SVGD的idea出发点都是Stein’s Identity。Stein’s Identity讲了这么一件事情:

E p [ ∇ x log ⁡ q ( x ) f ( x ) + ∇ x f ( x ) ] = 0     i f     p ( x ) = q ( x ) \mathbb{E}_{p}\left[\nabla_{x} \log q(x) f(x)+\nabla_{x} f(x)\right]=0\ \ \ if\ \ \ p(x)=q(x) Ep[xlogq(x)f(x)+xf(x)]=0   if   p(x)=q(x)

我们考虑 R d \mathbb{R}^{d} Rd上两个光滑分布 p p p q q q,上式成立的充分条件是 p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x). 这一等式的成立非常好证,只需要将积分展开用分部积分法就可以证明( ∫ u ( x ) v ′ ( x ) d x = u ( x ) v ( x ) − ∫ u ′ ( x ) v ( x ) d x \int u(x) v^{\prime}(x) d x=u(x) v(x)-\int u^{\prime}(x) v(x) d x u(x)v(x)dx=u(x)v(x)u(x)v(x)dx).

那么,当 p ( x ) ≠ q ( x ) p(x) \neq q(x) p(x)=q(x)时,上式是不等于0的,这就有些像一个距离度量,我们进一步想到上式是不是也可以像KL divergence一样衡量两个分布之间的距离呢?并且通过优化这个距离做一些事情呢?这就是Liu Qiang组的研究工作。

2.向量情况下的距离度量

根据Stein’s identity我们可以定义一种度量来衡量分布p和q之间的距离,首先考虑向量情况下的推导,即 f ( x ) f(x) f(x)属于 R 1 × 1 \mathbb{R}^{1×1} R1×1

我们定义算子 A p f ( x ) = s p ( x ) f ( x ) + ∇ x f ( x ) \mathcal{A}_{p} f(x)=s_{p}(x) f(x)+\nabla_{x} f(x) Apf(x)=sp(x)f(x)+xf(x),以及 s q = ∇ x log ⁡ q ( x ) \boldsymbol{s}_{q}=\nabla_{x} \log q(x) sq=xlogq(x),之前的Stein’s identity就可以写成:
E x ∼ p [ A q f ( x ) ] = 0    w h e r e    ( q = p ) \mathbb{E}_{x \sim p}\left[\mathcal{A}_{q} f(x)\right] =0\ \ where\ \ (q=p) Exp[Aqf(x)]=0  where  (q=p)

我们定义距离 S ( p , q ) = max ⁡ f ∈ F ( E p [ A q f ( x ) ] ) 2 {S}(p, q)=\max _{f \in \mathcal{F}}\left(\mathbb{E}_{p}\left[\mathcal{A}_{q} f(x)\right]\right)^{2} S(p,q)=maxfF(Ep[Aqf(x)])2

这里 F \mathcal{F} F是光滑函数的集合,但是从 F \mathcal{F} F中找到 f f f不是一件容易的事情,所以我们还需要别的trick(也就是kernel)。关于这里为什么是max,因为我们希望找到的度量,一定是在 p ( x ) ≠ q ( x ) p(x) \neq q(x) p(x)=q(x)时让这个距离值尽可能的大,这样才能在同一种度量下分的更开。

3.矩阵情况下的距离度量

下面我们尝试将 A p f ( x ) \mathcal{A}_{p} f(x) Apf(x)推广到矩阵的形式,也就是 f ( x ) f(x) f(x)推广到 R d × 1 \mathbb{R}^{d×1} Rd×1的形式。

这里为了区分我们把 f ( x ) f(x) f(x)属于 R d × 1 \mathbb{R}^{d×1} Rd×1记作 ϕ ( x ) \phi (x) ϕ(x),令 ϕ ( x ) = [ ϕ 1 ( x ) , ⋯   , ϕ d ( x ) ] ⊤ \phi(x)=\left[\phi_{1}(x), \cdots, \phi_{d}(x)\right]^{\top} ϕ(x)=[ϕ1(x),,ϕd(x)]. 也就是说 ϕ ( x ) \phi (x) ϕ(x)代表着一组光滑函数,是一个向量值函数。

此时, A p ϕ ( x ) = s p ( x ) ϕ ⊤ ( x ) + ∇ x ϕ ( x ) \mathcal{A}_{p} \phi(x)=s_{p}(x) \phi^{\top}(x)+\nabla_{x} \phi(x) Apϕ(x)=sp(x)ϕ(x)+xϕ(x)

Stein’s identity可以写成:
E x ∼ p [ A q ϕ ( x ) ] = E x ∼ p [ A q ϕ ( x ) − A p ϕ ( x ) ] = E x ∼ p [ ( s q ( x ) − s p ( x ) ) ϕ ⊤ ( x ) ] \mathbb{E}_{x \sim p}\left[\mathcal{A}_{q} \phi(x)\right]=\mathbb{E}_{x \sim p}\left[\mathcal{A}_{q} \phi(x)-\mathcal{A}_{p} \phi(x)\right]=\mathbb{E}_{x \sim p}\left[(s_q(x)-s_p(x)) \phi^{\top}(x)\right] Exp[Aqϕ(x)]=Exp[Aqϕ(x)Apϕ(x)]=Exp[(sq(x)sp(x))ϕ(x)]

由于 s q ( x ) s_q(x) sq(x)属于 R d × 1 \mathbb{R}^{d×1} Rd×1 ϕ ⊤ ( x ) \phi^{\top}(x) ϕ(x)属于 R 1 × d \mathbb{R}^{1×d} R1×d,上式应该是一个 d × d d×d d×d的矩阵。但是我们想要的是距离度量,矩阵的期望是没有任何意义的,所以我们可以取标量为:

E p [ trace ⁡ ( A q ϕ ( x ) ) ] = E p [ ( s q ( x ) − s p ( x ) ) ⊤ ϕ ( x ) ] \mathbb{E}_{p}\left[\operatorname{trace}\left(\mathcal{A}_{q}\phi(x)\right)\right]=\mathbb{E}_{p}\left[\left(\boldsymbol{s}_{q}(x)-\boldsymbol{s}_{p}(x)\right)^{\top} \phi(x)\right] Ep[trace(Aqϕ(x))]=Ep[(sq(x)sp(x))ϕ(x)]

此时, s q ⊤ ( x ) s_q^{\top}(x) sq(x)属于 R 1 × d \mathbb{R}^{1×d} R1×d ϕ ( x ) \phi(x) ϕ(x)属于 R d × 1 \mathbb{R}^{d×1} Rd×1,我们得到了一个标量,这是我们所希望的距离值。同时,也可以很直接地看到我们取标量后的值其实就是原矩阵形式的迹。

总结一下,到现在为止,我们将Stein’s identity从向量形式拓展到了矩阵形式,在矩阵形式下,我们依旧可以将 S ( p , q ) {S}(p, q) S(p,q)写成一个标量,为之后kernel的引入做好了铺垫。

4.Kernel的引入

4.1 RKHS

在引入kernel到Stein’s identity之前,我们先回顾一下RKHS(reproducing kernel hilbert space)。

每一个函数都可以看做一个无限维的向量,那么二元函数 K ( x , y ) K(x,y) K(x,y)就可以看做是一个无限维的矩阵。当 K ( x , y ) K(x,y) K(x,y)满足正定性和对称性的时候我们把它叫做核函数。与矩阵特征值和特征向量类似,核函数存在特征值和特征函数 (将函数看做无限维向量)。也就是

∫ K ( x , y ) ψ ( x ) d x = λ ψ ( y ) \int K(\mathrm{x}, \mathrm{y}) \psi(\mathrm{x}) d \mathrm{x}=\lambda \psi(\mathrm{y}) K(x,y)ψ(x)dx=λψ(y)

那么根据Mercer定理,我们有
K ( x , y ) = ∑ i = 0 ∞ λ i ψ i ( x ) ψ i ( y ) K(\mathrm{x}, \mathrm{y})=\sum_{i=0}^{\infty} \lambda_{i} \psi_{i}(\mathrm{x}) \psi_{i}(\mathrm{y}) K(x,y)=i=0λiψi(x)ψi(y)
这里一个核函数对应无穷个特征值 { λ i } i = 1 ∞ \left\{\lambda_{i}\right\}_{i=1}^{\infty} {λi}i=1和无穷个特征方程 { ψ i } i = 1 ∞ \left\{\psi_{i}\right\}_{i=1}^{\infty} {ψi}i=1
{ λ i ψ i } i = 1 ∞ \left\{\sqrt{\lambda_{i}} \psi_{i}\right\}_{i=1}^{\infty} {λi ψi}i=1作为一组正交基构建一个希尔伯特空间 H \mathcal{H} H 。这个空间中的任何一个函数(向量)都可以表示为这组基的线性组合。如 f = ( f 1 , f 2 , … ) H T f=\left(f_{1}, f_{2}, \ldots\right)_{\mathcal{H}}^{T} f=(f1,f2,)HT

K ( x , ⋅ ) K(\mathrm{x}, \cdot) K(x,)表示固定核函数的一个参数为 x x x,即矩阵第 x x x行的一元函数或无限维向量。那么,我们有
K ( x , ⋅ ) = ( λ 1 ψ 1 ( x ) , λ 2 ψ 2 ( x ) , … ) H T K ( y , ⋅ ) = ( λ 1 ψ 1 ( y ) , λ 2 ψ 2 ( y ) , … ) H T < K ( x , ⋅ ) , K ( y , ⋅ ) > H = ∑ i = 0 ∞ λ i ψ i ( x ) ψ i ( y ) = K ( x , y ) \begin{array}{c} K(\mathrm{x}, \cdot)=\left(\sqrt{\lambda_{1}} \psi_{1}(\mathrm{x}), \sqrt{\lambda_{2}} \psi_{2}(\mathrm{x}), \ldots\right)_{\mathcal{H}}^{T} \\ K(\mathrm{y}, \cdot)=\left(\sqrt{\lambda_{1}} \psi_{1}(\mathrm{y}), \sqrt{\lambda_{2}} \psi_{2}(\mathrm{y}), \ldots\right)_{\mathcal{H}}^{T} \\ <K(\mathbf{x}, \cdot), K(\mathbf{y}, \cdot)>_{\mathcal{H}}=\sum_{i=0}^{\infty} \lambda_{i} \psi_{i}(\mathbf{x}) \psi_{i}(\mathbf{y})=K(\mathbf{x}, \mathbf{y}) \end{array} K(x,)=(λ1 ψ1(x),λ2 ψ2(x),)HTK(y,)=(λ1 ψ1(y),λ2 ψ2(y),)HT<K(x,),K(y,)>H=i=0λiψi(x)ψi(y)=K(x,y)

这就是RKHS,核心思想就是核函数的分解与重构。

4.2 Kernelized Stein Discrepancy(KSD)

现在,在RKHS的基础上,我们将kernel引入Stein’s identity

定义距离kernelized Stein discrepancy(KSD):
S ( p , q ) = E x , y ∼ p [ ( s q ( x ) − s p ( x ) ) T k ( x , y ) ( s q ( x ) − s p ( x ) ) ] S(p, q)=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right)^{T} k(\mathbf{x}, \mathbf{y})\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right)\right] S(p,q)=Ex,yp[(sq(x)sp(x))Tk(x,y)(sq(x)sp(x))]

此时的 S ( p , q ) S(p, q) S(p,q)本质上就是上一节矩阵情况中最后式子的变换, k ( x , y ) ( s q ( x ) − s p ( x ) ) k(\mathbf{x}, \mathbf{y})\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right) k(x,y)(sq(x)sp(x))可以看成 ϕ ( x ) \phi(x) ϕ(x),这一点从维度分析上易知。同时,我们还可以换一种理解方式, ϕ ( x ) \phi(x) ϕ(x)原来是一组函数,我们要找这组函数,那么现在变成了 k ( x , y ) ( s q ( x ) − s p ( x ) ) k(\mathbf{x}, \mathbf{y})\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right) k(x,y)(sq(x)sp(x)),我们同样要找的是 x x x固定时的一组列向量函数。

可行性证明

但是,这个时候出现了一个问题,我们原来的 S ( p , q ) = max ⁡ f ∈ F ( E p [ A q f ( x ) ] ) 2 {S}(p, q)=\max _{f \in \mathcal{F}}\left(\mathbb{E}_{p}\left[\mathcal{A}_{q} f(x)\right]\right)^{2} S(p,q)=maxfF(Ep[Aqf(x)])2 E p \mathbb{E}_{p} Ep内的式子只与 q q q有关,而引入了kernel后, S ( p , q ) S(p, q) S(p,q) E p \mathbb{E}_{p} Ep内的式子与 q , p q,p q,p都有关了, p p p是我们不希望出现的,这会导致不可解。根据变换证明,这个问题是不存在的,引入kernel后的 E p \mathbb{E}_{p} Ep中同样可以只与 q q q有关,证明如下:

S ( p , q ) = E x , y ∼ p [ ( s q − s p ) T k ( x , y ) ( s q − s p ) ] = E x , y ∼ p [ ( s q − s p ) T ( k ( x , y ) s q + ∇ y k ( x , y ) − k ( x , y ) s p − ∇ y k ( x , y ) ) ] = E x , y ∼ p [ ( s q − s p ) T v ( x , y ) ] \begin{aligned} S(p, q) &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}-s_{p}\right)^{T} k(\mathbf{x}, \mathbf{y})\left(s_{q}-s_{p}\right)\right] \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}-s_{p}\right)^{T}\left(k(\mathbf{x}, \mathbf{y}) s_{q}+\nabla_{y} k(\mathbf{x}, \mathbf{y})-k(\mathbf{x}, \mathbf{y}) s_{p}-\nabla_{\mathbf{y}} k(\mathbf{x}, \mathbf{y})\right)\right] \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}-s_{p}\right)^{T} v(\mathbf{x}, \mathbf{y})\right] \end{aligned} S(p,q)=Ex,yp[(sqsp)Tk(x,y)(sqsp)]=Ex,yp[(sqsp)T(k(x,y)sq+yk(x,y)k(x,y)spyk(x,y))]=Ex,yp[(sqsp)Tv(x,y)]

这里 v ( x , y ) = k ( x , y ) s q ( y ) + ∇ y k ( x , y ) = A q k x ( y ) v(\mathbf{x}, \mathbf{y})=k(\mathbf{x}, \mathbf{y}) s_{q}(\mathbf{y})+\nabla_{\mathbf{y}} k(\mathbf{x}, \mathbf{y})=\mathcal{A}_{q} k_{\mathbf{x}}(\mathbf{y}) v(x,y)=k(x,y)sq(y)+yk(x,y)=Aqkx(y) k x ( ⋅ ) = k ( x , ⋅ ) k_{\mathbf{x}} (\cdot)=k(\mathbf{x}, \cdot) kx()=k(x,)

为了让 p p p消失,将 s p s_p sp带入
S ( p , q ) = E x , y ∼ p [ s q T v ( x , y ) − ( ∇ x ln ⁡ p ( x ) ) T v ( x , y ) ] = E x , y ∼ p [ s q T v ( x , y ) ] − ∫ d x d y p ( x ) p ( y ) ( ∇ x ln ⁡ p ( x ) ) T v ( x , y ) = E x , y ∼ p [ s q T v ( x , y ) ] + E x , y ∼ p [ tr ⁡ ∇ x v ( x , y ) ] = E x , y ∼ p [ u q ( x , y ) ] \begin{aligned} S(p, q) &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[s_{q}^{T} v(\mathbf{x}, \mathbf{y})-\left(\nabla_{\mathbf{x}} \ln p(\mathbf{x})\right)^{T} v(\mathbf{x}, \mathbf{y})\right] \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[s_{q}^{T} v(\mathbf{x}, \mathbf{y})\right]-\int d \mathbf{x} d \mathbf{y} p(\mathbf{x}) p(\mathbf{y})\left(\nabla_{\mathbf{x}} \ln p(\mathbf{x})\right)^{T} v(\mathbf{x}, \mathbf{y}) \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[s_{q}^{T} v(\mathbf{x}, \mathbf{y})\right]+\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\operatorname{tr} \nabla_{\mathbf{x}} v(\mathbf{x}, \mathbf{y})\right] \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[u_{q}(\mathbf{x}, \mathbf{y})\right] \end{aligned} S(p,q)=Ex,yp[sqTv(x,y)(xlnp(x))Tv(x,y)]=Ex,yp[sqTv(x,y)]dxdyp(x)p(y)(xlnp(x))Tv(x,y)=Ex,yp[sqTv(x,y)]+Ex,yp[trxv(x,y)]=Ex,yp[uq(x,y)]

这里 u q ( x , y ) = s q ( x ) T k ( x , y ) s q ( y ) + s q ( x ) T ∇ y k ( x , y ) + ( ∇ x k ( x , y ) ) T s q ( y ) + tr ⁡ ( ∇ x ∇ y k ( x , y ) ) u_{q}(\mathbf{x}, \mathbf{y})=s_{q}(\mathbf{x})^{T} k(\mathbf{x}, \mathbf{y}) s_{q}(\mathbf{y})+s_{q}(\mathbf{x})^{T} \nabla_{\mathbf{y}} k(\mathbf{x}, \mathbf{y})+\left(\nabla_{\mathbf{x}} k(\mathbf{x}, \mathbf{y})\right)^{T} s_{q}(\mathbf{y})+\operatorname{tr}\left(\nabla_{\mathbf{x}} \nabla_{\mathbf{y}} k(\mathbf{x}, \mathbf{y})\right) uq(x,y)=sq(x)Tk(x,y)sq(y)+sq(x)Tyk(x,y)+(xk(x,y))Tsq(y)+tr(xyk(x,y))

虽然很长Orz但是只和q有关了ao。到现在为止,我们证明了引入kernel不影响求解,引入kernel后与引入前的原式形式等价。

易于求解证明

引入kernel自然是有引入的好处,好处在刚开始就已经说过了因为易与求解。光滑函数函数集 F \mathcal{F} F中直接找使距离最大的 f f f是很难做到的,但是引入kernel后我们就很容易找到了。我们下面来看为什么容易找到。

β ( y ) = E x ∼ p [ A q k y ( x ) ] = E x ∼ p [ ( s q ( x ) − s p ( x ) ) k y ( x ) ] \boldsymbol{\beta}(\mathbf{y})=\mathbb{E}_{\mathbf{x} \sim p}\left[\mathcal{A}_{q} k_{\mathbf{y}}(\mathbf{x})\right]=\mathbb{E}_{\mathbf{x} \sim p}\left[\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right) k_{\mathbf{y}}(\mathbf{x})\right] β(y)=Exp[Aqky(x)]=Exp[(sq(x)sp(x))ky(x)]

根据RKHS的分析,我们可以将KSD写成
S ( p , q ) = E x , y ∼ p [ ( s q ( x ) − s p ( y ) ) T k ( x , y ) ( s q ( x ) − s p ( y ) ) ] = E x , y ∼ p [ ( s q ( x ) − s p ( y ) ) T < k ( x , ⋅ ) , k ( ⋅ , y ) > H ( s q ( x ) − s p ( y ) ) ] = ∑ i = 1 d < E x ∼ p [ ( s q i ( x ) − s p i ( x ) ) k ( x , ⋅ ) ] , E y ∼ p [ ( s q i ( y ) − s p i ( y ) ) k ( ⋅ y ) ] > H = ∑ i = 1 d < β i , β i > H = ∥ β ∥ H d 2 \begin{aligned} S(p, q) &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{y})\right)^{T} k(\mathbf{x}, \mathbf{y})\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{y})\right)\right] \\ &=\mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{y})\right)^{T}<k(\mathbf{x}, \cdot), k(\cdot, \mathbf{y})>_{\mathcal{H}}\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{y})\right)\right] \\ &=\sum_{i=1}^{d}<\mathbb{E}_{\mathbf{x} \sim p}\left[\left(s_{q}^{i}(\mathbf{x})-s_{p}^{i}(\mathbf{x})\right) k(\mathbf{x}, \cdot)\right], \mathbb{E}_{\mathbf{y} \sim p}\left[\left(s_{q}^{i}(\mathbf{y})-s_{p}^{i}(\mathbf{y})\right) k(\cdot \mathbf{y})\right]>_{\mathcal{H}} \\ &=\sum_{i=1}^{d}<\beta_{i}, \beta_{i}>_{\mathcal{H}}\\ &=\|\boldsymbol{\beta}\|^2_{\mathcal{H}^{d}} \end{aligned} S(p,q)=Ex,yp[(sq(x)sp(y))Tk(x,y)(sq(x)sp(y))]=Ex,yp[(sq(x)sp(y))T<k(x,),k(,y)>H(sq(x)sp(y))]=i=1d<Exp[(sqi(x)spi(x))k(x,)],Eyp[(sqi(y)spi(y))k(y)]>H=i=1d<βi,βi>H=βHd2

也就是说,我们可以将 S ( p , q ) S(p,q) S(p,q)看成希尔伯特空间中 β \beta β函数的内积了。此时易知,任意的希尔伯特空间中的归一化(归一化目的:防止max导致无穷大)函数 ϕ \phi ϕ β \beta β的内积都小于 β \beta β与自己的内积。那么,我们想找的max,就可以写成

∥ β ∥ H d = S ( p , q ) = max ⁡ ϕ ∈ H d { E x ∼ p [ tr ⁡ ( A q ϕ ( x ) ) ] ,  s.t.  ∥ ϕ ∥ H d ≤ 1 } \|\boldsymbol{\beta}\|_{\mathcal{H}^{d}}=S(p, q)=\max _{\mathbf{\phi} \in \mathcal{H}^{d}}\left\{\mathbb{E}_{\mathbf{x} \sim p}\left[\operatorname{tr}\left(\mathcal{A}_{q} \mathbf{\phi}(\mathbf{x})\right)\right], \quad \text { s.t. } \quad\|\mathbf{\phi}\|_{\mathcal{H}^{d}} \leq 1\right\} βHd=S(p,q)=ϕHdmax{Exp[tr(Aqϕ(x))], s.t. ϕHd1}

此时最大值 ϕ ∗ = β / ∥ β ∥ H d \mathbf{\phi}^{*}=\boldsymbol{\beta} /\|\boldsymbol{\beta}\|_{\mathcal{H}^{d}} ϕ=β/βHd

这也就是说我们用kernel可以直接导出想找的 ϕ \phi ϕ

5.SVGD算法

那么有了KSD之后,我们能做什么呢?一个简单的想法是用它来优化KL散度,导师说这个式子 ∇ ϵ K L ( q [ T ] ∥ p ) ∣ ϵ = 0 = − E x ∼ q [ trace ⁡ ( A p ϕ ( x ) ) ] \left.\nabla_{\epsilon} \mathrm{KL}\left(q_{[T]} \| p\right)\right|_{\epsilon=0}=-\mathbb{E}_{x \sim q}\left[\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right)\right] ϵKL(q[T]p)ϵ=0=Exq[trace(Apϕ(x))]在learning领域是很常见的,也就是说KL散度变分求导是等于KSD的。所以我其实在想是不是这些论文都是根据KL散度反推回去的…其实它们都是拿结果往回推起源…然后再填充证明…

5.1 KL divergence的联系

下面我们来证明 ∇ ϵ K L ( q [ T ] ∥ p ) ∣ ϵ = 0 = − E x ∼ q [ trace ⁡ ( A p ϕ ( x ) ) ] \left.\nabla_{\epsilon} \mathrm{KL}\left(q_{[T]} \| p\right)\right|_{\epsilon=0}=-\mathbb{E}_{x \sim q}\left[\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right)\right] ϵKL(q[T]p)ϵ=0=Exq[trace(Apϕ(x))]

我们定义 z = T ϵ ( x ) z={T}_{\epsilon}(x) z=Tϵ(x), T ϵ ( x ) = T ( x ) {T}_{\epsilon}(x)=T(x) Tϵ(x)=T(x), T ( x ) = x + ϵ ϕ ( x ) {T}(x)=x+\epsilon \phi(x) T(x)=x+ϵϕ(x),当 x ∼ q x \sim q xq时, q [ T ] q_{[T]} q[T]表示z的概率密度。

同样地,取反函数,当 x ∼ p x \sim p xp时, p [ T − 1 ] p_{[T^{-1}]} p[T1]表示 z = T − 1 ( x ) z={T}^{-1}(x) z=T1(x)的概率密度。

也可以理解成用微小扰动 ϵ ϕ ( x ) \epsilon \phi(x) ϵϕ(x)来让 q q q逼近 p p p

我们有
K L ( q [ T ] ∥ p ) = K L ( q ∥ p [ T − 1 ] ) ∇ ϵ K L ( q [ T ] ∥ p ) = − E x ∼ q [ ∇ ϵ log ⁡ p [ T − 1 ] ( x ) ] \begin{array}{c} \mathrm{KL}\left(q_{[T]} \| p\right)=\mathrm{KL}\left(q \| p_{\left[T^{-1}\right]}\right) \\ \nabla_{\epsilon} \mathrm{KL}\left(q_{[T]} \| p\right)=-\mathbb{E}_{x \sim q}\left[\nabla_{\epsilon} \log p_{\left[T^{-1}\right]}(x)\right] \end{array} KL(q[T]p)=KL(qp[T1])ϵKL(q[T]p)=Exq[ϵlogp[T1](x)]

∇ ϵ log ⁡ p [ T − 1 ] ( x ) \nabla_{\epsilon} \log p_{\left[T^{-1}\right]}(x) ϵlogp[T1](x)展开得到
∇ ϵ log ⁡ p [ T − 1 ] ( x ) = s p ( T ( x ) ) ⊤ ∇ ϵ T ( x ) + trace ⁡ ( ( ∇ x T ( x ) ) − 1 ⋅ ∇ ϵ ∇ x T ( x ) ) \nabla_{\epsilon} \log p_{\left[T^{-1}\right]}(x)=s_{p}(\boldsymbol{T}(x))^{\top} \nabla_{\epsilon} \boldsymbol{T}(x)+\operatorname{trace}\left(\left(\nabla_{x} \boldsymbol{T}(x)\right)^{-1} \cdot \nabla_{\epsilon} \nabla_{x} \boldsymbol{T}(x)\right) ϵlogp[T1](x)=sp(T(x))ϵT(x)+trace((xT(x))1ϵxT(x))

当扰动 ϵ \epsilon ϵ很小, ϵ = 0 \epsilon=0 ϵ=0的时候
T ( x ) = x , ∇ ϵ T ( x ) = ϕ ( x ) , ∇ x T ( x ) = I , ∇ ϵ ∇ x T ( x ) = ∇ x ϕ ( x ) \boldsymbol{T}(x)=x, \quad \nabla_{\epsilon} \boldsymbol{T}(x)=\boldsymbol{\phi}(x), \quad \nabla_{x} \boldsymbol{T}(x)=I, \quad \nabla_{\epsilon} \nabla_{x} \boldsymbol{T}(x)=\nabla_{x} \boldsymbol{\phi}(x) T(x)=x,ϵT(x)=ϕ(x),xT(x)=I,ϵxT(x)=xϕ(x).

代入上式可得 ∇ ϵ log ⁡ p [ T − 1 ] ( x ) = trace ⁡ ( A p ϕ ( x ) ) \nabla_{\epsilon} \log p_{\left[T^{-1}\right]}(x)=\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right) ϵlogp[T1](x)=trace(Apϕ(x))

所以有 ∇ ϵ K L ( q [ T ] ∥ p ) ∣ ϵ = 0 = − E x ∼ q [ trace ⁡ ( A p ϕ ( x ) ) ] \left.\nabla_{\epsilon} \mathrm{KL}\left(q_{[T]} \| p\right)\right|_{\epsilon=0}=-\mathbb{E}_{x \sim q}\left[\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right)\right] ϵKL(q[T]p)ϵ=0=Exq[trace(Apϕ(x))]

即证明了KL散度变化最快的方向就是KSD所对应的向量函数 ϕ ∗ = β / ∥ β ∥ H d \mathbf{\phi}^{*}=\boldsymbol{\beta} /\|\boldsymbol{\beta}\|_{\mathcal{H}^{d}} ϕ=β/βHd

5.2 Algorithm

有了梯度方向,有了kernel,我们就可以设计算法了,就是SVGD的实现。
算法流程如下所示:
在这里插入图片描述

算法的实现比较清晰明了,相比之前的kernel引入推导更容易快速理解一些。 p ( x ) p(\mathbf{x}) p(x) 是我们想要逼近的 R d \mathbb{R}^{d} Rd 分布, 我们想要用若干粒子来做 p ( x ) p(\mathbf{x}) p(x)上的采样。选取粒子群 { x i } i = 1 n ⊂ R d \left\{\mathbf{x}_{i}\right\}_{i=1}^{n} \subset \mathbb{R}^{d} {xi}i=1nRd . 使用梯度下降法,设置学习率为 ϵ \epsilon ϵ, 每一步的梯度为 ϕ ( x i ) \phi\left(\mathbf{x}_{i}\right) ϕ(xi).不断迭代直至 l l l达到指定次数或梯度变化达到阈值。

总的来说,这个idea感觉很赞,我觉得从 E x ∼ p [ ( s q ( x ) − s p ( x ) ) ϕ ⊤ ( x ) ] \mathbb{E}_{x \sim p}\left[(s_q(x)-s_p(x)) \phi^{\top}(x)\right] Exp[(sq(x)sp(x))ϕ(x)]看到 E x , y ∼ p [ ( s q ( x ) − s p ( x ) ) T k ( x , y ) ( s q ( x ) − s p ( x ) ) ] \mathbb{E}_{\mathbf{x}, \mathbf{y} \sim p}\left[\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right)^{T} k(\mathbf{x}, \mathbf{y})\left(s_{q}(\mathbf{x})-s_{p}(\mathbf{x})\right)\right] Ex,yp[(sq(x)sp(x))Tk(x,y)(sq(x)sp(x))]这一步真的很强,毕竟是ICML、NeurIPS连着中的组(

5.实验

关于实验部分,A General Purpose Bayesian Inference Algorithm这篇中做了三个SVGD应用的实验,高斯分布逼近,逻辑回归以及贝叶斯神经网络的训练。效果好像都不错。

Github实现代码在这里:https://github.com/DartML/Stein-Variational-Gradient-Descent

关于一维分布拟合的迭代过程如下:

在这里插入图片描述






References
[1]Liu Q , Wang D . Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm[C]// 2016.
[2]Liu Q , Jason D.Lee . A Kernelized Stein Discrepancy for Goodness-of-fit Tests[C]// 2016.
[3]Liu Q , Stein Variational Gradient Descent as Gradient Flow[C]// 2016.
[4]Stein variational gradient descent https://zhuanlan.zhihu.com/p/114489837

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页