mi024

College project "Projet IAD" master 1
git clone https://esimon.eu/repos/mi024.git
Log | Files | Refs | README

specifications.tex (9863B)


      1 \documentclass[11pt,a4paper]{report}
      2 \usepackage{amsfonts}
      3 \usepackage{setspace}
      4 \usepackage{graphicx}
      5 \usepackage{url}
      6 \usepackage{epstopdf}
      7 \usepackage[T1]{fontenc}
      8 \usepackage[utf8]{inputenc}
      9 \usepackage[french]{babel}
     10 \usepackage{tikz}
     11 \usepackage{tikz-uml}
     12 \usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,decorations.text}
     13 
     14 \newcommand{\nmlp}{\textsc{nmlp}}
     15 \renewcommand{\thesection}{\arabic{section}}
     16 
     17 \begin{document}
     18 \begin{titlepage}
     19 \begin{center}
     20 	\begin{minipage}{0.58\textwidth}
     21 		\includegraphics[width=\textwidth]{images/UPMC_logotype}
     22 	\end{minipage}
     23 	\begin{minipage}{0.4\textwidth}
     24 		\begin{center}
     25 		\texttt{M I 0 2 4}\\
     26 		\vspace{2ex}
     27 		\textbf{\Large Projet IAD}
     28 		\end{center}
     29 	\end{minipage}
     30 	\vfill
     31 	\begin{spacing}{2}
     32 	\textbf{\textsc{\huge Vers une Machine d'apprentissage persistante}}
     33 	\end{spacing}
     34 	\vspace{0.1\textheight}
     35 	{\LARGE Cahier des charges}\\
     36 	\vspace{0.1\textheight}
     37 	{\Large Auteur~: \hfill Encadrant~: \\
     38 	Étienne Simon \hfill Ludovic Denoyer}
     39 	\vfill
     40 	\today
     41 \end{center}
     42 \end{titlepage}
     43 
     44 \tableofcontents
     45 \pagebreak
     46 
     47 \section{Objectif du PIAD}
     48 \subsection{Présentation}
     49 Ce PIAD est intitulé «~Vers une Machine d'apprentissage persistante.~»
     50 L'objectif sera d'écrire une plateforme pour l'apprentissage et le raisonnement sur des données hétérogènes.
     51 Les modèles ainsi appris devront être conservés dans une base de données en vue de leur réutilisation.
     52 
     53 \subsection{Cadre}
     54 Le projet sera utilisé dans le cadre de la classification dans des réseaux hétérogènes.
     55 Cela fera en projetant les données de différents types dans un espace latente (commun).
     56 
     57 \begin{figure}[h]
     58 	\centering
     59 	\begin{tikzpicture}
     60 		[coder/.style={->,ultra thick,postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={|\sffamily|#1}}}}]
     61 
     62 		\node [draw,rectangle,rounded corners,minimum size=3cm] (latent space) {Espace latent \(Z\)};
     63 		\path (latent space.south)+(-4,-4) node [draw,rectangle,minimum size=2cm] (view 1) {Vue \(X_1\)};
     64 		\path (latent space.south)+(0,-4) node [draw,rectangle,minimum size=2cm] (view 2) {Vue \(X_2\)};
     65 		\path (latent space.south)+(4,-4) node [draw,rectangle,minimum size=2cm] (view 3) {Vue \(X_3\)};
     66 		\draw [coder=encodeur] (view 1.95) to [bend left=15] (latent space.-125);
     67 		\draw [coder=d{é}codeur] (latent space.-115) to [bend left=15] (view 1.85);
     68 		\draw [coder=encodeur] (view 2.95) to [bend left=15] (latent space.-95);
     69 		\draw [coder=d{é}codeur] (latent space.-85) to [bend left=15] (view 2.85);
     70 		\draw [coder=encodeur] (view 3.95) to [bend left=15] (latent space.-65);
     71 		\draw [coder=d{é}codeur] (latent space.-55) to [bend left=15] (view 3.85);
     72 		\draw (latent space.center)+(0,1) node {\(\times z_1\)};
     73 		\draw (latent space.center)+(1,0.5) node {\(\times z_2\)};
     74 		\draw (latent space.center)+(-0.5,-1) node {\(\times z_3\)};
     75 		\draw (view 1.center)+(0.5,0.5) node {\scriptsize\(\times x_1^1\)};
     76 		\draw (view 1.center)+(-0.5,-0.5) node {\scriptsize\(\times x_1^2\)};
     77 		\draw (view 2.center)+(-0.5,0.5) node {\scriptsize\(\times x_2^3\)};
     78 		\draw (view 2.center)+(0,-0.5) node {\scriptsize\(\times x_2^2\)};
     79 		\draw (view 3.center)+(0.5,0.5) node {\scriptsize\(\times x_3^2\)};
     80 	\end{tikzpicture}
     81 	\caption{Relation entre les différents espaces}
     82 	\label{fig:latent_space_presentation}
     83 \end{figure}
     84 
     85 La figure \ref{fig:latent_space_presentation} présente les différents espaces entrant en jeu~:
     86 \begin{itemize}
     87 	\item Les vues sont les espaces d'observation, il y en a autant que de type de donnée.
     88 	      Par exemple la vue 1 peut être un espace d'observation textuel et la vue 2 un espace d'observation visuel, au quel cas le vecteur \(x_1^2\) correspond à un mot du type «~chat~» et le vecteur \(x_2^2\) à l'image d'un chat.
     89 	\item L'espace latent contient les concepts associés aux observations. En conservant l'exemple précèdent, \(z_2\) correspond au concept «~chat.~»
     90 \end{itemize}
     91 
     92 Pour faire le lien entre les vecteurs des espaces d'observation et le vecteur de l'espace latent, des encodeur et décodeur sont utilisés, il s'agit de fonctions \( e_i: X_i \mapsto Z \) et \( d_i: Z \mapsto X_i \).
     93 Celles-ci sont apprises par des perceptrons multicouches (MLP) selon les observations faites.
     94 
     95 Par ailleurs, des relations sont définis sur les concepts.
     96 Les relations sont des sous ensemble de \(Z^2\) elles aussi apprises par des MLP (qui apprendront plutôt des métriques du type \(Z^2 \mapsto \mathbb{R}\).)
     97 Un exemple de relation est «~auteur de~» dans le cadre d'un réseau avec des nœuds «~article~» et «~personne.~»
     98 
     99 \subsection{Objectifs principaux}
    100 \begin{figure}[ht]
    101 	\centering
    102 	\begin{tikzpicture}[scale=0.75, every node/.style={transform shape}]
    103 		\begin{umlsystem}[x=5]{Solution logicielle}
    104 			\umlusecase[y=-1,name=add_observation,width=3cm]{Ajout d'observation}
    105 			\umlusecase[y=-3,name=add_relation,width=3cm]{Ajout d'une relation}
    106 			\umlusecase[x=4,name=add_concept,width=3cm]{Ajout d'un concept}
    107 			\umlusecase[x=4,y=-2,name=add_relation_type,width=3cm]{Ajout d'un type de relation}
    108 			\umlusecase[x=4,y=-4,name=config_supervisor,width=3cm]{Configuration du superviseur}
    109 		\end{umlsystem}
    110 		\umlactor[y=-2]{Utilisateur}
    111 		\umlactor[x=14,y=-2]{Administrateur}
    112 
    113 		\umlassoc{Utilisateur}{add_observation}
    114 		\umlassoc{Utilisateur}{add_relation}
    115 		\umlassoc{Administrateur}{add_concept}
    116 		\umlassoc{Administrateur}{add_relation_type}
    117 		\umlassoc{Administrateur}{config_supervisor}
    118 	\end{tikzpicture}
    119 	\caption{Diagramme des cas d'utilisation}
    120 	\label{fig:use_case_diagram}
    121 \end{figure}
    122 
    123 L'objectif principal est d'écrire une plateforme d'apprentissage de représentations latentes.
    124 Les objets manipulés doivent être persistant, ainsi, on peut distinguer deux bases de données~:
    125 \begin{itemize}
    126 	\item Une base contenant les données d'apprentissage.
    127 	\item Une base contenant les modèles appris.
    128 \end{itemize}
    129 
    130 Les modèles sont appris sous l'égide d'un superviseur, se sont des MLP et il sont décomposables en trois catégories~:
    131 \begin{itemize}
    132 	\item Les encodeurs qui permettent de projeter un vecteur observé dans l'espace latent.
    133 	\item Les décodeurs qui permettent de projeter un vecteur concept de l'espace latent dans un espace d'observation.
    134 	\item Les métriques qui permettent d'établir des relations entre les concepts de l'espace latent.
    135 \end{itemize}
    136 
    137 \subsection{Contraintes techniques}
    138 \nmlp{} est une bibliothèque permettant l'apprentissage de MLP.
    139 Les MLP sont traités comme des ensembles de modules, qui sont appris sous la gouvernance d'un critère.
    140 La plateforme développée utilisera \nmlp{} pour la représentation et l'apprentissage des modèles.
    141 
    142 Le développement se fera en C++03 (ISO/IEC 14882:2003).
    143 De plus, le livrable devra se limiter autant que possible aux dépendances de \nmlp{}, c'est à dire les bibliothèques Boost et CUDA.
    144 Par ailleurs, le code devra fonctionner sous Windows et sous les divers *nix, n'ayant à disposition que des environnements FreeBSD et OpenBSD avec GCC et Clang, l'encadrant devra se charger de vérifier le fonctionnement du code sous Windows.
    145 Le livrable devra être compilable avec le moteur de production CMake utilisé par \nmlp{}.
    146 
    147 Pour s'assurer d'un suivi en temps réel du travail effectué, l'ensemble du livrable sera maintenue par un logiciel de gestion de versions, en l'occurrence un dépôt Mercurial sur Bitbucket~:\\
    148 \indent\indent\url{https://bitbucket.org/ejls/mi024}
    149 
    150 \section{Description de la solution demandée}
    151 \begin{figure}[h]
    152 	\centering
    153 	\begin{tikzpicture}
    154 		[action/.style={->,ultra thick,postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={|\sffamily|#1}}}}]
    155 		\node [draw, cylinder, shape border rotate=90, minimum height=4cm, minimum width=3.5cm, aspect=2.5, label={[above]Bases de données}] (database) {};
    156 		\path (database.center)+(0,0.75) node [draw] (model) {Modèles};
    157 		\path (database.center)+(0,-0.75) node [draw,align=center] (data) {Données \\ d'apprentissage};
    158 		\path (database.west)+(-3,0) node [draw, rectangle, rounded corners] (supervisor) {Superviseur};
    159 		\draw [<->, ultra thick] (model) to (supervisor);
    160 		\draw [->, ultra thick] (data) to (supervisor);
    161 		\umlactor[x=-5,y=-1.5]{Utilisateur}
    162 		\umlactor[x=-8,y=1.8]{Administrateur}
    163 		\draw [action=remplit] (Utilisateur) to (data);
    164 		\draw [action=initialise] (Administrateur) to (model);
    165 		\draw [action=configure] (Administrateur) to (supervisor);
    166 	\end{tikzpicture}
    167 	\caption{Diagramme (informel) présentant l'architecture de la solution logicielle.}
    168 	\label{fig:architecture}
    169 \end{figure}
    170 La figure~\ref{fig:architecture} présente les principaux composant de l'architecture logicielle.
    171 La majeure partie du travail s'effectuera sur le superviseur.
    172 À noté, qu'une fonctionnalité intéressante qui pourra être ajouté est le lancement en parallèle de plusieurs superviseurs (chacun sur un modèle différent), il pourra alors être intéressant de construire un composant pour gérer un ensemble de superviseur (qui enverrait les mêmes données à des superviseurs paramétrés différemment par exemple.)
    173 
    174 Une description plus détaillée avec une liste des activités et un calendrier sont présents dans le plan de développement.
    175 
    176 \section{Composition du livrable}
    177 \begin{itemize}
    178 	\item Un script de compilation CMake
    179 	\item Des binaires superviseurs
    180 	\item Une interface d'ajout de données d'apprentissage
    181 	\item Un contrôleur (serveur) gérant un ensemble de superviseur
    182 	\item La documentation du projet
    183 	\begin{itemize}
    184 		\item Le cahier des charges
    185 		\item Le plan de développement
    186 		\item Le dossier d'analyse et de conception
    187 		\item La documentation développeur
    188 		\item Le rapport des tests
    189 		\item Les manpages relatives aux différents binaires
    190 		\item Les README et INSTALL usuels
    191 		\item Le rapport final
    192 	\end{itemize}
    193 \end{itemize}
    194 \end{document}