【学习笔记】文生图模型——三、VAE原理篇

 记录:学习stable diffusion模型原理,需要学习VAE、CLIP、Diffusion、Unet、Transformer

一、VAE:

(图源来自原论文和李宏毅老师的视频)

1.流程图示

观测数据X输入到MLP编码器里(图中绿色NN),输出隐向量z(多元高斯分布)的每一个维度的期望m和方差\sigma,通过与采样自标准正态的噪音e运算之后,输入到MLP解码器里(图中蓝色NN),解码器会输出条件概率分布p_\theta (x|z)的参数,并利用这些参数采样还原数据X。

2.模型开始

李老师的视频里介绍了一维高斯混合模型,原理是多个正态分布可以叠加成为任一分布。P(x)是数据x的分布概率,而z上任取一点就代表其中一条蓝色的高斯分布,取遍z上所有的点就可以模拟出x的分布。

论文给出的图解

X=\left \{ x^{(i)} \right \}_{i=1}^{N}是独立同分布的样本数据集,z=\left \{ z^{(i)} \right \}是生成的连续随机隐变量。

假设数据是由z随机生成的,该过程包括两个步骤:

(1) 从先验分布p_\theta (z)中生成一个值 z^{(i)}

(2) 从条件分布p_\theta (x|z)中生成一个值x^{(i)}

先验分布:p_\theta (z|x),由于难以计算,用q_\phi (z|x)近似表示(变分法)。\phi\theta会在训练时一起学习。q_\phi (z|x)指编码器。负责将输入的数据映射到隐空间中。

后验分布:p_\theta (x|z)p_\theta (x|z)指解码器。负责从隐空间中采样,重构出原始的数据。

但真实参数\theta^*以及潜在变量z^{(i)}的值都是隐藏的。于是论文开始探索解决之法。

3.目标函数

$\max \limits_{\theta}\{log\prod_{i=1}^{n}p_\theta (x^{(i)})\}=\max \limits_{\theta}\sum_{i=1}^{n}logp_\theta (x^{(i)})$

化简过程:(手推了一下)$\max \limits_{\theta}\sum_{i=1}^{n}logp_\theta (x^{(i)})=\max \limits_{\theta}\int_{z}^{}q_\phi (z|x^{(i)})logp_\theta (x^{(i)})dz$$=\max \limits_{\theta}\int_{z}^{}q_\phi (z|x^{(i)})log\frac{ p_{\theta}(z,x^{(i)})}{p_{\theta}(z|x^{(i)})}dz$$=\max \limits_{\theta}D_{KL}(q_\phi(z|x^{(i)})||p_{\theta}(z|x^{(i)}))+\int_{z}^{}q_\phi (z|x^{(i)})log\frac{ p_{\theta}(z,x^{(i)})}{q_\phi(z|x^{(i)})}dz$

原文中用\pounds(\theta ,\phi ;x^{(i)})代替第二项,写作:

4.目标函数结果分析

第一项KL散度是近似分布与真实分布的一致性,因为这一项非负,所以我们需要求满足下界\pounds(\theta ,\phi ;x^{(i)})=\int_{z}^{}q_\phi (z|x^{(i)})log\frac{ p_{\theta}(z,x^{(i)})}{q_\phi(z|x^{(i)})}dz取最大值时的参数\theta\phi,这时会影响D_{KL}越来越小,也就是能找到与真实分布非常相近的的近似分布。

对于第二项,原文中运算过程:

于是需要找到$\min \limits_{\theta}D_{KL}(q_\phi(z|x^{(i)})||p_{\theta}(z))$$\max \limits_{\theta}\int_{z}^{}q_\phi (z|x^{(i)})logp_\theta(x|z)dz=E_{q_\phi (z|x^{(i)})}log[p_\theta (x^{(i)}|z)]$

继续分析

①对于$\min \limits_{\theta}D_{KL}(q_\phi(z|x^{(i)})||p_{\theta}(z))$,就是要调MLP编码器里(图中绿色NN)的参数,使它产生的z的分布能接近N(z;0,I)

②对于$\max \limits_{\theta}\int_{z}^{}q_\phi (z|x^{(i)})logp_\theta(x|z)dz=E_{q_\phi (z|x^{(i)})}log[p_\theta (x^{(i)}|z)]$,在①的条件下,只需要调整MLP解码器里(图中蓝色NN)的参数,使它产生的x的分布期望接近于样本x,也就是说使生成的x接近于输入的x。

分析结果

论文最后举的VAE例子中给出了假设和代数结果:(看不下一点推导,干脆直接看结果)

①假设p_\theta (z)=N(z;0,I),是一个多元高斯分布,中心化(\mu =0)且在每个维度上的方差都一样(相同分布),I表示单位矩阵。

p_\theta (x|z)根据数据的类型(实数或二进制)被建模为多元高斯分布或伯努利分布,其分布参数通过输入z到MLP解码器里计算得出。

③出于p_\theta (z|x)的不可解性,假设这个真实的p_\theta (z|x)近似于对角协方差矩阵的高斯分布,那么可以得出近似分布q_\phi (z|x)

注:均值和标准差近似\mu ^{(i)}\sigma^{(i)}是MLP编码器的输出

④隐变量 z是具有随机性,引用了重参数化技巧这个节点的随机性移出变成确定性,让梯度参数可以反向传播。

由以上假设可以将(1)式中的第二项近似为:

注:用蒙特卡洛法采样了L次,式子中z^{(i,l)}指对z的第i个分量进行第l次采样


5.知识点

①信息量:信息量I的多少是与事件x发生概率大小成反比。I(x)=-log(p(x))

②信息熵=熵=概率期望:H(x)=-\sum_{i=1}^{n}p(x_i)log(p(x_i))

③交叉熵:-\sum_{i=1}^{n}p(x_i)log(q(x_i)),衡量两个概率分布之间差异。

④KL散度=相对熵=交叉熵-信息熵:\sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})衡量两个概率分布相似度。

⑤概率归一性:对任意分布z,都有\int_{z}^{}p(z|x)dz=1

⑥全概率:p(x)=\int_{z}^{}p(x|z)p(z)dz=\sum_{i=1}^{m}p(x|z_i)p(z_i)

⑦条件概率:p(z|x)=\frac{p(z,x)}{p(x)},事件z在另外一个事件x已经发生条件下的发生概率。

⑧泛函数:泛函的输入是一个函数,输出是一个实数或复数。

⑨重参数:重参数化技巧可以确保在进行随机采样时,梯度信息能够被保留,原理是任意一个高斯分布可以分解为关于标准正态分布的函数。


6.之后要看的

理论:勉强看得懂函数推导以及优化策略,但是,因为之前看基础就还没到卷积,跑去匆匆忙忙去看论文找方向,所以这一次要看卷积、循环、transformer。如果有空余还要看GAN。

代码:下一步除了VAE的代码,还要简单实现一下卷积。

论文:得重新找找方向,被sora打了个措手不及。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值