生成擴散模型漫談(四):DDIM = 高觀點DDPM

jasonzhangxianrong發表於2024-07-08

相信很多讀者都聽說過甚至讀過克萊因的《高觀點下的初等數學》這套書,顧名思義,這是在學到了更深入、更完備的數學知識後,從更高的視角重新審視過往學過的初等數學,以得到更全面的認知,甚至達到溫故而知新的效果。類似的書籍還有很多,比如《重溫微積分》《複分析:視覺化方法》等。

回到擴散模型,目前我們已經透過三篇文章從不同視角去解讀了DDPM,那麼它是否也存在一個更高的理解視角,讓我們能從中得到新的收穫呢?當然有,《Denoising Diffusion Implicit Models》介紹的DDIM模型就是經典的案例,本文一起來欣賞它。

思路分析 #

《生成擴散模型漫談(三):DDPM = 貝葉斯 + 去噪》中,我們提到過該文章所介紹的推導跟DDIM緊密相關。具體來說,文章的推導路線可以簡單歸納如下:
\begin{equation}p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})\xrightarrow{\text{推導}}p(\boldsymbol{x}_t|\boldsymbol{x}_0)\xrightarrow{\text{推導}}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)\xrightarrow{\text{近似}}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)\end{equation}
這個過程是一步步遞進的。然而,我們發現最終結果有著兩個特點:

1、損失函式只依賴於$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$;

2、取樣過程只依賴於$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$。

也就是說,儘管整個過程是以$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$為出發點一步步往前推的,但是從結果上來看,壓根兒就沒$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$的事。那麼,我們大膽地“異想天開”一下:

高觀點1: 既然結果跟$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$無關,可不可以乾脆“過河拆橋”,將$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$從整個推導過程中去掉?

DDIM正是這個“異想天開”的產物!

待定係數 #

