PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm

通用贝叶斯推理算法-Stein Variational Gradient Descent

  • Abstract
  • 1 Introduction
  • 2 Background
  • 3 Variational Inference Using Smooth Transforms
    • 3.1 Stein Operator as the Derivative of KL Divergence
      • 定理3.1
      • 引理3.2
    • 3.2 Stein Variational Gradient Descent
  • 4 Related Works
  • 5 Experiments
  • 6 Conclusion
  • 7.公式整理
    • 7.1 预备知识
    • 7.2 Stein’s Identity and Kernelized Stein Discrepancy
    • 7.3 光滑变换实现变分推断
      • 7.3.1 Stein算子作为KL散度的导数
      • 7.3.2 Strein 变分梯度下降

SVGD

Abstract

本文提出了一种通用的变分推理算法,这算法与优化中应用的梯度下降法相对应。我们的方法通过应用函数梯度下降算法将kl散度最小化,从而迭代地传输一组元素用以匹配目标分布。我们对各种现实模型和数据集进行了实证研究(Empirical studies),在这些模型和数据集上,我们的方法与现有最先进的方法能够一比高下。我们方法的推导是基于一个新的理论结果:(1)它将光滑变换下的kl散度导数与Stein的恒等式联系起来,(2)以及最近提出的一个具有独特意义的Kernelized Stein差分。

1 Introduction

贝叶斯推理为复杂数据建模不确定性推理提供了强有力的工具,但是贝叶斯推断的致命缺点是:难以准确计算后验概率。==马尔可夫链蒙特卡罗(MCMC)==已被广泛应用于后验样本的近似提取,但往往速度慢,收敛困难。变分推理将贝叶斯推理问题框架化为确定性优化问题,通过最小化其KL散度,使目标分布近似为更简单的分布。这使得变分方法可以通过使用现成的优化技术有效地解决贝叶斯推断问题,并且使用随机梯度下降技巧(例如1)很容易适用于大数据集(即“大数据”)。相比之下,将MCMC扩展到大数据设置更具挑战性(参见例如2、3)。

同时,变分推理的准确度计算成本都取决于定要近似的分布。简单的近似集,如传统的 平均场方法 中使用的近似集,限制性太强,无法与真实的后验分布相似,而更高级的选择给后续的优化任务带来了更多的困难。因此,有效的变分方法往往需要在基于模型的基础上推导出来,这是开发通用的、用户友好的、适用于不同类型模型、和应用领域的非ML专家可以获取的变分工具的一个主要障碍。

这种情况与寻找后验模式的最大后验(MAP)优化任务(有时被称为 poor man’s Bayesian estimator,与 full Bayesian inference相对应–用于估计全后验概率)形成了对比。对于这种情况,(随机)梯度下降的变体是一种简单的、通用的,然而强大的工具。最近人们对创建用户友好的变分推理工具(如4-7)越来越感兴趣,但仍需要更多的努力来开发更有效的通用算法。
在本文工作中,我们提出了一种新的通用变分推理算法,它可以作为应用于全贝叶斯推理中的梯度下降的自然对应(见算法1)。我们的算法使用一组 particles进行近似,在这组 particles上执行(函数)梯度下降以最小化kl散度,并驱动 particles拟合真实的后验分布。我们的算法形式简单,可以在任何时候应用(任何可以应用梯度下降的地方应用)。事实上,当只使用一个 particle时,它会降低梯度下降到MAP的,而更多粒子时会自动变为全贝叶斯采样方法。
在我们的算法的基础上是一个新的理论结果:它连接了kl散度导数w.r.t .平滑变量变换 和最近引入的Kernelized Stein差分[8–10],这使得我们能够 在复制核希尔伯特空间(RKhs)的单位球内 为 使kl散度下降最快 的 最佳平滑扰动方向 推导出一个闭式解。这一新的结果具有独立的意义,可以在机器学习和统计得到广泛的应用(不仅仅在变分推理的学中)。

2 Background

预备知识:
x是X⊂Rd\mathcal{X} \subset \mathbb{R}^{d}XRd中的一个随机变量,{Dk}\left\{D_{k}\right\}{Dk}是独立同分布的观测集合。x的贝叶斯推断涉及到:在先验概率p0(x)p_{0}(x)p0(x)的条件下,后验分布的推断p(x):=p‾(x)/Zp(x) :=\overline{p}(x) / Zp(x):=p(x)/Z,其中p‾(x):=p0(x)∏k=1Np(Dk∣x)\overline{p}(x) :=p_{0}(x) \prod_{k=1}^{N} p\left(D_{k} | x\right)p(x):=p0(x)k=1Np(Dkx)Z=∫p‾(x)dxZ=\int \overline{p}(x) d xZ=p(x)dx是一个十分难计算的归一化常数。为了方便起见,我们已经放弃了p(x)中数据{Dk}\left\{D_{k}\right\}{Dk}的调节。

k(x,x′):X×X→Rk\left(x, x^{\prime}\right) : \mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}k(x,x):X×XR是一个正定核,k(x,x′)k\left(x, x^{\prime}\right)k(x,x)的再生产核希尔伯特空间(RKHS)H(\mathrm{RKHS}) \mathcal{H}(RKHS)H{f:f(x)=∑i=1maik(x,xi),ai∈R,m∈\left\{f : f(x)=\sum_{i=1}^{m} a_{i} k\left(x, x_{i}\right), \quad a_{i} \in \mathbb{R}, \quad m \in\right.{f:f(x)=i=1maik(x,xi),aiR,mN,xi∈X}\mathbb{N}, x_{i} \in \mathcal{X} \}N,xiX}线性闭合空间。这个空间具有内积计算:⟨f,g⟩H=∑ijaibjk(xi,xj)\langle f, g\rangle_{\mathcal{H}}=\sum_{i j} a_{i} b_{j} k\left(x_{i}, x_{j}\right)f,gH=ijaibjk(xi,xj) for g(x)=∑ibik(x,xi)g(x)=\sum_{i} b_{i} k\left(x, x_{i}\right)g(x)=ibik(x,xi)。表示着在Hd\mathcal{H}^{d}Hd中,向量函数
f=[f1,…,fd]⊤\boldsymbol{f}=\left[f_{1}, \ldots, f_{d}\right]^{\top}f=[f1,,fd] with fi∈Hf_{i} \in \mathcal{H}fiH的空间,可以进行内积计算⟨f,g⟩Hd=∑i=1d⟨fi,gi⟩H\langle\boldsymbol{f}, \boldsymbol{g}\rangle_{\mathcal{H}^{d}}=\sum_{i=1}^{d}\left\langle f_{i}, g_{i}\right\rangle_{\mathcal{H}}f,gHd=i=1dfi,giH。我们假设所有向量都是列向量。让∇xf=[∇xf1,…,∇xfd]\nabla_{x} \boldsymbol{f}=\left[\nabla_{x} f_{1}, \ldots, \nabla_{x} f_{d}\right]xf=[xf1,,xfd]

