受SVGD算法的启发,本文提出两个算法用于从数据中学习深度能量模型.两个算法分别为:SteinCD算法和SteinGAN 算法,SteinCD 算法将 CD算法和SVGD算法结合(基于两者理论上的联系), SteinGAN 算法通过最大似然训练一个附加的网络训练负样本. SteinCD有高似然,SteinGAN有高可视化质量.两者结合可以继承两者的优点.
EBM(energy -based models)能够捕获依据能量函数捕获变量之间的依赖性,为无向图模型,深度生成模型等提供了一个统一的建模框架.
MLE(maximum likelihood estimator)用于学习EBM中的参数,但是准确MLE由于难以计算的归一化常数往往无法求解.为了解决这个困境,近年提出了很多方法,例如近似的Likelihood 目标函数,或者可替代的目标函数. Contrastive divergence 是其中一种改进方案,优化的是一个对比目标,该对比目标用以衡量 朝着目标走一定步子的 能够改进的KL散度(两个分布没有搞清楚呦).
CD类的方法能够获得很高的测试似然,但是产生不了真实的数据(real-world instance图像). 能量模型无法捕获real-world instance 基于的相对第的流形.GAN模型能够生成高视觉质的样本但没有明确的能量目标(使得泛化性能一般). 将GAN模型和EBM模型结合能够融合两种方法的优点.
SVGD 可以是一个近似采样策略,用于近似从目标分布 p ( x ) p(x) p(x)中采样(x是d 维度的一个随机变量).初始化一些列例子 { x i } i = 1 n \{x_i\}_{i=1}^n {xi}i=1n(这些例子的经验分布是 q 0 ( x ) = ∑ i δ ( x − x i ) / n q_0(x)=\sum_{i}\delta(x-x_i)/n q0(x)=∑iδ(x−xi)/n),通过下面的变换操作,使得例子朝着p(x)分布的规律靠近.
x i ′ ← x i + ϵ ϕ ( x i ) , ∀ i = 1 , . . . , n x_i'\leftarrow x_i + \epsilon \phi(x_i), \forall i=1,...,n xi′←xi+ϵϕ(xi),∀i=1,...,n
其中 ϵ \epsilon ϵ为步长, ϕ ( x i ) \phi(x_i) ϕ(xi)为 x i x_i xi决定的改进方向,这个改进方向应该朝向KL散度下降最快的方向前进(可以直接对W距离优化么)
ϕ ∗ = arg max ϕ ∈ F { K L ( q 0 ∣ ∣ p ) − K L ( q [ ϵ ϕ ] ∣ ∣ p ) } (6.1) \phi^*=\arg \max_{\phi \in \mathcal{F}}\{KL(q_0||p) - KL(q_{[\epsilon\phi]}||p)\}\tag{6.1} ϕ∗=argϕ∈Fmax{KL(q0∣∣p)−KL(q[ϵϕ]∣∣p)}(6.1)
K L ( q 0 ∣ ∣ p ) − K L ( q x ′ ∣ ∣ p ) = ∫ [ q 0 log q 0 p − q x ′ log q x ′ p ] d x KL(q_0||p)-KL(q_{x'}||p)=\int [q_0\log\frac{q_0}{p} -q_{x'}\log\frac{q_{x'}}{p} ]dx KL(q0∣∣p)−KL(qx′∣∣p)=∫[q0logpq0−qx′logpqx′]dx
原来SVGD目标函数只有后半部分
无穷的部分会被减掉,上式子定义了一个非线性方程优化问题.当步长 ϵ → 0 \epsilon \rightarrow 0 ϵ→0时, KL散度的下降率(就用这个式子可以计算出来) 可以近似为 KL 散度的梯度(说的是哪两个分布的KL散度?),写作:
ϕ ∗ = arg max ϕ ∈ F { − d d ϵ K L ( q [ ϵ ϕ ] ∣ ∣ p ) ∣ ϵ = 0 } (6.2) \phi^* = \arg \max_{\phi \in \mathcal{F}}\{-\frac{d}{d\epsilon} KL(q_{[\epsilon\phi]}||p)|_{\epsilon=0}\}\tag{6.2} ϕ∗=argϕ∈Fmax{−dϵdKL(q[ϵϕ]∣∣p)∣ϵ=0}(6.2)
最优的 ϕ \phi ϕ记为 ϕ ∗ \phi^* ϕ∗,是通过使6.1式最大化得到的最优扰动方向.当 q 0 q_0 q0与 p p p给定,6.1式子中的 K L ( q 0 ∣ ∣ p ) KL(q_0||p) KL(q0∣∣p)为一个与优化无关的固定值,则需要最小化 K L ( q [ ϵ ϕ ] ∣ ∣ p ) KL(q_{[\epsilon\phi]}||p) KL(q[ϵϕ]∣∣p),则需要找到下降(负梯度)最快(max)的方向(即6.2式子所示),在 SVGD 中显示6.2式可以表示为:
− d d ϵ K L ( q [ ϵ ϕ ] ∣ ∣ p ) ∣ ϵ = 0 = E x ∼ q 0 [ T p ϕ ( x ) ] -\frac{d}{d\epsilon} KL(q_{[\epsilon\phi]}||p)|_{\epsilon=0}=\mathbb{E}_{x\sim q_0}[\mathcal{T_p\phi(x)}] −dϵdKL(q[ϵϕ]∣∣p)∣ϵ=0=Ex∼q0[Tpϕ(x)]
T p \mathcal{T}_p Tp为stein算子,具体作用形式为(返回标量值函数不懂),6.2 式定义了一个discrepency: D ( q 0 ∣ ∣ p ) \mathbb{D}(q_0||p) D(q0∣∣p)(距离的定义本身就是一个糟糕的一种情况)
SVGD探索了 F \mathcal{F} F需要具备的特性:具有简单的结构,但是依旧能保持着无限维度以包含所有有用的速度场方向.一个自然的选择是再生核希尔伯特空间中函数.在这种情况下,最优的 ϕ ∗ \phi^* ϕ∗为:
ϕ ∗ = E x ∼ q 0 [ ∇ x log p ( x ) k ( x , x ′ ) + ∇ x k ( x , x ′ ) ] \phi^*=\mathbb{E}_{x \sim q_0}[\nabla_x\log p(x)k(x,x')+ \nabla_xk(x,x')] ϕ∗=Ex∼q0[∇xlogp(x)k(x,x′)+∇xk(x,x′)]
SVGD 是一个推断过程,本文研究的是一个学习过程.给定一批样本 { x i } i = 1 n \{x_i\}_{i=1}^n {xi}i=1n,找到一个分布 p p p,最好的近似这批样本.
可以将p分布建模为:
p ( x ∣ θ ) = 1 Z ( θ ) exp ( f ( x ; θ ) ) Z ( θ ) = ∫ x exp ( f ( x ; θ ) ) d x p(x|\theta)=\frac{1}{Z(\theta)}\exp(f(x;\theta))\\ Z(\theta)=\int_x \exp (f(x;\theta))dx p(x∣θ)=Z(θ)1exp(f(x;θ))Z(θ)=∫xexp(f(x;θ))dx
f ( x , θ ) f(x,\theta) f(x,θ)为负代表能量的标量值函数, 使用MLE来估计(更新) θ \theta θ,对最大化对数似然求导数,可以得到参数 θ \theta θ更新的方式,但是有一个致命的缺点是该导数中存在归一化常数的导数无法直接计算(到现在也没有明白为啥这个导数难以计算?对参数的导数乘上所有样本的和?),所以需要对涉及到的这个归一化参数求导的部分进行 近似处理 .
https://blog.csdn.net/bbbeoy/article/details/79246340 cd 方法的原始论文的翻译
深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD:https://blog.csdn.net/xbinworld/article/details/45274289?utm_source=blogxgwz0
现在的主要问题是如何从KL过度到CD不是很明白,大概是说原来的吉布斯分布采样是从随机状态开始的,现在 从采样样本开始,CD算法的前身应该是吉布斯采样训练RBM
stein max-min 目标函数还是可以理解,max 是为了越接近与原始KL散度, 外层的Min就是最小化这个KL散度
看完也是一知半解,初步想法框图,就看多变量的直接请求离差算不算是QR回归.