变分自编码器(VAE)

本文是在阅读苏剑林大佬和网上其他一些讲解之后做的总结,所以有一点对VAE的了解看本文会比较容易。
苏大佬的三部曲:
变分自编码器(一):原来是这么一回事
变分自编码器(二):从贝叶斯观点出发
变分自编码器(三):这样做为什么能成?

自编码器与变分自编码器

在我理解看来,自编码器是一种学习数据特征的网络结构,由编码器、隐层表示和解码器三部分组成。假设有一组数据 X = ( x 1 , x 2 , , , , x n ) X=(x_{1}, x_{2},,,,x_{n}) X=(x1,x2,,,,xn),现在想学习到 X X X的数据特征,应该怎么做呢?编码器将输入数据 x i x_{i} xi编码成隐层表示 h i h_{i} hi(向量),然后解码器通过隐层表示将数据恢复出来记为 x i ^ \hat{x_{i}} xi^,通过距离函数 D ( x i , x i ^ ) D(x_{i},\hat{x_{i}}) D(xi,xi^)衡量二者的误差。

下面用kreas实现一个简单的自编码器。

input_size= 784
hidden_size= 64
output_size= 784

x= Input(shape=(input_size,))

# Encoder
h= Dense(hidden_size, activation='relu')(x)

# Decoder
r= Dense(output_size, activation='sigmoid')(h)

autoencoder= Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

在这里插入图片描述
可以看到 ,自编码器学习到的是数据特征的向量表示 h i h_{i} hi h i h_{i} hi的每个维度就表示了学习到的数据的属性,也就是自编码器将数据的每个维度的特征表示成为单个的值了。

在这里插入图片描述
变分自编码器是用概率分布来描述数据特征,变分自编码器将学习到 h i h_{i} hi的每一个维度所表示特征的概率分布,也就是每一个维度的取值是一个范围,而不在是一个单个的值了。这样做的好处也是显而易见的,如果我们将自编码器看做生成模型,也就是我们希望用到解码器的输出,对于普通的自编码器,输入一张照片 x i x_{i} xi,学习到其特征向量表示 h i h_{i} hi,解码器根据 h i h_{i} hi只能重构出一张照片。而对于变分自编码器来说,输入一张照片 x i x_{i} xi,学习到其特征概率分布 h i h_{i} hi,解码器根据 h i h_{i} hi可以取不同的值重构出不同的照片,但是这些照片都是根据相同的特征重构出来的,所以应该是很相似的。

下面将整理两种不同的推导方式,第一种是论文中的推导方式,第二种是苏大佬的推导方式。

VAE的理论推导(一)

假定数据都是独立同分布的, X = ( x 1 , x 2 , , , x n ) X = (x^{1}, x^{2},,,x^{n}) X=(x1,x2,,,xn) X X X服从的分布的参数是 θ \theta θ,这里将每个样本的编号标在了右上角。
在这里插入图片描述
VAE的原理还是最大化似然函数来求解未知参数的,所以首先要写出未知参数的似然函数。VAE的概率图模型如上图所示,实线是生成过程,虚线是训练过程。对于单个样本 x i x^{i} xi,其对数似然边缘概率函数(暂时就这样命名了)就是

l o g p θ ( x i ) = ∫ p θ ( x i ∣ z ) p θ ( z ) d z (1) \tag{1} logp_{\theta}(x^{i}) = \int p_{\theta}(x^{i}|z)p_{\theta}(z)dz logpθ(xi)=pθ(xiz)pθ(z)dz(1)
其中 z z z是隐变量的空间,我们最后就是要通过学到的 z 来 生 成 x z来生成x zx