Stein’s Identity and Kernelized Stein Discrepancy
Stein’s Identity在我们的框架中扮演着一个基本角色,让p(x)p(x)p(x)X⊆Rd\mathcal{X} \subseteq \mathbb{R}^{d}XRd上的一个连续可微分(也称为光滑)密度。ϕ(x)=[ϕ1(x),⋯,ϕd(x)]⊤\phi(x)=\left[\phi_{1}(x), \cdots, \phi_{d}(x)\right]^{\top}ϕ(x)=[ϕ1(x),,ϕd(x)]光滑的向量函数。 Stein’s identity表明对于充分规则ϕ\phiϕ有如下等式成立:
Ex∼p[Apϕ(x)]=0,where Apϕ(x)=∇xlog⁡p(x)ϕ(x)⊤+∇xϕ(x)\mathbb{E}_{x \sim p}\left[\mathcal{A}_{p} \phi(x)\right]=0, \quad \text { where } \qquad \mathcal{A}_{p} \phi(x)=\nabla_{x} \log p(x) \phi(x)^{\top}+\nabla_{x} \phi(x) Exp[Apϕ(x)]=0, where Apϕ(x)=xlogp(x)ϕ(x)+xϕ(x)
其中:Ap\mathcal{A}_{p}Ap为Stein operator,其作用于函数φ并产生一个零均值函数。。。。。

3 Variational Inference Using Smooth Transforms

变分推理使用更简单的分布q∗(x)q^{*}(x)q(x)近似目标分布p(x)p(x)p(x)q∗(x)q^{*}(x)q(x)在预先定义的集合Q={q(x)}\mathcal{Q}=\{q(x)\}Q={q(x)}中通过最小化如下KL散度找到:
q∗=arg⁡min⁡q∈Q{KL(q∥p)≡Eq[log⁡q(x)]−Eq[log⁡p‾(x)]+log⁡Z}q^{*}=\underset{q \in \mathcal{Q}}{\arg \min }\left\{\mathrm{KL}(q \| p) \equiv \mathbb{E}_{q}[\log q(x)]-\mathbb{E}_{q}[\log \overline{p}(x)]+\log Z\right\} q=qQargmin{KL(qp)Eq[logq(x)]Eq[logp(x)]+logZ}

其中,在解决优化问题时,我们不需要计算常数logZlogZlogZ。集合Q\mathcal{Q}Q的选择是很关键的,不同的选择定义了不同类型的变分推理方法。最好的Q\mathcal{Q}Q的集合应该是在以下三个因素中寻找平衡:i)精度,足够宽,能够接近大类目标分布;ii)可牵引性,由易于推断的简单分布组成;以及iii)可解性,以便有效地解决后续的kl最小化问题。

在我们的工作中,由可追踪的推断分布中获取的分布组成了集合Q\mathcal{Q}Q,也就是说,Q\mathcal{Q}Q是由来自z=T(x)z=T(x)z=T(x)的随机变量组成的分布组成,其中T:X−>XT:\mathcal{X}->\mathcal{X}T:X>X是光滑的一到一的映射;x是从可追踪的推断分布q0(x)q_0(x)q0(x)中抽取出来的。通过改变变量方程,z的变量概率分布为:

××××××××××这样的q原则上可以近似任意的分布:可以证明,在没有atoms(即,没有一个点携带正质量)的任何两个分布之间总是存在一个可测量的变换T;此外,对于Lipschitz连续密度p和q,在它们之间总是存在着转换,而转换最少与p和q一样流畅。对此主题进行深入讨论,详见我Villani[12]。

然而,在实践中,我们需要适当地限制变换集T,使 (4) 中相应的变分优化切实可行。一种方法是考虑具有一定参数形式的T并优化相应的参数[例如,13、14]。然而,这给选择合适的参数族来平衡精度、可伸缩性和可解性带来了一个困难,特别是考虑到T必须是一一映射,并且雅可比矩阵必须高效可计算.

相反,我们提出了一种 迭代 构造 增量 变换 的新算法,它可以有效地在RKHS中的T上执行 最速下降 。我们的算法不需要显式地指定参数形式,也不需要计算雅可比矩阵,并且有一个特别简单的形式,模仿典型的梯度下降算法,使得它即使对于非专家的变分推理也很容易实现。

3.1 Stein Operator as the Derivative of KL Divergence

为了解释如何将(4)中的kl散度最小化,我们考虑了由 标识映射 的 小扰动 形成的 增量变换 :T(x)=x+ϵϕ(x)T(x)=x+\epsilon\phi(x)T(x)=x+ϵϕ(x),其中ϕ(x)\phi(x)ϕ(x)是一个表征扰动方向的光滑函数,标量ϵ\epsilonϵ表示扰动幅度。当∣ϵ∣|\epsilon|ϵ充分小的时候,T的雅克比矩阵是满秩的(近似于单位阵),因此,利用 反函数定理 ,T是一一映射。

下面的结果形成了我们的方法的基础,在 Stein算子KL散度关于微小扰动 ϵ\epsilonϵ 的导数 之间形成了一个有意义的联系。

定理3.1

引理3.2

引理3.2 表面一个可迭代的过程,其将一个原始分布q0q_0q0转换为目标分布p:我们一开始将T0∗(x)=x+ϵ0∗ϕq0,p∗(x)T^*_0(x)=x+\epsilon_0*\phi^*_{q_0,p}(x)T0(x)=x+ϵ0ϕq0,p(x)应用于q0q_0q0 ,使得q0与pq_0与pq0p之间的KL散度下降ϵ0∗D2(q0,p)\epsilon_0*\mathcal{D}^2(q_0,p)ϵ0D2(q0,p),这就是形成了一个新的分布。

