生成模型VAE

likelihood-based

likelihood-based generative models是生成模型的一类范式,通过最大化所有观测数据的似然函数来学习模型参数。

该怎么去理解likelihood-based,基于似然的生成模型,优化的目标函数到底是什么?
在这里插入图片描述
如图所示,我们希望待学习分布 p θ ( x ) p_\theta(x) pθ(x)和真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)尽可能近。那该如何度量两个分布之间的距离?自然想到KL散度。
D K L ( P d a t a ∣ ∣ P θ ) = E x ∼ P d a t a [ l o g P d a t a ( x ) P θ ( x ) ] = E x ∼ P d a t a [ l o g P d a t a ( x ) ] − E x ∼ P d a t a [ l o g P θ ( x ) ] \begin{aligned} D_{KL}(P_{data}||P_\theta) &= E_{x\sim P_{data}}[log\frac{P_{data}(x)}{P_\theta(x)}] \\ &= E_{x\sim P_{data}}[logP_{data}(x)] - E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned} DKL(Pdata∣∣Pθ)=ExPdata[logPθ(x)Pdata(x)]=ExPdata[logPdata(x)]ExPdata[logPθ(x)]
RHS第一项是常量,不依赖待学习参数 θ \theta θ。因此最小化KL散度等价于最大化log-likelihood
a r g m i n P θ D K L ( P d a t a ∣ ∣ P θ ) = a r g m i n P θ − E x ∼ P d a t a [ l o g P θ ( x ) ] = a r g m a x P θ E x ∼ P d a t a [ l o g P θ ( x ) ] \begin{aligned} \mathop{argmin}\limits_{P_\theta}D_{KL}(P_{data}||P_\theta) &= \mathop{argmin}\limits_{P_\theta} - E_{x\sim P_{data}}[logP_\theta(x)] \\&= \mathop{argmax}\limits_{P_\theta} E_{x\sim P_{data}}[logP_\theta(x)] \end{aligned} PθargminDKL(Pdata∣∣Pθ)=PθargminExPdata[logPθ(x)]=PθargmaxExPdata[logPθ(x)]

ELBO

假设数据集中有N个数据点 { x ( 1 ) , . . . , x ( N ) } \{x^{(1)}, ..., x^{(N)}\} {x(1),...,x(N)},定义在其上的概率似然可以写作:
E x ∼ P d a t a [ l o g P θ ( x ) ] = ∑ i = 1 N [ l o g p θ ( x ( i ) ) ] E_{x\sim P_{data}}[logP_\theta(x)] = \sum_{i=1}^N[logp_\theta(x^{(i)})] ExPdata[logPθ(x)]=i=1N[logpθ(x(i))]

