Denoising:生成可以被看成局部修復
前面幾篇給了統一的動態地圖;從這篇開始,我們看生成的第一種局部訊號:去噪。
你大概聽過有人說「diffusion 就是去噪模型」。乍聽很怪:去噪不是把雜訊照修乾淨的影像處理嗎?它怎麼會「生成」出全新的圖?這篇就把這個轉折講清楚。
去噪怎麼會等於生成?
關鍵的轉念是這樣:如果一個模型在每一種噪聲程度下,都知道怎麼把資料往乾淨的方向修一點點,那我們就能從一團純噪聲出發,反覆做很多次小修正,一路修回一張清晰的樣本。生成,於是被拆解成一長串「局部修復」。
先抓住這個畫面
不必一步畫出整張圖。只要在每個模糊程度上,都能猜出「該往哪修一點」,把這些小修正串起來,純噪聲就會慢慢顯影成資料。
為什麼不一步到位,要拆成很多步?
去噪聽起來只是「把髒的修乾淨」,真正巧妙的其實是拆步:既然最後要的是一張清楚的圖,為什麼不訓練一個模型,看一眼純噪聲就一步畫出來?
比較兩種輸入。第一種是一團純 Gaussian noise——它裡面沒有任何線索,要把它變成一隻狗、一隻貓、還是一棟房子都「同樣合理」,因為純噪聲幾乎對應到所有可能的圖。要模型從這裡一步生出一張清楚的狗,等於要它在毫無提示下,押中一個極其特定的答案;這是個極難、極不穩定的問題。
第二種是一張被加了一點噪聲、看起來有點髒、有點糊的狗照片。細節雖然糊掉了,你一眼還是看得出「這是狗,不是貓」。主體已經定下來,「把它再修清楚一點」就成了一個好回答的問題——你知道該往哪修。
純噪聲太曖昧(對應太多種可能),所以難一步還原;只要還看得出大概是什麼,「再修清楚一點」就變得容易。
diffusion 整個設計就建立在這個落差上:與其逼模型回答「從零生出一張圖」這個最難的問題,不如把它切成一長串「在某個噪聲程度下,把已經半成形的圖再修清楚一點」的簡單問題。 噪聲很重時,模型只需要決定大方向(先定下大致輪廓、是狗還是貓);噪聲變輕時,再逐步補上毛色、紋理這些細節。資訊是一層一層浮現的,每一步都只面對它那一格、好回答的版本,難度被均攤掉了——這也回頭解釋了上一段為什麼要「在每一種噪聲程度上」都學會修一點。
(一個誠實的提醒:這裡說的「弄髒、變糊」,具體是加 Gaussian noise——也就是下一節 那種加噪,不是把照片做模糊化(blur)處理;用「糊」只是借一個看得見的畫面。真的改用「模糊」當破壞方式,是另一條支線 cold / blurring diffusion。)
這個「拆成許多小步、每步只解一個簡單的局部問題」,其實就是 把樣本想成粒子 講的同一件事——只是一個盯著粒子在空間裡被搬運,一個盯著資料被加噪與去噪的程度;兩副鏡頭看的是同一段過程。
把畫面寫成數學
先定義「加噪」:對一筆乾淨資料 ,混入高斯噪聲
其中 是事先定好的 schedule(訊號逐漸變弱、噪聲逐漸變強)。模型 的任務,是看著帶噪的 與程度 ,把混進去的噪聲猜回來:
這是一個乾淨的監督式回歸:輸入 ,標準答案是 。猜到了噪聲,就等於知道該往哪個方向修。生成時反過來:從純噪聲開始,一步步用 估計並移除一點噪聲,直到還原出樣本。
一個一定要先講清楚的混淆點:時間方向
這裡有個讓很多人讀論文時當機的慣例差異。本系列用 , 是 noise、 是 data(沿著生成方向走)。但多數 diffusion 論文用相反方向: 是乾淨資料、 是純噪聲,「前向過程」隨 增加而加噪,「反向過程」(生成)則是把 從 走回 。
記住這件事,你之後對照公式就不會被 到底是噪聲還是資料搞混。
幾個容易想歪的地方
這怎麼接到論文?
denoising 目標(預測 )是 DDPM 一系的訓練主力,撐起了高品質的影像、音訊、影片與 3D 生成。它的形式極簡——一個 L2 回歸——卻能逼出驚人的樣本品質,也是 diffusion 好訓練、好擴展的原因之一。
下一步
「預測噪聲」其實偷偷連到一個更幾何的物件。如果你問「往哪修,資料才更可能?」那個方向,就是 score。下一篇 Score Function:資料分布的局部方向感 會說明 score 是什麼,並揭穿一件事:去噪和 score,根本是同一件事換個寫法。
參考文獻
- Ho, J., Jain, A., Abbeel, P. Denoising Diffusion Probabilistic Models. NeurIPS 2020.
- Sohl-Dickstein, J., et al. Deep Unsupervised Learning using Nonequilibrium Thermodynamics. ICML 2015.