机器学习课程学习周报十七

机器学习课程学习周报十七

文章目录

  • 机器学习课程学习周报十七
    • 摘要
    • Abstract
    • 一、机器学习部分
      • 1. 变分推断/推理
      • 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(zx),用模型进行概率推理。但这是一个复杂的分布,直接估计分布的参数很困难。所以考虑用概率分布 q ( z ) q(z) q(z)近似条件概率分布 p ( z ∣ x ) p(z|x) p(zx),用KL散度 D ( q ( z ) ∣ ∣ p ( z ∣ x ) ) D(q(z)||p(z|x)) D(q(z)∣∣p(zx))计算两者的相似度, q ( z ) q(z) q(z)称为变分分布variational distribution)。如果能找到与 p ( z ∣ x ) p(z|x) p(zx)在KL散度意义下最近的分布 q ∗ ( z ) {q^*}(z) q(z),则可以用这个分布近似 p ( z ∣ x ) p(z|x) p(zx)

p ( z ∣ x ) ≈ q ∗ ( z ) p(z|x) \approx {q^*}(z) p(zx)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(zx))=Eq[logq(z)]Eq[logp(zx)]=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(zx),以拟合原始较为复杂的分布 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=1mq(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)dzzq(z)logq(z)dz=zi=1mqi(zi)log(p(x,z))dzzi=1mqi(zi)i=1mlog(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=1mqi(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=1mqi(zi)i=1mlog(qi(zi))dz作为part2

接下来就是解part1part2的问题

在这里插入图片描述
在这里插入图片描述

总结起来,变分推理有以下几个步骤:(1)定义变分分布 q ( z ) q(z) q(z);(2)推导其证据下界表达式;(3)用最优化方法对证据下界进行优化,如坐标上升,得到最优分布 q ∗ ( z ) {q^*}(z) q(z),作为后验分布 p ( z ∣ x ) p(z|x) p(zx)的近似。

2. VAE

2.1 Auto-Encoder的简单回顾

自编码器Auto-Encoder)属于self-supervised learning(自监督学习)其中的一种方法。
在这里插入图片描述

自编码器中包含一个编码器和一个解码器。编码器可能读入一张图片,图片是一种维度非常高的向量,编码器能将高维度的向量压缩为低维度的向量,编码器通常有降维的作用。而解码器的网络架构可能更类似于GAN中的生成器,解码器要输入通过编码器得到的低维向量,生成一张图片。而训练的目标是要将解码器得到的输出图片与编码器的输入图片越接近越好,这个任务也叫做重构reconstruction)。

2.2 为什么提出VAE

VAEVariational 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=13(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)=mP(m)P(xm)

其中, m ∼ P ( m ) m \sim P(m) mP(m) x ∣ m ∼ N ( μ m , Σ m ) x|m \sim N({\mu ^m},{\Sigma ^m}) xmN(μ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)=zP(z)P(xz)dz

其中, z ∼ N ( 0 , 1 ) z \sim N(0,1) zN(0,1) x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) xzN(μ(z),σ(z))

在这里插入图片描述

接下来就可以通过最大似然估计求解这个式子, L L L l o g log log后连乘变为连加,即 L = ∑ x log ⁡ P ( x ) L = \sum\limits_x {\log } P(x) L=xlogP(x)。由于 P ( z ) P(z) P(z)是已知的, P ( x ∣ z ) P(x|z) P(xz)未知,而 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) xzN(μ(z),σ(z)),于是我们真正需要求解的,是 μ \mu μ σ \sigma σ两个函数的表达式。又因为 P ( x ) P(x) P(x)通常非常复杂,导致 μ \mu μ σ \sigma σ难以计算,我们需要引入两个神经网络来帮助我们求解。

第一个网络是Decoder,它是求解 μ \mu μ σ \sigma σ两个函数的,这等价于求解 P ( x ∣ z ) P(x|z) P(xz),因为 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu (z),\sigma (z)) xzN(μ(z),σ(z))

在这里插入图片描述

第二个网络是Encoder,它求解的结果是 q ( z ∣ x ) q(z|x) q(zx) q q q可以代表任何分布。
在这里插入图片描述

值得注意的是,这里引入第二个神经网络Encoder的目的是,辅助第一个Decoder求解 P ( x ∣ z ) P(x|z) P(xz),这也是整个VAE理论中最精妙的部分,这里的连续变量 z z z也是我们常说的隐变量。