VAE用识别模型 q φ ( z ∣ x i ) q_{\varphi}(z|x^{i}) qφ(zxi)去逼近真实的后验概率分布 p θ ( z ∣ x i ) p_{\theta}(z|x^{i}) pθ(zxi),用 K L KL KL
散度来衡量二者的距离,即
K L ( q φ ( z ∣ x i ) ∣ ∣ p θ ( z ∣ x i ) ) = E q φ ( z ∣ x i ) [ l o g q φ ( z ∣ x i ) p θ ( z ∣ x i ) ] = E q φ ( z ∣ x i ) [ l o g q φ ( z ∣ x i ) p θ ( x i ) p θ ( z ∣ x i ) p θ ( x i ) ] = E q φ ( z ∣ x i ) [ l o g q φ ( z ∣ x i ) p θ ( z , x i ) ] + E q φ ( z ∣ x i ) [ l o g p θ ( x i ) ] = E q φ ( z ∣ x i ) [ l o g q φ ( z ∣ x i ) p θ ( z , x i ) ] + l o g p θ ( x i ) (2) \begin{aligned} \tag{2}KL(q_{\varphi}(z|x^{i}) || p_{\theta}(z|x^{i})) = & E_{q_{\varphi}(z|x^{i})}[log{q_{\varphi}(z|x^{i}) \over p_{\theta}(z|x^{i})}] \\ =& E_{q_{\varphi}(z|x^{i})}[log{q_{\varphi}(z|x^{i})p_{\theta}(x^i) \over p_{\theta}(z|x^{i})p_{\theta}(x^i)}] \\ = &E_{q_{\varphi}(z|x^{i})}[log{q_{\varphi}(z|x^{i}) \over p_{\theta}(z, x^{i})}] + E_{q_{\varphi}(z|x^{i})}[logp_{\theta}(x^{i})] \\ = & E_{q_{\varphi}(z|x^{i})}[log{q_{\varphi}(z|x^{i}) \over p_{\theta}(z, x^{i})}] + logp_{\theta}(x^{i}) \end{aligned} KL(qφ(zxi)pθ(zxi))====Eqφ(zxi)[logpθ(zxi)qφ(zxi)]Eqφ(zxi)[logpθ(zxi)pθ(xi)qφ(zxi)pθ(xi)]Eqφ(zxi)[logpθ(z,xi)qφ(zxi)]+Eqφ(zxi)[logpθ(xi)]Eqφ(zxi)[logpθ(z,xi)qφ(zxi)]+logpθ(xi)(2)
(2)式第3行到第4行是因为从 q φ ( z ∣ x i ) q_{\varphi}(z|x^i) qφ(zxi)采样 z z z之后就与 x x x无关了,所以 E q φ ( z ∣ x i ) [ l o g p θ ( x i ) ] = ∫ l o g p θ ( x i ) q φ ( z ∣ x i ) d z = l o g p θ ( x i ) E_{q_{\varphi}(z|x^{i})}[logp_{\theta}(x^{i})]=\int logp_{\theta}(x^i)q_{\varphi}(z|x^i)dz = logp_{\theta}(x^{i}) Eqφ(zxi)[logpθ(xi)]=logpθ(xi)qφ(zxi)dz=logpθ(xi)
由(2)式可以得到,
l o g p θ ( x i ) = K L ( q φ ( z ∣ x i ) ∣ ∣ p θ ( z ∣ x i ) ) + L ( φ , θ , x i ) (3) \tag{3} logp_{\theta}(x^{i}) = KL(q_{\varphi}(z|x^{i})|| p_{\theta}(z|x^{i}))+L(\varphi,\theta,x^{i}) logpθ(xi)=KL(qφ(zxi)pθ(zxi))+L(φ,θ,xi)(3)
其中
L ( φ , θ , x i ) = − E q φ ( z ∣ x i ) [ l o g q φ ( z ∣ x i ) p θ ( z , x i ) ] = E q φ ( z ∣ x i ) [ l o g p θ ( x i ∣ z ) p θ ( z ) q φ ( z ∣ x i ) ] = E q φ ( z ∣ x i ) [ l o g p θ ( x i ∣ z ) ] − K L ( q φ ( z ∣ x i ) ∣ ∣ p θ ( z ) ) ) (4) \begin{aligned} \tag{4}L(\varphi,\theta,x^{i}) = &-E_{q_{\varphi}(z|x^{i})}[log{q_{\varphi}(z|x^{i}) \over p_{\theta}(z, x^{i})}] \\ = & E_{q_{\varphi}(z|x^{i})}[log{p_{\theta}(x^{i}|z)p_{\theta}(z) \over q_{\varphi}(z|x^{i})}] \\ = & E_{q_{\varphi}(z|x^{i})}[logp_{\theta}(x^{i}|z)] - KL(q_{\varphi}(z|x^{i})||p_{\theta}(z))) \end{aligned} L(φ,θ,xi)===Eqφ(zxi)[logpθ(z,xi)qφ(zxi)]Eqφ(zxi)[logqφ(zxi)pθ(xiz)pθ(z)]Eqφ(zxi)[logpθ(xiz)]KL(qφ(zxi)pθ(z)))(4)
根据(3)式我们得到了似然函数的另一种表达方式,由于(3)式中的KL散度是非负数,所以 L ( φ , θ , x i ) L(\varphi,\theta,x^{i}) L(φ,θ,xi) l o g p θ ( x i ) logp_{\theta}(x^{i}) logpθ(xi)的下界,那么最大化 l o g p θ ( x i ) logp_{\theta}(x^i) logpθ(xi)就可以转化为最大化 L ( φ , θ , x i ) L(\varphi,\theta,x^{i}) L(φ,θ,xi)
(4)式的另外一种推到方法(用到了jensen不等式):
l o g p θ ( x ) = l o g ∫ z p θ ( x , z ) d z = l o g ∫ z q φ ( z ∣ x ) p θ ( x , z ) q φ ( z ∣ x ) d z = l o g E q φ ( z ∣ x ) [ p θ ( x , z ) q φ ( z ∣ x ) ] ≥ E q φ ( z ∣ x ) [ l o g p θ ( x , z ) q φ ( z ∣ x ) ] E L B O = E q φ ( z ∣ x ) [ l o g p θ ( x , z ) q φ ( z ∣ x ) ] = E q φ ( z ∣ x ) [ l o g p θ ( z ) p θ ( x ∣ z ) q φ ( z ∣ x ) ] = E q φ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L [ q φ ( z ∣ x ) ∣ ∣ p θ ( z ) ] \begin{aligned} logp_{\theta}(x) = & log \int_{z}p_{\theta}(x, z)dz \\ = & log \int_{z} {q_{\varphi}(z|x)p_{\theta}(x,z) \over q_{\varphi}(z|x)}dz \\ = & log E_{q_{\varphi}(z|x)}[{p_{\theta}(x, z) \over q_{\varphi}(z|x) }] \\ \ge & E_{q_{\varphi}(z|x)}[log{p_{\theta}(x, z) \over q_{\varphi}(z|x) }] \\ ELBO = & E_{q_{\varphi}(z|x)}[log{p_{\theta}(x, z) \over q_{\varphi}(z|x) }] \\ = & E_{q_{\varphi}(z|x)}[log{p_{\theta}(z)p_{\theta}(x|z) \over q_{\varphi}(z|x)}] \\ = & E_{q_{\varphi}(z|x)}[logp_{\theta}(x|z)] - KL[q_{\varphi}(z|x)||p_{\theta}(z)] \end{aligned} logpθ(x)===ELBO===logzpθ(x,z)dzlogzqφ(zx)qφ(zx)pθ(x,z)dzlogEqφ(zx)[qφ(zx)pθ(x,z)]Eqφ(zx)[logqφ(zx)pθ(x,z)]Eqφ(zx)[logqφ(zx)pθ(x,z)]Eqφ(zx)[logqφ(zx)pθ(z)pθ(xz)]Eqφ(zx)[logpθ(xz)]KL[qφ(zx)pθ(z)]