对于 l o g p θ ( x ( i ) ) logp_\theta(x^{(i)}) logpθ(x(i))我们有:
l o g p θ ( x ( i ) ) = D K L ( q ϕ ( z ∣ x ( i ) ∣ ∣ p θ ( z ∣ x ( i ) ) ) + L ( θ , ϕ ; x ( i ) ) logp_\theta(x^{(i)}) = D_{KL}(q_\phi(z|x^{(i)} || p_\theta(z|x^{(i)})) + L(\theta, \phi; x^{(i)}) logpθ(x(i))=DKL(qϕ(zx(i)∣∣pθ(zx(i)))+L(θ,ϕ;x(i))

RHS的第一项是近似分布和真实后验分布之间的KL散度,因为KL散度的非负特性,RHS的第二项被称为数据点 x ( i ) x^{(i)} x(i)边际似然的(variational) lower bound,简称为ELBO。因此:
l o g p θ ( x ( i ) ) ≥ L ( θ , ϕ ; x ( i ) ) = E z ∼ q ϕ ( z ∣ x i ) [ l o g p θ ( x ( i ) ∣ z ) ] − D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p ( z ) ) logp_\theta(x^{(i)}) \geq L(\theta, \phi; x^{(i)}) = E_{z\sim q_\phi(z|x^{i})}[logp_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) || p(z)) logpθ(x(i))L(θ,ϕ;x(i))=Ezqϕ(zxi)[logpθ(x(i)z)]DKL(qϕ(zx(i))∣∣p(z))

对于上述结论推导如下。
为了书写简化,下文以 p ( x ) p(x) p(x)代称 p θ ( x ( i ) ) p_\theta(x^{(i)}) pθ(x(i))。正常上式中的 p ( x ) p(x) p(x)非常复杂,无法求解。因此采用变分推断的方式,通过最大化ELBO,达到间接优化似然函数的目的,通常也称为proxy或者surrogate。

对于上面的“ p ( x ) p(x) p(x)非常复杂,无法求解。”做进一步的解释:
我们有两种方式去利用联合概率分布 p ( x , z ) p(x, z) p(x,z)恢复出观测数据的概率似然 p ( x ) p(x) p(x),一种是边际概率似然 p ( x ) = ∫ p ( x , z ) d z p(x)=\int p(x, z)dz p(x)=p(x,z)dz,还有一个是贝叶斯法则 p ( x ) = p ( x , z ) p ( z ∣ x ) p(x)=\frac{p(x, z)}{p(z|x)} p(x)=p(zx)p(x,z)。但这两个方法在计算过程中,方法一是对所有隐变量 z z z做积分,方法二需要知道隐变量编码器 p ( z ∣ x ) p(z|x) p(zx),对于复杂模型,均无法直接求解。因此我们可以利用上述两个公式,推导出ELBO,做为对数似然的代理优化目标函数。

对于上面的“通过最大化ELBO,达到间接优化似然函数的目的”做进一步解释:
引入隐变量 z z z,我们的目标是学习可以描述观测数据的隐变量结构。换句话说,我们希望优化变分后验 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)的参数,使其与真实后验分布 p ( z ∣ x ) p(z|x) p(zx)完全一致。这可以通过最小化两者之间的KL散度实现。但不幸的是,我们不知道真实的 p ( z ∣ x ) p(z|x) p(zx)分布,没法直接求解两者之间的KL散度项。但我们注意到数据的对数似然 l o g p ( x ) logp(x) logp(x)始终是常值,ELBO + KL等于常值,最大化ELBO项等价于最小化KL散度项,ELBO最大时,模型参数达到最优。也因此ELBO可以做为建模并学习后验分布的proxy。

l o g p ( x ) = l o g p ( x ) ∫ q ϕ ( z ∣ x ) d z = ∫ q ϕ ( z ∣ x ) l o g p ( x ) d z = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) p ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) p ( z ∣ x ) q ϕ ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] + E z ∼ q ( z ∣ x ) [ l o g q ϕ ( z ∣ x ) p ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] + K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) ≥ E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x , z ) q ϕ ( z ∣ x ) ] = E L B O \begin{aligned} logp(x) &= logp(x)\int q_\phi(z|x)dz \\ &= \int q_\phi(z|x)logp(x)dz \\ &= E_{z\sim q_\phi(z|x)}[logp(x)] \\ &= E_{z\sim q_\phi(z|x)}[log\frac{p(x, z)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)q_\phi(z|x)}{p(z|x)q_\phi(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + E_{z\sim q(z|x)} [log\frac{q_\phi(z|x)}{p(z|x)}] \\ &= E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] + KL(q_\phi(z|x)||p(z|x)) \\ &\geq E_{z\sim q_\phi(z|x)} [log\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned} logp(x)=logp(x)qϕ(zx)dz=qϕ(zx)logp(x)dz=Ezqϕ(zx)[logp(x)]=Ezqϕ(zx)[logp(zx)p(x,z)]=Ezqϕ(zx)[logp(zx)qϕ(zx)p(x,z)qϕ(zx)]=Ezqϕ(zx)[logqϕ(zx)p(x,z)]+Ezq(zx)[logp(zx)qϕ(zx)]=Ezqϕ(zx)[logqϕ(zx)p(x,z)]+KL(qϕ(zx)∣∣p(zx))Ezqϕ(zx)[logqϕ(zx)p(x,z)]=ELBO
推导过程用到了如下特性:
∫ q ϕ ( z ∣ x ) d z = 1 \int q_\phi (z|x)dz = 1 qϕ(zx)dz=1
K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) ≥ 0 KL(q_\phi(z|x)||p(z|x)) \geq 0 KL(qϕ(zx)∣∣p(zx))0
evidence和ELBO之间的差值是非负的KL项,因此ELBO的值不会超过evidence,且当参数化模型近似的后验分布 q ( z ∣ x ) q(z|x) q(zx)和真实后验分布 p ( z ∣ x ) p(z|x) p(zx)一致时,等号成立,因此ELBO可以认为是evidence的严格下界。上述ELBO的推导过程也可以用Jensen不等式推导一遍,但从ELBO是evidence严格下界这个角度去理解,没有上述过程那么直观。
l o g p ( x ) = l o g ∫ p ( x , z ) d z = l o g ∫ p ( x , z ) q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) d z = l o g E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] ≥ E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] = E L B O \begin{aligned} logp(x) &= log\int p(x, z)dz \\ &= log\int p(x, z)\frac{q_\phi(z|x)}{q_\phi(z|x)}dz \\ &= logE_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] \\ &\geq E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] = ELBO \end{aligned} logp(x)=logp(x,z)dz=logp(x,z)qϕ(zx)qϕ(zx)dz=logEzqϕ(zx)[qϕ(zx)p(x,z)]Ezqϕ(zx)[qϕ(zx)p(x,z)]=ELBO

