生成扩散模型漫谈:信噪比与大图生成

ccbc42a3e2640f9ac887ed6d50fe0693.gif

©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 科学空间

研究方向 | NLP、神经网络

盘点主流的图像扩散模型作品,我们会发现一个特点:当前多数做高分辨率图像生成(下面简称“大图生成”)的工作,都是先通过 Encoder 变换到 Latent 空间进行的(即 LDM,Latent Diffusion Model [1] ),直接在原始 Pixel 空间训练的扩散模型,大多数分辨率都不超过 6464,而恰好,LDM 通过 AutoEncoder 变换后的 Latent,大小通常也不超过 6464。

这就自然引出了一系列问题:扩散模型是不是对于高分辨率生成存在固有困难?能否在 Pixel 空间直接生成高分辨率图像?

论文《Simple diffusion: End-to-end diffusion for high resolution images》[2] 尝试回答了这个问题,它通过“信噪比”分析了大图生成的困难,并以此来优化 noise schdule,同时提出只需在最低分辨率 feature 上对架构进行 scale up、多尺度 Loss 等技巧来保证训练效率和效果,这些改动使得原论文成功在 Pixel 空间上训练了分辨率高达 1024*1024 的图像扩散模型。

c8578debe07cda9fa5cc83c0bd0dde7a.png

LDM回顾

在进入正题之前,我们不妨先反过来想一想:为什么 LDM 能成功成为主流的扩散模型做法?笔者认为,主要原始是两方面:

1. 不管是应用还是学术,用 LDM 的主要原因想必是效率:当前主流的工作都直接重用了 LDM 论文所开源的训练好的 AutoEncoder,它的 Encoder 部分会将 512512 的图像变成了 6464 的 Latent,相当于说只用到 6464 分辨率这个级别的算力和时间,就可以生成 512512 的图像,这个效率显然是非常吸引人的;

2. LDM 契合了 FID 这个指标,这让它看起来是效果无损的:FID 全称是 “Fréchet Inception Distance”,其中 Inception 是指用 ImageNet 预训练的 InceptionV3 模型作为 Encoder 编码图片,然后假设编码特征服从高斯分布来算 距离,而 LDM 也是先 Encoder 编码,两个 Encoder 虽然不完全相同,但也有一定共性,因此在 FID 上表现为几乎无损。

我们还可以稍微展开一下。LDM 的 AutoEncoder 在训练阶段组合了很多内容——它的重构 Loss 并不只有常规的 MAE 或者 MSE,还包括对抗 Loss 和 Perceptual Loss,对抗 Loss 用来保证重构结果的清晰度,而 Perceptual Loss 用来保证重构结果的语义和风格的相似性。

Perceptual Loss [3] 跟 FID 很相似,都是用 ImageNet 模型的特征计算的相似性指标,只不过用的不是 InceptionV3 而是 VGG-16,由于训练任务的相似性,可以猜测两者特征有很多共性,因此 Perceptual Loss 的加入变相地保证了 FID 的损失尽可能少。

此外,LDM 的 Encoder 对原始图像来说是降维的,比如原始图像大小为 5125123,直接 patchify 的话结果是 6464192,但 LDM 的 Encoder 出来的特征是 64644,降低到了 1/48,同时为了进一步降低编码特征的方差,避免模型“死记硬背”,LDM 还对 Encoder 出来的特征加了相应的正则项,可选的有 VAE 的 KL 散度项或 VQ-VAE [4] 的 VQ 正则化。

降维和正则的设计,都会压缩特征的多样性,提高特征的泛化能力,但也会导致重构难度增加,最终导致了有损的重构结果。

到这里,LDM 能成功的原因其实就“豁然开朗”了:“降维 + 正则”的组合,降低了 Latent 的信息量,从而降低了在 Latent 空间学习扩散模型的难度,同时 Perceptual Loss 的存在,保证了重构虽然有损但 FID 几乎无损(Perceptual Loss 的 Encoder 跟 FID 一样都用 InceptionV3 理论上更好)。

