Diffusion_Autoencoder:扩散自编码器

1 前言

​ 本期内容,我们讲Diffusion Autoencoder,这是一个基于自编码器和扩散模型组合而成的模型,主要为了通过他们,去学习到图像的语义表征。然后再使用这些表征去用于其他下游任务。

​ 视频讲解:Diffusion AutoEncoder:扩散自编码器

​ 参考论文:[Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

2 引入

​ 在一般的扩散模型中,我们已经可以和GAN、VAE等模型那般,去合成质量不错的图像了。然而,扩散模型与GAN、VAE还有一个非常显著的区别。在GAN和VAE中,往往可以将图像的语义信息提取出来(如StyleGAN中的风格编码w、VAE中的编码向量);而对于Diffusion便没有诸如此类的东西,整个生成过程只是依赖于扩散时间步T。因此,该工作的目的,就是想要利用Diffusion,去学习到图像的语义信息。以用于其他下游任务。

3 DDIM

​ 在讲解之前,让我们先来回顾一下DDIM。在DDIM中,设定去噪采样公式为( x i → x i − 1 x_i \to x_{i-1} xixi1
x i − 1 = α ˉ i − 1 x i − 1 − α ˉ i ϵ θ ( x i , i ) α ˉ i + 1 − α ˉ i − 1 − σ i 2 ϵ θ ( x i , i ) + σ i z (1) x_{i-1}=\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_\theta(x_i,i)+\sigma_iz\tag{1} xi1=αˉi1 αˉi xi1αˉi ϵθ(xi,i)+1αˉi1σi2 ϵθ(xi,i)+σiz(1)
​ 其中,里面的 σ i \sigma_i σi是由我们自己去选定的,当 σ i = 0 \sigma_i=0 σi=0时,即为确定性采样——见Eq.(2)
x i − 1 = α ˉ i − 1 x i − 1 − α ˉ i ϵ θ ( x i , i ) α ˉ i + 1 − α ˉ i − 1 ϵ θ ( x i , i ) (2) x_{i-1}=\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i)}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}}\epsilon_\theta(x_i,i)\tag{2} xi1=αˉi1 αˉi xi1αˉi ϵθ(xi,i)+1αˉi1 ϵθ(xi,i)(2)
​ Eq.(2)和Eq.(1)是概率分布 q ( x i − 1 ∣ x i , x 0 ) q(x_{i-1}|x_i,x_0) q(xi1xi,x0)重参数化的结果,Eq.(2)对应的概率密度表示为
q ( x i − 1 ∣ x i , x 0 ) ∼ N ( x i − 1 ∣ α ˉ i − 1 x i − 1 − α ˉ i ϵ i α ˉ i + 1 − α ˉ i − 1 − σ i 2 ϵ i , 0 ) (3) q(x_{i-1}|x_i,x_0)\sim N(x_{i-1}|\sqrt{\bar\alpha_{i-1}}\frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_i}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i-1}-\sigma_i^2}\epsilon_i,0)\tag{3} q(xi1xi,x0)N(xi1αˉi1 αˉi xi1αˉi ϵi+1αˉi1σi2 ϵi,0)(3)
​ 与DDPM一样,DDIM的优化目标为
L sample = ∥ ϵ i − ϵ θ ( x i , i ) ∥ 2 2 (4) \mathcal{L}_{\text{sample}}=\Vert \epsilon_i-\epsilon_\theta(x_i,i) \Vert^2_2\tag{4} Lsample=ϵiϵθ(xi,i)22(4)
​ 其中, x i = α ˉ i x 0 + 1 − α ˉ i ϵ i x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{1-\bar\alpha_i}\epsilon_i xi=αˉi x0+1αˉi ϵi

4 条件生成

​ 在扩散模型的条件生成当中,我们还曾提到过,可以在预测 ϵ θ \epsilon_\theta ϵθ的网络中,多输入一个条件c(比如文本),以让模型关注到条件信息,按条件生成对应的图像
L c = ∥ ϵ i − ϵ θ ( x i , c , i ) ∥ 2 2 (5) \mathcal{L}_{\text{c}}=\Vert \epsilon_i-\epsilon_\theta(x_i,c,i) \Vert^2_2\tag{5} Lc=ϵiϵθ(xi,c,i)22(5)
​ 使用Eq.(5)进行训练,当模型收敛,那么模型便可以学习到去运用条件信息。而条件在输入到模型训练的过程中,也会被编码成模型可以识别的条件信息。

5 Diffusion Autoencoder

