随着 GPT-3 和 Stable Diffusion 的成功,AI技术进入大模型时代,Large Language Model (LLM) 和 Diffusiom Model (DM) 成为大模型的核心技术。作为为 Stable Diffusion 提供最重要技术突破的论文 High-Resolution Image Synthesis with Latent Diffusion Models,迄今引用已经达到6k+,具有重要的学习价值。本文为该工作的阅读笔记,主要记录笔者对工作的整体理解和一些细节展开。
1. 主要内容和贡献
基于 Diffusion Model 的生成式模型,因为是直接学习分布,因此比依赖对抗学习的GAN更稳定。除图像生成外,DM还实现了图像超分辨1、图像修复2等功能。但现有DM通常是在像素空间进行操作的,使得训练和推理需要的计算量都很大。该工作主要贡献有两点:
- 提出两阶段模型,即LDM:第一阶段通过 Auto Encoder 学习 latent space representation,将图像压缩至隐空间;第二阶段在隐空间训练DM,从而大大降低运算量。两阶段模型不仅降低了训练和推理阶段的运算量,还避免了联合训练需要平衡AE和DM训练目标的问题3。
- 设计了一种通用的添加 condition 的结构:在U-net内部feature中加入QKV Attention层,以cross attention的形式提取condition信息。该结构实现了class-conditional, text-to-image和layout-to-image等任务,都达到了SOTA,并且可以多模态地训练。
笔者个人认为,第一个贡献点是比较容易想到的。因为在Vahdat et. al.3的工作中,已经有了在latent space训练DM的方法,区别是在该工作中AE和DM是同时训练,因此训练时运算开销很大,还需要平衡两者的训练目标。于是很自然地想到可以将联合训练拆分为两阶段训练,这里的难点就变成了如何得到一个较好的encoder。作者们精心设计的训练方法使得encoder达到最小perceptual distortion,取得了足以服众的压缩效果,也是很亮眼。
第二个贡献点是很重大的,具备广泛的可控性让LDM一下子有了成为image领域大统一模型的潜力。如果只有第一个贡献点,本文将只是一个改进DM训练推理效率的一般文章,只能做image synthesis这一个任务。但作者们通过提出一个通用的添加condition的结构,实现了各种任务的统一:image synthesis, class-conditional image synthesis, text-to-image, layout-to-image, super-resolution, semantic synthesis, inpainting 等等。因此这篇读书笔记也会主要去关注第二个贡献点的实现细节。
2. 重要依赖组件
2.1 VQ-VAE
第一阶段的 encoder 和用以解码LDM输出的 decoder 的训练采用了VQ-VAE,即使用 Vector Quantilization(向量量化)进行图像的压缩表征,主要参考文献 Neural Discrete Representation Learning。原始图像 $W \times H \times 3$ 在经过若干层CNN后,成为 $w \times h \times c$,然后通过查询code book $K \times c$ 中最近元素得到每个位置feature的编码,并以code book中feature替换之,最后经过decoder还原图像。
训练过程中主要用到一个trick叫梯度直传,用以解决量化code不能反传梯度的问题,其简洁实现如下1
2
3def quantile(x, code_book):
z = nearest(x, code_book)
return x + tf.stop_gradient(z - x)
笔者推测选择VQ-VAE是因为量化离散能够提供较为鲁棒的decoder。该过程将LDM的输出重新投影到量化空间,对微小变动是鲁棒的,并且可以处理数值超出表示范围的情况。所以相比于连续空间,离散的量化空间能提供更高容错。
2.2 U-net
LDM的 diffusion model 中函数$\epsilon_\theta(x, t)$的结构主体为U-net。U-net首先由Ronneberger等人4在医疗图像分割中使用。在最新使用DM的图像生成1和图像超分辨2工作中$\epsilon_\theta(x, t)$正是使用U-net结构来表达。其中图像生成任务中U-net已经引入了attention结构,而超分辨任务中作为condition的低分辨率图像通过concatenation $X_t$进入$\epsilon_\theta(x, t)$。可以明显看到LDM的结构除引入cross attention外,其他部分和这两篇工作几乎一模一样。可以合理推测LDM作者们是在此基础上对U-net结构进行改进,引入了对 semantic feature 的 cross attention,从而得到一个更普适的 conditional U-net。Conditional U-net 的通用结构如下,区别在于如何结合context:1
2
3
4
5
6
7
8
9
10def unet_call(self, x, time_emb, context):
h = x
for module in self.down_blocks:
h = module(h, time_emb, context)
hs.append(h)
h = self.middle_block(h, time_emb, context)
for module in self.up_blocks:
h = tf.cat([h, hs.pop()], axis=-1)
h = module(h, time_emb, context)
return h
2.3 Diffusion Model
在diffusion model5出现之前,对于分布的学习主要依赖于GAN或者Norm Flow等方法。Diffusion model将任意的分布通过扩散过程(Diffusion Process)与高斯分布联系在一起,然后以Deep Learning的方法反解对应的随机微分方程,得到扩散过程的逆过程,从而可以从高斯分布还原原始分布。DM具有很高的稳定性和精确性,在提出之后迅速得到学术界的重视。
对于一个 sample $X_0$,$1 > \bar{\alpha}_0 > \bar{\alpha}_1 … > \bar{\alpha}_T \approx 0$描述了扩散过程中不同时刻的 $X_t \sim N(\sqrt{\bar{\alpha}_t} X_0, (1-\bar{\alpha}_t) I)$,训练阶段的优化目标为
推理阶段则有
其中$\alpha_t = \frac{1-\bar\alpha_t}{1-\bar\alpha_{t-1}}, z \sim N(0, I).$ OpenAI员工Lilian有关diffusion model的博客非常适合用于深入了解diffusion model.
2.4 Transformer
Transformer 结构最早由 Attention is All You Need6提出,通过注意力机制解决传统NLP解决方案中RNN网络结构不能处理长程关联的问题。不久后OpenAI和DeepMind各自基于该工作提出了General Pre-trained Transformer (GPT)和 BERT,刷新了NLP task的得分。不仅如此,OpenAI的后续研究7揭示Transformer具有相当好的规模化效应(scaling law),拥有可随着模型增大、训练数据变多、训练算力增长而变强的能力。随着2022年Chat-GPT的横空出世,证明了 Transformer 结构是一条可能通往通用人工智能(AGI)的新道路,对学术界外乃至整个社会都产生了颠覆性的冲击。LDM这篇文章就是和Chat-GPT同时代的工作,作者们敏锐地察觉到 Transformer 结构和LLM所蕴含的通用能力,便将其引入图像生成领域,促成了 Stable Diffusion 的诞生。
3. 实现细节和结果
3.1 Encoder的预训练
LDM的Encoder-Decoder训练是基于同一作者的早期工作8。不同于使用基于像素的$L_2$或者$L_1$损失,作者使用了一种结合perceptual distortion和patch-based adversarial的训练方法。这种方法能够保证重建图像落在真实数据流形上,且避免了基于像素的损失会产生的模糊结果。
$E, G, Z, D$ 分别表示Encoder, Generator(Decoder), Code Book和Discriminator。$\hat{x} = G(z) = G(VQ(E(x), Z))$ 为经编码后重建的图像,则VQ-VAE的优化目标为
此处$\mathcal{L}_{rec}(x, \hat{x})$为重建误差,在VQ-VAE论文中为pixle-wise $L_2$ norm,但此处被替换为perceptual loss9,即将图像输入VGG-net等深度神经网络后观察各feature layer的加权$L_2$距离。Patch-based adversaial 训练loss为
则总优化问题定义为
其中$\lambda = \frac{\nabla_{G_L}[\mathcal L_{rec}]}{\nabla_{G_L}[\mathcal L_{GAN}] + \delta}$,$\nabla_{G_L}$表示Generator最后一层的梯度,用以平衡两个优化目标。
从作者在Github公开的repo CompVis/latent-diffusion
可知最终用于大多数任务(text-to-image, layout-to-image, inpainting, …)的设定为VQ-VAE。code book大小为 $8192 \times 3$;降采样倍率为4;Encoder内部结构为3层down-sample layer,Res-Attn-Res中间层,还有kernel=3的conv输出层;每层 down-sample layer 中有两个 residual 结构;每降采样一层,channel数就涨一倍,从而保证每一层总feature数基本不变。
3.2 Conditional Diffusion Model的结构
构成$\epsilon_\theta(x, t)$的U-net基础组成模块除ResnetBlock外,就是AttentionBlock。AttentionBlock有两种结构,一种是self-attention,另一种是cross-attention。AttentionBlock通常置于U-net每一层的最后,输入为$H\times W \times C$,在attention运算时,将每个像素位上维度为$C$的vector作为一个token。因此 self-attention 时是 ,而 cross-attention 时 $Q=(H*W)\times C,K=V= M \times C$ 。
U-net 的 condition 输入分为两种:图像形式(sematic map, low-resolution image, …),语义形式(text, layout, class)。
- 图像形式的condition因为和输入的latent code map具有相同的长宽,因此可以直接在channel层concatenate即可。
- 语义形式的condition首先经过一个LLM生成 $M \times C$ 的token,然后通过AttentionBlock和U-net产生联系。
U-net还有一个输入是time embedding,其实现为在每个ResnetBlock中通过MLP层将time映射为一个embedding,然后concatenate到feature的每一个像素位后。
笔者比较奇怪的一点是,其他的使用Transformer进行图像处理的模型比如ViT系列,都是会给每个图像patch一个positional embedding,而奇怪的是LDM和其前序工作中使用attention时都没有给token以position位置信息,不知道为何这么做,也不知道这样一来attention如何区别不同位置的信息。
4. 未来发展
未来的发展方向有两个:
- 寻找更加scalable的$\epsilon_\theta(x)$结构,能够吸收更多的数据、随算力的增长而成长。
- 从2D走向2D+time,即对视频进行类似的操作。
幸运的是这两个发展方向已经成为了现实:2024年2月,SORA10的发布标志着LDM生成长视频能力的成功。在诸多分析报告中,大家一致推测SORA通过使用Diffusion Transformers11获得更强的scale能力,并将视频tokenize化为三维tensor进行了处理,但即便进行了latent representation的压缩,SORA的训练和推理运算量也十分庞大。
Reference
- 1.Jonathan Ho, Ajay Jain, and Pieter Abbeel. Denoising diffusion probabilistic models. In NeurIPS, 2020. ↩
- 2.Chitwan Saharia, Jonathan Ho, William Chan, Tim Salimans, David J. Fleet, and Mohammad Norouzi. Image super-resolution via iterative refinement. CoRR, abs/2104.07636, 2021. ↩
- 3.Arash Vahdat, Karsten Kreis, and Jan Kautz. Score-based generative modeling in latent space. CoRR, abs/2106.05931, 2021 ↩
- 4.Olaf Ronneberger, Philipp Fischer, and Thomas Brox. U-net: Convolutional networks for biomedical image segmen- tation. In MICCAI (3), volume 9351 of Lecture Notes in Computer Science, pages 234–241. Springer, 2015. ↩
- 5.Jascha Sohl-Dickstein, Eric A. Weiss, Niru Maheswaranathan, and Surya Ganguli. Deep unsupervised learning using nonequilibrium thermodynamics. CoRR, abs/1503.03585, 2015. ↩
- 6.Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. In NIPS, pages 5998–6008, 2017. ↩
- 7.Jared Kaplan, Sam McCandlish, Tom Henighan, et al. Scaling laws for neural language models. CoRR, abs/2001.08361, 2020. ↩
- 8.Patrick Esser, Robin Rombach, and Bj¨orn Ommer. Taming transformers for high-resolution image synthesis. CoRR, abs/2012.09841, 2020. ↩
- 9.Richard Zhang, Phillip Isola, Alexei A Efros, Eli Shechtman, and Oliver Wang. The Unreasonable Effectiveness of Deep Features as a Perceptual Metric. In CVPR, 2018. ↩
- 10.https://openai.com/sora ↩
- 11.William Peebles, and Saining Xie. Scalable Diffusion Models with Transformers. Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023: 4195-4205. ↩