haha conditionning go brrrr

This commit is contained in:
Laureηt 2023-08-17 17:02:54 +02:00
parent 8b4bcaf5f0
commit 992a6fd428
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI

View file

@ -121,6 +121,7 @@
\newacronym{ldm}{LDM}{Latent Diffusion Model}
\newacronym{cfg}{CFG}{Classifier-Free Guidance}
\newacronym{ddpm}{DDPM}{Denoising Diffusion Probabilistic Model}
\newacronym{t2i}{T2I}{Text to Image}
\newacronym{arm}{ARM}{Auto-Regressive Model}
\newacronym{nerf}{NeRF}{Neural Radiance Fields}
@ -337,14 +338,19 @@ De même, chez les \gls{vae}s la dimension de cette espace latent est configuré
Mathématiquement, on peut modéliser ces variables latentes et nos données d'entrée par une distribution jointe $p(\boldsymbol{x}, \boldsymbol{z})$. Les approches génératives ont pour but de trouver un modèle maximisant la maximum vraissemblance de nos données d'entrée $p(\boldsymbol{x})$.
En pratique, maximiser directement la vraissemblance est impossible car cela reviendrait à calculer la marginalisation:
$$ p(\boldsymbol{x}) = \int p(\boldsymbol{x}, \boldsymbol{z}) d\boldsymbol{z}$$
\begin{equation}
p(\boldsymbol{x}) = \int p(\boldsymbol{x}, \boldsymbol{z}) d\boldsymbol{z}
\end{equation}
Cependant, il est tout de même possible de trouver une borne inférieure de l'évidence, appelée \gls{elbo}:
\begin{align*}
\begin{align}
p(\boldsymbol{x}) \propto \log p(\boldsymbol{x}) & = \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } \left[ \log \frac{ p(\boldsymbol{x}, \boldsymbol{z}) } { q(\boldsymbol{z}|\boldsymbol{x}) }\right] - D_{\text{KL}}(q_\phi(\boldsymbol{z}|\boldsymbol{x}) \ \| \ p(\boldsymbol{z}|\boldsymbol{x})) \\
& \geq \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } \left[ \log \frac{ p(\boldsymbol{x}, \boldsymbol{z}) } { q_\phi(\boldsymbol{z}|\boldsymbol{x}) }\right]
\end{align*}
\end{align}
Ainsi, puisque la \gls{kld} est toujours positive et car $\log p(\boldsymbol{x})$ est constant par rapport à $\phi$, maximiser l'\gls{elbo} revient à maximiser la vraissemblance de nos données d'entrée $p(\boldsymbol{x})$. En simplifiant l'\gls{elbo}, on dérive une fonction de coût pour l'entrainement du \gls{vae}:
$$ \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } \left[ \log \frac{ p(\boldsymbol{x}, \boldsymbol{z}) } { q_\phi(\boldsymbol{z}|\boldsymbol{x}) }\right] = \underbrace{ \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } [ \log p_\theta(\boldsymbol{x}|\boldsymbol{z}) ]}_{\text{reconstruction term}} - \underbrace{ D_{\text{KL}}(q_\phi(\boldsymbol{z}|\boldsymbol{x}) \ \| \ p(\boldsymbol{z})) }_{\text{prior matching term}} $$
\begin{equation}
\mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } \left[ \log \frac{ p(\boldsymbol{x}, \boldsymbol{z}) } { q_\phi(\boldsymbol{z}|\boldsymbol{x}) }\right] = \underbrace{ \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } [ \log p_\theta(\boldsymbol{x}|\boldsymbol{z}) ]}_{\text{reconstruction term}} - \underbrace{ D_{\text{KL}}(q_\phi(\boldsymbol{z}|\boldsymbol{x}) \ \| \ p(\boldsymbol{z})) }_{\text{prior matching term}}
\end{equation}
Une fois convergence atteinte, l'intéret de cet espace latent, lorsqu'il est accompagné de sont decodeur, est qu'il permet de générer de nouvelles données, par example en échantillonant $z = \mu + \sigma \odot \epsilon$, ou bien en interpolant entre deux points latents, ou encore en modifiant légèrement un point spécifique de cet espace. Avoir la possibilité de générer de nouvelles données semblables aux données d'origine se révèle extrêmement utile dans le domaine de l'ingénierie, offrant ainsi des possibilités de création et de conception de nouvelles données basées sur des modèles existants.
@ -375,50 +381,50 @@ Dans la littérature, ces réseaux sont assez peu appliqués aux types de donné
\subsubsection{\gls{kld}}
Soit deux distributions de probabilités discrètes $P$ et $Q$ sur un ensemble $X$.
$$ D_{\text{KL}}(P\|Q) = \sum_{x \in X} P(x) \log \frac{P(x)}{Q(x)} $$
\begin{equation}
D_{\text{KL}}(P\|Q) = \sum_{x \in X} P(x) \log \frac{P(x)}{Q(x)}
\end{equation}
La Divergence de Kullback-Leibler est une mesure de la dissimilarité entre deux distributions de probabilité. Elle évalue la quantité d'information perdue lorsque l'on tente d'approximer une distribution par une autre. La \gls{kld} n'est pas une distance, elle ne satisfait pas la propriété de symétrie ($D_{\text{KL}}(P\|Q) \neq D_{\text{KL}}(Q\|P)$) ni l'inégalité triangulaire ($D_{\text{KL}}(P\|R) \not\leq D_{\text{KL}}(P\|Q) + D_{\text{KL}}(Q\|R)$).
\subsubsection{\gls{hd}}
Soit $X$ et $Y$ deux nuages de points.
$$ d_\text{H}(X, Y) = \max \left\{ \sup_{x \in X} \inf_{y \in Y} d(x,y), \sup_{y \in Y} \inf_{x \in X} d(x, y) \right\} $$
\begin{equation}
d_\text{H}(X, Y) = \max \left\{ \sup_{x \in X} \inf_{y \in Y} d(x,y), \sup_{y \in Y} \inf_{x \in X} d(x, y) \right\}
\end{equation}
La distance de Hausdorff est une mesure quantitative utilisée pour évaluer la similarité ou la dissimilarité entre deux ensembles de points dans un espace métrique. Elle calcule la plus grande distance d'un point d'un ensemble à son point le plus proche dans l'autre ensemble. En d'autres termes, elle capture la plus grande distance entre les ensembles, ce qui en fait un outil utile pour comparer des formes, des structures ou des distributions de points.
\subsubsection{\gls{cd}}
Soit $X$ et $Y$ deux nuages de points.
$$ d_{\text{CD}}(X, Y) = \sum_{x \in X} \min_{y \in Y} \|x - y\|^2_2 + \sum_{y \in Y} \min_{x \in X} \|x - y\|^2_2 $$
\begin{equation}
d_{\text{CD}}(X, Y) = \sum_{x \in X} \min_{y \in Y} \|x - y\|^2_2 + \sum_{y \in Y} \min_{x \in X} \|x - y\|^2_2
\end{equation}
La distance de Chamfer est une mesure de similarité entre deux ensembles de points dans un espace métrique. Elle évalue la proximité entre les points des ensembles en calculant la somme des distances entre chaque point d'un ensemble et son point le plus proche dans l'autre ensemble.
\subsubsection{\gls{emd}}
Soit $X$ et $Y$ deux nuages de points tels que $|X| = |Y|$, et $\phi: X \to Y$ une bijection.
$$ d_{\text{EMD}}(X, Y) = \min_{ \phi: X \to Y } \sum_{x \in X} \| x - \phi(x) \|_2 $$
\begin{equation}
d_{\text{EMD}}(X, Y) = \min_{ \phi: X \to Y } \sum_{x \in X} \| x - \phi(x) \|_2
\end{equation}
La distance du transport optimal, également appelée distance du "Earth Mover", est une mesure de similarité entre deux distributions de masse dans un espace métrique. Elle évalue le coût minimum nécessaire pour déplacer une distribution de masse en une autre en respectant certaines contraintes de déplacement. Cette distance est couramment utilisée pour comparer des distributions de données, telles que des histogrammes, des vecteurs de caractéristiques ou des nuages de points, en prenant en compte non seulement les distances entre les éléments correspondants, mais aussi les coûts associés à leur déplacement.
\subsubsection{\gls{jsd}}
Soit $S_g$ un ensemble de nuages de points générés et $S_r$ un ensemble de nuages de points de référence.
$$ \text{JSD}(S_g, S_r) = \frac12 D_{\text{KL}}(S_g \| M) + \frac12 D_{\text{KL}}(S_r \| M), \quad M = \frac12 (S_g + S_r) $$
\begin{equation}
\text{JSD}(S_g, S_r) = \frac12 D_{\text{KL}}(S_g \| M) + \frac12 D_{\text{KL}}(S_r \| M), \quad M = \frac12 (S_g + S_r)
\end{equation}
La divergence de Jensen-Shannon est une mesure de la similarité entre deux distributions de probabilité. Elle est calculée comme la moyenne des \gls{kld} entre chaque distribution et la moyenne de ces distributions.
Cependant, la \gls{jsd} utilise la distribution globale des nuages de points et non la distribution des nuages de points individuellements. Ainsi, un modèle qui produit toujours une "forme moyenne" peut obtenir un score \gls{jsd} parfait sans apprendre de distributions significatives.
\subsubsection{\gls{cov}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence et $D$ une distance entre nuages de points.
$$ \text{COV}(S_g, S_r) = \frac{ | \{ \argmin_{Y \in S_r} D(X, Y) | X \in S_g \} | }{ |S_r| } $$
\begin{equation}
\text{COV}(S_g, S_r) = \frac{ | \{ \argmin_{Y \in S_r} D(X, Y) | X \in S_g \} | }{ |S_r| }
\end{equation}
La couverture évalue le nombre de nuages de points de référence qui sont appariés à au moins une forme générée.
La couverture permet de quantifier la diversité des générations mais est sensible à la perte de modes, cependant elle n'évalue pas la qualité des nuages de points générés.
Ainsi, des nuages de points générés de faible qualité mais diversifiés peuvent obtenir des scores de couverture élevés.
@ -426,18 +432,18 @@ Ainsi, des nuages de points générés de faible qualité mais diversifiés peuv
\subsubsection{\gls{mmd}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence et $D$ une distance entre nuages de points.
$$ \text{MMD}(S_g, S_r) = \frac{1}{|S_r|} \sum_{Y \in S_r} \min_{X \in S_g} D(X, Y) $$
\begin{equation}
\text{MMD}(S_g, S_r) = \frac{1}{|S_r|} \sum_{Y \in S_r} \min_{X \in S_g} D(X, Y)
\end{equation}
La distance de correspondance minimale, est une mesure qui évalue la différence entre deux ensembles ordonnés. Elle calcule la plus petite somme des distances entre les éléments des deux ensembles.
Cependant, la \gls{mmd} est en réalité très peu sensible aux nuages de points de qualité médiocre dans $S_g$, étant donné leur faible probabilité d'être appariés avec des nuages de points réels dans $S_r$. Dans un cas extrême, on pourrait envisager que $S_g$ soit composé principalement de nuages de points de très mauvaise qualité, mais ayant des sous-ensembles de points très similaires à ceux de $S_r$. Dans ce cas, on obtiendrait un score de raisonnablement élevé.
\subsubsection{\gls{1-nna}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence, $N_X$ les voisins les plus proches de $X$ dans $S_{-X} = S_r \cup S_g - \{X\}$, $N_Y$ les voisins les plus proches de $Y$ dans $S_{-Y} = S_r \cup S_g - \{Y\}$ et $\mathbb{1}$ la fonction indicatrice.
$$ \text{1-NNA}(S_g, S_r) = \frac{ \sum_{X \in S_g} \mathbb{1}[N_X \in S_g] + \sum_{Y \in S_r} \mathbb{1}[N_Y \in S_r] }{ |S_g| + |S_r| } $$
\begin{equation}
\text{1-NNA}(S_g, S_r) = \frac{ \sum_{X \in S_g} \mathbb{1}[N_X \in S_g] + \sum_{Y \in S_r} \mathbb{1}[N_Y \in S_r] }{ |S_g| + |S_r| }
\end{equation}
Pour chaque point d'un ensemble de nuages de points, cette mesure évalue par une classification par plus proche voisin, si celui-ci provient de $S_g$ ou de $S_r$. La précision de cette classification est ensuite calculée comme la moyenne des précisions de chaque point de $S_g$ et de $S_r$.
En supposant que $S_g$ et $S_r$ soient échantillonnés à partir de la même distribution, la précision d'un tel classificateur devrait converger vers 50\% avec un nombre suffisant d'échantillons. Plus la précision se rapproche de 50\%, plus les similarités entre $S_g$ et $S_r$ sont prononcées, ce qui indique une meilleure capacité du modèle à apprendre la distribution cible. Dans notre contexte, le plus proche voisin peut être calculé à l'aide de la \gls{cd} ou de l'\gls{emd}. Contrairement à la \gls{jsd}, le \gls{1-nna} considère la similarité entre les distributions de formes plutôt qu'entre les distributions totale des points. Contrairement au \gls{cov} et au \gls{mmd}, le \gls{1-nna} mesure directement la similarité des distributions et prend en compte à la fois la diversité et la qualité.
@ -469,18 +475,28 @@ Dans leur architecture, les \gls{vdm}s peuvent être vus comme une chaine de Mar
On note $q$ les "encodeurs" et $p$ les "décodeurs" des \gls{vae}s de la chaine de Markov, $x_0 \sim \boldsymbol{x}_0$ un échantillon de notre distribution de données, $x_T \sim \boldsymbol{x}_T$ un échantillon d'une normale isotropique, et $x_t \sim \boldsymbol{x}_t$ tout échantillon intermédiaire, avec $t$ le temps de diffusion, $T$ le temps final de diffusion.
D'après les contraintes précédentes, on peut écrire pour le forward process:
$$ q(\boldsymbol{x}_t | \boldsymbol{x}_{t-1}) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\alpha_t} \boldsymbol{x}_0, (1 - \alpha_t) \mathbf{I} ) $$
\begin{equation}
q(\boldsymbol{x}_t | \boldsymbol{x}_{t-1}) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\alpha_t} \boldsymbol{x}_0, (1 - \alpha_t) \mathbf{I} )
\end{equation}
avec $\alpha_t \in [0, 1]$ qui évolue en $t$ selon une suite fixée ou apprenable (i.e. via un réseau de neurones).
Cependant puisque toutes ces opérations sont linéaires et gaussiennes, si l'on souhaite obtenir $x_t$ à partir de $x_0$, au lieu d'appliquer $t$ fois cette relation, on peut simplifier comme suit:
$$ q(\boldsymbol{x}_t | \boldsymbol{x}_0) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\overline\alpha_t} \boldsymbol{x}_0, (1 - \overline\alpha_t) \mathbf{I} ), \quad \overline\alpha_t = \prod_{t=1}^t \alpha_t$$
\begin{equation}
q(\boldsymbol{x}_t | \boldsymbol{x}_0) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\overline\alpha_t} \boldsymbol{x}_0, (1 - \overline\alpha_t) \mathbf{I} ), \quad \overline\alpha_t = \prod_{t=1}^t \alpha_t
\end{equation}
L'objectif de la diffusion est de trouver une approximation du processus inverse $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t) \approx p(\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$.
Cependant via une dérivation de l'\gls{elbo} et un conditionnement additionnel, on peut montrer que cela revient à minimiser la \gls{kld} entre $q(\boldsymbol{x}_{t-1} | \boldsymbol{x}_t, \boldsymbol{x_0})$ et $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$. Ensuite, via une application de la formule de Bayes, on obtient:
$$ q(\boldsymbol{x}_{t-1} | \boldsymbol{x}_t, \boldsymbol{x_0}) \propto \mathcal{N} ( \boldsymbol{x}_{t-1}; \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0), \Sigma_q (\boldsymbol{x}_t) ) $$
\begin{equation}
q(\boldsymbol{x}_{t-1} | \boldsymbol{x}_t, \boldsymbol{x_0}) \propto \mathcal{N} ( \boldsymbol{x}_{t-1}; \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0), \Sigma_q (\boldsymbol{x}_t) )
\end{equation}
avec:
$$ \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{ \sqrt{\alpha_t} (1 - \overline{\alpha}_{t-1}) \boldsymbol{x}_t + \sqrt{\overline{\alpha}_{t-1}} (1 - \alpha_t) \boldsymbol{x}_0 } { 1 - \overline{\alpha}_t }, \quad \Sigma_q (\boldsymbol{x}_t) = \frac{ (1 - \alpha_t)(1 - \overline{\alpha}_{t-1}) } { 1 - \overline{\alpha}_t } $$
\begin{equation}
\mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{ \sqrt{\alpha_t} (1 - \overline{\alpha}_{t-1}) \boldsymbol{x}_t + \sqrt{\overline{\alpha}_{t-1}} (1 - \alpha_t) \boldsymbol{x}_0 } { 1 - \overline{\alpha}_t }, \quad \Sigma_q (\boldsymbol{x}_t) = \frac{ (1 - \alpha_t)(1 - \overline{\alpha}_{t-1}) } { 1 - \overline{\alpha}_t }
\end{equation}
On peut finalement simplifier cette expression via une reparamétrisation:
$$ \boldsymbol{x}_0 = \frac{ \boldsymbol{x}_T - \sqrt{1 - \overline{\alpha}_t} \epsilon_0 } { \sqrt{\overline{\alpha}_t} } \implies \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{ 1 } { \sqrt{\alpha} } \boldsymbol{x}_t - \frac{ 1 - \alpha_t } { \sqrt{ 1 - \overline{\alpha}_t } \sqrt{\alpha_t} } \epsilon_0 $$
\begin{equation}
\boldsymbol{x}_0 = \frac{ \boldsymbol{x}_T - \sqrt{1 - \overline{\alpha}_t} \epsilon_0 } { \sqrt{\overline{\alpha}_t} } \implies \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{ 1 } { \sqrt{\alpha} } \boldsymbol{x}_t - \frac{ 1 - \alpha_t } { \sqrt{ 1 - \overline{\alpha}_t } \sqrt{\alpha_t} } \epsilon_0
\end{equation}
Si l'on réeffectue une dérivation de l'\gls{elbo} avec ces nouvelles expressions, on en conclut qu'il suffit de trouver une approximation $\epsilon_\theta (\boldsymbol{x}_t, t) \approx \epsilon_0$. En pratique on utilise un réseau de neurones que l'on entraine à minimiser $|\| \epsilon_0 - \epsilon_\theta (\boldsymbol{x}_t, t) \|_2^2$. Une fois cette approximation trouvée, on peut facilement remonter à $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$.
Il est possible de démontrer théoriquement~\cite{luo_understanding_2022} l'équivalence entre les \gls{vdm}s et les méthodes de score matching~\cite{song_generative_2020} lorsque $T$ tend vers l'infini. Les méthodes de score matching, constituent une famille de techniques permettant l'estimation de la densité de probabilité associée à un ensemble de données. Elles se basent exclusivement sur le calcul du gradient de cette densité de probabilité, éliminant ainsi la nécessité du calcul laborieux d'une constante de normalisation. Une fois le gradient estimé, la densité de probabilité peut être retrouvée au moyen de méthodes d'échantillonnage telles que la méthode de recuit de Langevin~\cite{song_generative_2020}.
@ -500,33 +516,41 @@ Après avoir achevé l'entraînement adéquat de notre modèle, nous acquérons
\label{fig:ldm-architecture}
\end{figure}
Une amélioration significative des \gls{vdm}s réside dans la mise en œuvre intelligente des espaces latents. Cette méthode, dénommée \gls{ldm}~\cite{rombach_high-resolution_2022}, repose sur l'observation selon laquelle l'exploitation des informations latentes, souvent de dimension nettement réduite, confère des avantages substantiels en termes de représentativité des données. La transition des \gls{vdm} vers les \gls{ldm} consiste en l'introduction préalable d'un second modèle, qu'il soit paramétrique ou non, destiné à obtenir une représentation latente de nos données. L'autoencodeur est fréquemment employé pour reconstruire fidèlement les données d'entrée, tandis que les représentations latentes alimentent le réseau de propagation subséquent. Cette approche induit une réduction de la complexité du réseau, entraînant ainsi une diminution du temps nécessaire à l'entraînement, tout en exerçant une influence forte sur la qualité des résultats obtenus.
Une amélioration significative des \gls{vdm}s réside dans la mise en œuvre intelligente des espaces latents. Cette méthode, dénommée \gls{ldm}~\cite{rombach_high-resolution_2022}, repose sur l'observation selon laquelle l'exploitation des informations latentes (souvent de dimensions nettement réduites), tout comme pour les \gls{vae}s, confère des avantages substantiels en termes de représentativité des données. La transition des \gls{vdm} vers les \gls{ldm} consiste en l'introduction préalable d'un second modèle, qu'il soit paramétrique ou non, destiné à obtenir une représentation alternative de nos données.
Les \gls{vae}s sont fréquemment employés à cet effet. L'entrainement des \gls{ldm}s ne changent pas par rapport aux \gls{vdm}s, seul le domaine d'apprentissage du modèle est modifié. Ainsi cette approche induit généralement une réduction de la complexité du réseau, entraînant ainsi une diminution du temps nécessaire à l'entraînement, tout en exerçant une influence forte sur la qualité des résultats obtenus.
\FloatBarrier
\subsubsection{Conditionnemnt \& Guidance}
\subsubsection{Conditionnement \& Guidance}
Jusqu'à présent, les modèles génératifs ont démontré leur capacité à générer des données conformes à une distribution de données apprise. Cependant, il est fréquemment nécessaire d'échantillonner une sous-distribution spécifique de nos données. À cette fin, il est possible de conditionner le modèle en utilisant une donnée d'entrée, tel que du texte, à l'instar des modèles de type "texte2image" tels que DALL·E 2 ou Stable Diffusion.
Jusqu'à présent, les modèles génératifs ont démontré leur capacité à générer des données conformes à une distribution de données apprise. Cependant, il est fréquemment nécessaire d'échantillonner une sous-distribution spécifique de nos données. À cette fin, il est possible de conditionner le modèle en utilisant une seconde donnée d'entrée, tel qu'une image, un scalaire, un audio, ou du texte, à l'instar des modèles de type \gls{t2i} tels que DALL·E 2 ou Stable Diffusion.
Jusqu'à présent, capable de générer des données selon une distribution de données apprise. Cependant nous avons souvent besoin d'échantilloner une sous distribution de nos données. Pour cela, il est possible de conditionner le modèle sur une donnée d'entrée, comme par example du texte comme les modèles de text2image tels que DALL-E2 ou Stable Diffusion.
Deux méthodes sont possibles pour permettre à des modèles de diffusion de générer des données conditionnées.
Deux méthodes existent actuellement pour permettre à des modèles de diffusion de générer des données conditionnées.
% TODO: vérifier les citations, pas sur que ça corresponde
La première méthode est appelée Classifier Guidance~\cite{dhariwal_diffusion_2021} et repose sur l'entraiement d'un classifier annexe $f_\phi(y | x_t)$ entrainé sur des données bruitées $x_t$ ainsi que leur classes associées $y$. Le logarithme du gradient de ce classifier est alors utilisé pour guider le modèle de diffusion. Ainsi selon la formulation du score matching on obtient:
$${x_t} \log q_\theta (x_t, y) = {x_t} \log q (x_t) + \gamma {x_t} \log q (y | x_t)$$
$$\approx -\frac{1}{\sqrt{1 - \alpha_t}} \epsilon_\theta (x_t, t) + \gamma {x_t} \log f_\phi (y | x_t)$$
La première méthode est appelée Classifier Guidance~\cite{dhariwal_diffusion_2021} et repose sur l'entraiement d'un classificateur annexe $f_\phi(y | x_t)$ entrainé sur des données bruitées $x_t$ ainsi que leur classes associées $y$. Le logarithme du gradient de ce classifier est ensuite utilisé pour guider le modèle de diffusion. Ainsi selon la formulation du score matching on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & = \nabla_{\boldsymbol{x}_t} \log p \left( \frac{ p(\boldsymbol{x}_t) p(y | \boldsymbol{x}_t) }{ p(y) } \right) \\
& = \underbrace{ \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t) }_{\text{unconditional score}} + \underbrace{ \nabla_{\boldsymbol{x}_t} \log q (y | \boldsymbol{x}_t) }_{\text{adversarial gradient}} \label{eq:165}
\end{align}
Si l'on remplace $q( y | \boldsymbol{x}_t )$ par $f_\phi ( y | \boldsymbol{x}_t )$ on obtient, et que l'on introduit un facteur de guidage $\gamma$, on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & \approx \nabla_{\boldsymbol{x}_t} \log q (\boldsymbol{x}_t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t) \label{eq:166} \\
& = - \frac{1}{ \sqrt{1 - \overline{\alpha}_t} }\epsilon_\theta(\boldsymbol{x}_t, t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t)
\end{align}
% https://perceptron.blog/defusing-diffusion/
La seconde méthode est appelée Classifer-Free Guidance~\cite{ho_classifier-free_2022, nichol_glide_2022} et repose sur l'entraînement d'un unique réseau de neurones ayant pour objectif d'apprend à la fois la distribution conditionnelle et non conditionnelle. En réarrangeant equation 165, on obtient:
$$ {x_t} \log p (y, x_t) = {x_t} \log p (x_t, y) - {x_t} \log p (x_t) $$
substituion de l'équation 166:
...
La seconde méthode est appelée Classifer-Free Guidance~\cite{ho_classifier-free_2022, nichol_glide_2022} et repose sur l'entraînement d'un unique réseau de neurones ayant pour objectif d'apprend à la fois la distribution conditionnelle et non conditionnelle. En réarrangeant l'équation \ref{eq:165}, on obtient:
\begin{equation}
\nabla_{\boldsymbol{x}_t} \log p (y | \boldsymbol{x}_t) = \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t, y) - \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t)
\end{equation}
En subsituant l'équation \ref{eq:166} dans l'équation ci-dessus, on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & = \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t) + \gamma ( \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) - \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) ) \\
& = \underbrace{ \gamma \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) }_{\text{conditional score}} + \underbrace{ (1 - \gamma) \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) }_{\text{unconditional score}}
\end{align}
Cette approche présente divers avantages. Premièrement, elle s'appuie sur un unique réseau de neurones, contrairement à la méthode guidée par classificateur qui en utilise deux. Deuxièmement, l'entraînement ne devient pas significativement plus complexe ; nous procédons de la même manière qu'auparavant, en ajoutant simplement les embeddings et en parfois excluant ces embeddings pour apprendre en conditionnement non contraint. Troisièmement, les données telles que le texte se prêtent difficilement à une classification en classes, et l'approche sans classificateur permet l'utilisation de vecteurs scalaires pour le conditionnement.
@ -534,20 +558,10 @@ Dans notre cas d'application, nous pouvons conditionner sur les scalaires repres
% https://liorsinai.github.io/coding/2023/01/04/denoising-diffusion-3-guidance.html#guided-diffusion
Plusieurs sous-familles de modèles existent pour faire de la diffusion, la plus connue d'entre elles étant les \gls{ddpm}~\cite{ho_denoising_2020}. Cette méthode consiste à trouver un mapping réversible entre nos données et une gaussienne isotropique.
L'étape d'entraînement du réseau repose sur une méthodologie relativement simple. Tout d'abord, nous sélectionnons un échantillon du jeu de données. Pour générer un échantillon bruité, nous l'altérons en ajoutant un bruit gaussien, dont l'intensité est ajustée selon un programme prédéfini. Ensuite, cet échantillon bruité est introduit dans le réseau, qui effectue une prédiction du bruit ajouté. Pour évaluer la précision de cette prédiction, nous comparons les résultats avec le bruit réel, ce qui nous permet de calculer un coût en utilisant la métrique \gls{mse}. En procédant à la rétropropagation de ce coût, nous mettons à jour les poids du réseau grâce à un algorithme d'optimisation approprié. Ce processus est répété pour chaque échantillon du jeu de données, en variant les intensités du bruit utilisé, jusqu'à atteindre la convergence, c'est-à-dire lorsque le modèle atteint un état stable et performant.
Une fois notre modèle correctement entraîné, nous sommes donc en mesure de débruiter nos données. Toutefois, l'intérêt majeur réside dans la situation où nous demandons à notre réseau de débruiter un signal de bruit pur (le rapport signal/bruit est de zéro). À ce moment-là, le réseau commence à générer des répliques (des hallucinations) qui ressemblent de manière frappante à nos données d'entraînement.
\cite{zhou_3d_2021}
\cite{nguyen_point-set_2021}
\cite{zeng_lion_2022}
\cite{nichol_point-e_2022}
\cite{nam_3d-ldm_2022}
\FloatBarrier
\glsreset{arm}
\subsection{\gls{arm}}
@ -563,6 +577,8 @@ Une fois notre modèle correctement entraîné, nous sommes donc en mesure de d
Les modèles auto-régressifs sont des méthodes de génération de séquences qui utilisent les éléments précédents pour prédire chaque élément suivant. Ces modèles sont largement utilisés dans le domaine du traitement du langage naturel, où ils ont montré d'excellentes performances. Cependant, l'application de ces modèles à la génération de graphes présente des défis particuliers en raison de la structure complexe des graphes. En effet, les graphes sont des structures de données non régulières et non séquentielles, ce qui rend difficile l'utilisation des modèles auto-régressifs. Malgré cela, plusieurs approches~\cite{nash_polygen_2020,liao_efficient_2020} ont été proposées pour adapter ces modèles à la génération de graphes. Cependant, il est important de noter que ces modèles deviennent de moins en moins précis de manière exponentielle à mesure que la taille de la séquence à générer augmente. De ce fait nous n'avons pas encore utilisé ces modèles dans nos travaux.
% fouttre des figures algos, ça sera plus simple
\FloatBarrier
\glsreset{nerf}
\subsection{\gls{nerf}}