(GER) Was sind Diffusion Models

(GER) Was sind Diffusion Models

Was hinter dem Hype steckt

(Die deutsche Version beginn unten!)

This post is a rather unusual one since it is in German. I have always been involved in making content available in other languages to allow more people to enjoy it, such as when I did translations for Khan Academy. After translating the posts on normalising flows by Eric Jang, I have the pleasure of now translating Lily Wang’s excellent post on diffusion models. I hope you enjoy it!

Einführung

GANs, VAEs und Normalising Flows sind drei Typen von Machine Learning Modellen für generative Zwecke. Alle drei haben sehr erfolgreich hochqualitative Beispiele generiert, aber jede der drei Familien hat eigene Probleme. GANs sind bekannt für instabiles Training und weniger Diversität der produzierten Beispiele durch ihr Training. VAEs basieren auf einem sogenannten “surrogate loss”. Normalising Flows müssen spezielle Architekturen verwenden, um reversible Transformationen zu konstruieren.

Diffusion Models sind von der “non-equilibrium” Thermodynamik inspiriert. Sie definieren eine Markov-Kette von Diffusionsschritten, um den Daten langsam zufälliges Rauschen hinzuzufügen, und lernen dann, den Diffusionsprozess umzukehren, um aus dem Rauschen gewünschte Datenproben zu konstruieren. Im Gegensatz zu VAEs oder Normalising Flows werden Diffusion Models mit einem festen Verfahren erlernt, und die latente Variable hat eine hohe Dimensionalität (dieselbe wie die Originaldaten).

gen_model_overview.png

Was sind Diffusion Models

Es wurden mehrere diffusionsbasierte generative Modelle mit ähnlichen Ideen vorgeschlagen, darunter diffusion probabilistic models (Sohl-Dickstein et al., 2015), noise-conditioned score network (NCSN; Yang & Ermon, 2019), und denoising diffusion probabilistic models (DDPM; Ho et al. 2020).

Forward Diffusion Process

Nehmen wir an, wir haben einen Datenpunkt von einer realen Datenverteilung, x0q(x)x_0 \sim q(x). Dann können wir einen forward diffusion process definieren, in dem wir in TT Schritten kleine Mengen an Gaussian noise zu dem Datenpunkt hinzufügen und damit eine Sequenz x1,...,xTx_1, ..., x_T an korrumpierten (sogenannten noised) Datenpunkten erzeugen. Wir kontrollieren die Schrittgröße zwischen diesen Datenpunkten mit der sogenannten variance schedule {βt(0,1)}t=1T\{\beta_t \in (0,1)\}^T_{t=1}. q(xtxt1)=N(xt;1βtxt1,βtI)q(x1:T=t=1Tq(xtxt1))\begin{aligned} q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t \textbf{I}) \hspace{10px} q(x_{1:T} = \prod^T_{t=1} q(x_t | x_{t_1})) \end{aligned}

Unser Datenpunkt x0x_0 verliert so seine erkennbaren Eigenschaften wenn tt größer wird. Wenn TT \to \infty ist xTx_T equivalent zur isotropen Normalverteilung.

diffusion_process

Fig. 2. Die Markovkette des forward (reverse) diffusion process, in dem eine Stichprobe durch langsames Hinzufügen/Entfernen von Rauschen erzeugt wird. Quelle: Ho et al. 2020 mit einigen zusätzlichen Anmerkungen.

Eine nützliche Eigenschaft dieses Prozesses ist dass wir xtx_t zu einem beliebigen Zeitpunkt tt in geschlossener Form samplen können, und zwar mithilfe eines Reparametrisierungs-Tricks. Sei αt=1βt\alpha_t = 1 - \beta_t und αt=i=1tαi\overline{\alpha_t} = \prod^t_{i=1} \alpha_i: xt=αtxt1+1αtϵt1;ϵt1,ϵt2,...n(0,I)=αtαt1xt2+1αtαt1ϵt2()=...=αtx0+1αtϵq(xtx0)=N(xt;αtx0,(1αt)I)\begin{aligned}%!!15 x_t &= \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t} \epsilon_{t-1}; \hspace{10px} \epsilon_{t-1}, \epsilon_{t-2}, ... \sim \mathcal{n}(0,\textbf{I}) \\[1em] &= \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t \alpha_{t-1}} \overline{\epsilon_{t-2}} (*) \\[1em] &= ... \\[1em] &= \sqrt{\overline{\alpha_t}}x_0 + \sqrt{1-\overline{\alpha_t}}\epsilon \\[1em] q(x_t | x_{0}) = \mathcal{N}(x_t; \sqrt{\overline{\alpha_t}} x_{0}, (1-\overline{\alpha_t}) \textbf{I}) \end{aligned}

(*) Wenn wir zwei Normalverteilungen mit verschiedenen Varianzen kombinieren, hat die neue Normalverteilung die Summe der Varianzen als Varianz: N(0,σ12I)+N(0,σ22I)=N(0,(σ12+σ22)I)\mathcal{N}(0, \sigma^2_1\textbf{I}) + \mathcal{N}(0, \sigma^2_2\textbf{I}) = \mathcal{N}(0, (\sigma^2_1 + \sigma^2_2)\textbf{I}). In unserem Falle ist die kombinierte Standardabweichung (1αt)+αt(1αt1)=1αtαt1\sqrt{(1-\alpha_t) + \alpha_t(1-\alpha_{t-1})} = \sqrt{1-\alpha_t \alpha_{t-1}}.