这样一来,对于 FID 这个指标来说,LDM 几乎就是免费午餐了,因此不管是学术和工程都乐意沿用它。

b8f919d4ed199f627e34f85dec508dea.png

信噪之比

尽管 LDM 简单高效,但它毕竟是有损的,其 Latent 只能保持宏观上的语义,局部细节可能会严重缺失。而在之前的文章《“闭门造车”之多模态模型方案浅谈》中,笔者表达过一个观点:当作为输入时,图像最好的表示方式就是原始 Pixel 数组。基于这个观点,笔者最近都比较关注直接在 Pixel 空间上训练的扩散模型。

然而,将低分辨率(比如 6464)图像的扩散模型配置直接应用于高分辨率(比如 512512)的大图生成时,会存在算力消耗过大、收敛速度太慢等问题,而且效果上也比不上 LDM(至少 FID 指标如此),Simple diffusion 逐一分析了这些问题并提出了相应的解决方案。

其中,笔者认为利用“信噪比(Signal-to-Noise Ratio,SNR)”的概念来分析高分辨率扩散模型的学习效率低问题最为精彩。

具体来说,Simple diffusion 观察到,如果我们给高分辨率图像加上某个方差的 noise,那么相对于加上同样方差的 noise 的低分辨率图像来说,它的信噪比其实更高,原论文的 Figure 3 非常直观地演示了这一点,如下图所示。

第一行图片,是由 512512 的图片加了特定方差的 noise 后再降采样(平均 Pooling)到 6464 的,而第二行则是直接在 64*64 的图片加上同样方差的 noise,很明显第一行的图片更加清晰,也就是相对信噪比更高了。

34a8d63ae4ad4c199948b2eae38608bb.png

▲ 同一noise不同分辨率的信噪比

所谓“信噪比”,顾名思义即“信号与噪声的强度之比”,信噪比更高(即噪声的占比更低)意味着去噪更容易,换言之训练阶段 Denoiser 面对的更多是简单样本,但实际上大图生成的难度显然更高,也就是说我们的目标是一个更难的模型,但却给了更简单的样本,因此导致了学习效率的低下。

026970e41cd642b95f02f2eef4253560.png

向低看齐

我们也可以从数学上描述这一点。沿用本系列的记号,通过加噪来构造 的运算可以表示为

d01460267d0d27207c2789e86a1ca9ee.png

其中 就称为 noise schedule,满足 ,此外一般来说它们还有额外的约束,比如在 DDPM 中通常是 ,本文将沿用这个约束。

对于一个随机变量来说,信噪比是均值平方与方差之比。给定 , 的均值显然是 ,方差则是 ,于是信噪比为 ,由于我们总是在给定 下讨论,因此我们也可以简单地说信噪比就是 .

当我们对 使用 大小的平均 Pooling 时,每个 的 patch 通过取平均变成了一个标量,即

6a9756c07b3d002edd55a5bff6736b53.png

平均 Pooling 不改变均值,但会降低方差,从而提高信噪比,这是因为正态分布的可加性得出

7a111e1e45031122c16cf9eba7dfb3e1.png

所以在同一 noise schedule 下,如果我们将高分辨率图像通过平均 Pooling 来对齐低分辨率,那么就会发现信噪比更高,是原来的 倍:

3acfd8e70a709eb5f9a0481fe0b35604.png

反过来想,如果我们已经有一个在低分辨率图像上调好了的 noise schedule ,那么当我们想要 scale up 到更高分辨率时,应该要调整 noise schedule 为 ,使得它降采样到低分辨率后,其信噪比能够跟已经调好的低分辨率的 noise schedule 对齐,这样才能最大程度上“传承”已经低分辨率扩散模型的学习效率,即

49d82a7ebf24b33ab89d885a85b6b40d.png