可能有讀者會想,根據上一篇文章所用的貝葉斯定理
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)}{p(\boldsymbol{x}_t|\boldsymbol{x}_0)}\end{equation}
沒有給定$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$怎麼能得到$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$?這其實是思維過於定式了,理論上在沒有給定$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$的情況下,$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$的解空間更大,某種意義上來說是更加容易推導,此時它只需要滿足邊際分佈條件:
\begin{equation}\int p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) p(\boldsymbol{x}_t|\boldsymbol{x}_0) d\boldsymbol{x}_t = p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)\label{eq:margin}\end{equation}
我們用待定係數法來求解這個方程。在上一篇文章中,所解出的$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$是一個正態分佈,所以這一次我們可以更一般地設
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \mathcal{N}(\boldsymbol{x}_{t-1}; \kappa_t \boldsymbol{x}_t + \lambda_t \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})\end{equation}
其中$\kappa_t,\lambda_t,\sigma_t$都是待定係數,而為了不重新訓練模型,我們不改變$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)$和$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$,於是我們可以列出
\begin{array}{c|c|c}
\hline
\text{記號} & \text{含義} & \text{取樣}\\
\hline
p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0) & \mathcal{N}(\boldsymbol{x}_{t-1};\bar{\alpha}_{t-1} \boldsymbol{x}_0,\bar{\beta}_{t-1}^2 \boldsymbol{I}) & \boldsymbol{x}_{t-1} = \bar{\alpha}_{t-1} \boldsymbol{x}_0 + \bar{\beta}_{t-1} \boldsymbol{\varepsilon} \\
\hline
p(\boldsymbol{x}_t|\boldsymbol{x}_0) & \mathcal{N}(\boldsymbol{x}_t;\bar{\alpha}_t \boldsymbol{x}_0,\bar{\beta}_t^2 \boldsymbol{I}) & \boldsymbol{x}_t = \bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}_1 \\
\hline
p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) & \mathcal{N}(\boldsymbol{x}_{t-1}; \kappa_t \boldsymbol{x}_t + \lambda_t \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I}) & \boldsymbol{x}_{t-1} = \kappa_t \boldsymbol{x}_t + \lambda_t \boldsymbol{x}_0 + \sigma_t \boldsymbol{\varepsilon}_2 \\
\hline
{\begin{array}{c}\int p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) \\
p(\boldsymbol{x}_t|\boldsymbol{x}_0) d\boldsymbol{x}_t\end{array}} & & {\begin{aligned}\boldsymbol{x}_{t-1} =&\, \kappa_t \boldsymbol{x}_t + \lambda_t \boldsymbol{x}_0 + \sigma_t \boldsymbol{\varepsilon}_2 \\
=&\, \kappa_t (\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}_1) + \lambda_t \boldsymbol{x}_0 + \sigma_t \boldsymbol{\varepsilon}_2 \\
=&\, (\kappa_t \bar{\alpha}_t + \lambda_t) \boldsymbol{x}_0 + (\kappa_t\bar{\beta}_t \boldsymbol{\varepsilon}_1 + \sigma_t \boldsymbol{\varepsilon}_2) \\
\end{aligned}} \\
\hline
\end{array}
其中$\boldsymbol{\varepsilon},\boldsymbol{\varepsilon}_1,\boldsymbol{\varepsilon}_2\sim \mathcal{N}(\boldsymbol{0},\boldsymbol{I})$,並且由正態分佈的疊加性我們知道$\kappa_t\bar{\beta}_t \boldsymbol{\varepsilon}_1 + \sigma_t \boldsymbol{\varepsilon}_2\sim \sqrt{\kappa_t^2\bar{\beta}_t^2 + \sigma_t^2} \boldsymbol{\varepsilon}$。對比$\boldsymbol{x}_{t-1}$的兩個取樣形式,我們發現要想$\eqref{eq:margin}$成立,只需要滿足兩個方程
\begin{equation}\bar{\alpha}_{t-1} = \kappa_t \bar{\alpha}_t + \lambda_t, \qquad\bar{\beta}_{t-1} = \sqrt{\kappa_t^2\bar{\beta}_t^2 + \sigma_t^2}\end{equation}
可以看到有三個未知數,但只有兩個方程,這就是為什麼說沒有給定$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$時解空間反而更大了。將$\sigma_t$視為可變引數,可以解出
\begin{equation}\kappa_t = \frac{\sqrt{\bar{\beta}_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t},\qquad \lambda_t = \bar{\alpha}_{t-1} - \frac{\bar{\alpha}_t\sqrt{\bar{\beta}_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t}\end{equation}
或者寫成
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \mathcal{N}\left(\boldsymbol{x}_{t-1}; \frac{\sqrt{\bar{\beta}_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t} \boldsymbol{x}_t + \left(\bar{\alpha}_{t-1} - \frac{\bar{\alpha}_t\sqrt{\bar{\beta}_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t}\right) \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I}\right)\label{eq:p-xt-x0}\end{equation}
方便起見,我們約定$\bar{\alpha}_0=1, \bar{\beta}_0=0$。特別地,這個結果並不需要限定$\bar{\alpha}_t^2 + \bar{\beta}_t^2 = 1$,不過為了簡化引數設定,同時也為了跟以往的結果對齊,這裡還是約定$\bar{\alpha}_t^2 + \bar{\beta}_t^2 = 1$。

一如既往 #

現在我們在只給定$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$、$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)$的情況下,透過待定係數法求解了$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$的一簇解,它帶有一個自由引數$\sigma_t$。用《生成擴散模型漫談(一):DDPM = 拆樓 + 建樓》中的“拆樓-建樓”類比來說,就是我們知道樓會被拆成什麼樣【$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$、$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)$】,但是不知道每一步怎麼拆【$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$】,然後希望能夠從中學會每一步怎麼建【$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$】。當然,如果我們想看看每一步怎麼拆的話,也可以反過來用貝葉斯公式
\begin{equation} p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}, \boldsymbol{x}_0) = \frac{p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) p(\boldsymbol{x}_t|\boldsymbol{x}_0)}{p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)}\end{equation}