VAE

将ELBO变换形式可得:
E L B O = E z ∼ q ( z ∣ x ) [ l o g p ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q(z|x)}[logp(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezq(zx)[logp(xz)]KL(qϕ(zx)∣∣p(z))
我们用 ϕ \phi ϕ参数化 p ( z ∣ x ) p(z|x) p(zx)部分,可称之为decoder;用 θ \theta θ参数化 p ( x ∣ z ) p(x|z) p(xz)部分,可称之为encoder,ELBO可以进一步写为:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))

ELBO的第一部分是重建loss,第二部分是对隐变量分布做约束,让其尽可能贴近先验分布 p ( z ) p(z) p(z),最小化该项可以鼓励encoder学习一个正常的分布,而不致于坍塌为Dirac delta函数。

SGVB估计器和AEVB算法

SGVB: Stochastic Gradient Variational Bayes。
AEVB: Auto-Encoding Variational Bayes。

参考下文的重参数化技巧,我们可以将随机变量 z ∼ q ϕ ( z ∣ x ) z\sim q_\phi(z|x) zqϕ(zx)使用一个辅助噪声 ϵ \epsilon ϵ的可微变换 g ϕ ( ϵ , x ) g_\phi(\epsilon, x) gϕ(ϵ,x)重参数化。
z = g ϕ ( ϵ , x ) , ϵ ∈ p ( ϵ ) z=g_\phi(\epsilon, x), \epsilon \in p(\epsilon) z=gϕ(ϵ,x),ϵp(ϵ)
对于一个函数 f ( z ) f(z) f(z)相对与 q ϕ ( z ∣ x ( i ) ) q_\phi(z|x^{(i)}) qϕ(zx(i))分布的期望,我们可以使用Monte Carlo估计:
E z ∼ q ϕ ( z ∣ x ( i ) ) [ f ( z ) ] = E p ( ϵ ) [ f ( g ϕ ( ϵ , x ( i ) ) ) ] ≈ 1 L ∑ l = 1 L f ( g ϕ ( ϵ ( l ) , x ( i ) ) E_{z\sim q_\phi(z|x^{(i)})}[f(z)] = E_{p(\epsilon)}[f(g_\phi(\epsilon, x^{(i)}))] \approx \frac{1}{L}\sum_{l=1}^Lf(g_\phi(\epsilon^{(l)}, x^{(i)}) Ezqϕ(zx(i))[f(z)]=Ep(ϵ)[f(gϕ(ϵ,x(i)))]L1l=1Lf(gϕ(ϵ(l),x(i))
where ϵ ( l ) ∼ p ( ϵ ) \epsilon^{(l)}\sim p(\epsilon) ϵ(l)p(ϵ)
我们可以该技术用在ELBO中,改写下式:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ p ( x , z ) q ϕ ( z ∣ x ) ] ELBO = E_{z\sim q_\phi(z|x)}[\frac{p(x, z)}{q_\phi(z|x)}] ELBO=Ezqϕ(zx)[qϕ(zx)p(x,z)]
可以得到通用的SGVB估计器:
L ~ A ( θ , ϕ ; x ( i ) ) = 1 L ∑ l = 1 L l o g p θ ( x ( i ) , z ( i , l ) ) − l o g q ϕ ( z ( i , l ) ∣ x ( i ) ) \tilde{L}^A(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)}, z^{(i, l)}) - logq_\phi(z^{(i, l)}|x^{(i)}) L~A(θ,ϕ;x(i))=L1l=1Llogpθ(x(i),z(i,l))logqϕ(z(i,l)x(i))
where z ( i , l ) = g ϕ ( ϵ ( i , l ) , x ( i ) ) = μ ( i ) + σ ( i ) ⊙ ϵ ( l ) z^{(i, l)}=g_\phi(\epsilon^{(i, l)}, x^{(i)})=\mu^{(i)} + \sigma^{(i)}\odot \epsilon^{(l)} z(i,l)=gϕ(ϵ(i,l),x(i))=μ(i)+σ(i)ϵ(l), and ϵ ( l ) ∼ p ( ϵ ) \epsilon^{(l)}\sim p(\epsilon) ϵ(l)p(ϵ)