在这里插入图片描述

利用 ∫ z q ( z ∣ x ) d z = 1 \int_z {q(z|x)dz}= 1 zq(zx)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)=zP(z)P(xz)dz,需要求 P ( x ∣ z ) P(x|z) P(xz)使 log ⁡ P ( x ) \log P(x) logP(x)最大,现在引入 q ( z ∣ x ) {q(z|x)} q(zx),就变成了同时求 P ( x ∣ z ) P(x|z) P(xz) q ( z ∣ x ) {q(z|x)} q(zx)使得 log ⁡ P ( x ) \log P(x) logP(x)最大。

在这里插入图片描述

当固定住 P ( x ∣ z ) P(x|z) P(xz)时,因为 log ⁡ P ( x ) \log P(x) logP(x)只与 P ( x ∣ z ) P(x|z) P(xz)有关,所以 log ⁡ P ( x ) \log P(x) logP(x)的值是不会变的。此时去调节 q ( z ∣ x ) {q(z|x)} q(zx),使得 L b {L_b} Lb越来越高,同时KL散度越来越小,当我们调节到 q ( z ∣ x ) {q(z|x)} q(zx) P ( z ∣ x ) P(z|x) P(zx)完全一致时,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(zx)∣∣P(z))的最小值和 ∫ z q ( z ∣ x ) log ⁡ P ( x ∣ z ) d z \int_z {q(z|x)\log P(x|z)dz} zq(zx)logP(xz)dz的最大值。