所以(4)式就是最后的损失函数。对于(4)式中的第一项,我们可以用蒙特卡洛模拟的方法,从 q φ ( z ∣ x i ) q_{\varphi}(z|x^{i}) qφ(zxi)中依据z的概率分布采样L个点,即
E q φ ( z ∣ x i ) [ l o g p θ ( x i ∣ z ) ] ≈ 1 L ∑ l = 1 L l o g p θ ( x i ∣ z i , l ) (5) \tag{5}E_{q_{\varphi}(z|x^{i})}[logp_{\theta}(x^{i}|z)] \approx {1 \over L}\sum_{l =1}^{L}logp_{\theta}(x^{i}|z^{i,l}) Eqφ(zxi)[logpθ(xiz)]L1l=1Llogpθ(xizi,l)(5)
这样通过采样貌似可以,但是我们还要通过采样来反向梯度优化 φ \varphi φ,这样采样之后 E q φ ( z ∣ x i ) [ l o g p θ ( x i ∣ z ) ] E_{q_{\varphi}(z|x^{i})}[logp_{\theta}(x^{i}|z)] Eqφ(zxi)[logpθ(xiz)]就与 φ \varphi φ无关了,因此这个操作是不可导的,就需要重参数化技巧来使采样操作可导。我们假设 z i , l = g φ ( x i , ε i , l ) , ε i , l ∼ p ( ε ) z^{i,l} = g_{\varphi}(x^{i}, \varepsilon^{i,l}),\varepsilon^{i,l} \sim p(\varepsilon) zi,l=gφ(xi,εi,l)εi,lp(ε),其中 p ( ε ) 和 g φ p(\varepsilon)和g_{\varphi} p(ε)gφ都是形式已知的。这样(5)式对 φ \varphi φ就可导了,因为 g φ g_{\varphi} gφ中含有参数 φ \varphi φ

所以(4)式可进一步写成
L ( φ , θ , x i ) = 1 L ∑ l = 1 L l o g p θ ( x i ∣ z i , l ) − K L ( q φ ( z ∣ x i ) ∣ ∣ p θ ( z ) ) (6) \tag{6}L(\varphi,\theta,x^{i}) = {1 \over L}\sum_{l =1}^{L}logp_{\theta}(x^{i}|z^{i,l}) - KL(q_{\varphi}(z|x^{i})||p_{\theta}(z)) L(φ,θ,xi)=L1l=1Llogpθ(xizi,l)KL(qφ(zxi)pθ(z))(6)
其中 z i , l = g φ ( x i , ε i , l ) , ε i , l ∼ p ( ε ) z^{i,l} = g_{\varphi}(x^{i}, \varepsilon^{i,l}),\varepsilon^{i,l} \sim p(\varepsilon) zi,l=gφ(xi,εi,l)εi,lp(ε)。也可以发现采样操作只用来计算(4)式中的第一项。