不过网络训练的时候也不会用上式。而且基于下式做进一步改写:
E L B O = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) ELBO = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] - KL(q_\phi(z|x) || p(z)) ELBO=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))
得到第二版SGVB估计器,因为第二项的KL散度有解析形式,因此只有第一项的重建误差需要通过采样进行估计。KL散度项可理解为对参数 ϕ \phi ϕ的正则化,鼓励近似后验分布接近先验分布 p ( z ) p(z) p(z)
L ~ B ( θ , ϕ ; x ( i ) ) = 1 L ∑ l = 1 L l o g p θ ( x ( i ) ∣ z ( i , l ) ) − D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p ( z ) ) ) \tilde{L}^B(\theta,\phi; x^{(i)}) = \frac{1}{L}\sum_{l=1}^Llogp_\theta(x^{(i)} | z^{(i, l)}) - D_{KL}(q_\phi(z|x^{(i)}) || p(z))) L~B(θ,ϕ;x(i))=L1l=1Llogpθ(x(i)z(i,l))DKL(qϕ(zx(i))∣∣p(z)))

这里需要大白话翻译一下:输入第 i i i个数据点 x ( i ) x^{(i)} x(i),经过 ϕ \phi ϕ参数化模型,得到后验分布 p ( z ∣ x ) p(z|x) p(zx)的均值 μ ( i ) \mu^{(i)} μ(i)和方差 σ ( i ) \sigma^{(i)} σ(i)。利用该均值方差,我们用蒙特卡洛估计去估算 E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] Ezqϕ(zx)[logpθ(xz)],也就是 l o g p θ ( x ∣ z ) logp_\theta(x|z) logpθ(xz)在隐变量 z z z上的期望值。具体做法就是随机采样 L L L个辅助噪声,利用重参数化技巧构建出隐变量 z ( i , l ) z^{(i, l)} z(i,l),输入到 θ \theta θ参数化的生成模型中,计算 L L L个输出的loss均值,作为最终估计。

假定数据集 X X X有N个数据点,从中随机取M个数据点 X M = { x ( i ) } i = 1 M X^M=\{x^{(i)}\}_{i=1}^M XM={x(i)}i=1M作为minibatch,去估计上述ELBO,则有:
L ( θ , ϕ ; X ) ≈ L ~ M ( θ , ϕ ; X M ) = N M L ~ ( θ , ϕ ; x ( i ) ) L(\theta, \phi; X)\approx \tilde{L}^M(\theta, \phi; X^M)=\frac{N}{M}\tilde{L}(\theta, \phi; x^{(i)}) L(θ,ϕ;X)L~M(θ,ϕ;XM)=MNL~(θ,ϕ;x(i))
实验过程中,我们发现只要minibatch够大,比如M=100,做蒙特卡洛估计时L可以取1,而不用大量采样,拉长学习时长。

重建损失