接下來的事情,就跟上一篇文章一模一樣了:我們最終想要$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$而不是$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$,所以我們希望用
\begin{equation}\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t) = \frac{1}{\bar{\alpha}_t}\left(\boldsymbol{x}_t - \bar{\beta}_t \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right)\end{equation}
來估計$\boldsymbol{x}_0$,由於沒有改動$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$,所以訓練所用的目標函式依然是$\left\Vert\boldsymbol{\varepsilon} - \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}, t)\right\Vert^2$(除去權重係數),也就是說訓練過程沒有改變,我們可以用回DDPM訓練好的模型。而用$\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)$替換掉式$\eqref{eq:p-xt-x0}$中的$\boldsymbol{x}_0$後,得到
\begin{equation}\begin{aligned}
p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) \approx&\, p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)) \\
=&\, \mathcal{N}\left(\boldsymbol{x}_{t-1}; \frac{1}{\alpha_t}\left(\boldsymbol{x}_t - \left(\bar{\beta}_t - \alpha_t\sqrt{\bar{\beta}_{t-1}^2 - \sigma_t^2}\right) \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right), \sigma_t^2 \boldsymbol{I}\right)
\end{aligned}\label{eq:p-xt-x0-2}\end{equation}
這就求出了生成過程所需要的$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$,其中$\alpha_t=\frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}$。它的特點是訓練過程沒有變化(也就是說最終儲存下來的模型沒有變化),但生成過程卻有一個可變動的引數$\sigma_t$,就是這個引數給DDPM帶來了新鮮的結果。

幾個例子 #

原則上來說,我們對$\sigma_t$沒有過多的約束,但是不同$\sigma_t$的取樣過程會呈現出不同的特點,我們舉幾個例子進行分析。

第一個簡單例子就是取$\sigma_t = \frac{\bar{\beta}_{t-1}\beta_t}{\bar{\beta}_t}$,其中$\beta_t = \sqrt{1 - \alpha_t^2}$,相應地有
\begin{equation} p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) \approx p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)) = \mathcal{N}\left(\boldsymbol{x}_{t-1}; \frac{1}{\alpha_t}\left(\boldsymbol{x}_t - \frac{\beta_t^2}{\bar{\beta}_t}\boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right),\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2} \boldsymbol{I}\right)\label{eq:choice-1}\end{equation}
這就是上一篇文章所推導的DDPM。特別是,DDIM論文中還對$\sigma_t = \eta\frac{\bar{\beta}_{t-1}\beta_t}{\bar{\beta}_t}$做了對比實驗,其中$\eta\in[0, 1]$。

第二個例子就是取$\sigma_t = \beta_t$,這也是前兩篇文章所指出的$\sigma_t$的兩個選擇之一,在此選擇下式$\eqref{eq:p-xt-x0-2}$未能做進一步的化簡,但DDIM的實驗結果顯示此選擇在DDPM的標準引數設定下表現還是很好的。

最特殊的一個例子是取$\sigma_t = 0$,此時從$\boldsymbol{x}_t$到$\boldsymbol{x}_{t-1}$是一個確定性變換
\begin{equation}\boldsymbol{x}_{t-1} = \frac{1}{\alpha_t}\left(\boldsymbol{x}_t - \left(\bar{\beta}_t - \alpha_t \bar{\beta}_{t-1}\right) \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right)\label{eq:sigma=0}\end{equation}
這也是DDIM論文中特別關心的一個例子,準確來說,原論文的DDIM就是特指$\sigma_t=0$的情形,其中“I”的含義就是“Implicit”,意思這是一個隱式的機率模型,因為跟其他選擇所不同的是,此時從給定的$\boldsymbol{x}_T = \boldsymbol{z}$出發,得到的生成結果$\boldsymbol{x}_0$是不帶隨機性的。後面我們將會看到,這在理論上和實用上都帶來了一些好處。

加速生成 #

值得指出的是,在這篇文章中我們沒有以$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$為出發點,所以前面的所有結果實際上全都是以$\bar{\alpha}_t,\bar{\beta}_t$相關記號給出的,而$\alpha_t,\beta_t$則是透過$\alpha_t=\frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}$和$\beta_t = \sqrt{1 - \alpha_t^2}$派生出來的記號。從損失函式$\left\Vert\boldsymbol{\varepsilon} - \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}, t)\right\Vert^2$可以看出,給定了各個$\bar{\alpha}_t$,訓練過程也就確定了。

