机器学习课程学习周报十七
文章目录
- 机器学习课程学习周报十七
- 摘要
- Abstract
- 一、机器学习部分
- 1. 变分推断/推理
- 1.1 证据下界
- 1.2 q ( z ) {q(z)} q(z)的选取
- 2. VAE
- 2.1 Auto-Encoder的简单回顾
- 2.2 为什么提出VAE
- 2.3 VAE的数学原理
- 3. Diffusion Model的数学原理
- 3.1 Training算法和Sampling算法
- 3.2 图像生成模型的本质
- 总结
摘要
本周报主要探讨了变分推理(Variational Inference)的基本思想及其在机器学习中的应用,详细介绍了证据下界(ELBO)的推导过程。接着,讨论了变分自编码器(VAE)的原理及其在生成模型中的优势。最后,简要分析了扩散模型(Diffusion Model)的数学原理,并阐述了图像生成模型的本质。
Abstract
This report explores the fundamental concepts of Variational Inference and its applications in machine learning, with a detailed explanation of the derivation of the Evidence Lower Bound (ELBO). It then discusses the principles of Variational Autoencoders (VAE) and their advantages in generative models. Finally, it briefly analyzes the mathematical principles of the Diffusion Model and describes the essence of image generation models.
一、机器学习部分
1. 变分推断/推理
1.1 证据下界
变分推理(variational inference)是贝叶斯学习中常用的、含有隐变量模型的学习和推理方法。变分推理和马尔可夫链蒙特卡罗法(MCMC)属于不同的技巧。MCMC通过随机抽样的方法近似地计算模型的后验概率,变分推理则通过解析的方法计算模型的后验概率的近似值。
变分推理的基本想法如下。假设模型是联合概率分布 p ( x , z ) p(x,z) p(x,z),其中 x x x是观测变量(数据), z z z是隐变量,包括参数。目标是学习模型的后验概率分布 p ( z ∣ x ) p(z|x) p(z∣x),用模型进行概率推理。但这是一个复杂的分布,直接估计分布的参数很困难。所以考虑用概率分布 q ( z ) q(z) q(z)近似条件概率分布 p ( z ∣ x ) p(z|x) p(z∣x),用KL散度 D ( q ( z ) ∣ ∣ p ( z ∣ x ) ) D(q(z)||p(z|x)) D(q(z)∣∣p(z∣x))计算两者的相似度, q ( z ) q(z) q(z)称为变分分布(variational distribution)。如果能找到与 p ( z ∣ x ) p(z|x) p(z∣x)在KL散度意义下最近的分布 q ∗ ( z ) {q^*}(z) q∗(z),则可以用这个分布近似 p ( z ∣ x ) p(z|x) p(z∣x)。
p ( z ∣ x ) ≈ q ∗ ( z ) p(z|x) \approx {q^*}(z) p(z∣x)≈q∗(z)
KL散度可以写成以下的形式:
D ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = E q [ log q ( z ) ] − E q [ log p ( z ∣ x ) ] = E q [ log q ( z ) ] − E q [ log p ( x , z ) p ( x ) ] = E q [ log q ( z ) ] − E q [ log p ( x , z ) ] + log p ( x ) = log p ( x ) − { E q [ log p ( x , z ) ] − E q [ log q ( z ) ] } \begin{array}{l}D(q(z)||p(z|x))\\ = {E_q}\left[ {\log q(z)} \right] - {E_q}\left[ {\log p(z|x)} \right]\\ = {E_q}\left[ {\log q(z)} \right] - {E_q}\left[ {\log \frac{{p(x,z)}}{{p(x)}}} \right]\\ = {E_q}\left[ {\log q(z)} \right] - {E_q}\left[ {\log p(x,z)} \right] + \log p(x)\\ = \log p(x) - \left\{ {{E_q}\left[ {\log p(x,z)} \right] - {E_q}\left[ {\log q(z)} \right]} \right\}\end{array} D(q(z)∣∣p(z∣x))=Eq[logq(z)]−Eq[logp(z∣x)]=Eq[logq(z)]−Eq[logp(x)p(x,z)]=Eq[logq(z)]−Eq[logp(x,z)]+logp(x)=logp(x)−{Eq[logp(x,z)]−Eq[logq(z)]}
注意到KL散度大于等于零,当且仅当两个分布一致时为零,上述最后一个等式称为(1)式,由此可知(1)式的右端第一项与第二项满足关系:
log p ( x ) ≥ E q [ log p ( x , z ) ] − E q [ log q ( z ) ] \log p(x) \ge {E_q}\left[ {\log p(x,z)} \right] - {E_q}\left[ {\log q(z)} \right] logp(x)≥Eq[logp(x,z)]−Eq[logq(z)]
上述不等式称为(2)式,(2)式右端是左端的下界,左端称为证据(evidence),右端称为证据下界(evidence lower bound, ELBO),证据下界记作:
L ( q ) = E q [ log p ( x , z ) ] − E q [ log q ( z ) ] L(q) = {E_q}\left[ {\log p(x,z)} \right] - {E_q}\left[ {\log q(z)} \right] L(q)=Eq[logp(x,z)]−Eq[logq(z)]
KL散度的最小化可以通过证据下界的最大化实现,因为目标是求 q ( z ) q(z) q(z)使KL散度最小化,这时 log p ( x ) \log p(x) logp(x)是常量。因此,变分推理变成求解证据下界最大化的问题。
变分推理可以从另一个角度理解。目标是通过证据 log p ( x ) \log p(x) logp(x)的最大化,估计联合概率分布 p ( x , z ) p(x,z) p(x,z)。因为含有隐变量 z z z,直接对证据进行最大化困难,转而根据(2)式对证据下界进行最大化。如下图从 log p ( x ) \log p(x) logp(x)的角度出发,可得到 log p ( x ) = L ( q ) + K L ( q ∣ ∣ p ) \log p(x) = L(q) + KL(q||p) logp(x)=L(q)+KL(q∣∣p),因为 K L ( q ∣ ∣ p ) KL(q||p) KL(q∣∣p)一定大于等于零, log p ( x ) \log p(x) logp(x)就是 L ( q ) L(q) L(q)的上界(upper bound),最大化证据 log p ( x ) \log p(x) logp(x)就变为了最大化证据下界 L ( q ) L(q) L(q)。当 K L ( q ∣ ∣ p ) KL(q||p) KL(q∣∣p)等于零时,即 q q q和 p p p分布一致的时候有, log p ( x ) = L ( q ) \log p(x) = L(q) logp(x)=L(q)。
利用琴生不等式(Jensen’s inequality),给出另一种证明方式:
上述的推导中有两点要说明的问题:
- 连续型随机变量求期望就是积分,如: ∫ z ( p ( x , z ) q ( z ) q ( z ) ) d z = E q ( z ) [ p ( x , z ) q ( z ) ] \int_z {(\frac{{p(x,z)}}{{q(z)}}q(z))dz = {E_{q(z)}}[\frac{{p(x,z)}}{{q(z)}}]} ∫z(q(z)p(x,z)q(z))dz=Eq(z)[q(z)p(x,z)]
- q ( z ) {q(z)} q(z)是概率密度函数, p ( x , z ) q ( z ) {\frac{{p(x,z)}}{{q(z)}}} q(z)p(x,z)是随机变量函数, x x x是连续型随机变量,这是一个连续型随机变量函数的数学期望
目标就是通过不断地调整 q ( z ) {q(z)} q(z)的参数,学习模型的后验概率分布 p ( z ∣ x ) p(z|x) p(z∣x),以拟合原始较为复杂的分布 p ( x ) {p(x)} p(x)。
1.2 q ( z ) {q(z)} q(z)的选取
对变分分布 q ( z ) q(z) q(z)要求是具有容易处理的形式,通常假设 q ( z ) q(z) q(z)对 z z z的所有分量都是互相独立的(实际是条件独立于参数),即满足:
q ( z ) = q ( z 1 ) q ( z 2 ) ⋯ q ( z n ) q(z) = q({z_1})q({z_2}) \cdots q({z_n}) q(z)=q(z1)q(z2)⋯q(zn)
这时的变分分布称为平均场(mean filed)。KL散度的最小化或证据下界最大化实际是在平均场的集合,即满足独立假设的分布集合 Q = { q ( z ) ∣ q ( z ) = ∏ i = 1 m q ( z i ) } Q = \{ q(z)|q(z) = \prod \limits_{i = 1}^m q(z{}_i)\} Q={q(z)∣q(z)=i=1∏mq(zi)}之中进行的。
将 q ( z ) {q(z)} q(z)代入证据下界 L ( q ) L(q) L(q)中,即:
L ( q ) = ∫ z q ( z ) log p ( x , z ) d z − ∫ z q ( z ) log q ( z ) d z = ∫ z ∏ i = 1 m q i ( z i ) log ( p ( x , z ) ) d z − ∫ z ∏ i = 1 m q i ( z i ) ∑ i = 1 m log ( q i ( z i ) ) d z \begin{array}{l}L(q)\\ = \int_z {q(z)} \log p(x,z)dz - \int_z {q(z)\log q(z)} dz\\ = \int_z { \prod \limits_{i = 1}^m } {q_i}({z_i})\log (p(x,z))dz - \int_z { \prod \limits_{i = 1}^m {q_i}({z_i})\sum\limits_{i = 1}^m {\log ({q_i}({z_i}))dz} } \end{array} L(q)=∫zq(z)logp(x,z)dz−∫zq(z)logq(z)dz=∫zi=1∏mqi(zi)log(p(x,z))dz−∫zi=1∏mqi(zi)i=1∑mlog(qi(zi))dz
将 ∫ z ∏ i = 1 m q i ( z i ) log ( p ( x , z ) ) d z \int_z { \prod \limits_{i = 1}^m } {q_i}({z_i})\log (p(x,z))dz ∫zi=1∏mqi(zi)log(p(x,z))dz作为part1,并将 ∫ z ∏ i = 1 m q i ( z i ) ∑ i = 1 m log ( q i ( z i ) ) d z \int_z { \prod \limits_{i = 1}^m {q_i}({z_i})\sum\limits_{i = 1}^m {\log ({q_i}({z_i}))dz} } ∫zi=1∏mqi(zi)i=1∑mlog(qi(zi))dz作为part2
接下来就是解part1和part2的问题
总结起来,变分推理有以下几个步骤:(1)定义变分分布 q ( z ) q(z) q(z);(2)推导其证据下界表达式;(3)用最优化方法对证据下界进行优化,如坐标上升,得到最优分布 q ∗ ( z ) {q^*}(z) q∗(z),作为后验分布 p ( z ∣ x ) p(z|x) p(z∣x)的近似。
2. VAE
2.1 Auto-Encoder的简单回顾
自编码器(Auto-Encoder)属于self-supervised learning(自监督学习)其中的一种方法。
自编码器中包含一个编码器和一个解码器。编码器可能读入一张图片,图片是一种维度非常高的向量,编码器能将高维度的向量压缩为低维度的向量,编码器通常有降维的作用。而解码器的网络架构可能更类似于GAN中的生成器,解码器要输入通过编码器得到的低维向量,生成一张图片。而训练的目标是要将解码器得到的输出图片与编码器的输入图片越接近越好,这个任务也叫做重构(reconstruction)。
2.2 为什么提出VAE
VAE(Variational Auto Encoder)变分自编码器
图片左边部分是Auto Encoder的简单例子:我们把一张满月的图片经过Encoder后得到编码code,这个编码code被decoder 后又转换为满月图,弦月图也是如此,注意它们直接的一对一关系。图片右边部分是VAE的简单例子,在编码code中添加一些噪声noise,这样可以让在满月对应noise范围内的code都可以转换为满月,弦月对应的noise 范围内的code也能转换成弦月。
但当我们在code中进行采样时,在不是满月和弦月对应的noise的code中采样时,decoder出来的图片可能是介于满月和弦月之间的图。也就是说,VAE产生了输入数据中不包含的数据,(可以认为产生了含有某种特定信息的新的数据),而Auto Encoder只能产生尽可能接近或者就是以前的数据(当数据简单时,编码解码损耗少时)。图片左边那个问号的意思是当对Auto Encoder中的code进行随机采样时,它介于满月与弦月之间的数据,decoder后可能会输出什么?可能会输出满月,可能会输出弦月,但是最有可能输出的是奇奇怪怪的图片。
上面这张图就是VAE的模型架构,我们先粗略地领会一下这个模型的设计思想。在Auto Encoder中,编码器是直接产生一个编码code的,就是上图红色部分的 ( m 1 , m 2 , m 3 ) ({m_1},{m_2},{m_3}) (m1,m2,m3)。但是在VAE中,为了给编码添加合适的噪声,编码器会输出两个编码,一个是原有编码 ( m 1 , m 2 , m 3 ) ({m_1},{m_2},{m_3}) (m1,m2,m3),另外一个是控制噪声干扰程度的编码 ( σ 1 , σ 2 , σ 3 ) ({\sigma _1},{\sigma _2},{\sigma _3}) (σ1,σ2,σ3),第二个编码其实很好理解,就是为随机噪声编码 ( e 1 , e 2 , e 3 ) ({e_1},{e_2},{e_3}) (e1,e2,e3)分配权重,然后加上 exp ( σ i ) \exp ({\sigma _i}) exp(σi)的目的是为了保证这个分配的权重是个正值,最后将原编码与噪声编码相加,就得到了VAE在code层的输出结果 ( c 1 , c 2 , c 3 ) ({c_1},{c_2},{c_3}) (c1,c2,c3),其它网络架构都与Deep Auto-encoder无异。
在损失函数方面,除了Auto Encoder中的reconstruction error,VAE还增加了上图黄色部分需要minimize的对象:
∑ i = 1 3 ( exp ( σ i ) − ( 1 + σ i ) + ( m i ) 2 ) \sum\limits_{i = 1}^3 {(\exp ({\sigma _i}) - (1 + {\sigma _i}) + {{({m_i})}^2})} i=1∑3(exp(σi)−(1+σi)+(mi)2)
这同样是必要的部分,因为如果不加的话,整个模型就会出现问题:为了保证生成图片的质量越高,编码器肯定希望噪声对自身生成图片的干扰越小,于是分配给噪声的权重越小,这样只需要将 ( σ 1 , σ 2 , σ 3 ) ({\sigma _1},{\sigma _2},{\sigma _3}) (σ1,σ2,σ3)赋为接近于无穷大的值就好了。所以,黄色部分的损失函数就有限制编码器走这样极端路径的作用。从 e σ i − ( 1 + σ i ) {e^{{\sigma _i}}} - (1 + {\sigma _i}) eσi−(1+σi)的表达式可以看出,在 σ i = 0 {\sigma _i} = 0 σi=0处取得最小值0,于是 ( σ 1 , σ 2 , σ 3 ) ({\sigma _1},{\sigma _2},{\sigma _3}) (σ1,σ2,σ3)就会避免被赋值为负无穷大。
2.3 VAE的数学原理
对于生成模型而言,主流的理论模型可以分为隐马尔可夫模型HMM、朴素贝叶斯模型NB和高斯混合模型GMM,而VAE的理论基础就是高斯混合模型。高斯混合模型的基本概念已经在机器学习课程学习周报十四中介绍过了。
什么是高斯混合模型呢?就是说,任何一个数据的分布,都可以看作是若干高斯分布的叠加。如图所示,如果 P ( x ) P(x) P(x)代表一种分布的话,存在一种拆分方法能让它表示成图中若干浅蓝色曲线对应的高斯分布的叠加。这种拆分方法已经证明出,当拆分的数量达到512时,其叠加的分布相对于原始分布而言,误差是非常非常小的了。于是我们可以利用这一理论模型去考虑如何给数据进行编码。一种最直接的思路是,直接用每一组高斯分布的参数作为一个编码值实现编码。
如上图所示, m m m代表着编码维度上的编号,譬如实现一个512维的编码, m m m的取值范围就是1,2,3……512。 m m m会服从于一个概率分布 P ( m ) P(m) P(m)(多项式分布)。现在编码的对应关系是,每采样一个 m m m,其对应到一个小的高斯分布 N ( μ m , Σ m ) N({\mu ^m},{\Sigma ^m}) N(μm,Σm), P ( x ) P(x) P(x)就可以等价为所有的这些高斯分布的叠加,即:
P ( x ) = ∑ m P ( m ) P ( x ∣ m ) P(x) = \sum\limits_m {P(m)} P(x|m) P(x)=m∑P(m)P(x∣m)
其中, m ∼ P ( m ) m \sim P(m) m∼P(m), x ∣ m ∼ N ( μ m , Σ m ) x|m \sim N({\mu ^m},{\Sigma ^m}) x∣m∼N(μm,Σm)
上述的这种编码方式是非常简单粗暴的,它是离散的、有大量失真区域的编码方式。于是我们需要对目前的编码方式进行改进,使得它成为连续有效的编码。
现在我们的编码换成一个连续变量 z z z,我们规定 z z z服从正态分布 N ( 0 , 1 ) N(0,1) N(0,1)(实际上并不一定要选用 N ( 0 , 1 ) N(0,1) N(0,1),其他的连续分布都是可行的)。每对于一个采样 z z z,会有两个函数 μ \mu μ和 σ \sigma σ,分别决定 z z z对应到的高斯分布的均值和方差,然后在积分域上所有的高斯分布的累加就成为了原始分布 P ( x ) P(x) P(x),即:
P ( x ) = ∫ z P ( z ) P ( x ∣ z ) d z P(x) = \int\limits_z {P(z)} P(x|z)dz P(x)=z∫P(z)P(x∣z)dz
其中, z ∼ N ( 0 , 1 ) z \sim N(0,1) z∼N(0,1), x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) x∣z∼N(μ(z),σ(z))
接下来就可以通过最大似然估计求解这个式子, L L L取 l o g log log后连乘变为连加,即 L = ∑ x log P ( x ) L = \sum\limits_x {\log } P(x) L=x∑logP(x)。由于 P ( z ) P(z) P(z)是已知的, P ( x ∣ z ) P(x|z) P(x∣z)未知,而 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) x∣z∼N(μ(z),σ(z)),于是我们真正需要求解的,是 μ \mu μ和 σ \sigma σ两个函数的表达式。又因为 P ( x ) P(x) P(x)通常非常复杂,导致 μ \mu μ和 σ \sigma σ难以计算,我们需要引入两个神经网络来帮助我们求解。
第一个网络是Decoder,它是求解 μ \mu μ和 σ \sigma σ两个函数的,这等价于求解 P ( x ∣ z ) P(x|z) P(x∣z),因为 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) x∣z∼N(μ(z),σ(z))。
第二个网络是Encoder,它求解的结果是 q ( z ∣ x ) q(z|x) q(z∣x), q q q可以代表任何分布。
值得注意的是,这里引入第二个神经网络Encoder的目的是,辅助第一个Decoder求解 P ( x ∣ z ) P(x|z) P(x∣z),这也是整个VAE理论中最精妙的部分,这里的连续变量 z z z也是我们常说的隐变量。
利用 ∫ z q ( z ∣ x ) d z = 1 \int_z {q(z|x)dz}= 1 ∫zq(z∣x)dz=1,推导出 log P ( x ) \log P(x) logP(x)的下界。这样一来,原本根据 P ( x ) = ∫ z P ( z ) P ( x ∣ z ) d z P(x) = \int\limits_z {P(z)} P(x|z)dz P(x)=z∫P(z)P(x∣z)dz,需要求 P ( x ∣ z ) P(x|z) P(x∣z)使 log P ( x ) \log P(x) logP(x)最大,现在引入 q ( z ∣ x ) {q(z|x)} q(z∣x),就变成了同时求 P ( x ∣ z ) P(x|z) P(x∣z)和 q ( z ∣ x ) {q(z|x)} q(z∣x)使得 log P ( x ) \log P(x) logP(x)最大。
当固定住 P ( x ∣ z ) P(x|z) P(x∣z)时,因为 log P ( x ) \log P(x) logP(x)只与 P ( x ∣ z ) P(x|z) P(x∣z)有关,所以 log P ( x ) \log P(x) logP(x)的值是不会变的。此时去调节 q ( z ∣ x ) {q(z|x)} q(z∣x),使得 L b {L_b} Lb越来越高,同时KL散度越来越小,当我们调节到 q ( z ∣ x ) {q(z|x)} q(z∣x)与 P ( z ∣ x ) P(z|x) P(z∣x)完全一致时,KL散度就消失为0, L b {L_b} Lb与 log P ( x ) \log P(x) logP(x)完全一致。由此可以得出,不论 log P ( x ) \log P(x) logP(x)的值如何,我们总能够通过调节使得 L b {L_b} Lb等于 log P ( x ) \log P(x) logP(x),又因为 L b {L_b} Lb是 log P ( x ) \log P(x) logP(x)的下界,所以求解Maximum log P ( x ) \log P(x) logP(x)等价为求解Maximum L b {L_b} Lb。
根据上图,进一步推导,求解Maximum L b {L_b} Lb,等价于求解 K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) KL(q(z|x)||P(z)) KL(q(z∣x)∣∣P(z))的最小值和 ∫ z q ( z ∣ x ) log P ( x ∣ z ) d z \int_z {q(z|x)\log P(x|z)dz} ∫zq(z∣x)logP(x∣z)dz的最大值。
第一项, − K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) - KL(q(z|x)||P(z)) −KL(q(z∣x)∣∣P(z))的展开式刚好等于上面介绍的损失函数
∑ i = 1 J ( exp ( σ i ) − ( 1 + σ i ) + ( m i ) 2 ) \sum\limits_{i = 1}^J {(\exp ({\sigma _i}) - (1 + {\sigma _i}) + {{({m_i})}^2})} i=1∑J(exp(σi)−(1+σi)+(mi)2)
具体的展开过程来自VAE论文中的Appendix B。于是,第一项式子就是VAE模型架构中的第二个损失函数的由来。
第二项可以写成期望的形式:
M a x i m u m ( ∫ z q ( z ∣ x ) log P ( x ∣ z ) d z ) = M a x i m u m ( E q ( z ∣ x ) [ log P ( x ∣ z ) ] ) \begin{array}{l}Maximum(\int_z {q(z|x)\log P(x|z)dz} )\\ = Maximum({E_{q(z|x)}}[\log P(x|z)])\end{array} Maximum(∫zq(z∣x)logP(x∣z)dz)=Maximum(Eq(z∣x)[logP(x∣z)])
上述的这个期望,也就是表明在给定 q ( z ∣ x ) {q(z|x)} q(z∣x)(编码器输出)的情况下 P ( x ∣ z ) {P(x|z)} P(x∣z)(解码器输出)的值尽可能高,这其实就是一个类似于Auto-Encoder的损失函数(方差忽略不计的话),因此这个式子就是VAE模型架构中的第一个损失函数的由来。
3. Diffusion Model的数学原理
3.1 Training算法和Sampling算法
Diffusion Model直观上的理解分为上图的两个步骤:Forward Process和Reverse Process。在Forward Process中,不断地增加噪声到原图片中,直到看不出原来的图片。在Reverse Process中,不断从噪点图去噪,直到产生原来完整的图片。
而实际算法与直观上的理解稍有不同,Algorithm 1是训练的过程,Algorithm 2是采样也是推理的过程。上图截取于论文:Denoising Diffusion Probabilistic Models
先来看Algorithm 1 Training:
第1步和第6步的意思是,重复第2到第5行的算法过程,直到收敛(converged)。
第2步: x 0 {x_0} x0是一张干净的图片,一般也是想要生成的图片,是从收集到的数据集中抽出来的
第3步: t t t是从1到 T T T范围的均匀分布中采样出的一个整数
第4步: ε \varepsilon ε是从正态分布(Normal Distribution)中采样得到的噪声,这个多元正态分布满足均值为0,协方差矩阵为单位矩阵,每个维度上的方差都是1。从图片的角度来看就是一张噪点图。
第5步:先看 α ˉ t x 0 + 1 − α ˉ t ε {\sqrt {{{\bar \alpha }_t}} {x_0} + \sqrt {1 - {{\bar \alpha }_t}} \varepsilon } αˉtx0+1−αˉtε,这是 x 0 {x_0} x0和 ε \varepsilon ε的加权和,其中权重 α ˉ t {{{\bar \alpha }_t}} αˉt是事先定义好的 α ˉ 1 , α ˉ 2 , ⋯ , α ˉ T {{\bar \alpha }_1},{{\bar \alpha }_2}, \cdots ,{{\bar \alpha }_T} αˉ1,αˉ2,⋯,αˉT。 α ˉ 1 {{\bar \alpha }_1} αˉ1到 α ˉ T {{\bar \alpha }_T} αˉT的值是逐渐变小的,表明这个加权和中噪声 1 − α ˉ t ε {\sqrt {1 - {{\bar \alpha }_t}} \varepsilon} 1−αˉtε占的比例更大, α ˉ t x 0 + 1 − α ˉ t ε {\sqrt {{{\bar \alpha }_t}} {x_0} + \sqrt {1 - {{\bar \alpha }_t}} \varepsilon } αˉtx0+1−αˉtε就是一张加上噪声的图片(Noisy image)。接下来, ε θ ( ∗ , t ) {\varepsilon _\theta }(*,t) εθ(∗,t)表示的是噪声预测器(Noise predictor),其接受两个参数,一个是图片,另一个是 t t t。最后计算 ε − ε θ ( i m a g e , t ) \varepsilon - {\varepsilon _\theta }(image,t) ε−εθ(image,t),相当于是用Target Noise减去Noise predictor的结果。
Algorithm 1 Training 的直观流程如上。
再来看Algorithm 2 Sampling:
这部分是推理的过程,也是Reverse Process。
第1步, x T {x_T} xT是从正态分布中采样得到的噪声图。
第2步和第5步表示,进入T步的循环,重复第3到第4步的算法过程。
第3步,当 t > 1 t > 1 t>1时, z z z从正态分布中采样得到一张噪声图,在最后一步 t = 1 t = 1 t=1时, z = 0 z = 0 z=0,便不再采样新的噪声了。
第4步, x t {x_t} xt是上个去噪步骤结束后得到的图片,其减去预测噪声器预测出的噪声并乘上一个权重,差再乘上一个权重,即 1 α t ( x t − 1 − α t 1 − α ˉ t ε θ ( x t , t ) ) \frac{1}{{\sqrt {{\alpha _t}} }}\left( {{x_t} - \frac{{1 - {\alpha _t}}}{{\sqrt {1 - {{\bar \alpha }_t}} }}{\varepsilon _\theta }({x_t},t)} \right) αt1(xt−1−αˉt1−αtεθ(xt,t)),最后再加上 z z z这个噪声。整个迭代的计算表达式为: x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ε θ ( x t , t ) ) + σ t z {x_{t - 1}} = \frac{1}{{\sqrt {{\alpha _t}} }}\left( {{x_t} - \frac{{1 - {\alpha _t}}}{{\sqrt {1 - {{\bar \alpha }_t}} }}{\varepsilon _\theta }({x_t},t)} \right) + {\sigma _t}z xt−1=αt1(xt−1−αˉt1−αtεθ(xt,t))+σtz。 α 1 , α 2 , ⋯ , α T {\alpha _1},{\alpha _2}, \cdots ,{\alpha _T} α1,α2,⋯,αT和 α ˉ 1 , α ˉ 2 , ⋯ , α ˉ T {{\bar \alpha }_1},{{\bar \alpha }_2}, \cdots ,{{\bar \alpha }_T} αˉ1,αˉ2,⋯,αˉT同样都是事先准备好的。
为什么加噪和去噪的过程要这样设置呢?
下篇博客再说明。Diffusion模型涉及VAE的思想,VAE又包含了变分推断的思想,因此想搞明白Diffusion模型的具体原理,还有很多要学习的地方,力求做到融会贯通。
3.2 图像生成模型的本质
从图像生成模型共同的目标来看,从一个已知的分布(如高斯分布)中采样出一个向量,输入到生成模型 G ( z ) G(z) G(z)中,输出的是一张图片 x x x。重复以上过程,即使我们采样的分布是一个简单的分布,最后生成图片的这个分布会是一个非常复杂的分布。而我们希望的是这个生成模型产生的分布要与真实的图片分布(Real Image)越接近越好,这是图像生成模型的目标本质。
现在的生成模型一般会多添加条件(condition)进行指导生成,本质上并没有区别。以文字为例,“一只在奔跑的狗”,此时生成模型的目标变为产生各式各样的“一只在奔跑的狗”,但本质仍是要让生成狗的图片分布与实际狗的图片分布越接近越好。
因此,接下来的数学推导中,以不包含condition为前提,只讨论一般的生成,使证明更加简洁。
为了生成模型产生的分布与真实数据的分布越接近越好,主要使用的方法是极大似然估计(Maximum Likelihood Estimation)。这个问题我在机器学习课程学习周报十一中,探讨GAN的原理时已经证明过:极大似然估计等价于最小化KL散度,极大似然估计求生成模型的参数 θ \theta θ,就是在最小化生成分布与真实分布之间的差异。
其中 P θ ( x ) {P_\theta }(x) Pθ(x)表示生成分布的概率密度, P d a t a ( x ) {P_{data}}(x) Pdata(x)表示真实数据分布的概率密度, x 1 , x 2 , … , x m {x^1},{x^2}, \ldots ,{x^m} x1,x2,…,xm是从真实数据分布中采样得到的样本。
第1步, ∏ i = 1 m P θ ( x i ) \prod \limits_{i = 1}^m {P_\theta }({x^i}) i=1∏mPθ(xi)取对数变为 log ∏ i = 1 m P θ ( x i ) \log \prod \limits_{i = 1}^m {P_\theta }({x^i}) logi=1∏mPθ(xi),是极大似然估计中非常自然的做法,一是能利用对数的性质将连乘变成连加,二是取对数不影响找整体表达式最大时的 θ \theta θ值。
第2步,其中的近似可以用上一次周报中的蒙特卡罗法之数学期望估计来解释。
蒙特卡罗法表明了真实数据的采样方式,利用大数定理可以用样本均值近似估计数学期望,翻过来也是,用数学期望近似样本均值。这里的均值并没有写成 1 m ∑ i = 1 m log P θ ( x i ) \frac{1}{m}\sum\limits_{i = 1}^m {\log } {P_\theta }({x^i}) m1i=1∑mlogPθ(xi),但因为这里是求 arg max θ \arg \mathop{\max }\limits_\theta argθmax,添上或缺少 1 m \frac{1}{m} m1并不影响,即:
arg max θ ( ∑ i = 1 m log P θ ( x i ) ) ≈ arg max θ ( m ⋅ E x ∼ P d a t a [ log P θ ( x ) ] ) = arg max θ ( E x ∼ P d a t a [ log P θ ( x ) ] ) \arg \mathop{\max }\limits_\theta (\sum\limits_{i = 1}^m {\log } {P_\theta }({x^i})) \approx \arg \mathop{\max }\limits_\theta (m \cdot {E_{x \sim {P_{data}}}}\left[ {\log {P_\theta }(x)} \right]) = \arg \mathop{\max }\limits_\theta ({E_{x \sim {P_{data}}}}\left[ {\log {P_\theta }(x)} \right]) argθmax(i=1∑mlogPθ(xi))≈argθmax(m⋅Ex∼Pdata[logPθ(x)])=argθmax(Ex∼Pdata[logPθ(x)])
第3步,可以参考蒙特卡罗法用于积分的计算。函数 h ( x ) h(x) h(x)可分解为 f ( x ) p ( x ) f(x)p(x) f(x)p(x), f ( x ) p ( x ) f(x)p(x) f(x)p(x)的积分就是数学期望: ∫ x f ( x ) p ( x ) d x = E p ( x ) [ f ( x ) ] \int\limits_x {f(x)p(x)dx} = {E_{p(x)}}\left[ {f(x)} \right] x∫f(x)p(x)dx=Ep(x)[f(x)]
倒过来,在推导中由第2步到第3步就可得到:
arg max θ ( E x ∼ P d a t a [ log P θ ( x ) ] ) = arg max θ ∫ x P d a t a ( x ) log P θ ( x ) d x \arg \mathop{\max }\limits_\theta ({E_{x \sim {P_{data}}}}\left[ {\log {P_\theta }(x)} \right]) = \arg \mathop{\max }\limits_\theta \int\limits_x {{P_{data}}(x)} \log {P_\theta }(x)dx argθmax(Ex∼Pdata[logPθ(x)])=argθmaxx∫Pdata(x)logPθ(x)dx
第3步及第4步,凑出交叉熵-熵的形式,得到KL散度,如下图:
总结
本次周报通过对变分推理、变分自编码器以及扩散模型的深入分析,尝试理解复杂生成模型的数学原理。Diffusion模型涉及VAE的思想,VAE又包含了变分推断的思想,因此想搞明白Diffusion模型的具体原理,还有很多要学习的地方,力求将模型学习与之前学习的机器学习算法思想做到融会贯通。