欢迎光临散文网 会员登陆 & 注册

擴散模型DDIM的【超】通俗理解

2023-03-10 04:24 作者:傅老師MrFu  | 我要投稿

DDIM模型為宋佳铭博士所提出,該模型主要解決了DDPM取樣步數過高,導致模型推論時間過長之問題。DDIM主要憑藉著將擴散過程以【非馬爾可夫鍊】形式處理,得到了類似跳步加速的可行性。

其實擴散過程是馬爾可夫鍊這個假設,在DDPM模型的前向過程中讀者若仔細看方程式的結構,就會看出有些許不對勁的地方。DDPM在前向過程中存在著一則眾所周知的<nice property>[1],基於疊加噪聲均為高斯噪聲之假設,便能夠依靠x0與epsilon單步從0跳躍到t求得時間t下的xt sample。

等一下。。不是說在馬爾可夫鍊假設下,xt 只依賴 xt-1 嗎?。。為什麼現在 xt 可以用 x0 直接跳躍表示,而且所有係數都跟 xt-1 沒有關係? 這是馬爾可夫鍊嗎? 是的,他還是馬爾可夫鍊,只是碰巧你可以透過 alpha 與 beta 的精巧設計,得到一個從 x0 直接推出 xt 的捷徑。但若從公式關係說 xt 與 x0 相關,從公式看來也並沒有錯。 

那~這下可好玩了,既然正向擴散時 xt 與 x0 相關,那逆向擴散兩者有沒有關係捏? 我們知道在DDPM下,逆向擴散時U-NET幫我們預測的是 epsilon t,也就是當初單步跳躍到 t 時所用的 epsilon。並且,在固定 alpha 的情況下,知道 xt 與 epsilon t 就等於知道 x0。也就是說,只要知道現在的時間 t ,猜出目前 xt 圖中的噪聲就等效於猜出了原圖! 【只需猜噪音】,這就是DDPM設計超越DPM之處。

但若更進一步思考。。咦? 那我為什麼要這麼麻煩,我在時間 T 的時候第一次猜的時候猜了個 epsilon t,那我不是直接用這 epsilon t 計算出 x0 就直接算完了嗎? 

。。。。。。。。。。。。。

最好是可以啦!! 整個畫面滿是高斯白噪聲,你竟然一看就可以看出哪些是部分是雜訊哪些部份是原圖,這只有用背的才背得出來吧 (咦? overfitting?) 所以逆向擴散單步是不切實際的,估計即使能產生像樣的圖,模型也毫無生成性可言。所以逆向擴散的時候還是需要多步推論,但現在我們有一個大膽的想法:

原本逆擴散是馬爾可夫鍊,我們必須走藍線。現在整個過程不是馬爾可夫鍊了,我們乾脆在 xt 的時候就直接估 x0。。。等一下! 我知道我剛剛說過單步不切實際,那我估出 x0 之後我再單步擴散到 xt-1 這總行吧~ :) 我的老天,這招實在太天才了~  所以整個逆推的過程變成:

1. U-NET看著 xt 猜出 epsilon t
2. 從epsilon t 推出 x0
3. 從x0 向前推出 xt-1

這就是DDIM論文中最神妙的Eq.7。Eq.7將 sigma t 帶入beta t-1 (也就是 sqrt(1 - alpha t-1))的時候,執行的就是上述的步驟。 

那你會問,可是sigma t不是只能帶傅老師你說的 beta t-1啊~ 那 sigma t 帶入其他數值時含意又是甚麼? OK,如果你仔細看公式,就會發現其實有一股雜訊躲在平均值裡面,他就是 sigma t。若今天不確定 x0 時,整組公式的噪聲值其實是要平方後相加,這樣 eps t 與 eps 兩項就會整併為 sqrt(1 - alpha t-1),吻合單步擴散至 t-1 時的公式。也就是說不管sigma t是多少,這兩股雜訊整併後的強度是一樣的。

所以,sigma只是 eps t 與 eps 間取權重之用的參數而已。其具體意義就是再次單步前向擴散時,該使用新的 eps,或是U-NET估算出來應是前次使用的 eps t。若我們完全放棄以權重調和 eps & eps t 的想法,那我們會將 sigma t設為0,也就得到了DDIM。


[1] Lilian Weng, What are Diffusion Models? https://lilianweng.github.io/posts/2021-07-11-diffusion-models/



擴散模型DDIM的【超】通俗理解的评论 (共 条)

分享到微博请遵守国家法律