從這個過程中,DDIM進一步留意到了如下事實:

高觀點2: DDPM的訓練結果實質上包含了它的任意子序列引數的訓練結果。

具體來說,設$\boldsymbol{\tau} = [\tau_1,\tau_2,\dots,\tau_{\dim(\boldsymbol{\tau})}]$是$[1,2,\cdots,T]$的任意子序列,那麼我們以$\bar{\alpha}_{\tau_1},\bar{\alpha}_{\tau_2},\cdots,\bar{\alpha}_{\dim(\boldsymbol{\tau})}$為引數訓練一個擴散步數為$\dim(\boldsymbol{\tau})$步的DDPM,其目標函式實際上是原來以$\bar{\alpha}_1,\bar{\alpha}_2,\cdots,\bar{\alpha}_T$的$T$步DDPM的目標函式的一個子集!所以在模型擬合能力足夠好的情況下,它其實包含了任意子序列引數的訓練結果。

那麼反過來想,如果有一個訓練好的$T$步DDPM模型,我們也可以將它當成是以$\bar{\alpha}_{\tau_1},\bar{\alpha}_{\tau_2},\cdots,\bar{\alpha}_{\dim(\boldsymbol{\tau})}$為引數訓練出來的$\dim(\boldsymbol{\tau})$步模型,而既然是$\dim(\boldsymbol{\tau})$步的模型,生成過程也就只需要$\dim(\boldsymbol{\tau})$步了,根據式$\eqref{eq:p-xt-x0-2}$有:
\begin{equation}p(\boldsymbol{x}_{\tau_{i-1}}|\boldsymbol{x}_{\tau_i}) \approx \mathcal{N}\left(\boldsymbol{x}_{\tau_{i-1}}; \frac{\bar{\alpha}_{\tau_{i-1}}}{\bar{\alpha}_{\tau_i}}\left(\boldsymbol{x}_{\tau_i} - \left(\bar{\beta}_{\tau_i} - \frac{\bar{\alpha}_{\tau_i}}{\bar{\alpha}_{\tau_{i-1}}}\sqrt{\bar{\beta}_{\tau_{i-1}}^2 - \tilde{\sigma}_{\tau_i}^2}\right) \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_{\tau_i}, \tau_i)\right), \tilde{\sigma}_{\tau_i}^2 \boldsymbol{I}\right)\end{equation}
這就是加速取樣的生成過程了,從原來的$T$步擴散生成變成了$\dim(\boldsymbol{\tau})$步。要注意不能直接將式$\eqref{eq:p-xt-x0-2}$的$\alpha_t$換成$\alpha_{\tau_i}$,因為我們說過$\alpha_t$是派生記號而已,它實際上等於$\frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}$,因此$\alpha_t$要換成$\frac{\bar{\alpha}_{\tau_i}}{\bar{\alpha}_{\tau_{i-1}}}$才對。同理,$\tilde{\sigma}_{\tau_i}$也不是直接取$\sigma_{\tau_i}$,而是在將其定義全部轉化為$\bar{\alpha},\bar{\beta}$符號後,將$t$替換為$\tau_i$、$t-1$替換為$\tau_{i-1}$,比如式$\eqref{eq:choice-1}$對應的$\tilde{\sigma}_{\tau_i}$為
\begin{equation}\sigma_t = \frac{\bar{\beta}_{t-1}\beta_t}{\bar{\beta}_t}=\frac{\bar{\beta}_{t-1}}{\bar{\beta}_t}\sqrt{1 - \frac{\bar{\alpha}_t^2}{\bar{\alpha}_{t-1}^2}}\quad\to\quad\frac{\bar{\beta}_{\tau_{i-1}}}{\bar{\beta}_{\tau_i}}\sqrt{1 - \frac{\bar{\alpha}_{\tau_i}^2}{\bar{\alpha}_{\tau_{i-1}}^2}}=\tilde{\sigma}_{\tau_i}\end{equation}

