考虑使用pθ(x,z)近似p(x,z)也可以,因为p(x,z)=p(x∣z)p(z)且pθ(x.z)=pθ(x∣z)p(z)
所以实际上只要有pθ(x,z)就能拟合pθ(x∣z),也就能拟合p(x)
计算KL散度如下:
KL(p(x,z)∥pθ(x,z))=∬p(x,z)logpθ(x,z)p(x,z)dzdx=∫p(x)[∫p(z∣x)logpθ(x,z)p(x)p(z∣x)dz]dx=Ex∼p(x)[∫p(z∣x)logpθ(x,z)p(x)p(z∣x)dz]=Ex∼p(x)[∫p(z∣x)(logp(x)+logpθ(x,z)p(z∣x))dz]=Ex∼p(x)[logp(x)∫p(z∣x)dz]+Ex∼p(x)[∫p(z∣x)logpθ(x,z)p(z∣x)dz]这里的关键步骤是将p(x,z)都拆分为p(x)p(z∣x),注意log里面的拆分后要写成加法的形式
这样的话,先把dx给解决掉,再就可以引入常数项
第一项
Ex∼p(x)[logp(x)∫p(z∣x)dz]=Ex∼p(x)[logp(x)]=C其中C为常数,所以有
L=KL(p(x,z)∥pθ(x,z))−C=Ex∼p(x)[∫p(z∣x)logpθ(x,z)p(z∣x)dz]要最小化 KL(p(x,z)∥pθ(x,z)),只要最小化L 也可以理解为极大化 −L, ==−L 被叫做变分下限(ELBO)== 接着可以对 L 再进行一些变化:
L=Ex∼p(x)[∫p(z∣x)logpθ(x,z)p(z∣x)dz]=Ex∼p(x)[∫p(z∣x)logpθ(x∣z)p(z)p(z∣x)dz]=Ex∼p(x)[−∫p(z∣x)logpθ(x∣z)dz+∫p(z∣x)logp(z)p(z∣x)dz]=Ex∼p(x)[Ez∼p(z∣x)[−logpθ(x∣z)]+KL(p(z∣x)∥p(z))]这里的关键步骤是对pθ(x,z)动手,因为p(z)是已知的,所以拆分为pθ(x∣z)p(z)
然后拆下来的一个是期望,一个是KL散度
先验分布:p(z),表示没有看到任何x时,对隐变量z的假设分布,这个是已知的一个确定的分布
真实后验分布:p(z∣x),表示已经观测到真实数据x后,隐变量z的真实分布
这里我们引入了真实后验分布p(z∣x),我们需要一个神经网络来拟合它,即pθ(z∣x),称作编码器Encoder,与之对应的就是解码器Decoder pθ(x∣z)
L 的第一项是Ez∼p(z∣x)[−logpθ(x∣z)],由于pθ(x∣z)就是似然函数,所以最小化−logpθ(x∣z)就是最大化函数
L 的第二项是KL(p(z∣x)∥p(z)),希望p(z∣x)和p(z)尽可能的接近,也就是用Encoder得到的z的分布和预设的尽可能接近
在这里再补充一些说明,虽然上面推导出了隐变量模型为了近似得到p(x),需要做什么,但还有一些问题要说明
我们本来想做的是最大化数据的对数似然 logpθ(x)
但这个东西很难直接算,因为pθ(x)=∫pθ(x∣z)p(z)dz这个积分很难算。
所以我们换一个容易优化的下界去优化,这个下界就是 VAE 的目标,也就是ELBO
ELBO 不是瞎编的,它和真正想要的对数似然有明确关系:logpθ(x)=ELBO+KL(p(z∣x)∥pθ(z∣x))
因为后面这个 KL 散度永远≥0,所以 ELBO 一定不超过真正的对数似然,因此叫“下界”。
为什么不直接优化对数似然?
因为x在隐变量模型里面不是直接建模的,而是通过隐变量z生成出来的:pθ(x,z)=pθ(x∣z)p(z)
所以边缘分布的所以边缘分布是:pθ(x)=∫pθ(x,z)dz=∫pθ(x∣z)p(z)dz
问题就在这里:
- z可能是高维向量
- pθ(x∣z)是神经网络输出
- 这个积分通常没法精确计算
所以虽然我们想优化logpθ(x),但它本身不好算
为什么会突然引入KL散度?
因为==KL散度和极大似然估计在本质上等价==
−L=C−KL(p(x,z)∥pθ(x,z))=Ex∼p(x)[∫p(z∣x)logp(z∣x)pθ(x,z)dz]=Ex∼p(x)[∫p(z∣x)logp(z∣x)pθ(x)pθ(z∣x)dz]=Ex∼p(x)[logpθ(x)−KL(p(z∣x)∥pθ(z∣x))]因为 KL 散度永远满足:KL(⋅∥⋅)≥0
所以:logpθ(x)−KL(p(z∣x)∥pθ(z∣x))≤logpθ(x)
也就是说:−L≤Ex∼p(x)[logpθ(x)]
所以−L是对数似然的一个变分下界
- 变分:引入了一个分布去近似、去变换原来难算的目标。
- 下界:永远不超过真正的对数似然
总结为:
我真正想优化的是数据似然,但它太难算 所以我找一个容易优化的替代目标 这个替代目标不是乱来的,它是原目标的下界 只要把这个下界尽量提高,就等于在间接提高真实似然