第一部分 p θ ( x ∣ z ) p_\theta(x|z) pθ(xz)属于重建损失,但其分布形式不确定,根据数据集特性,我们可以假设其为多元高斯分布/伯努利分布/拉普拉斯分布。

高斯分布

如果假设其为高斯分布 p ϕ ( x ∣ z ) = N ( x ; μ ϕ ( z ) , σ ϕ 2 ( z ) ) p_\phi(x|z)=N(x;\mu_\phi(z), \sigma^2_\phi(z)) pϕ(xz)=N(x;μϕ(z),σϕ2(z)),则:
l o g p ϕ ( x ∣ z ) = − 1 2 l o g ( 2 π σ ϕ 2 ( z ) ) − 1 2 σ ϕ 2 ( z ) ( x − μ ϕ ( z ) ) 2 = − 1 2 l o g ( 2 π ) − l o g σ ϕ ( z ) − 1 2 ( x − μ ϕ ( z ) σ ϕ ( z ) ) 2 \begin{aligned} logp_\phi(x|z) &= -\frac{1}{2}log(2\pi\sigma^2_\phi(z)) - \frac{1}{2\sigma^2_\phi(z)}(x-\mu_\phi(z))^2 \\ &=-\frac{1}{2}log(2\pi) - log\sigma_\phi(z) - \frac{1}{2}(\frac{x-\mu_\phi(z)}{\sigma_\phi(z)})^2 \end{aligned} logpϕ(xz)=21log(2πσϕ2(z))2σϕ2(z)1(xμϕ(z))2=21log(2π)logσϕ(z)21(σϕ(z)xμϕ(z))2
如果假设方差为定值 I I I,网络只学习 μ ϕ ( z ) \mu_\phi(z) μϕ(z),这样就简化为最一般的MSE Loss(这里还要展开讲一讲,实际训练时,只用MSE Loss监督的话,重建效果会blur,进一步引出了VQGAN,用GAN Loss起到锐化作用)。

伯努利分布

如果假设分布是伯努利分布,那么最后将得到一个交叉熵损失。 比如用MNIST数据集做实验,我们可以假设decoder输出服从伯努利分布。
l o g p ϕ ( x ∣ z ) = ∑ i = 1 D x i l o g y i + ( 1 − x i ) l o g ( 1 − y i ) logp_\phi(x|z) = \sum_{i=1}^D x_ilogy_i + (1-x_i)log(1-y_i) logpϕ(xz)=i=1Dxilogyi+(1xi)log(1yi)
这里 y = f σ ( W 2 t a n h ( W 1 z + b 1 ) + b 2 ) y=f_\sigma(W_2tanh(W_1z+b_1) + b_2) y=fσ(W2tanh(W1z+b1)+b2) f σ f_\sigma fσ是逐元素的sigmoid激活函数。原论文做实验用的是最简单的MLPs结构。

拉普拉斯分布

如果假设分布是拉普拉斯分布,那么得到的是L1损失。
l o g p ϕ ( x ∣ z ) = − l o g ( 2 ) − l o g ( σ ϕ ( z ) ) − ∣ x − μ ϕ ( z ) ∣ σ ϕ ( z ) logp_\phi(x|z) = -log(2) - log(\sigma_\phi(z)) - \frac{|x-\mu_\phi(z)|}{\sigma_\phi(z)} logpϕ(xz)=log(2)log(σϕ(z))σϕ(z)xμϕ(z)

目前基于LDM框架的diffusion模型中用的VAE都是基于此假设分布训练得到。

rec_loss = torch.abs(inputs.contiguous() - reconstructions.contiguous())
if self.perceptual_weight > 0:
	p_loss = self.perceptual_loss(inputs.contiguous(), reconstructions.contiguous())
	rec_loss = rec_loss + self.perceptual_weight * p_loss
	
nll_loss = rec_loss / torch.exp(self.logvar) + self.logvar
weighted_nll_loss = nll_loss
if weights is not None:
	weighted_nll_loss = weights*nll_loss
	weighted_nll_loss = torch.sum(weighted_nll_loss) / weighted_nll_loss.shape[0]

可以再延伸下,如果假设输出服从高斯分布,代码是不是可以改为:

rec_loss = (inputs.contiguous() - reconstructions.contiguous()) / torch.exp(self.logvar)
nll_loss = 0.5 * torch.pow(rec_loss, 2) + self.logvar

隐变量分布约束

对于第二部分的KL约束,可理解为是对隐变量分布的约束or正则化,希望其能学成多元高斯分布,方便采样生成。进一步假设多元变量之间相互独立,每个位置等价为一元高斯分布,每个位置的KL散度,参考数理基础部分有详细推导:
K L ( q θ ( z ∣ x ) ∣ ∣ p ( z ) ) = − l o g σ θ ( x ) + 1 2 ( σ θ 2 ( x ) + μ θ 2 ( x ) ) − 1 2 KL(q_\theta(z|x)||p(z)) = -log\sigma_\theta(x) + \frac{1}{2}(\sigma^2_\theta(x) + \mu^2_\theta(x)) - \frac{1}{2} KL(qθ(zx)∣∣p(z))=logσθ(x)+21(σθ2(x)+μθ2(x))21

重参数化

z ∼ p θ ( z ∣ x ) z\sim p_\theta(z|x) zpθ(zx)可以想象为将样本 x x x,输入到参数化为 θ \theta θ的encoder中,得到隐变量 z z z概率分布的参数估计,假设隐变量 z z z服从高斯分布 z ∼ N ( z ; μ θ ( x ) , σ θ 2 ( x ) ) z\sim N(z;\mu_\theta(x), \sigma^2_\theta(x)) zN(z;μθ(x),σθ2(x))。需要从该分布中采样出样本 z z z,输入到decoder部分。这里的采样需要用到重参数化。如果直接利用torch.normal,输入encoder估计出的均值和方差,生成样本,训练过程中梯度无法反传,因此需要用到重参数化,绕开torch.normal采样,采用 m e a n + s t d ∗ ϵ mean + std*\epsilon mean+stdϵ, ϵ ∼ N ( 0 , I ) \epsilon\sim N(0, I) ϵN(0,I)的方式采样,得到样本 z z z,这样训练过程中,梯度就可以正常反传,做参数优化。

import torch
mean = torch.rand(3, requires_grad=True)
std = torch.rand(3, requires_grad=True)
val = torch.normal(mean, std)
loss_1 = sum(val)
loss_1.backward()  # backpropgation计算梯度
print(mean.grad) # tensor([0., 0., 0.])
print(std.grad)  # tensor([0., 0., 0.])

# 重参数化采样
noise = torch.randn(3)
val = mean + std * noise
loss_2 = sum(val)
loss_2.backward()
print(mean.grad) # tensor([1., 1., 1.])
print(std.grad)  # noise value
深度学习生成模型VAE(Variational Autoencoder)是一种基于神经网络的生成模型VAE在产生新数据的时候是基于已有数据来做的,通过学习数据的潜在空间表示,然后从该空间中采样生成新的数据样本。VAE模型结合了自编码器和变分推断的思想,通过最大化样本的下界来优化模型参数,使得生成的样本能够更好地拟合原始数据分布。 与传统的自编码器相比,VAE在编码器部分引入了一个均值向量和方差向量,这样可以使得编码后的潜在表示服从一个高斯分布。这种设计使得VAE不仅能够学习到数据的低维表示,还能够通过在潜在空间中进行采样来生成新的样本。VAE模型的损失函数由重构误差项和正则化项组成,通过最小化该损失函数可以使得生成的样本能够尽可能地接近原始数据分布。 尽管VAE生成新数据方面的效果相对于其他模型可能有些模糊,但它在学习数据分布和生成新数据方面仍然具有一定的优势。通过使用变分推断和重参数化技巧,VAE能够生成具有多样性的样本,并且能够在潜在空间中进行插值和操作,从而得到更多样化的结果。 总结来说,VAE是一种深度学习生成模型,通过学习数据的潜在空间表示,可以生成新的样本。它结合了自编码器和变分推断的思想,并通过最大化样本的下界来优化模型参数。尽管生成的样本可能有些模糊,但VAE在学习数据分布和生成多样化样本方面具有一定的优势。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值