VAE的介绍主要按照[1606.05908] Tutorial on Variational Autoencoders (arxiv.org)的逻辑来进行,可以直接去看原文,这里只是做简单的梳理和总结
生成模型面临的挑战是生成具有特定结构的数据,而这些结构通常是相互依赖的、难以用抽象的逻辑直接表示的。以数字图像为例,每个像素的颜色和位置都可能受到周围像素的影响,同一个数字下面由于写字的速度等等问题,存在复杂的空间依赖关系(needs to choose not just the digit, but the angle that the digit is drawn, the stroke width, and also abstract stylistic properties. Worse, these properties may be correlated. )。因为数据的高度关联以及非线性,传统的方式做的不好。
在这一背景下,VAE通过引入隐变量来捕获数据的复杂关系。简而言之,依赖于隐变量的生成模型首先生成隐变量,然后使用这些隐变量来生成具体的数据。这种方法的优势在于能够更灵活地表示数据中的潜在结构,并且通过对隐变量的概率建模,VAE引入了一种概率性的生成过程,使其更适应真实世界中复杂多变的数据分布。相比之下,对抗生成网络(GAN)、扩散模型和流模型等生成模型采用不同的策略来解决这一问题。
首先我们从一个简单的隐变量的混合模型的角度出发,看一下里面存在什么问题,并且介绍VAE是怎么解决的。混合模型假设数据的生成方式如下:
- 从分布
中采样一个 - 从
中采样得到
具体来说上面公式中的
其中
隐变量的分布
模型可以采用极大似然估计的方式,使用给定的数据集进行训练,通过优化参数
上面式子改成抽样的形式,优化的目标函数就可以写作:
其中按照之前的假设
设想下面的情形,图片(a)是提供的样本,(b)和(c)是生成的两个样本,只管来看当然是(c)更好,而(b)则是不应该生成的(生成的概率小),属于应该排除在外的部分(在模型的
也就是说为了排除(b)我们需要将
因为只有抽样到能够生成距离样本很近的
一个以距离函数作为损失函数的神经网络中参数的更新公式和两者的距离成正比,也就是说两个的差异越大,参数更新的越快
尤其是生成任务中样本的维度通常都很高,采样次数也就需要很高,计算效率就很低。
总结一下,基于最小二乘法去对边际分布(混合分布)去优化参数的模型存在下面两个问题:
- 损失函数过于简单,导致模型的泛化性和“准确性冲突”
- 计算效率不高,大部分采样对模型的更新作用不大
从采样的角度出发,看一下上面的模型,因为采样得到的
但是后验分布
为了绕过这个地方,引入了Varational Inference的方式去近似这个后验概率,也就是VAE中的V。VI的目的就是希望取得一个分布
可以使用贝叶斯公式进行化简最终得到:
因为
上面的公式右侧就是著名的ELBO,左侧包含了需要优化的
上面的讨论中通过VI近似后验分布得到一个Q来采样来解决了采样效率的问题,下面对于VAE如何解决泛化性的问题说一下我自己的理解。
将初始的公式也按照上面的形式,就得到下面的公式:
也就是:
相比于VAE的公式,优化的时候左侧的损失项就不能忽视了,并不随着优化的过程而改变,总是存在一个差值,在优化的过程中也没有去考虑,右侧中的值相当于只是一个距离的损失函数,没有正则项。