VAE 变分自编码器

2025-05-30 111410(1).jpg

速览

image.png

假设隐空间符合高斯分布
VAE和AE就差别在概率分布:高斯分布

隐向量(latent vector)
隐空间

image.png

AE的隐向量是离散的(隐空间离散),之间的点是无意义的。
增加概率分布实现隐空间连续,之间的点有意义。

VAE是一种用正则化避免过拟合,并确保隐空间有能够进行生成的优良表征。

方法

image.png

假设隐空间的点服从高斯分布,即p(z)符合高斯分布

训练的过程:有观察图像x,通过编码器获得隐空间z,从隐空间z中采样隐向量,通过解码器获得重建图像x。

p(z|x)通过贝叶斯公式发现分母部分的积分很难求数字解,所以想着找到神经网络模拟靠近p(z|x)

训练中我们就认为qϕ(z|x)就是p(z|x)

p(z|x)是已知事实x推导背后的隐变量z,属于后验分布;p(z)是先验分布

每一张图像有对应得图像分布,所以生成一张图像,我们看其图像分布,比如让猫的概率更大,让其他的概率更小。

Evidence Lower Bound(ELBO)

KL的角度

可以用KL散度让神经网络拟合后验分布p(z|x)

KL散度,简单来说他就是衡量两个分布之间的距离,值越小两者越相近,值越大两者差距越大

KL(qϕ(z|x)p(z|x))=zqϕ(z|x)log[qϕ(z|x)p(z|x)]dz=zqϕ(z|x)log[qϕ(z|x)p(z,x)]dz=zqϕ(z|x)log[qϕ(z|x)p(z,x)]dz+zqϕ(z|x)logp(x)dz=Eqϕ(z|x)log[qϕ(z|x)p(z,x)]+logp(x)

其中logp(x)是定值。

期望的定义$$\mathbb{E}_{x \sim P(x)}[f(x)] = \int P(x)f(x)dx$$

得到:KL(qϕ(z|x)p(z|x))+Eqϕ(z|x)log[p(z,x)qϕ(z|x)]=logp(x)
其中Eqϕ(z|x)log[p(z,x)qϕ(z|x)]就是ELBO

image.png

所以目标让ELBO更大

Eqϕ(z|x)log[p(z,x)qϕ(z|x)]=Eqϕ(z|x)[logpθ(x|z)p(z)qϕ(z|x)]Chain Rule of Probability=Eqϕ(z|x)[logpθ(x|z)]+Eqϕ(z|x)[logp(z)qϕ(z|x)]Split the Expectation=Eqϕ(z|x)[logpθ(x|z)]KL(qϕ(z|x)p(z))Definition of KL Divergence

其中

  • Eqϕ(z|x)[logpθ(x|z)]是隐空间z到生成图像x重建,越大越好,认定为reconstruction term
  • KL(qϕ(z|x)p(z))是先验,越小越好,认定为prior matching term

也就是说从神经网络和p(z|x)的KL散度转为看$$= \mathbb{E}{q\phi(z|\mathbf{x})} [\log p_\theta(\mathbf{x}|z)] – KL(q_\phi(z|\mathbf{x}) \parallel p(z)) \quad \text{Definition of KL Divergence}$$和神经网络和p(z)的KL散度。

reconstruction term就是看原图像和生成图像的效果,用xx^2表示程度。

KL(qϕ(z|x)p(z))要小,看p(z)是怎么样的。当然我们之前假设p(z)服从高斯分布,但是服从什么样的高斯分布呢?
我们看下p(z|x),表达的意思是对于输入x,其隐空间的分布,显然不同x,应该有不同的z,也就是p(z|x)不会是同一分布,然后我们希望它的分布不要是离散的点,也就是噪声不能为0,然后分布选择高斯分布(这里我并没有太理解,但是实际大部分时候都是用高斯分布),高斯分布最简单的是01高斯分布,所以添加约束:p(zx)N(0,I),这里不是等于01高斯分布就是因为不能所有p(z|x)不会是同一分布。

噪声是随机性和不确定性,是确定的值周围的可能

然后推导

p(z)=xp(z|x)p(x)dx=xN(0,I)p(x)dx=N(0,I)xp(x)dx=N(0,I)

所以p(z)也是N(0,I),所以p(z)就是01高斯分布。

