极简笔记 VAE(变分自编码器)
论文原文:Auto-Encoding Variational Bayes
这是一篇极其拗口的文章,但是文章从变分推断一路延伸到自编码器的构造,过程一气呵成,和当下DL领域的灌水之风形成鲜明对比,是难得的佳作。为了能够从理论到实现融会贯通地理解,本篇笔记会更加偏向于思路解读而非原文复述。
VAE是一个生成模型,对于生成模型,我们希望求得的都是原始数据分布 p(x) p ( x ) 。但是我们有的只是离散的对真实分布的采样 { x1,x2,x3,...,xn} { x 1 , x 2 , x 3 , . . . , x n } ,这就是我们的数据集。这时候我们常常会先假设分布的类型(e.g. 高斯分布,均匀分布),然后用最大似然(ML)来做,计算参数 θ=argmaxθ∑ilogp(xi) θ = arg max θ ∑ i log p ( x i ) ,从而求得 pθ(x) p θ ( x ) 。但是 p(x) p ( x ) 可能是一个很复杂的难以表达的分布,难以选择合适的假设分布来计算最大似然。
于是假设除了可见变量 x x ,还存在着潜变量 ,且 z z 满足某个简单的分布 。那么原始数据分布可以按照后验概率公式分解成 p(x)=∫p(x|z)p(z)dz p ( x ) = ∫ p ( x | z ) p ( z ) d z ,但是在离散数据情况下边缘化 z z 是非常费时的,于是我们想到了变分推断。
有下界 L(θ,ϕ;xi) L ( θ , ϕ ; x i ) , 这个下界可以进一步拆分:
这里非常重要,为了提升下界,等价于减小第一项的KL散度,增加第二项的期望。那么第一项可以看做是对 qϕ(z|xi) q ϕ ( z | x i ) 的正则项,使其更加接近于先验分布 pθ(z) p θ ( z ) ;第二项可以看做是负重构误差项,当 z