​ 对于条件c,他可以是图像的标签或者其他的东西。那么,假如说条件c是图像的编码向量呢?即假设原始图像的编码向量为
z sem = Enc ( x 0 ) z_{\text{sem}}=\text{Enc}(x_0) zsem=Enc(x0)
​ 其中 x 0 x_0 x0是原图像,Enc是一个编码器,他的输入是图像,输出的编码向量,稍后我们再说这个编码器的结构。

​ 我们让条件c= z sem z_{\text{sem}} zsem,即Eq.(5)可以变换为
L z = ∥ ϵ i − ϵ θ ( x i , z sem , i ) ∥ 2 2 (6) \mathcal{L}_{\text{z}}=\Vert \epsilon_i-\epsilon_\theta(x_i,z_{\text{sem}},i) \Vert^2_2\tag{6} Lz=ϵiϵθ(xi,zsem,i)22(6)
​ 使用Eq.(6)去训练一个条件扩散模型。那么当模型收敛,便正如我们前面所说,这个编码向量 z sem z_{\text{sem}} zsem就会被当作是条件信息,就会被模型使用预测去噪后的图像。同时,模型也会学习到这个编码向量。而这个编码向量,正是图像的语义信息,也正是我们所需要的。他的流程图可见下图

在这里插入图片描述

​ 里面的Semantic encoder就是我们上面提到的编码器,在训练的过程中,是编码器和 ϵ θ \epsilon_\theta ϵθ一起去训练。当模型收敛,Semantic encoder这个编码器就可以提取语义信息,我们只需要把图像输入进这个编码器,所得到的编码向量就是我们需要的语义表征

6 条件输入Unet

​ 在Diffusion Autoencoder当中,预测 ϵ θ \epsilon_\theta ϵθ的网络使用的仍是Unet,但是这个Unet是一个修改版,具体请看参考【1】。那么如何将条件编码向量 z sem z_{\text{sem}} zsem注入到Unet网络当中呢?论文使用的是自适应组归一化进行注入(AdaGN)
AdaGN ( h , t , z sem ) = z s ( t s GroupNorm ( h ) + t b ) \text{AdaGN}(h,t,z_{\text{sem}})=z_s(t_s\text{GroupNorm}(h)+t_b) AdaGN(h,t,zsem)=zs(tsGroupNorm(h)+tb)
​ 其中, h h h是Unet对应的特征图输出,GroupNorm是组归一化, z s = Affine ( z s e m ) z_s=\text{Affine}(z_{sem}) zs=Affine(zsem),Affine是仿射变换。( t s t_s ts t b t_b tb)是先对时刻t进行正弦编码(记作 ψ \psi ψ)后再进行MLP映射得到的,即 ( t s , t b ) = MLP ( ψ ( t ) ) (t_s,t_b)=\text{MLP}(\psi(t)) (ts,tb)=MLP(ψ(t))

7 Semantic encoder

​ Semantic encoder是语义编码器,他的架构使用Unet的解码器的前半部分

8 图像重建

​ 对于前向加噪过程,有
x i = α ˉ i x 0 + 1 − α ˉ i ϵ x i + 1 = α ˉ i + 1 x 0 + 1 − α ˉ i + 1 ϵ (7) x_i=\sqrt{\bar\alpha_i}x_{0}+\sqrt{1-\bar\alpha_i}\epsilon\\ x_{i+1}=\sqrt{\bar\alpha_{i+1}}x_{0}+\sqrt{1-\bar\alpha_{i+1}}\epsilon\tag{7} xi=αˉi x0+1αˉi ϵxi+1=αˉi+1 x0+1αˉi+1 ϵ(7)
​ 把Eq.(7)的第一个等式移项,可得
x 0 = x i − 1 − α ˉ i ϵ α ˉ i (8) x_0 = \frac{x_i-\sqrt{1-\bar\alpha_i}\epsilon}{\sqrt{\bar\alpha_i}}\tag{8} x0=αˉi xi1αˉi ϵ(8)
​ 将Eq.(8)代入至Eq.(7)的第二个等式,可得
x i + 1 = α ˉ i + 1 x i − 1 − α ˉ i ϵ α ˉ i + 1 − α ˉ i + 1 ϵ (9) x_{i+1}=\sqrt{\bar\alpha_{i+1}}\frac{x_i-\sqrt{1-\bar\alpha_i}\epsilon}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i+1}}\epsilon\tag{9} xi+1=αˉi+1 αˉi xi1αˉi ϵ+1αˉi+1 ϵ(9)
​ 我们可以构造这样的一个形式,原图像–>加噪–>加噪图像–>去噪–>原图像