第一项, − K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) - KL(q(z|x)||P(z)) KL(q(zx)∣∣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=1J(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(zx)logP(xz)dz)=Maximum(Eq(zx)[logP(xz)])

上述的这个期望,也就是表明在给定 q ( z ∣ x ) {q(z|x)} q(zx)(编码器输出)的情况下 P ( x ∣ z ) {P(x|z)} P(xz)(解码器输出)的值尽可能高,这其实就是一个类似于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 } αˉt x0+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 } αˉt x0+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) αt 1(xt1αˉt 1α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 xt1=αt 1(xt1αˉt 1α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=1mPθ(xi)取对数变为 log ⁡ ∏ i = 1 m P θ ( x i ) \log \prod \limits_{i = 1}^m {P_\theta }({x^i}) logi=1mPθ(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=1mlogPθ(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=1mlogPθ(xi))argθmax(mExPdata[logPθ(x)])=argθmax(ExPdata[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] xf(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(ExPdata[logPθ(x)])=argθmaxxPdata(x)logPθ(x)dx

第3步及第4步,凑出交叉熵-熵的形式,得到KL散度,如下图:
在这里插入图片描述

总结

本次周报通过对变分推理、变分自编码器以及扩散模型的深入分析,尝试理解复杂生成模型的数学原理。Diffusion模型涉及VAE的思想,VAE又包含了变分推断的思想,因此想搞明白Diffusion模型的具体原理,还有很多要学习的地方,力求将模型学习与之前学习的机器学习算法思想做到融会贯通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】递归函数变量的作用域

变量的作用域 全局变量:在整个程序内可以识别,且唯一。 局部变量:仅在当前函数内有效,比如main函数、用户自定义函数。 递归函数 指的是一类函数,函数调用自身,包括递推和回归。使用递归的方式&#xff0c…

JavaWeb 19 AJAX

目录 一、什么是AJAX 同步交互和异步交互 同步交互 异步交互 Ajax工作原理 Ajax实现方式 原生JavaScript方式进行ajax(了解): "我就是希望你好,就像很多人希望我好一样,特别简单,特别真挚。也不为了什么,就是希望…

从0开始深度学习(14)——模型选择、欠拟合、过拟合

① 模型在训练数据上拟合的比在潜在分布中更接近的现象,就叫过拟合(overfitting) ② 用于对抗过拟合的技术称为正则化(regularization) 1 训练误差和泛化误差 ①训练误差(training error)&…

Gee引擎配置微端后登录游戏黑屏怎么办?

GEE引擎配置微端后登录游戏黑屏怎么办?今天飞飞和你们分享GEE引擎配置微端后游戏黑屏的解决办法,希望可以帮助到你~ 1、端口不对 微端没有更新,玩家进入游戏是地图跟装备都看不见,是漆黑的,微端显示连接失败&#xff…

c语言字符串函数strstr,strtok,strerror

1,strtok函数的使用和模拟实现 char * strtok(char * str,const char * sep) 会有static修饰变量,有记忆功能,会保存字符串的位置,下次找再继续找。 1)sep参数指向一个字符串,它包含了0个或者多个由sep字符中一个或…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…

JUC并发编程进阶2:CompletableFuture

1 Future接口理论知识复习 Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等 举例:比如主线程让一个子线程去执行任务…

TCP(三次握手)和UDP(面向无连接)的原理以及区别

TCP(三次握手)和UDP(面向无连接)的原理以及区别 网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议。 概述 📡TCP(Transmission Control Protocol)是一种网络协议&#…

【opengles】笔记1:屏幕坐标与归一化坐标(NDC)的转换

参考资料 OpenGL希望在所有顶点着色器运行后,所有我们可见的顶点都变为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。…

【Python】NumPy(二):数组运算、数据统计及切片索引、广播机制

目录 Numpy数组 数组的基本运算 乘法 加法 数组的数据统计 平均值 中位数 最大值和最小值 求和 累积和 标准差 方差 切片和索引 索引 一维数组的索引 二维数组的索引 获取多个元素 布尔索引 切片 一维数组切片 二维数组切片 多维数组切片 广播机制 规则 …

Seata序列化优化

Apache Seata(incubating) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 本篇文章主要介绍Seata序列化实现优化。Seata对于网络传输数据,提供了多种序列化实现,包含Seata自身的序列化实现、…

一元n次多项式加法【数据结构-链表】

一元n次多项式定义如下: 其中Ai​为实数,i为不小于0的整数。在完成“一元n次多项式输入输出”题目的基础上实现一元n次多项式的加法。要求用链表实现上述一元n次多项式的操作。 输入格式: 有两个一元n次多项式,例如分别为: f(X)…

80.【C语言】数据结构之时间复杂度

目录 1.数据结构的定义 2.算法的定义 3.算法的效率 1.衡量一个算法的好坏的方法 例题:计算以下代码的循环次数 2.大O的渐进表示法 练习1:求下列代码的时间复杂度 练习2:求下列代码的时间复杂度 练习3:求下列代码的时间复杂度 练习4:求下列代码的时间复杂度 4.总结:计…

Leetcode—1115. 交替打印 FooBar【中等】(多线程)

2024每日刷题(180) Leetcode—1115. 交替打印 FooBar C实现代码 class FooBar { private:int n;sem_t fooSem;sem_t barSem;public:FooBar(int n) {this->n n;sem_init(&fooSem, 0, 1);sem_init(&barSem, 0, 0);}~FooBar() {sem_destroy(&…

mac安装brew时踩坑解决方案

安装包 mac上如果按照git等工具可能会使用brew,例如使用:$ brew install git命令,如果电脑没有按照brew,则会提示:zsh: command not found: brew 解决方案 需要我们打开brew的官网https://brew.sh/,复制…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#x…

得物App3D创新应用引关注,世界设计之都大会启幕

近日,2024世界设计之都大会(WDCC)在上海盛大启幕。此次大会以“设计无界 新质生长”为主题,汇聚了全球设计领域的精英与前沿成果,展现了设计作为新质生产力的巨大潜力。主场展览占据了整整3个楼面,总面积达…

进程间关系与守护进程

一、进程组 1.1、什么是进程组 提到进程的概念, 其实每一个进程除了有一个进程 ID(PID)之外 还属于一 个进程组。进程组是一个或者多个进程的集合, 一个进程组可以包含多个进程。 每一 个进程组也有一个唯一的进程组 ID(PGID), 并且这个 PG…

SCI英文文献阅读工具【全文翻译】【逐句翻译】

关注B站可以观看更多实战教学视频:hallo128的个人空间 SCI英文文献阅读工具【全文翻译】【逐句翻译】 1. 全文翻译【DeepL】 适用于泛读网址:https://www.deepl.com/zh/translator/files 1.1 前提 文档大小:pdf文档不超过5M(可先…

设计模式05-创建型模式(建造者/原型/单例模式/Java)

3.4 建造者模式 3.4.1 建造者模式的定义 动机:方便创建复杂对象(一个对象中包含多个成员变量) 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂…