2/3 trucs pour les slides

This commit is contained in:
Laureηt 2023-08-29 17:03:31 +02:00
parent 2d2cdabdf6
commit 895b864153
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI

View file

@ -93,9 +93,9 @@ Sous forme de maillage triangulaire, 30k nœuds, 60k triangles et 90k arêtes.
En chaque nœuds, positions, normales + physqique (température, pression, simu cfd).
\+ pour chaque échantillons, 5 métriques globales.
Maillage, mais connectivité assez "locales" (voisins proches dans l'espace, c'est pas comme un vrai graphe) donc dans la suite des travaux on va souvent utiliser seulement les noeuds. Ça nous arrange en plus, car connectivité des maillages trop complexe à prédire (quadratique), et y'a des techniques pour reconstruire la surface juste à partir des points.
Maillage (donc des graphes), mais connectivité assez "locales" (voisins proches dans l'espace) donc dans la suite des travaux on va souvent utiliser seulement les noeuds. Ça nous arrange en plus, car connectivité des maillages trop complexe à prédire (quadratique), et y'a des techniques pour reconstruire la surface juste à partir des points (ça marche plus ou moins bien, il faut souvent bcp de points)
On aurait aussi pu imaginer travailler directement sur la CAO de ces aubes, mais c'est bcp plus complexe, zero littérature et représentation pas uniques.
On aurait aussi pu imaginer travailler directement sur la CAO de ces aubes, mais c'est bcp plus complexe car représentation pas uniques, et zero littérature.
-->
---
@ -149,9 +149,9 @@ La famille qui nous interesse le plus ici c'est les modèles de diffusion, le pl
<!--
Il existe plusieurs méthodes pour faire de la diffusion, la plus simple/connue d'entre elles c'est DDPM. Le principe de cette méthode c'est d'apprendre un mapping réversible entre nos données et une gaussienne isotropique.
Ce mapping on va l'apprendre par l'intermédiaire d'un réseau débruiteur. Pour ce faire on prend une de nos données (x0), on la bruite (xt), on la donne notre réseau, on récupère la prédiction (eps_theta) de notre réseau, qu'on utilise ensuite pour optimiser le réseau à prédire le bruit que l'on a ajouté (eps).
Ce mapping on va l'apprendre par l'intermédiaire d'un réseau débruiteur. Pour se faire on prend une de nos données (x0), on la bruite (xt), on la donne notre réseau, on récupère la prédiction (eps_theta) de notre réseau, qu'on utilise ensuite pour optimiser le réseau à prédire le bruit que l'on a ajouté (eps).
Une fois le réseau entrainé, on est capable de débruité des données. Le plus intéressant c'est lorsque que l'on part d'un bruit blanc et que l'on demande quand même au réseau de débruiter. Le réseau se met à halluciner des informations, et génère finalement une nouvelle donnée qui se rapproche très fortement de celles qui a apprises.
Une fois le réseau entrainé, on est capable de débruité des données. Le plus intéressant c'est lorsque que l'on part d'un bruit blanc et que l'on demande quand même au réseau de débruiter. Le réseau se met à halluciner des informations, et génère finalement une nouvelle donnée qui se rapproche très fortement de celles qu'il a apprises.
-->
---
@ -205,8 +205,8 @@ Le résultat (ici kp-fcnn) est pas mal, mais pas ouffissime car il reste une bon
<!--
LDM part du constat que c'est plus efficace de travailler sur les informations latentes des données plutot que directement sur les données. Y'a toute une série de travaux sur la représentivité des réuseaux de neurones qui le prouve.
Pour ça tout ce qu'on fait c'est rajouter (généralement) un VAE en amont du modèle de diffusion pour permettre de passer de nos données à leurs représentation latente et inversement. Comme ces transformations agissent un peu comme une opération de compression (et de decompression) l'apprentissage du modèle de diffusion est plus simple.
La figure de gauche représente la quantité d'information en fonction de l'impact sur la génération, c'est un peu compliqué à expliquer, mais ça ressemble un peu aux modes d'une SVD en fait.
Pour ça, tout ce qu'on fait c'est rajouter (généralement) un VAE en amont du modèle de diffusion pour permettre de passer de nos données à leurs représentation latente et inversement. Comme ces transformations agissent un peu comme une opération de compression (et de decompression) l'apprentissage du modèle de diffusion est plus simple.
La figure de gauche représente "la quantité d'information dans un processus de reconstruction en fonction de l'impact sur la génération", c'est un peu compliqué à expliquer, mais ça ressemble un peu aux modes d'une SVD en fait.
Dans notre cas, puisque la structure des données s'y porte bien (bien régulière, noeuds tous dans le même ordre, ...) on peut se passer d'un VAE et utiliser une PCA pour obtenir un espace latent. Ça a l'avantage d'être non paramétrique, mais l'inconvenient d'être spécialisé sur un jeu de données (ce qui n'est pas super grave dans le cadre industriel).
-->
@ -221,7 +221,9 @@ Dans notre cas, puisque la structure des données s'y porte bien (bien réguliè
<a href="https://perceptron.blog/defusing-diffusion/" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Paweł Pierzchlewicz</a>
<!--
Autre amélioration, jusqu'à présent avec tout ce que j'ai dit, on est capable de générer des données qui ressemble à une certaine densité de probabilité x. Cependant couramment on veut générer des données qui ressemble à un sous ensemble de données (x,y) avec y la classe de x.
Autre amélioration !
jusqu'à présent avec tout ce que j'ai dit, on est capable de générer des données qui ressemble à une certaine densité de probabilité x. Cependant couramment on veut générer des données qui ressemble à un sous ensemble de données (x,y) avec y la classe de x. On appelle ça le conditionnement.
Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles étant la cfg. Le principe c'est d'entrainer notre réseau de diffusion conjointement à la prédiction non conditionnée et conditionnée. Jusque là rien de spécial, mais lors de l'échantillonage ça nous permet de faire une interpolation linéaire entre une prédiction non condtionnée et conditonnée pour guider la génération.
-->
@ -257,7 +259,7 @@ Problème, on est incapable de voir visuellement la différence entre une aube c
<!--
Donc on pourrait très bien entrainer un réseau de neurones pour faire la regression entre nos nuage de points (ou leur représentation latente, modes pca) et le critère de performances. Mais on a un peu la flemme, donc on peut utiliser des méthodes non paramétriques, telles que les GP.
Les GP c'est des méthodes à noyau probibilitiques. On a entre autre l'avantage d'avoir des intervals de confiances (diagramme saucisse) et aussi l'avantage que plus on met de données dans le modèles, plus celui-ci est précis (mathématiquement, pas juste comme en deep learning, où c'est un peu empirique).
Les GP c'est des méthodes à noyau, probibilitiques. On a entre autre l'avantage d'avoir des intervals de confiances (diagramme saucisse) et aussi l'avantage que plus on met de données dans le modèles, plus celui-ci est précis (mathématiquement, pas juste comme en deep learning, où c'est un peu empirique).
-->
---
@ -328,9 +330,17 @@ Figure du bas, on conditionne sur deux trucs en même temps, ça marche plutot b
- Vérifier le conditonnement par simulation CFD
- Remplacer la PCA par une méthode paramétrique
- Travailler directement sur les CAOs
- Tester des méthodes par RL
</div>
---
<div class="h-full w-full flex justify-center items-center">
# Annexes
</div>
---
@ -348,3 +358,23 @@ Figure du bas, on conditionne sur deux trucs en même temps, ça marche plutot b
<div class="flex items-center w-full bg-black">
<img src="/assets/pvd_points.gif" class="m-auto h-100">
</div>
---
<iframe scrolling="yes" src="https://distill.pub/2017/feature-visualization/" class="h-full w-full">
</iframe>
---
<style>
p {
height: 100%;
}
</style>
<embed
src="https://www.africau.edu/images/default/sample.pdf"
type="application/pdf"
width="100%"
height="100%"
/>