Normalerweise können wir uns größere Updateschritte erlauben wenn unsere Sample mehr Rauschen enthält, also setzen wir die variance schedule so, dass βt\beta_t mit tt wächst: β1<β2<...<βt\beta_1 < \beta_2 < ... < \beta_t und daher α1>α2>...>αt\overline{\alpha_1} > \overline{\alpha_2} > ... > \overline{\alpha_t}.

Verbindung zu Stochastic Gradient Langevin Dynamics

Langevin Dynamics ist ein Konzept aus der Physik das zur statistischen Modellierung von molekularen Systemen entwickelt wurde. Wenn dieses Verfahren mit stochastic gradient descent kombiniert wird, erhalten wir stochastic gradient langevin dynamics (Welling & Teh 2011). Dieses Verfahren kann Stichproben von einer Wahrscheinlichkeitsverteilung p(x)p(x) ziehen und benötigt hierfür nur die Gradienten der Log-Wahrscheinlichkeit xlogp(x)\nabla_x \log p(x). Die Gradienten werden mit einem Rauschterm kombiniert, um die Stichproben zu erzeugen. Die Stichproben werden dann verwendet, um die Gradienten zu schätzen, und der Prozess wird wiederholt. Dieser iterative Prozess kann als Markovkette bestehend aus Updates beschrieben werden: xt=xt1+δ2xlogp(xt1)+δϵt;ϵtN(0,I)x_t = x_{t-1} + \frac{\delta}{2} \nabla_x \log p(x_{t-1}) + \sqrt{\delta} \epsilon_t; \hspace{10px} \epsilon_t \sim \mathcal{N}(0, \textbf{I})

mit δ\delta als die Schrittgröße der Updates. Wenn wir T0T \to 0 gehen lassen, geht ϵ0\epsilon \to 0 und wir erhalten die tatsächliche Wahrscheinlichkeitsverteilung p(x)p(x).

Verglichen mit standard Gradient Descent Methoden, die nur die Gradienten der Log-Wahrscheinlichkeit verwenden, fügen wir hier einen Rauschterm hinzu. Hierdurch verhindern wir den Kollaps in lokale Minima der Wahrscheinlichkeitsverteilung.

Reverse Diffusion Process

Wenn wir den oben beschriebenen forward diffusion process umkehren und somit Stichproben von q(xt1xt)q(x_{t-1} \vert x_{t}) ziehen könnten, können wir aus Gauss’schen Rauschen \xTN(0,I)\x_T \sim \mathcal{N}(0, \textbf{I}) Stichproben von p(x)p(x) ziehen. Dieser Prozess wird als reverse diffusion process bezeichnet.

Falls βt\beta_t klein genoug ist, wird q(xt1xt)q(x_{t-1} \vert x_{t}) ebenfalls einer Normalverteilung folgen.

Leider müssten wir die gesamte Datenverteilung p(x)p(x) kennen, um q(xt1xt)q(x_{t-1} \vert x_{t}) zu berechnen. Dies ist in der Praxis nicht möglich. Wir können jedoch ein Modell pθp_{\theta} lernen, dass diese bedingten Wahrscheinlichkeiten approximiert. Mithilfe dieses Modells können wir dann den reverse diffusion process durchführen und näherungsweise Stichproben von p(x)p(x) ziehen: pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_{\theta}(x_{0:T}) = p(x_T) \prod^T_{t=1} p_{\theta}(x_{t-1} | x_{t}) \hspace{10px} p_{\theta}(x_{t-1} | x_{t}) = \mathcal{N}(x_{t-1}; \mu_{\theta}(x_t, t), \Sigma_{\theta}(x_t,t))

Reverse Diffusion Process

Fig. 3. Beispielhaftes Training eines Diffusion Models zum Modellieren von 2D swiss roll daten. (Quelle: Sohl-Dickstein et al. 2015)

Es ist bemerkenswert dass die reverse bedingte Wahrscheinlichkeit berechnet werden kan, wenn diese auf x0x_0 bedingt ist: q(xt1xt)=N(xt1;μ~(xt,t),β~tI)q(x_{t-1} \| x_{t}) = \mathcal{N}(x_{t-1}; \color{blue} \widetilde{\mu}(x_t, t), \color{red} \tilde{\beta}_t \mathbf{I})

Mit dem Satz von Bayes erhalten wir folgendes: xt====q(xtx0)=N(xt;αtx0,(1αt)I)\begin{aligned}%!!15 x_t &= \\[1em] &= \\[1em] &= \\[1em] &= \\[1em] q(x_t \vert x_{0}) = \mathcal{N}(x_t; \sqrt{\overline{\alpha_t}} x_{0}, (1-\overline{\alpha_t}) \textbf{I}) \end{aligned}

Credits

Vielen Dank an Lilian Weng für ihre coolen Blogposts und die Möglichkeit, diesen Blogpost zu übersetzen!

Photo by JJ Ying on Unsplash