- Q1 论文试图解决什么问题?
-
- Diffusion往往会有巨大的计算成本。目前对于Diffusion的压缩方法往往伴随着大量的重新训练,给可行性和成本带来了挑战。
- Q2 这是否是一个新的问题?
- 是的。目前对于Diffusion的压缩方法几乎没有不需要重新训练的。
- Q3 这篇文章要验证一个什么科学假设?
- Diffusion在顺序推理去噪过程中,相邻时间步的高阶特征是极度相似的,因此有大量的计算在时间步的角度是冗余的。
- Q4 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
- 减少采样步数从而加速推理:以DDIM为代表;
- 传统的模型压缩方法:剪枝、蒸馏、量化;
- Q5 论文中提到的解决方案之关键是什么?
- 观察到:
- 主分支需要大量计算,而跳跃连接只需要经过一些浅层;
- 主分支中突出的特征相似性,使得计算结果可以重复使用;
- 利用U-Net的跳跃连接,将丰富的、更加低级的信息从 $D_i$ 传到 $U_i$ ,并接收上一个上采样块缓存的 $U_{i+1}^{(t+1)}$ 的信息代替当前时间步的 $U_{i+1}^{(t)}$ ,避免了冗余信息的重复计算。
- 同一个缓存可以在多个时间步中使用:
- 均匀Deep Cache:每一步的计算结果重用 $N-1$ 次。总共完整推理 $T / N$ 次。
- 非均匀Deep Cache:靠近开始和结束距离短,中间距离长。
- 观察到:
- Q6 论文中的实验是如何设计的?
- 主要实验:基于LDM
- 比较原始LDM、两个具有代表性的加速推理方法作为baseline;
- 对比均匀Cache、非均匀Cache,取 $N=\{2,3,5,10,20\}$ 步一次缓存;
- 对比计算量、吞吐量、FID、精度等指标;
- 与快速采样方法(DDIM,PLMS)进行对比:保持吞吐量一致或略高,比较FID;
- 消融实验:DeepCache 可以理解为在 DDIM 的 $K$ 个时间步的基础上,增加了 $(N-1)K$ 个浅层网络推理步骤,对噪声图像进行了更多的更新。发现增加多个时间步的浅层推理与DeepCache深层特征后,精度有所提升。
- 主要实验:基于LDM
- Q7 用于定量评估的数据集是什么?代码有没有开源?
- CIFAR10, LSUN-Bedroom, LSUNChurches, ImageNet, MS-COCO 2017 and PartiPrompts。代码已开源。
- Q8 论文中的实验及结果有没有很好地支持需要验证的科学假设?
- 是的。本文中,采取 $N=5$ 设置时,能够在加速4倍推理速度的同时,几乎保证精度不变;同时,在DDIM上面的消融实验也证明了浅层特征的重要性、深层特征的冗余性。
- Q9 这篇论文到底有什么贡献?
- 是首个在无需训练的情况下,大大加速现有Diffusion模型推理速度,并且几乎没有精度损失的工作。同时指出了一个重要的观察:相邻多个时间步中,深层特征是高度冗余的,不应当花费大量的计算资源来重复计算。论文为Diffusion加速提供了一个全新视角。
- Q10 下一步呢?有什么工作可以继续深入?
- 这个思路能否引导现有的各种Diffusion训练?
- 首先想到的是,如果把U-Net中,「这个大头部分在多个连续时间步的输出」作为一个先验信息,那么就可以每 $N$ 个时间步训练一次这个大头部分(也就是满足约束条件数变为 $1/N$,大大降低训练难度)。但是这个大头部分的输入输出部分是通过U-Net浅层的编码器和解码器维护的,并没有一个数学表达式来生成训练数据。同理,对于浅层部分,$D_i$ 和 $U_i$ 也是没有表达式生成的,也无法训练。
- 由上面的分析可以看出,尽管深层部分可以 $N$ 个时间步训练一次、浅层部分需要每个时间步都训练,但是二者是高度耦合的。因此从头训练一个这样的模型难度较高。但是我们一旦拥有了一个训练好的浅层部分或者深层部分,另一半的输入输出就被解耦出来、可以进行训练了。显然,想办法获得一个训练好的浅层部分,然后高效训练深层部分,是一个可行的方法。问题来到如何得到这个训练好的浅层部分。
- 根据这个思路,可以想到做一个蒸馏(微调)。一个粗糙的pipeline:
- 首先确定Cache的比例与位置,以 $N=20$ 为例,冻结浅层部分参数,先对深层部分做蒸馏。深层部分只需要满足 $T/N$ 组约束,可以设计的比原先的U-Net轻量化很多。
- 然后对浅层部分做微调,使得它们在DeepCache的条件下尽量恢复原先的输出。
- 如果这样做出来了,有两个好处:第一,深层部分的架构可以轻量化;第二,深层部分只在极少数时间步进行推理,推理效率变高。