IT 论文精读 · PAPER 28

Denoising Diffusion Probabilistic Models(DDPM)

Ho, Jain & Abbeel · UC Berkeley · NeurIPS 2020

EN →

这篇论文干了什么?

今天你打一句话就能让 AI 画出一张画(Midjourney、Stable Diffusion、DALL·E 这一类),背后那套方法叫扩散模型(diffusion model)。2020 年,伯克利的三个人(Ho、Jain、Abbeel)写了这篇 DDPM,把一个原本效果平平的老想法调通了:让机器从一团电视雪花点里,一点点「擦」出一张从没存在过的照片。它的画质第一次超过当时最强的对手,此后几乎所有 AI 出图、出视频的产品都建在它上面。

打个比方

在它之前,教机器画画的主流办法是「造假者 vs 验钞员」:一个网络造假图,另一个挑刺,互相掐架、越练越强。出图挺漂亮,但训练像走钢丝——两边稍不平衡就崩,还常常「只会画那么几种」。

DDPM 换了个思路,朴素得有点好笑:先学会破坏,再倒着放录像。

点子:把一件难事拆成一千件容易事

拿一张清晰照片,往上撒一层细沙;再撒一层、再一层……撒够一千层,照片彻底变成一团雪花点。这个「毁掉」的过程无需学习。

关键在于:把这段录像倒着放,就是「从雪花点里长出一张照片」。「凭空画一张画」很难,但「把刚刚撒上去的那一薄层沙子擦掉」很容易——难事被拆成了一千个几乎不动脑的小步。机器要学的,就只是这一个小步。

它其实只学一件事:认出沙子

训练简单到近乎作弊:拿一张真照片,随机挑个脏的程度,一次性把沙子撒上去——沙子是我们自己撒的,标准答案就在手里。把这张脏图连同「脏到第几层」递给网络,只问一句:这上面多出来的沙子长什么样?它指出来,跟答案一对,差多少改多少。没有对手、没有博弈,就一道有标准答案的填空题——训练因此特别稳。

出图时反过来用:随手抓一团雪花点,问「哪些是沙子」,减掉一点,再问、再减……上千遍之后,一张谁都没拍过的照片就浮出来了。为什么是新图而不是复原原图?因为起点是随手抓的一团噪点,网络每步只把画面往「更像真实照片」推一点——像看云:云是随机的,但你总能从里面看出个形状。

带来了什么

训练不再走钢丝,画面又多样又干净,画质一举超过当年最强的对抗式模型。更要紧的是这条路能一直往上长——接上「按文字描述来擦」,就成了今天打字出图的那些产品,视频生成也是同一套。

诚实的代价只有一条,但很硬:出一张图要让网络来回跑上千遍,比对手那种「一次成型」慢了几百倍。

一句话记住

把「凭空画一张图」倒过来做:先用一千小步把照片撒成雪花点(不用学),再训练网络专门认出「每步多出来的那点噪声」;出图时从随机雪花点开始,反复减掉网络指认的噪声,图就长出来了。训练稳、样子多,代价是出图要跑上千遍。

想看加噪 / 去噪链的结构图、目标函数和实验数字? → 切到精读版