这里再讲解一下为什么采样操作不可导,我们可以反向思考一下,什么样的操作是可导的?
我们想要通过梯度来反向传播优化参数的话,那么在进行了这个操作之后,参数应该还是在表达式中的,比如我们从一个分布 q ( x ∣ θ ) q(x|\theta) q(xθ)中采样一个值,采样之后得到了一个确定性是值 x i x_i xi,而分布的参数 θ \theta θ就没有出现在表达式中了,所以后续无法通过梯度反向优化 θ \theta θ

下图是VAE的模型图,左图没有用重参数化技巧,右图用了重参数化技巧。在这里插入图片描述
红色框表示采样操作,是不可导的,蓝色框表示损失,我们期望的是,重构损失 ∣ ∣ X − f ( z ) ∣ ∣ 2 ||X-f(z)||^2 Xf(z)2和KL损失都可以反向梯度传播来优化参数 μ ( X ) , Σ ( X ) \mu(X), \Sigma(X) μ(X),Σ(X),但是在左图中, ∣ ∣ X − f ( z ) ∣ ∣ 2 ||X-f(z)||^2 Xf(z)2的损失反向传播到红色框就断了,无法继续优化 μ ( X ) , Σ ( X ) \mu(X), \Sigma(X) μ(X),Σ(X),而在右图中,使用重参数化技巧,将采样操作移到网络外面,两项损失的梯度都可以反向传播过来。

下面开始计算。

现在在(6)式中, p θ ( z ) , q φ ( z ∣ x i ) , p θ ( x i ∣ z ) , g φ ( x i , ε i , l ) , p ( ε ) p_{\theta}(z),q_{\varphi}(z|x^{i}),p_{\theta}(x^{i}|z),g_{\varphi}(x^{i}, \varepsilon^{i,l}),p(\varepsilon) pθ(z)qφ(zxi)pθ(xiz)gφ(xi,εi,l)p(ε)都是未知的,只有给定他们才能启动算法。
在VAE中,一般假设
p ( ε ) = N ( ε ; 0 , I ) g φ ( ε l , x i ) = μ i + σ i ⊙ ε l p θ ( z ) = N ( z ; 0 , I ) q φ ( z ∣ x i ) = N ( z ; μ i , σ 2 ( i ) I ) p θ ( x i ∣ z ) = N ( x i ; μ ′ i , σ ′ 2 ( i ) I ) p(\varepsilon) = N(\varepsilon;0, I) \\ g_{\varphi}(\varepsilon^{l}, x^{i}) = \mu^{i} + \sigma^{i}\odot\varepsilon^{l} \\ p_{\theta}(z) = N(z;0, I)\\ q_{\varphi}(z|x^{i})= N(z;\mu^{i},\sigma^{2(i)}I) \\ p_{\theta}(x^{i}|z)= N(x^{i};\mu'^{i},\sigma'^{2(i)}I) p(ε)=N(ε0,I)gφ(εl,xi)=μi+σiεlpθ(z)=N(z0,I)qφ(zxi)=N(zμi,σ2(i)I)pθ(xiz)=N(xiμi,σ2(i)I)

在论文中,作者使用多层感知机(MLP)来拟合 q φ ( z ∣ x ) 和 p θ ( x ∣ z ) q_{\varphi}(z|x)和p_{\theta}(x|z) qφ(zx)pθ(xz)
在这里插入图片描述
上式中的第一项是一般的正态分布与标准正态分布的KL散度,可以推导出来,具体推导细节可以看变分自编码器(一):原来是这么一回事
在实现时,一般取 L L L为1就可以了,也就是采样一个点就够了。
下图是VAE训练时的网络结构
在这里插入图片描述
下图是用decoder生成时的网络结构
在这里插入图片描述

VAE理论推导(二)

这种方式是苏大佬的推导方式,与原论文的推导方式略有不同。具体是从一开始优化目标就不同。
苏大佬是找到一个 x 和 z x和z xz的联和概率分布 q ( x , z ) q(x, z) q(x,z),用 q ( x , z ) q(x,z) q(x,z)来近似真实的联合概率分布 p ( x , z ) p(x,z) p(x,z)
首先定义, p ( x , z ) = p ( x ) ^ p ( z ∣ x ) p(x,z) = \hat{p(x)}p(z|x) p(x,z)=p(x)^p(zx)
在这里插入图片描述
方法二与方法一只是符号不同而已,本质还是相同的,关于方法二的很多细节,可以看苏大佬的博客,在本文开头已给出链接。

参考:变分自编码器(VAEs)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值