让神经网络拟合p(z)p(z)p(z|x)假设是高斯分布N(0,I)的基础上,也是N(0,I),高斯分布由均值和方差决定,qϕ(z|x)=N(z;μϕ(x),σϕ2(x)I),所以让N(z;μϕ(x),σϕ2(x)I)逼近N(0,I)
这里可以用12(μφ2+σφ2logσφ21)作为Loss让KL(qϕ(z|x)p(z))最小。

因此,prior matching term就可以直接用12(μφ2+σφ2logσφ21)来表示这一项的优化。

总结来说,VAE的优化就是

  • reconstruction term的xx^2,L2 Loss
  • prior matching term的12(μφ2+σφ2logσφ21)

最大似然的角度

logp(x)=p(x)zqϕ(z|x)dz=zqϕ(z|x)logp(x)dzmultiply by 1=zqϕ(z|x)dz=zqϕ(z|x)log[p(z,x)p(z|x)]dzchain rule of probability=zqϕ(z|x)log[p(z,x)qϕ(z|x)qϕ(z|x)p(z|x)]dzmultiply by 1=qϕ(z|x)qϕ(z|x)=zqϕ(z|x)log[p(z,x)qϕ(z|x)]dz+KL(qϕ(z|x)p(z|x))definition of KL Divergencezqϕ(z|x)log[p(z,x)qϕ(z|x)]dz=Eqϕ(z|x)log[p(z,x)qϕ(z|x)]KL Divergence always 0

一样推出ELBO=Eqϕ(z|x)log[p(z,x)qϕ(z|x)]

总结如下图:
image.png

下面结果可以说明2个Loss缺一不可,唯有都有,才能紧凑且区分。

image.png

为什么Work

图像分布可以由多个高斯分布组合而成,多个高斯分布通过Decoder实现组合,得到图像分布。Encoder完成的就是将图像映射到隐空间的01高斯分布。

局限

第一个是后验概率坍塌。
指后验概率坍塌成先验概率,后验的意义坍塌,当坍塌发生后,不论你输入的是 x1(猫)还是 x2(狗),Encoder 算出来的分布全都变成了 N(0,I)。 也就是说:qϕ(z|x)=p(z)

我们预期一开始让qϕ(z|x)趋近p(z|x),使用KL散度,拆成2个部分,其中的qϕ(z|x)p(z)也会计算KL散度,看起来是矛盾的,因为qϕ(z|x)趋近p(z),即所有qϕ(z|x)趋近同分布,那么导致坍塌,导致Decoder乱组高斯分布,乱组图,L2 Loss必然大;而我们的预期是L2 Loss和qϕ(z|x)趋近p(z)相对平衡,然后让qϕ(z|x)趋近p(z|x)

显然前者是完全可能发生的,尤其是网络倾向于向最方便下降的方向进行。

VAE 的损失函数是两个目标:努力重建图像和让隐空间符合 N(0,I)(KL散度)
为了迅速降低总体的 Loss,Encoder走捷径,不管x输入是什么,都输出均值为 0、方差为 1 的标准高斯分布,即qϕ(z|x)都是01高斯分布,那么我的 KL 散度这一项 Loss 就变成 0,这样下来qϕ(z|x)=p(z),提取出来的特征 z 里,不再包含任何关于输入 x 的有效信息。

第二个是图像映射到的分布是近似01高斯分布但不等于,但是采样(即生成时)是当作01高斯分布采样,这里出现不匹配。
训练时(Autoencoding):输入图片 x,Encoder 算出一个专属的分布 N(μx,σx)。虽然有 KL Loss 逼着它靠近 N(0,I),但为了保证 L2 Loss(能把原图画出来),它绝对不可能完全等于 N(0,I)。此时,我们是从 N(μx,σx) 里采样 z 给 Decoder。Decoder 学到的是:“哦,从这些特定区域来的 z,我要画成猫或狗”。
生成时(Generation):我们没有输入图片了,直接把 Encoder 扔掉。我们假定整个隐空间就是完美的 N(0,I),然后从 N(0,I) 里随机抽一个盲盒 z 喂给 Decoder。

Stable diffusion就是多次加噪,最终一定映射到01高斯分布。

END

参考
【大白话02】一文理清 VAE 变分自编码器 | 原理图解+公式推导_哔哩哔哩_bilibili

标题:VAE 变分自编码器
作者:Echo_Kang
链接:https://echokang.top/vae-%e5%8f%98%e5%88%86%e8%87%aa%e7%bc%96%e7%a0%81%e5%99%a8/
声明:采用 CC BY-NC-SA 4.0 协议,转载请注明出处。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