函数梯度为了进一步了解这个过程,我们现将重新解释(6)式子为RKHDS中的函数梯度。对于f∈Hdf \in\mathcal{H^d}fHd任意方程F[f]F[f]F[f],其梯度为▽fF[f]\bigtriangledown_fF[f]fF[f]Hd\mathcal{H^d}Hd中的方程,例如“F[f+ϵg(x)=F[f]+ϵ<▽fF[f],g>+O(ϵ2)F[f+\epsilon g(x)=F[f]+\epsilon <\bigtriangledown_fF[f],g>+O(\epsilon^2)F[f+ϵg(x)=F[f]+ϵ<fF[f],g>+O(ϵ2),对于任意的g∈Hdg \in\mathcal{H^d}gHdϵ∈R\epsilon \in\mathcal{R}ϵR

3.2 Stein Variational Gradient Descent

为了在实践中实现迭代过程(7),需要近似计算(6)中ϕq,p∗(x)\phi_{q, p}^{*}(x)ϕq,p(x)的期望值。要做到这一点,我们可以首先从初始分布q0q_0q0中抽样一组样本{xi0}i=1n\{x_i^0\}_{i=1}^n{xi0}i=1n,用式(7)的经验版本迭代更新样本,经验版本:streian算子在qlq_lql下的期望近似为样本在lll轮迭代中的经验均值。这过程在算法1中总结出来了。这允许我们(确定性地)传输一组点(来自初始分布)以匹配我们的目标分布p(x)p(x)p(x)有效地提供p(x)p(x)p(x)提供了一种采样方法(目标是采样?)。我们可以看到,这个过程的实现完全不依赖于初始分布q0q_0q0,实际上,我们可以从一组任意点{xi}i=1n\{x_i\}_{i=1}^n{xi}i=1n开始,这组任意的点可能由复杂(随机或确定性)黑盒过程生成。

我们期望{xil}i=1n\{x_i^l\}_{i=1}^n{xil}i=1n随着n的增加形式越来越接近qlq_lql.为此,用Φ\PhiΦ表示ql−>ql+1q_l->q_{l+1}ql>ql+1非线性映射。写做ql+1=Φl(ql)q_{l+1}=\Phi_l(q_l)ql+1=Φl(ql),其中 qlq_lql通过ql,[Tl∗],ϕql,pq_{l,[T_l^*]},\phi_{q_l,p}ql,[Tl],ϕql,p进入映射Φ\PhiΦ。那么算法1 的更新 可以看做q^l+1=Φ(q^l)\hat{q}_{l+1}=\Phi(\hat{q}_l)q^l+1=Φ(q^l),也就是从经验测量q^l−>q^l+1\hat{q}_l->\hat{q}_{l+1}q^l>q^l+1的映射。因为q^0\hat{q}_0q^0随着n增加收敛于q0q_0q0,当Φ\PhiΦ是连续映射时,ql^\hat{q_l}ql^也应当收敛与qlq_lql。在相互作用粒子系统的平均场理论(如15)中,已经建立了关于这种收敛性的严格理论结果:。。。此外,对于任何固定的i0i_0i0,每个粒子xi0lx_{i_0}^lxi0l的分布也趋向于qlq_lql,并且与任何其他有限的粒子子集(n→∞)无关,这一现象称为混沌传播[16]。我们为今后的工作留下了具体的理论分析。

算法1 在样本的水平上模仿了梯度动力学,(8)式ϕ^∗(x)\hat{\phi}^{*}(x)ϕ^(x)中的两项起不同的作用:第一项通过平滑的梯度方向将粒子推向p(x)p(x)p(x)的高概率区域,这是由核函数加权的所有点的梯度的加权和。第二项作为一个排斥力(repulsive force),防止所有点一起崩溃(collapse together)成p(x)p(x)p(x)的局部模式;要看到这一点,考虑RBF内核k(x,x′)=exp(−1h∣∣x−x′∣∣2)k(x,x')=exp(-\frac{1}{h}||x-x'||^2)k(x,x)=exp(h1xx2),对xjlx_j^lxjl求梯度之后为∑j1h(x−xj)k(xj,x)\sum_j\frac{1}{h}(x-x_j)k(x_j,x)jh1(xxj)k(xj,x).当k(xj,x)k(x_j,x)k(xj,x)很大时能够将x拉离它的邻居点xjx_jxj.如果我们让带宽h→0h→0h0,排斥项消失,式(8)化简为一组独立的典型梯度上升链,以使logp(x)logp(x)logp(x)最大化(即MAP:最大后验概率),所有粒子都将崩溃为局部模式。

另一个有趣的现象 ,只使用一个样本(n=1),在这种情况下,算法1将任何满足∇xk(x,x)=0\nabla_{x} k(x, x)=0xk(x,x)=0的核简化为典型的单链 梯度上升(MAP)。这表明我们的算法可以很好地推广到有监督的学习任务中,即使只有极少量的n个粒子,因为MPA的梯度上升(n=1)已经在实践中证明是非常成功的。这一特性将我们的粒子法与典型的蒙特卡罗方法区分开来,后者需要对多个点进行平均。这里的关键区别在于,我们使用确定性排斥力(deterministic repulsive force),而不是蒙特卡罗随机性,来获得分布近似的不同点。
Complexity and Efficient Implementation 主要花费在梯度计算上面p(x)∝p0(x)∏k=1Np(Dk∣x)p(x)\propto p_0(x)\prod_{k=1}^Np(D_k|x)p(x)p0(x)k=1Np(Dkx)当N很大时要计算梯度很费时间。可以通过对数据进行采样,得到子样本小批次集合Ω\OmegaΩ近似计算:
∇xlogp(x)≈logp0(x)+NΩ∑k∈Ωlogp(Dk∣x)\nabla_xlogp(x)\approx logp_0(x)+\frac{N}{\Omega}\sum_{k\in\Omega}logp(D_k|x) xlogp(x)logp0(x)+ΩNkΩlogp(Dkx)

通过将n个粒子的梯度评价并行化,可以获得额外的加速。

式(8)还需要计算内核矩阵{k(xi,xj)}\{k(x_i,x_j)\}{k(xi,xj)},其成本为O(n2)O(n^2)O(n2);在实践中,与梯度评估成本相比,该成本相对较小,因为在实践中使用相对较小的n(例如几百个)就足够了。如果需要非常大的n,可以通过对粒子进行次采样或使用核$k(x,x_0)[17]的随机特征展开来近似求式子(8)中的和。

4 Related Works

5 Experiments

我们在toy和现实世界的例子中测试了我们的算法,在这些例子中我们发现我们的方法优于各种基线方法。我们的代码可以在https://github.com/dartml/stein找到。

对于我们所有的实验,我们使用RBF核,把带宽设为h=med2/lognh=med^2/lognh=med2/logn ,med 是点与点之间距离的中点();基于(一个式子) 启发。所以对于每一个xxix_ixi,来自它自身梯度的贡献,以及来自其他点的影响,彼此平衡。注意,通过这种方式,带宽h在迭代过程中实际上是自适应变化的。我们使用adagrad作为步长,并使用先验分布初始化粒子。 除非另有规定。

Toy Example on 1D Gaussian Mixture
将目标分布设置为:p(x)=1/3N(x;−1,1)+2/3N(x;2,1)p(x)=1/3\mathcal{N}(x;-1,1)+2/3\mathcal{N}(x;2,1)p(x)=1/3N(x;1,1)+2/3N(x;2,1),初始分布为:q0(x)=N(x;−10,1)q_0(x)=\mathcal{N}(x;-10,1)q0(x)=N(x;10,1).这就产生了一个挑战,因为p(x)和q0(x)p(x)和q_0(x)p(x)q0(x)的概率质量彼此相距很远(几乎没有重叠)。图1显示了我们方法中样本(n=1)的分布是如何在不同的迭代中演变的。我们发现,尽管q0(x)q_0(x)q0(x)和p(x)之间有很小的重叠,我们的方法可以将样本推向目标分布,甚至可以恢复离初始点较远的模式。我们发现了其他基于样本的算法,比如dai等人。[7]在这个toy例子中,由于q0(x)q_0(x)q0(x)的错误选择,倾向于经历degeneracy。

图2比较了我们的方法与蒙特卡罗取样法,当使用获得的样本去估计具有不同测试函数h(·)的期望Ep(h(x))E_p(h(x))Ep(h(x))。我们发现,我们的方法的MSE比蒙特卡罗精确采样的性能更接近或更好。这可能是因为由于repulsive force,我们的粒子比I.I.D.样品更分散,因此具有更高的估计精度。正式确定我们方法的错误率仍然是一个悬而未决的问题。

Bayesian Logistic Regression
我们考虑使用与Gershman等人[5]相同的设置对二分类问题进行贝叶斯逻辑回归。它用高斯先验p0(w∣α)=N(w,α−1)p_0(w|α)=\mathcal{N}(w,α−1)p0(wα)=N(w,α1p0(α)=gamma(α,1,0.01)p_0(α)=gamma(α,1,0.01)p0(α)=gamma(α,1,0.01)指定回归权重w。该推理被应用参数后验概率的计算p(x∣D)p(x|D)p(xD)x=[w,logα]x=[w,logα]x=[w,logα]。我们将我们的算法与Gershman等人[5]使用的8个数据集(n>500)上的(nuts)1[29]和非参数变分推理(npv)[5]进行了比较。[5]并发现他们在这些(相对简单的)数据集上给出了非常相似的结果;更多细节见附录。

我们用581012个数据点和54个特性进一步测试二分类covertype数据集。这个数据集太大,加速需要随机梯度下降。由于nuts和npv在其代码中没有小批量选项,因此我们用welling和teh[2]等人的stochastic gradient Langevin
dynamics (SGLD)与dai[7]等人的particle mirror descent (PMD)、doubly stochastic variational inference (DSVI)、a parallel version of SGLD进行了比较。×××××。图3,一些比较结果。

Bayesian Neural Network --具体代码是什么
我们将该算法与Hern_ndez Lobato和Adams[30]在贝叶斯神经网络上提出的概率反向传播(PBP)算法进行了比较。我们的实验设置几乎是一致的,除了我们使用一个gamma(1,0.1)先验作为协方差的逆,并且不使用缩放输出层输入的技巧。我们使用具有一个隐藏层的神经网络,对大多数数据集取50个隐藏单元,除了蛋白质和年份等数据采用取100个单元;所有数据集被随机分为90%用于训练和10%用于测试,结果是20次实验的平均。除了蛋白质和年份数据,是5次和1次的平均。我们使用relu(x)=max(0,x)relu(x)=max(0,x)relu(x=max(0,x)作为激活函数,其weak derivative为I[x>0](stein特征也适用于weak derivative;见stein等人[31])。使用作者代码6的默认设置重复PBP实验。对于我们的算法,我们只使用20个样本,并且使用动量为标准的ADAGRAD作为深度学习算法。小批量是100,除了Year数据我们使用批次大小为1000。

我们发现我们的算法在精度和速度方面都比PBP有了持续的改进;这是令人鼓舞的,因为PBP是专门为贝叶斯神经网络设计的。我们还发现,我们的结果与同一数据集(例如,32-34)上报告的最新结果具有可比性,这些数据集利用了一些我们也可以从中受益的先进技术。

6 Conclusion

提出了一种快速可扩展贝叶斯的通用变分推理算法。
推论。未来的方向包括对我们的方法有更多的理论理解,在深度学习模型中有更多的实际应用,以及第3.1节中我们基本定理的其他潜在应用。

变分推断:用q(x)近似目标分布p(x)。

方法:在集合Q={q(x)}\mathcal{Q}=\{q(x)\}Q={q(x)}搜索使q(x)和p(x)q(x)和p(x)q(x)p(x)之间KL散度最小的q(x)q(x)q(x)

集合Q\mathcal{Q}Q的类型 决定了 不同类型的变分推断方法。

本文的Q\mathcal{Q}Q:其中的q(x)由 随机变量z 组成,z=T(x)z=T(x)z=T(x)。T是一个光滑的一一映射,x 是从 一个容易计算的分布q0(x)q_0(x)q0(x)中采样的。

下面的问题就是围绕 T如何计算的:迭代 构造 增量变换。


7.公式整理

7.1 预备知识

xxxX⊂Rd\mathcal{X} \subset \mathbb{R}^{d}XRd中的一个l连续型随机变量,{Dk}\left\{D_{k}\right\}{Dk}xxx独立同分布的观测集合

xxx贝叶斯推断的后验概率为:
p(x):=p‾(x)/Zp(x) :=\overline{p}(x) / Zp(x):=p(x)/Z其中,p‾(x):=p0(x)∏k=1Np(Dk∣x)\overline{p}(x) :=p_{0}(x) \prod_{k=1}^{N} p\left(D_{k} | x\right)p(x):=p0(x)k=1Np(Dkx)(似然函数),Z=∫p‾(x)dxZ=\int \overline{p}(x) d xZ=p(x)dx 为归一化常数。

k(x,x′):X×X→Rk\left(x, x^{\prime}\right) : \mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}k(x,x):X×XR是一个正定核,k(x,x′)k\left(x, x^{\prime}\right)k(x,x)H\mathcal{H}H空间是fff线性张成的闭合空间。{f:f(x)=∑i=1maik(x,xi),ai∈R,m∈\left\{f : f(x)=\sum_{i=1}^{m} a_{i} k\left(x, x_{i}\right), \quad a_{i} \in \mathbb{R}, \quad m \in\right.{f:f(x)=i=1maik(x,xi),aiR,mN,xi∈X}\mathbb{N}, x_{i} \in \mathcal{X} \}N,xiX}H\mathcal{H}H空间内定义了内积计算:

⟨f,g⟩H=∑ijaibjk(xi,xj)\langle f, g\rangle_{\mathcal{H}}=\sum_{i j} a_{i} b_{j} k\left(x_{i}, x_{j}\right)f,gH=ijaibjk(xi,xj)

其中: g(x)=∑ibik(x,xi)g(x)=\sum_{i} b_{i} k\left(x, x_{i}\right)g(x)=ibik(x,xi)内积计算只要f的系数,和g的系数和单位组成

Hd\mathcal{H}^{d}Hd表示向量函数f=[f1,…,fd]⊤\boldsymbol{f}=\left[f_{1}, \ldots, f_{d}\right]^{\top}f=[f1,,fd] 的空间,其中, fi∈Hf_{i} \in \mathcal{H}fiHHd\mathcal{H}^{d}Hd中定义的内积计算:
⟨f,g⟩Hd=∑i=1d⟨fi,gi⟩H\langle\boldsymbol{f}, \boldsymbol{g}\rangle_{\mathcal{H}^{d}}=\sum_{i=1}^{d}\left\langle f_{i}, g_{i}\right\rangle_{\mathcal{H}}f,gHd=i=1dfi,giH

假定所有的向量都是列向量,令,
∇xf=[∇xf1,…,∇xfd]\nabla_{x} \boldsymbol{f}=\left[\nabla_{x} f_{1}, \ldots, \nabla_{x} f_{d}\right]xf=[xf1,,xfd]

7.2 Stein’s Identity and Kernelized Stein Discrepancy

(Stein 特征 和 核化Stein差异)
p(x)X⊆Rd\mathcal{X} \subseteq \mathbb{R}^{d}XRd上的一个连续可微分密度,ϕ(x)=[ϕ1(x),⋯,ϕd(x)]⊤\phi(x)=\left[\phi_{1}(x), \cdots, \phi_{d}(x)\right]^{\top}ϕ(x)=[ϕ1(x),,ϕd(x)]光滑的向量函数。 Stein’s identity表明对于充分规则ϕ\phiϕ有如下等式成立:
Ex∼p[Apϕ(x)]=0,\mathbb{E}_{x \sim p}\left[\mathcal{A}_{p} \phi(x)\right]=0, \quad Exp[Apϕ(x)]=0,Apϕ(x)=∇xlog⁡p(x)ϕ(x)⊤+∇xϕ(x)........(1)\qquad \mathcal{A}_{p} \phi(x)=\nabla_{x} \log p(x) \phi(x)^{\top}+\nabla_{x} \phi(x)........(1) Apϕ(x)=xlogp(x)ϕ(x)+xϕ(x)........(1)
其中:Ap\mathcal{A}_{p}Ap为Stein operator(Stein算子),作用于函数 ϕ\phiϕ 使结果在p(x)p(x)p(x)下的期望0。通过ϕ\phiϕ上的温和边界条件进行部分积分证明stein特征的性质。(温和边界条件为:还是部分积分为)
(1)p(x)ϕ(x)=0,∀x∈∂Xp(x) \phi(x)=0, \forall x \in \partial \mathcal{X}p(x)ϕ(x)=0,xXX\mathcal{X}X是紧致的
(2)lim⁡r→∞∮Brp(x)ϕ(x)⊤n(x)dS=0\lim _{r \rightarrow \infty} \oint_{B_{r}} p(x) \phi(x)^{\top} \boldsymbol{n}(x) d S=0limrBrp(x)ϕ(x)n(x)dS=0X=Rd\mathcal{X}=\mathbb{R}^{d}X=Rd∮Br\oint_{B_{r}}Br为以原点为中心的,半径为r的球面积分,n(x)n(x)n(x)BrB_rBr归一化。
如果以上条件满足的话,ϕ\phiϕ作为概率函数p下的Stein类。

q(x)X⊆Rd\mathcal{X} \subseteq \mathbb{R}^{d}XRd上的另一个连续可微分密度,考虑stein 算子作用在ϕ\phiϕ上,且在x∼qx \sim qxq 下的期望:
Ex∼q[Apϕ(x)]≠0\mathbb{E}_{x \sim q}\left[\mathcal{A}_{p} \phi(x)\right.]\ne0Exq[Apϕ(x)]=0

这个期望的大小衡量的q(x)与p(x)q(x)与p(x)q(x)p(x)之间的差异,可以被定义为个差异度量–Strein差异。
合适的函数集合F\mathcal{F}F中寻找ϕ\phiϕ以最大化stein特征的违反度。(定义了一个范数用于衡量两个分布之间的差异
D(q,p)=max⁡ϕ∈F{Ex∼q[trace⁡(Apϕ(x))]}\mathbb{D}(q, p)=\max _{\phi \in \mathcal{F}}\left\{\mathbb{E}_{x \sim q}\left[\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right)\right]\right\}D(q,p)=ϕFmax{Exq[trace(Apϕ(x))]}

集合F\mathcal{F}F很难选,所以采用核化Strein差异方法。
D(q,p)=max⁡ϕ∈Hd{Ex∼q[trace⁡(Apϕ(x))],s.t. ∥ϕ∥Hd≤1}......(2)\mathbb{D}(q, p)=\max _{\phi \in \mathcal{H}^{d}}\left\{\mathbb{E}_{x \sim q}\left[\operatorname{trace}\left(\mathcal{A}_{p} \phi(x)\right)\right], \quad \text { s.t. } \quad\|\phi\|_{\mathcal{H}^{d}} \leq 1\right\}......(2) D(q,p)=ϕHdmax{Exq[trace(Apϕ(x))], s.t. ϕHd1}......(2)

ϕ\phiϕ的搜索空间由集合F\mathcal{F}F换到了H\mathcal{H}H空间的单位球中,且说,优化问题有闭合解。
(2)最优解为[8-10]没有推导过,最优解是求出了D(q,p),但是,D本身没有最最小化
ϕ(x)=ϕq,p∗(x)/∥ϕq,p∗∥Hd\phi(x)=\phi_{q, p}^{*}(x) /\left\|\phi_{q, p}^{*}\right\|_{\mathcal{H}^{d}} ϕ(x)=ϕq,p(x)/ϕq,pHd

ϕq,p∗(⋅)=Ex∼q[Apk(x,⋅)]−>D(q,p)=∥ϕq,p∗∥Hd......(3)\phi_{q, p}^{*}(\cdot)=\mathbb{E}_{x \sim q}\left[\mathcal{A}_{p} k(x, \cdot)\right] \quad -> \quad \mathbb{D}(q, p)=\left\|\phi_{q, p}^{*}\right\|_{\mathcal{H}^{d}}......(3) ϕq,p()=Exq[Apk(x,)]>D(q,p)=ϕq,pHd......(3)

k(x,x′)k(x,x')k(x,x)可以为RBF核:
k(x,x′)=exp⁡(−1h∥x−x′∥22)k\left(x, x^{\prime}\right)=\exp \left(-\frac{1}{h}\left\|x-x^{\prime}\right\|_{2}^{2}\right) k(x,x)=exp(h1xx22)

7.3 光滑变换实现变分推断

变分推断:用简单分布q(x)q(x)q(x)近似目标分布p(x)p(x)p(x)。从预定义集合Q=q(x)\mathcal{Q}={q(x)}Q=q(x)中寻找使q与pKL散度最小的q。
q∗=arg⁡min⁡q∈Q{KL(q∥p)≡Eq[log⁡q(x)]−Eq[log⁡p‾(x)]+log⁡Z}......(4)q^{*}=\underset{q \in \mathcal{Q}}{\arg \min }\left\{\mathrm{KL}(q \| p) \equiv \mathbb{E}_{q}[\log q(x)]-\mathbb{E}_{q}[\log \overline{p}(x)]+\log Z\right\}......(4) q=qQargmin{KL(qp)Eq[logq(x)]Eq[logp(x)]+logZ}......(4)
集合Q\mathcal{Q}Q的类型决定了 不同类型的变分推断方法。本文的Q\mathcal{Q}Q:其中的分布由随机变量z 组成,z=T(x)z=T(x)z=T(x)T:X−>XT:\mathcal{X->X}T:X>X是光滑的一一映射,x 是从简单分布q0(x)q_0(x)q0(x)中采样的。依据随机变量的函数变换可得:
q[T](z)=q(T−1(z))⋅∣det⁡(∇zT−1(z))∣q_{[T]}(z)=q\left(\boldsymbol{T}^{-1}(z)\right) \cdot\left|\operatorname{det}\left(\nabla_{z} \boldsymbol{T}^{-1}(z)\right)\right| q[T](z)=q(T1(z))det(zT1(z))

T不同,Q\mathcal{Q}Q集合可以近似任意的概率分布,但是为了使KL散度优化的式(4)好解,要限制T的选择。本文提出了一个新的算法用于 迭代 构造 增量 变换,能够在RKHS空间中的T上达到最速下降。

7.3.1 Stein算子作为KL散度的导数

考虑单位映射上的微小扰动变换T:
T(x)=x+ϵϕ(x)T(x)=x+\epsilon\phi(x)T(x)=x+ϵϕ(x)

其中:ϕ(x)\phi(x)ϕ(x)是一个表征扰动方向的光滑函数,标量ϵ\epsilonϵ表示扰动幅度。

Stein算子KL散度在扰动幅度ϵ\epsilonϵ处的导数有莫名的联系

定理3.1 --增量扰动T构成的 q[T](z)q_{[T]}(z)q[T](z)与目标分布p(x)p(x)p(x)之间的KL散度对ϵ\epsilonϵ求梯度,与,KSD定义差一个负号(证明见附录1)。
∇ϵKL(q[T]∥p)∣ϵ=0=−Ex∼q[trace⁡(Apϕ(x))]......(5)\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]......(5) ϵKL(q[T]p)ϵ=0=Exq[trace(Apϕ(x))]......(5)
因为(2)式子的最优解是:ϕ(x)=ϕ∗(x)∣∣ϕ∗(x)∣∣\phi(x)=\frac{\phi^*(x)}{||\phi^*(x)||}ϕ(x)=ϕ(x)ϕ(x),其中 ϕq,p∗(⋅)=Ex∼q[Apk(x,⋅)]\phi_{q, p}^{*}(\cdot)=\mathbb{E}_{x \sim q}\left[\mathcal{A}_{p} k(x, \cdot)\right]ϕq,p()=Exq[Apk(x,)],可以求得差异D(q,p)=∣∣ϕ∗(x)∣∣\mathbb{D}(q, p)=||\phi^*(x)||D(q,p)=ϕ(x)右边搜索ϕ(x)\phi(x)ϕ(x)求最大=>左边的梯度就最大)上式左边求最大,就是右边求最大,就是KL散度的梯度的值最大,对应方向:变化最快的方向,KL散度下降最大的方向。此时最优扰动方向ϕ∗(x)\phi^*(x)ϕ(x),它可以使q[T]快速靠近pq_{[T]}快速靠近pq[T]p
ϕq,p∗(⋅)=Ex∼q[Apk(x,⋅)]......(6)\phi_{q, p}^{*}(\cdot)=\mathbb{E}_{x \sim q}\left[\mathcal{A}_{p} k(x, \cdot)\right]......(6)ϕq,p()=Exq[Apk(x,)]......(6)

引理3.2 带入最优解时(5)式
∇ϵKL(q[T]∥p)∣ϵ=0=−D2(q,p)\left.\nabla_{\epsilon} \mathrm{KL}\left(q_{[T]} \| p\right)\right|_{\epsilon=0}=-\mathbb{D}^{2}(q, p) ϵKL(q[T]p)ϵ=0=D2(q,p)
引理3.2展示了将 一个初始分布q0q_0q0 通过 迭代得到 目标分布ppp 的迭代式(ϕ∗(x)\phi^*(x)ϕ(x)包含了目标分布ppp的信息):

T0∗(x)=x+ϵ0⋅ϕq0,p∗(x)\boldsymbol{T}_{0}^{*}(x)=x+\epsilon_{0} \cdot \boldsymbol{\phi}_{q_{0}, p}^{*}(x)T0(x)=x+ϵ0ϕq0,p(x) where q1(x)=q0[T0](x)q_{1}(x)=q_{0\left[\boldsymbol{T}_{0}\right]}(x)q1(x)=q0[T0](x),

重复这个过程直至T为单位阵:
qℓ+1=qℓ∣Tℓ∣,where Tℓ∗(x)=x+ϵℓ⋅ϕqℓ,p∗(x)......(7)q_{\ell+1}=q_{\ell\left|T_{\ell}\right|}, \quad \text { where } \quad T_{\ell}^{*}(x)=x+\epsilon_{\ell} \cdot \phi_{q_{\ell, p}}^{*}(x)......(7) q+1=qT, where T(x)=x+ϵϕq,p(x)......(7)
函数梯度 为了进一步了解这个过程,我们现将重新解释(6)式子为RKHS中的函数梯度。对于f∈Hdf \in\mathcal{H^d}fHd任意方程F[f]F[f]F[f],其梯度为▽fF[f]\bigtriangledown_fF[f]fF[f],函数F的傅里叶展开为:
F[f+ϵg(x)=F[f]+ϵ<▽fF[f],g>+O(ϵ2)F[f+\epsilon g(x)=F[f]+\epsilon <\bigtriangledown_fF[f],g>+O(\epsilon^2)F[f+ϵg(x)=F[f]+ϵ<fF[f],g>+O(ϵ2)

对于任意的g∈Hdg \in\mathcal{H^d}gHdϵ∈R\epsilon \in\mathcal{R}ϵR

定理3.3–让T(x)=x+f(x),\boldsymbol{T}(x)=x+\boldsymbol{f}(x),T(x)=x+f(x), 其中 f∈Hd\boldsymbol{f} \in \mathcal{H}^{d}fHdq[T]q_{[T]}q[T]z=T(x)z=T(x)z=T(x)的密度,x∼qx \sim qxq
∇fKL⁡(q[T]∥p)∣f=0=−ϕq,p∗(x)\left.\nabla_{f} \operatorname{KL}\left(q_{[T]} \| p\right)\right|_{f=0}=-\phi_{q, p}^{*}(x) fKL(q[T]p)f=0=ϕq,p(x)
∥ϕq,p∗∥Hd=D(q,p)\left\|\phi_{q, p}^{*}\right\|_{\mathcal{H}^{d}}=\mathbb{D}(q, p)ϕq,pHd=D(q,p)是RKHS范数。
上式的好处:只算了ϵ=0\epsilon=0ϵ=0出的梯度,在ϵ≠0\epsilon\ne0ϵ=0处,的梯度要计算T′(x)−1T'(x)^{-1}T(x)1,这是十分难以计算的。

7.3.2 Strein 变分梯度下降

附录1:

KL(q[T]∣∣p)=Eq[T][log(q[T](z))]−Eq[T][log(p(z))]=∫q[T](z)log(q[T](z))dz−∫q[T](z)log(p(z))dz......(1)KL(q_{[T]}||p)=E_{q_{[T]}}[log(q_{[T]}(z))]-E_{q_{[T]}}[log(p(z))] \\= \int q_{[T]}(z)log(q_{[T]}(z))dz-\int q_{[T]}(z)log(p(z))dz......(1) KL(q[T]p)=Eq[T][log(q[T](z))]Eq[T][log(p(z))]=q[T](z)log(q[T](z))dzq[T](z)log(p(z))dz......(1)
随机变量函数变换q[T](z)=q(T−1(z))T−1(z)′q_{[T]}(z)=q(T^{-1}(z))T^{-1}(z)'q[T](z)=q(T1(z))T1(z),T−1(z)′=T′(x)−1T^{-1}(z)'=T'(x)^{-1}T1(z)=T(x)1
∫q[T](z)log(q[T](z))dz=∫q(T−1(z))T−1(z)′log(q(T−1(z))T−1(z)′)dz=∫q(T−1(z))log(q(T−1(z))T−1(z)′)dT−1(z)=∫q(T−1(z))log(q(T−1(z))dT−1(z)+∫q(T−1(z))log(T−1(z)′))dT−1(z)=∫q(x)logq(x)dx+∫q(x)log(T′(x)−1)dx......(2)\int q_{[T]}(z)log(q_{[T]}(z))dz=\int q(T^{-1}(z))T^{-1}(z)'log(q(T^{-1}(z))T^{-1}(z)')dz \\=\int q(T^{-1}(z))log(q(T^{-1}(z))T^{-1}(z)')dT^{-1}(z) \\=\int q(T^{-1}(z))log(q(T^{-1}(z))dT^{-1}(z)+\int q(T^{-1}(z))log(T^{-1}(z)'))dT^{-1}(z) \\=\int q(x)logq(x)dx+\int q(x)log(T'(x)^{-1})dx......(2) q[T](z)log(q[T](z))dz=q(T1(z))T1(z)log(q(T1(z))T1(z))dz=q(T1(z))log(q(T1(z))T1(z))dT1(z)=q(T1(z))log(q(T1(z))dT1(z)+q(T1(z))log(T1(z)))dT1(z)=q(x)logq(x)dx+q(x)log(T(x)1)dx......(2)

−∫q[T](z)log(p(z))dz=−∫q(T−1(z))T−1(z)′log(p(z))dz=−∫q(T−1(z))log(p(z))dT−1(z)=−∫q(x)log(p(x+ϵϕ(x)))dx......(3)-\int q_{[T]}(z)log(p(z))dz=-\int q(T^{-1}(z))T^{-1}(z)'log(p(z))dz \\=-\int q(T^{-1}(z))log(p(z))dT^{-1}(z)=-\int q(x)log(p(x+\epsilon\phi(x)))dx......(3) q[T](z)log(p(z))dz=q(T1(z))T1(z)log(p(z))dz=q(T1(z))log(p(z))dT1(z)=q(x)log(p(x+ϵϕ(x)))dx......(3)
所以:
KL(q[T]∣∣p)=(2)+(3)=∫q(x)logq(x)dx+∫q(x)log(T′(x)−1)dx−∫q(x)log(p(x+ϵϕ(x)))dx......(4)KL(q_{[T]}||p)=(2)+(3)=\int q(x)logq(x)dx+\int q(x)log(T'(x)^{-1})dx-\int q(x)log(p(x+\epsilon\phi(x)))dx......(4) KL(q[T]p)=(2)+(3)=q(x)logq(x)dx+q(x)log(T(x)1)dxq(x)log(p(x+ϵϕ(x)))dx......(4)
(4)对ϵ\epsilonϵ求导(只有后两项与ϵ\epsilonϵ有关T′(x)=1+ϵϕ′(x)T'(x)=1+\epsilon\phi'(x)T(x)=1+ϵϕ(x))
▽ϵKL(q[T]∣∣p)=−∫q(x)1T′(x)ϕ(x)dx−∫q(x)1p(x+ϵϕ(x))p′(x+ϵϕ(x))ϕ′(x)dx....(5)\bigtriangledown _\epsilon KL(q_{[T]}||p)=-\int q(x)\frac{1}{T'(x)}\phi(x)dx-\int q(x)\frac{1}{p(x+\epsilon\phi(x))}p'(x+\epsilon\phi(x))\phi'(x)dx....(5) ϵKL(q[T]p)=q(x)T(x)1ϕ(x)dxq(x)p(x+ϵϕ(x))1p(x+ϵϕ(x))ϕ(x)dx....(5)
ϵ=0\epsilon=0ϵ=0 (5)可以化为:
▽ϵKL(q[T]∣∣p)∣ϵ=0=−∫q(x)ϕ′(x)dx−∫q(x)1p(x)p′(x)ϕ(x)dx....(5)\bigtriangledown _\epsilon KL(q_{[T]}||p)|_{\epsilon=0}=-\int q(x)\phi'(x)dx-\int q(x)\frac{1}{p(x)}p'(x)\phi(x)dx....(5) ϵKL(q[T]p)ϵ=0=q(x)ϕ(x)dxq(x)p(x)1p(x)ϕ(x)dx....(5)
xxx为一维情况下:
▽ϵKL(q[T]∣∣p)∣ϵ=0=−Ex∼q[▽xlogp(x)ϕ(x)+▽xϕ(x)]\bigtriangledown _\epsilon KL(q_{[T]}||p)|_{\epsilon=0}=-E_{x\sim q}[\bigtriangledown _x logp(x)\phi(x)+\bigtriangledown _x \phi(x)] ϵKL(q[T]p)ϵ=0=Exq[xlogp(x)ϕ(x)+xϕ(x)]
xxx不为1维的情况:
▽ϵKL(q[T]∣∣p)∣ϵ=0=−Ex∼q[trace(▽xlogp(x)ϕ(x)+▽xϕ(x))]=−Ex∼q[trace(Apϕ(x))]\bigtriangledown _\epsilon KL(q_{[T]}||p)|_{\epsilon=0}=-E_{x\sim q}[trace(\bigtriangledown _x logp(x)\phi(x)+\bigtriangledown _x \phi(x))]=-E_{x\sim q}[trace(A_p\phi(x))]ϵKL(q[T]p)ϵ=0=Exq[trace(xlogp(x)ϕ(x)+xϕ(x))]=Exq[trace(Apϕ(x))]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp的增删改查

ThinkPHP 添加数据 add 方法 ThinkPHP 内置的 add 方法用于向数据表添加数据&#xff0c;相当于 SQL 中的 INSERT INTO 行为。ThinkPHP Insert 添加数据添加数据 add 方法是 CURD&#xff08;Create,Update,Read,Delete / 创建,修改,读取,删除&#xff09;中的 Create 的实现&a…

leetcode115 不同的子序列

给定一个字符串 S 和一个字符串 T&#xff0c;计算在 S 的子序列中 T 出现的个数。 一个字符串的一个子序列是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;例如&#xff0c;"ACE" 是…

ThinkPHP 模板循环输出 Volist 标签

volist 标签用于在模板中循环输出数据集或者多维数组。volist 标签在模块操作中&#xff0c;select() 方法返回的是一个二维数组&#xff0c;可以用 volist 直接输出&#xff1a;<volist name"list" id"vo"> 用 户 名&#xff1a;{$vo[username]}&l…

MachineLearning(9)-最大似然、最小KL散度、交叉熵损失函数三者的关系

最大似然-最小KL散度-最小化交叉熵损失-三者的关系问题缘起&#xff1a;给定一组数据(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到这组数据服从的分布。此种情况下&#xff0c;分布规律用概率密度p(x)表征。 问题归处&#xff1a;如果能够建模/近似建模p(x)&#…

ThinkPHP redirect 页面重定向使用详解与实例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以实现页面的重定向&#xff08;跳转&#xff09;功能。redirect 方法语法如下&#xff1a;$this->redirect(string url, array params, int delay, string msg) 参数说明&#xff1a;url 必须&#xff0c;重定向的 URL 表达…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的启发,本文提出两个算法用于从数据中学习深度能…

windows下的gvim配置

首要任务是下载安装Gvim7.3 。 安装完后&#xff0c;gvim菜单中文出现乱码&#xff0c;在_vimrcset文件中增加&#xff1a; " 配置多语言环境,解决中文乱码问题 if has("multi_byte") " UTF-8 编码 set encodingutf-8 set termencodingutf…

leetcode104 二叉树的最大深度

给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全类型转换的讨论

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于对数似然梯度的难以计算&#xff0c;能量模型的最大似…

leetcode105 前序中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; 3 / \ 9 20 / \ 15 7 思路&#xff1a; 1、…

c++的虚拟继承 的一些思考吧

虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class …

对于linux socket与epoll配合相关的一些心得记录

对于linux socket与epoll配合相关的一些心得记录 没有多少高深的东西&#xff0c;全当记录&#xff0c;虽然简单&#xff0c;但是没有做过测试还是挺容易让人糊涂的int nRecvBuf32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉树的前序遍历

给定一个二叉树&#xff0c;返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 思路&#xff1a;模仿递归的思路压栈即可。 /*** Definition for a bi…

AJAX大总结

1、AJAX概述 1.1 什么是AJAX AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML&#xff09;。 …

我对STL的一些看法(一)初步认识STL

后面一段时间我将会给大家分享我自己学到STL以及应用的时候遇到的问题还有他的一些精髓,可能开始的逻辑会有些乱吧,不过后面还会不断的整理和优化,让自己看明白也让更多的读者看的清楚。 最近刚闲下来,先说说什么是STL: 不知道你是否有过这样的经历。在大学,你准备着手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive&#xff1a;自身做回归变量&#xff0c;用之前若干时刻的随机变量 来建模 之后某些时刻 随机变量的模型。 N维随机变量的…

我对STL的一些看法(二)认识vector容器

先说vector吧。 C++ Vector(向量容器) 是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 vector 的数据安排以及操作方式,与 array 非常像似。两者的唯㆒差别在于空间的…

git大总结

git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone 获取一个url对应的远程Git repo, 创建一个local copy. 一般的格式是git clone [url]. clone下来的repo会以url最后一个斜线后面的名称命名,创…

我对STL的一些看法(三)认识list容器

C++ List(双向链表) 是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。由于…