变分自动编码机(VAE)理解和实现(Tensorflow)

你需要知道的:

  1. 自动编码机Auto-Encoder (AE)由两部分encoder和decoder组成,encoder输入x数据,输出潜在变量z,decoder输入z然后输出一个x’,目的是让x’与x的分布尽量一致,当两者完全一样时,中间的潜在变量z可以看作是x的一种压缩状态,包含了x的全部feature特征,此时监督信号就是原数据x本身。
  2. 变分自动编码机VAE是自动编码机的一种扩展,它假设输出的潜在变量z服从一种先验分布,如高斯分布。这样,在训练完模型后,我们可以通过采样这种先验分布得到z’,这个z’可能是训练过程中没有出现过的,但是我们依然能在解码器中通过这个z’获得x’,从而得到一些符合原数据x分布的新样本,具有“生成“新样本的能力。
  3. VAE是一种生成模型,它的目标是要得到 p ( z ∣ x ) p(z|x) p(zx)分布,即给定输入数据x的分布,得到潜在变量x的分布, 与其他的生成模型一样,它计算的是x和z的联合概率分布 p ( x , z ) p(x,z) p(x,z)(如朴素贝叶斯模型通过计算 p ( x , z ) / p ( x ) p(x,z)/p(x) p(x,z)/p(x)得到 p ( z ∣ x ) p(z|x) p(zx)),当然它不是直接计算这个联合概率分布,而是借助一些公式变换求解。

从简单的例子理解VAE/AE的意义:

前面讲过,变分自动编码机的目的是想知道观测数据x背后的潜在变量z分布,即 p ( z ∣ x ) p(z|x) p(zx),举个简单的例子,比如天气是我们的观测数据x,但我们想知道影响天气变化背后的一些无法观测的因素z,这个z就像自然法则一样能够左右最后观测到的天气,这样我们以后描述某个天气,就可以完全量化为对应的潜在变量z。对于这个例子,VAE/AE都能完成这个事情,但如果现在我们想生成一些新的天气样本来作为研究,这个时候只有VAE可以很容易做这个事情:拟合现有样本分布的一个潜在变量的先验分布,通过采样这个先验分布来获得新的样本;而对于AE这个事情就比较难了:由于每个样本x被固定编码为对应的z,我们无法知道潜在样本的分布(若此时我们知道了z的分布,就等于知道了真实数据x的分布,这显然是不可能的,相比VAE的解决方案是把真实数据x对应的潜在分布映射到一个先验分布上),若AE硬要获得新样本怎么做呢,此时只能随机采样z了,很显然我们无法验证:根据这个z是否能正确地还原出一个符合真实样本x的新样本。

除了单纯“生成“新的样本用途,生成模型还可以用来去噪声,比如现在的图片里有雾霾,我们想把图片里的雾霾去掉,还原没有雾霾的样子,就可以用VAE/AE做:把有雾霾的图片当作输入x,对应的无雾霾的图片(假设我们能够在天气好的时候获得)作为最后要还原的x’训练VAE模型,如果训练的足够好的话,以后再任意拿一张有雾霾的图片,VAE能够还原出这个图片没有雾霾的样子,这就是生成模型的优势。当然,判别模型也能做这个事情:在给定原图像的情况下,尽量拟合原图像的变换图像,但是若测试时出现了之前训练过程中没有出现的图像,效果会不好,因为判别模型是基于条件概率 p ( x ′ ∣ x ) p(x'|x) p(xx),若新的条件x模型都没见过,效果肯定不好啊,所以判别模型更注重泛化能力。而生成模型会去拟合x和x’联合概率分布 p ( x , x ′ ) p(x,x') p(x,x),因此 p ( x ′ ∣ x ) p(x'|x) p(xx)的计算只需要除以边缘概率分布 p ( x ) p(x) p(x)即可,而对于VAE来说,它拟合的其实是x和潜在变量z的联合概率分布 p ( x , z ) p(x,z) p(x,z),获得 p ( z ∣ x ) p(z|x) p(zx)从而间接生成x’

VAE推导

为了求解真实的后验 p ( z ∣ x ) p(z|x) p(zx)概率分布,VAE引入一个识别模型 q ( z ∣ x ) q(z|x) q(zx)去近似 p ( z ∣ x ) p(z|x) p(zx),那么衡量这两个分布之间的差异自然就是相对墒了,也就是KL散度,VAE的目的就是要让这个相对墒越小,因此推导从相对墒开始:

K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) = ∫ q ( z ∣ x ) log ⁡ q ( z ∣ x ) p ( z ∣ x ) d z = ∫ q ( z ∣ x ) ( log ⁡ q ( z ∣ x ) − log ⁡ p ( z , x ) p ( x ) ) d z = ∫ q ( z ∣ x ) ( log ⁡ q ( z ∣ x ) − log ⁡ p ( z , x ) + log ⁡ p ( x ) ) d z = ∫ q ( z ∣ x ) ( log ⁡ q ( z ∣ x ) − log ⁡ p ( z , x ) ) d z + log ⁡ p ( x ) = E z ∼ q ( z ∣ x ) log ⁡ q ( z ∣ x ) p ( z , x ) + log ⁡ p ( x ) \begin{aligned} KL(q(z|x) || p(z|x)) & = \int q(z|x) \log \frac{q(z|x)} {p(z|x)} dz \\ & = \int q(z|x) \left ( \log q(z|x) - \log \frac {p(z,x)} {p(x)} \right ) dz \\ & = \int q(z|x) \left ( \log q(z|x) - \log p(z, x) + \log p(x) \right ) dz \\ & = \int q(z|x) \left ( \log q(z|x) - \log p(z, x) \right ) dz + \log p(x) \\ & = E_{z \sim q(z|x)} \log \frac { q(z|x)} { p(z,x)} + \log p(x) \end{aligned} KL(q(zx)p(zx))=q(zx)logp(zx)q(zx)dz=q(zx)(logq(zx)logp(x)p(z,x))dz=q(zx)(logq(zx)logp(z,x)+logp(x)

  • 24
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值