最近读了Liu Qiang组关于SVGD的几篇文章,和老师讨论了很久、查阅了很多文献后大概了解了它的思路。这篇文章整合一下我所理解的SVGD。由于太笨,不知道Katex怎么像Latex一样写公式标号····所以本文所有公式都没有标号Orz
近似推断被广泛用于概率机器学习与统计中,Stein variational gradient descent (SVGD)是由Liu Qiang等提出的一种近似推断算法。不同于MCMC,它是一种确定性的算法。不同于变分推断(VI),它采用粒子方法直接对目标概率分布进行逼近。
首先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组的研究工作。
根据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) Ex∼p[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)=maxf∈F(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)时让这个距离值尽可能的大,这样才能在同一种度量下分的更开。
下面我们尝试将 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] Ex∼p[Aqϕ(x)]=Ex∼p[Aqϕ(x)−Apϕ(x)]=Ex∼p[(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的引入做好了铺垫。
在引入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} \\
这就是RKHS,核心思想就是核函数的分解与重构。
现在,在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,y∼p[(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)=maxf∈F(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,y∼p[(sq−sp)Tk(x,y)(sq−sp)]=Ex,y∼p[(sq−sp)T(k(x,y)sq+∇yk(x,y)−k(x,y)sp−∇yk(x,y))]=Ex,y∼p[(sq−sp)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,y∼p[sqTv(x,y)−(∇xlnp(x))Tv(x,y)]=Ex,y∼p[sqTv(x,y)]−∫dxdyp(x)p(y)(∇xlnp(x))Tv(x,y)=Ex,y∼p[sqTv(x,y)]+Ex,y∼p[tr∇xv(x,y)]=Ex,y∼p[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)T∇yk(x,y)+(∇xk(x,y))Tsq(y)+tr(∇x∇yk(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)=Ex∼p[Aqky(x)]=Ex∼p[(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}
也就是说,我们可以将 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{ Ex∼p[tr(Aqϕ(x))], s.t. ∥ϕ∥Hd≤1}
此时最大值 ϕ ∗ = β / ∥ β ∥ H d \mathbf{\phi}^{*}=\boldsymbol{\beta} /\|\boldsymbol{\beta}\|_{\mathcal{H}^{d}} ϕ∗=β/∥β∥Hd
这也就是说我们用kernel可以直接导出想找的 ϕ \phi ϕ
那么有了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=−Ex∼q[trace(Apϕ(x))]在learning领域是很常见的,也就是说KL散度变分求导是等于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=−Ex∼q[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 x∼q时, q [ T ] q_{[T]} q[T]表示z的概率密度。
同样地,取反函数,当 x ∼ p x \sim p x∼p时, p [ T − 1 ] p_{[T^{-1}]} p[T−1]表示 z = T − 1 ( x ) z={T}^{-1}(x) z=T−1(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(q∥p[T−1])∇ϵKL(q[T]∥p)=−Ex∼q[∇ϵlogp[T−1](x)]
将 ∇ ϵ log p [ T − 1 ] ( x ) \nabla_{\epsilon} \log p_{\left[T^{-1}\right]}(x) ∇ϵlogp[T−1](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[T−1](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[T−1](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=−Ex∼q[trace(Apϕ(x))]
即证明了KL散度变化最快的方向就是KSD所对应的向量函数 ϕ ∗ = β / ∥ β ∥ H d \mathbf{\phi}^{*}=\boldsymbol{\beta} /\|\boldsymbol{\beta}\|_{\mathcal{H}^{d}} ϕ∗=β/∥β∥Hd
有了梯度方向,有了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=1n⊂Rd . 使用梯度下降法,设置学习率为 ϵ \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] Ex∼p[(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,y∼p[(sq(x)−sp(x))Tk(x,y)(sq(x)−sp(x))]这一步真的很强,毕竟是ICML、NeurIPS连着中的组(
关于实验部分,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