可能讀者又想問,我們為什麼乾脆不直接訓練一個$\dim(\boldsymbol{\tau})$步的擴散模型,而是要先訓練$T > \dim(\boldsymbol{\tau})$步然後去做子序列取樣?筆者認為可能有兩方面的考慮:一方面從$\dim(\boldsymbol{\tau})$步生成來說,訓練更多步數的模型也許能增強泛化能力;另一方面,透過子序列$\boldsymbol{\tau}$進行加速只是其中一種加速手段,訓練更充分的$T$步允許我們嘗試更多的其他加速手段,但並不會顯著增加訓練成本。

實驗結果 #

原論文對不同的噪聲強度和擴散步數$\dim(\boldsymbol{\tau})$做了組合對比,大致上的結果是“噪聲越小,加速後的生成效果越好”,如下圖

DDIM的實驗結果,顯示噪聲越小,加速後的生成效果越好

DDIM的實驗結果,顯示噪聲越小,加速後的生成效果越好

筆者的參考實現如下:

Github:https://github.com/bojone/Keras-DDPM/blob/main/ddim.py

個人的實驗結論是:

1、可能跟直覺相反,生成過程中的$\sigma_t$越小,最終生成影像的噪聲和多樣性反而相對來說越大;

2、擴散步數$\dim(\boldsymbol{\tau})$越少,生成的圖片更加平滑,多樣性也會有所降低;

3、結合1、2兩點得知,在擴散步數$\dim(\boldsymbol{\tau})$減少時,可以適當縮小$\sigma_t$,以保持生成圖片質量大致不變,這跟DDIM原論文的實驗結論是一致的;

4、在$\sigma_t$較小時,相比可訓練的Embedding層,用固定的Sinusoidal編碼來表示$t$所生成圖片的噪聲要更小;

5、在$\sigma_t$較小時,原論文的U-Net架構(Github中的ddpm2.py)要比筆者自行構思的U-Net架構(Github中的ddpm.py)所生成圖片的噪聲要更小;

6、但個人感覺,總體來說不帶噪聲的生成過程的生成效果不如帶噪聲的生成過程,不帶噪聲時生成效果受模型架構影響較大。

此外,對於$\sigma_t=0$時的DDIM,它就是將任意正態噪聲向量變換為圖片的一個確定性變換,這已經跟GAN幾乎一致了,所以跟GAN類似,我們可以對噪聲向量進行插值,然後觀察對應的生成效果。但要注意的是,DDPM或DDIM對噪聲分佈都比較敏感,所以我們不能用線性插值而要用球面插值,因為由正態分佈的疊加性,如果$\boldsymbol{z}_1,\boldsymbol{z}_2\sim\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})$,$\lambda\boldsymbol{z}_1 + (1-\lambda)\boldsymbol{z}_2$一般就不服從$\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})$,要改為
\begin{equation}\boldsymbol{z} = \boldsymbol{z}_1 \cos\frac{\lambda\pi}{2} + \boldsymbol{z}_2 \sin\frac{\lambda\pi}{2},\quad \lambda\in[0, 1]\end{equation}

插值效果演示(筆者自己訓練的模型):

DDIM隨機向量的插值生成效果

DDIM隨機向量的插值生成效果

微分方程 #