​ 也就是说,我们希望,把原始图像加噪之后,再去噪,能够得到原图像。想要达到这种效果,那么里面的随机噪声便不能够再去随机采样,而是使用网络去预测,那么Eq.(9)就变成Eq.(10)


x i + 1 = α ˉ i + 1 x i − 1 − α ˉ i ϵ ( x i , i , z sem ) α ˉ i + 1 − α ˉ i + 1 ϵ ( x i , i , , z sem ) (10) x_{i+1}=\sqrt{\bar\alpha_{i+1}}\frac{x_i-\sqrt{1-\bar\alpha_i}\epsilon(x_i,i,z_{\text{sem}})}{\sqrt{\bar\alpha_i}}+\sqrt{1-\bar\alpha_{i+1}}\epsilon(x_i,i,,z_{\text{sem}})\tag{10} xi+1=αˉi+1 αˉi xi1αˉi ϵ(xi,i,zsem)+1αˉi+1 ϵ(xi,i,,zsem)(10)
​ 记
f ( x i , i , , z sem ) = x i − 1 − α ˉ i ϵ θ ( x i , i , z sem ) α ˉ i f(x_i,i,,z_{\text{sem}})= \frac{x_{i}-\sqrt{1-\bar\alpha_i}\epsilon_\theta(x_i,i,z_{\text{sem}})}{\sqrt{\bar\alpha_i}} f(xi,i,,zsem)=αˉi xi1αˉi ϵθ(xi,i,zsem)
​ 最终
x i + 1 = α ˉ i + 1 f ( x i , i , , z sem ) + 1 − α ˉ i + 1 ϵ ( x i , i , , z sem ) (11) x_{i+1}=\sqrt{\bar\alpha_{i+1}}f(x_i,i,,z_{\text{sem}})+\sqrt{1-\bar\alpha_{i+1}}\epsilon(x_i,i,,z_{\text{sem}})\tag{11} xi+1=αˉi+1 f(xi,i,,zsem)+1αˉi+1 ϵ(xi,i,,zsem)(11)
​ Eq.(11)这个过程在论文中被称为 Stochastic encoder 。

9 Diffusion Autoencoder 采样生成

​ 由于有 z sem z_{\text{sem}} zsem是原始图像编码的,在Diffusion采样过程中,我们是没有 z sem z_{\text{sem}} zsem的,故而我们没有办法进行随机采样生成图像,仅仅能够用于图像重建或者语义编码。

​ 因此,想要进行随机采样生成,我们就需要生成一个 z sem z_{\text{sem}} zsem,如何生成呢?假如说 z sem z_{\text{sem}} zsem这个值服从某个简单的分布就好了,比如服从标准高斯分布。但是若是强行干预 z sem z_{\text{sem}} zsem让他服从标准高斯,又恐怕会难以学习到更加丰富的语义信息,毕竟语义信息总是复杂的,用一个高斯分布去囊括确实不妥。另一个办法就是用GAN去拟合 z sem z_{\text{sem}} zsem所服从的分布。但话又说回来了,GAN是出了名的不稳定。于是,论文便提出了另一种方法——构造一个Latent DDIM去学习 z sem z_{\text{sem}} zsem

​ 一般来说,Diffusion是把一张图像加噪成一个标准高斯分布,我们同样可以将 z sem z_{\text{sem}} zsem当作是一张图像,然后进行加噪,然后进行训练。当模型收敛,只需要从标准高斯分布中采样一个噪声,然后慢慢去噪,就可以得到 z sem z_{\text{sem}} zsem,即
L latent = ∥ ϵ i − ϵ ω ( z sem,i , i ) ∥ 1 (12) \mathcal{L}_{\text{latent}}=\Vert \epsilon_i- \epsilon_{\omega}(z_{\text{sem,i}},i) \Vert_1\tag{12} Llatent=ϵiϵω(zsem,i,i)1(12)
​ 其中, z sem,i = α ˉ i z sem + 1 − α ˉ i z_{\text{sem,i}}=\sqrt{\bar\alpha_i}z_{\text{sem}}+\sqrt{1-\bar\alpha_i} zsem,i=αˉi zsem+1αˉi .。我们注意到,Eq.(12)使用的是L1范数。论文发现这里使用L1范数是优于L2范数的。

10 结束

​ 好了,本篇文章到此为止,还有一些网络架构的内容,本文主要讲Diffusion Autoencoder的原理,相关的网络架构不在涉及范畴,感兴趣的可自行阅读论文。如果问题,还望指出,阿里嘎多!

在这里插入图片描述

参考文献

[1] Diffusion Models Beat GANs on Image Synthesis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值