如果加上约束 ,那么就可以从 中唯一地解出 。这就解决了高分辨率扩散的 noise schedule 设置问题。

af7110ed82fc876a9e222f593d25f734.png

架构拓展

为了做好大图的扩散生成,除了要调整 noise schedule 之外,我们还需要把架构也 scale up 上去,因为前面我们也已经说了,大图生成是一个更难的问题,因此理应需要更加重量级的架构。

扩散模型常用的就是 U-Net [5] 或者 U-Vit [6],两者都是先逐渐降采样然后逐渐上采样,比如 512512 的输入,一般先进行一个 block 的运算,然后降采样到 256256,接着进行新一个 block 的运算,在降采样到 128128,依此类推,降采样到一个最低的分辨率 1616,接下来再次重复这个过程,但将降采样改为上采样,直到分辨率恢复 512*512。

默认设置下,我们会将参数平均分到每一个 block 中,但这样一来靠近输入和输出的 block 由于输入尺寸都很大,因此计算量会急剧增加,导致模型训练效率低下甚至不可行。

Simple diffusion 提出了两个应对方案:

第一,它提出可以直接在第一层(而不是第一个 block,每个 block 有多个层)之后就降采样,并且考虑一步到位低降到 128128 甚至 6464,最后输出的时候,也是在最后一层之前才从 6464 或者 128128 直接上采样到 512512,这样模型的大部分 block 所处理的分辨率都降低了,从而降低了整体计算量;

第二,它提出将模型所 scale up 的层都放到最低分辨率(即 1616)之后,而不是平摊到每一个分辨率的 block,即新增的层处理的都是 16*16 的输入,包括 Dropout 也都只加入到低分辨率的层中,这样一来分辨率增加带来的计算压力就明显减少了。

此外,为了进一步稳定训练,论文提出了“多尺度Loss”的训练目标。默认情况下,扩散模型的 Loss 等价于 MSE 损失

d84c247a7a5e7e22e8aec6f80cf02514.png

Simple diffusion 将它泛化为

89df88a92f34a24a1d7daa901d13a24d.png

其中 是通过平均 Pooling 将输入变换到 的下采样算子,原论文取了多个 对应的 Loss 进行平均,作为最终的训练目标。这个多尺度 Loss 的目标也很明显,跟通过信噪比对齐来调整 noise schedule 一样,都是保证训练出来的高分辨率扩散模型至少不差于直接训练的低分辨率模型。

至于实验部分,大家自行看原论文就好。Simple diffusion 实验的最大分辨率是 1024*1024(在附录中提到),效果都尚可,并且对比实验表明上述提出的一些技巧都是有提升的,最终直接在 Pixel 空间中训练出来的扩撒模型,相比 LDM 也取得了有竞争力的效果。

1ced19d51b8897f45ac3bb926aa28b68.png

文章小结

在这篇文章中,我们介绍了 Simple Diffusion,这是一篇探索如何直接在 Pixel 空间中端到端地训练图像扩散模型的工作,利用了信噪比的概念介绍了高分辨率扩散模型的训练效率低问题,并由此来指标调整新的 noise schedule,以及探索了如何尽可能节约算力成本地 scale up 模型架构。

outside_default.png

参考文献

outside_default.png

[1] https://arxiv.org/abs/2112.10752

[2] https://arxiv.org/abs/2301.11093

[3] https://arxiv.org/abs/1603.08155

[4] https://kexue.fm/archives/6760

[5] https://arxiv.org/abs/1505.04597

[6] https://arxiv.org/abs/2209.12152

更多阅读

8e8f9d6080fc6fe41f78794a232596ab.png

151f0f5ae48cd32b709ee71e85821d57.png

5f3cb8aa0d7fa076577e2cb7e3f8cc29.png

e4bf5b01c66a57e1abc8700b1c1e4907.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

0c9035cc89b0dfb6ec8a74ed5f8c44ce.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

04cb0b7c8d1639309e3af44d95e4a407.jpeg

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值