最後,我們來重點分析一下$\sigma_t = 0$的情形。此時$\eqref{eq:sigma=0}$可以等價地改寫成:
\begin{equation}\frac{\boldsymbol{x}_t}{\bar{\alpha}_t} - \frac{\boldsymbol{x}_{t-1}}{\bar{\alpha}_{t-1}} = \left(\frac{\bar{\beta}_t}{\bar{\alpha}_t} - \frac{\bar{\beta}_{t-1}}{\bar{\alpha}_{t-1}}\right) \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\end{equation}
當$T$足夠大,或者說$\alpha_t$與$\alpha_{t-1}$足夠小時,我們可以將上式視為某個常微分方程的差分形式。特別地,引入虛擬的時間引數$s$,我們得到
\begin{equation}\frac{d}{ds}\left(\frac{\boldsymbol{x}(s)}{\bar{\alpha}(s)}\right) = \boldsymbol{\epsilon}_{\boldsymbol{\theta}}\left(\boldsymbol{x}(s), t(s)\right)\frac{d}{ds}\left(\frac{\bar{\beta}(s)}{\bar{\alpha}(s)}\right)\label{eq:ode}\end{equation}
不失一般性,假設$s\in[0,1]$,其中$s=0$對應$t=0$、$s=1$對應$t=T$。注意DDIM原論文直接用$\frac{\bar{\beta}(s)}{\bar{\alpha}(s)}$作為虛擬時間引數,這原則上是不大適合的,因為它的範圍是$[0,\infty)$,無界的區間不利於數值求解。

那麼現在我們要做的事情就是在給定$\boldsymbol{x}(1)\sim \mathcal{N}(\boldsymbol{0},\boldsymbol{I})$的情況下,去求解出$\boldsymbol{x}(0)$。而DDPM或者DDIM的迭代過程,對應於該常微分方程的尤拉方法。眾所周知尤拉法的效率相對來說是最慢的,如果要想加速求解,可以用Heun方法R-K方法等。也就是說,將生成過程等同於求解常微分方程後,可以藉助常微分方程的數值解法,為生成過程的加速提供更豐富多樣的手段。

以DDPM的預設引數$T=1000$、$\alpha_t = \sqrt{1 - \frac{0.02t}{T}}$為例,我們重複《生成擴散模型漫談(一):DDPM = 拆樓 + 建樓》所做的估計
\begin{equation}\log \bar{\alpha}_t = \sum_{i=k}^t \log\alpha_k = \frac{1}{2} \sum_{k=1}^t \log\left(1 - \frac{0.02k}{T}\right) < \frac{1}{2} \sum_{k=1}^t \left(- \frac{0.02k}{T}\right) = -\frac{0.005t(t+1)}{T}\end{equation}
事實上,由於每個$\alpha_k$都很接近於1,所以上述估計其實也是一個很好的近似。而我們說了本文的出發點是$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$,所以應該以$\bar{\alpha}_t$為起點,根據上述近似,我們可以直接簡單地取
\begin{equation}\bar{\alpha}_t = \exp\left(-\frac{0.005t^2}{T}\right) = \exp\left(-\frac{5t^2}{T^2}\right)\end{equation}
如果取$s=t/T$為引數,那麼正好$s\in[0,1]$,此時$\bar{\alpha}(s)=e^{-5s^2}$,代入到式$\eqref{eq:ode}$化簡得
\begin{equation}\frac{d\boldsymbol{x}(s)}{ds} = 10s\left(\frac{\boldsymbol{\epsilon}_{\boldsymbol{\theta}}\left(\boldsymbol{x}(s), sT\right)}{\sqrt{1-e^{-10s^2}}} - \boldsymbol{x}(s)\right)\end{equation}
也可以取$s=t^2/T^2$為引數,此時也有$s\in[0,1]$,以及$\bar{\alpha}(s)=e^{-5s}$,代入到式$\eqref{eq:ode}$化簡得
\begin{equation}\frac{d\boldsymbol{x}(s)}{ds} = 5\left(\frac{\boldsymbol{\epsilon}_{\boldsymbol{\theta}}\left(\boldsymbol{x}(s), \sqrt{s}T\right)}{\sqrt{1-e^{-10s}}} - \boldsymbol{x}(s)\right)\end{equation}

文章小結 #

本文接著上一篇DDPM的推導思路來介紹了DDIM,它重新審視了DDPM的出發點,去掉了推導過程中的$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$,從而獲得了一簇更廣泛的解和加速生成過程的思路,最後這簇新解還允許我們將生成過程跟常微分方程的求解聯絡起來,從而藉助常微分方程的方法進一步對生成過程進行研究。

轉載到請包括本文地址:https://spaces.ac.cn/archives/9181

更詳細的轉載事宜請參考:《科學空間FAQ》

相關文章