\chapter{Sujet thèse : Le Paradigme Gaussien}
%TODO Complete chapter

%\section{A propos de moi}
%
%J'ai conclu septembre dernier ma seconde année de master à la MIAGE \citeannexes{miage_website} spécialité IA2 \citeannexes{ia2_website} et je suis actuellement en recherche d'un poste de doctorant en intelligence artificielle sur les modèles génératifs (GAN \citereferences{generative_adversarial_nets}, auto-encodeur variationnel \citereferences{vae_paper}, etc.).
%Malheureusement, il n'y que très peu sujets dans ce domaine en France, c'est pourquoi, je suis dans l'optique de proposer mon propre sujet.
%
%Le sujet que je propose est mi-mathématiques théoriques (théorie de la mesure, théorie de l'information, etc.) et mi-informatique (modèles génératifs, processus gaussien, etc.) et vise à unifier les différents paradigmes de l'apprentissage profond (i.e. deep learning).

\section{Abstract}

La mode actuelle dans l'apprentissage profond en termes de classification est d'établir un hyperplan qui sépare le mieux possible les points d'un set de données de façon déterministique.
Cette méthodologie héritée des machines à vecteurs de supports (i.e. SVM \citereferences{Weston1999SupportVM}) maximise la marge (e.g. hinge loss), pourtant, cette approche s'éloigne énormément de l'anthropomorphisme recherché par les réseaux neuronaux.
Car cette approche vise à différencier les classes entre toutes les autres (duel $1$ vs $N-1$ classes) ce qui résulte un hyperplan dont on ne peut que difficilement interpréter les résultats.

De plus, si on rajoute des classes, on doit entraîner à nouveau le modèle ou, au minima, entraîner à nouveau la dernière couche avec l'apprentissage par transfert \citereferences{transfer_learning_survey}.
Une approche plus anthropomorphiste serait d'entraîner un modèle qu'y se base non sur les différences, mais sur les similitudes. Cela permettra également d'unifier plusieurs paradigmes de l'apprentissage automatique tel que la classification, la détection d'anomalie, la génération d'échantillons ainsi que l'apprentissage semi-supervisée.

Plusieurs tentatives d'unification des paradigmes ont été tentées comme le fait d'utiliser un modèle génératif de type GAN \citereferences{generative_adversarial_nets} pour faire de la classification \citereferences{semi-supervised_learning_with_deep_generative_models}. Pourtant le fait que tout les modèles entraînées par descente de gradient sont des approximations de machine de kernel \citereferences{every_model_learned_by_gradient_descent_is_approximately_a_kernel_machine} montre que le problème est intrinsèque au paradigme et donc qu'il peut être intéréssant de changer d'approche.

\section{Sujet}

Le but du sujet est de créer un modèle caractériser comme un réseau de neurones probabilistes qui, sur un set de données défini tel que :

$D = \{ (x_1, y_1),\dots, (x_n, y_n)\} \subseteq \mathcal{R}^d * \mathcal{C}$
\begin{itemize}
	\item $\mathcal{C}$ est l'espace vectoriel des labels
	\item $x_i$ est le i-ème vecteur du set
	\item $y_i$ est le i-ème label du set
	\item $\mathcal{R}^d$ est l'espace vectoriel à $d$ dimensions
\end{itemize}

Le modèle maximisera une approximation de la distribution de $P(X)$, sachant que grâce au théorème central limite, nous pouvons raisonnablement prédire que la distribution sera gaussienne, ce qui est essentiel pour ce qui suit.

Et à partir de cette distribution, nous pouvons assigner un point $x_i$ du set à son label $y_i$ et donc estimer de manière fractale (comme le permet le théorème centrale limite) chaque sous distribution $P(X|Y)$. Cette approche permet, si on dispose de nouvelles données, d'uniquement utiliser celle-ci et non le set entier, ce qui réduit considérablement le temps d'entraînement.

\section{Applications}

Avec ce changement intrinsèque dans la manière d'entraîner les modèles nous avons avec ces distributions, plusieurs choix possibles comme :
\begin{itemize}
	\item Classification : on peux inférer le label en calculant l'argmin de chaque divergence de Kullback-Leibler \citereferences{kl_divergence} pour toutes les distributions
	\item Détection d'anomalie : chaque sous distribution est gaussienne, donc un calcul du z-score ($Z=\frac{x-\mu}{\sigma}$) permet de détecter une potentielle anomalie
	\item Génération d'échantillons : avec les paramètres estimés de chaque distribution, nous pouvons utiliser un vecteur $\mathcal{N}(\mu',\sigma')$ pour générer de nouveaux vecteurs dans l'espace vectoriel estimé
	\item Apprentissage semi-supervisée : l'entraînement du modèle ne dépend pas de $Y$ donc nous pouvons entraîner le modèle avec le maximum de données non labellisé. Ensuite, en labellisant que certains points $X$ le modèle pourra déduire quels points sont les plus similaires et en conséquence les plus susceptibles d'être du même label.
\end{itemize}

\section{Travaux}

J'ai déjà fait plusieurs projets sur de l'intelligence artificielle dont notamment :

\begin{itemize}
	\item Auto encodeur variationnel (i.e. VAE \citereferences{variational_lossy_autoencoder}) avec PyTorch \citeannexes{pytorch_website} \citeannexes{project_vae}
	\item Wasserstein GAN avec pénalité de gradient (i.e. WGAN-GP \citereferences{wgan-gp_paper}) avec TensorFlow \citeannexes{tf_website} et Keras \citeannexes{keras_website} \citeannexes{project_wgan-gp}
	\item Régression linéaire en utilisant plusieurs algorithmes d'optimisations comme le momentum \citereferences{momentum_paper}, le gradient accéléré de Nesterov \citereferences{nesterov_gradient_paper}, Adagrad \citereferences{adagrad_paper}, Adadelta \citereferences{adadelta_paper}, RMSprop \citereferences{rmsprop_lecture} et Adam \citereferences{adam_paper} avec Numpy \citeannexes{numpy_website} \citeannexes{project_reglin}
\end{itemize}

Vous pouvez également trouver mes autres travaux directement sur mon portfolio \citeannexes{personnal_portfolio}.

