commit 6e97ca1c55e5c26cb03ebf0bb475c079f0e5a140
parent d0c4ff8e04e026837188b77d3248b4ff531d4439
Author: Étienne Simon <etienne.jl.simon@gmail.com>
Date: Mon, 25 Mar 2013 21:42:21 +0100
Déplacement du orig (oups).
Diffstat:
2 files changed, 1 insertion(+), 195 deletions(-)
diff --git a/doc/specifications.tex b/doc/specifications.tex
@@ -176,7 +176,7 @@ Une description plus détaillée avec une liste des activités et un calendrier
\section{Composition du livrable}
\begin{itemize}
\item Un script de compilation CMake
- \item Un binaire superviseur
+ \item Des binaires superviseurs
\item Une interface d'ajout de données d'apprentissage
\item Un contrôleur (serveur) gérant un ensemble de superviseur
\item La documentation du projet
diff --git a/doc/specifications.tex.orig b/doc/specifications.tex.orig
@@ -1,194 +0,0 @@
-\documentclass[11pt,a4paper]{report}
-\usepackage{amsfonts}
-\usepackage{setspace}
-\usepackage{graphicx}
-\usepackage{url}
-\usepackage{epstopdf}
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[french]{babel}
-\usepackage{tikz}
-\usepackage{tikz-uml}
-\usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,decorations.text}
-
-\newcommand{\nmlp}{\textsc{nmlp}}
-\renewcommand{\thesection}{\arabic{section}}
-
-\begin{document}
-\begin{titlepage}
-\begin{center}
- \begin{minipage}{0.58\textwidth}
- \includegraphics[width=\textwidth]{images/UPMC_logotype}
- \end{minipage}
- \begin{minipage}{0.4\textwidth}
- \begin{center}
- \texttt{M I 0 2 4}\\
- \vspace{2ex}
- \textbf{\Large Projet IAD}
- \end{center}
- \end{minipage}
- \vfill
- \begin{spacing}{2}
- \textbf{\textsc{\huge Vers une Machine d'apprentissage persistante}}
- \end{spacing}
- \vspace{0.1\textheight}
- {\LARGE Cahier des charges}\\
- \vspace{0.1\textheight}
- {\Large Auteur~: \hfill Encadrant~: \\
- Étienne Simon \hfill Ludovic Denoyer}
- \vfill
- \today
-\end{center}
-\end{titlepage}
-
-\tableofcontents
-\pagebreak
-
-\section{Objectif du PIAD}
-\subsection{Présentation}
-Ce PIAD est intitulé «~Vers une Machine d'apprentissage persistante.~»
-L'objectif sera d'écrire une plateforme pour l'apprentissage et le raisonnement sur des données hétérogènes.
-Les modèles ainsi appris devront être conservés dans une base de données en vue de leur réutilisation.
-
-\subsection{Cadre}
-Le projet sera utilisé dans le cadre de la classification dans des réseaux hétérogènes.
-Cela fera en projetant les données de différents types dans un espace latente (commun).
-
-\begin{figure}[h]
- \centering
- \begin{tikzpicture}
- [coder/.style={->,ultra thick,postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={|\sffamily|#1}}}}]
-
- \node [draw,rectangle,rounded corners,minimum size=3cm] (latent space) {Espace latent \(Z\)};
- \path (latent space.south)+(-4,-4) node [draw,rectangle,minimum size=2cm] (view 1) {Vue \(X_1\)};
- \path (latent space.south)+(0,-4) node [draw,rectangle,minimum size=2cm] (view 2) {Vue \(X_2\)};
- \path (latent space.south)+(4,-4) node [draw,rectangle,minimum size=2cm] (view 3) {Vue \(X_3\)};
- \draw [coder=encodeur] (view 1.95) to [bend left=15] (latent space.-125);
- \draw [coder=d{é}codeur] (latent space.-115) to [bend left=15] (view 1.85);
- \draw [coder=encodeur] (view 2.95) to [bend left=15] (latent space.-95);
- \draw [coder=d{é}codeur] (latent space.-85) to [bend left=15] (view 2.85);
- \draw [coder=encodeur] (view 3.95) to [bend left=15] (latent space.-65);
- \draw [coder=d{é}codeur] (latent space.-55) to [bend left=15] (view 3.85);
- \draw (latent space.center)+(0,1) node {\(\times z_1\)};
- \draw (latent space.center)+(1,0.5) node {\(\times z_2\)};
- \draw (latent space.center)+(-0.5,-1) node {\(\times z_3\)};
- \draw (view 1.center)+(0.5,0.5) node {\scriptsize\(\times x_1^1\)};
- \draw (view 1.center)+(-0.5,-0.5) node {\scriptsize\(\times x_1^2\)};
- \draw (view 2.center)+(-0.5,0.5) node {\scriptsize\(\times x_2^3\)};
- \draw (view 2.center)+(0,-0.5) node {\scriptsize\(\times x_2^2\)};
- \draw (view 3.center)+(0.5,0.5) node {\scriptsize\(\times x_3^2\)};
- \end{tikzpicture}
- \caption{Relation entre les différents espaces}
- \label{fig:latent_space_presentation}
-\end{figure}
-
-La figure \ref{fig:latent_space_presentation} présente les différents espaces entrant en jeu~:
-\begin{itemize}
- \item Les vues sont les espaces d'observation, il y en a autant que de type de donnée.
- 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.
- \item L'espace latent contient les concepts associés aux observations. En conservant l'exemple précèdent, \(z_2\) correspond au concept «~chat.~»
-\end{itemize}
-
-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 \).
-Celles-ci sont apprises par des perceptrons multicouches (MLP) selon les observations faites.
-
-Par ailleurs, des relations sont définis sur les concepts.
-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}\).)
-Un exemple de relation est «~auteur de~» dans le cadre d'un réseau avec des nœuds «~article~» et «~personne.~»
-
-\subsection{Objectifs principaux}
-\begin{figure}[ht]
- \centering
- \begin{tikzpicture}[scale=0.75, every node/.style={transform shape}]
- \begin{umlsystem}[x=5]{Solution logicielle}
- \umlusecase[y=-1,name=add_observation,width=3cm]{Ajout d'observation}
- \umlusecase[y=-3,name=add_relation,width=3cm]{Ajout d'une relation}
- \umlusecase[x=4,name=add_concept,width=3cm]{Ajout d'un concept}
- \umlusecase[x=4,y=-2,name=add_relation_type,width=3cm]{Ajout d'un type de relation}
- \umlusecase[x=4,y=-4,name=config_supervisor,width=3cm]{Configuration du superviseur}
- \end{umlsystem}
- \umlactor[y=-2]{Utilisateur}
- \umlactor[x=14,y=-2]{Administrateur}
-
- \umlassoc{Utilisateur}{add_observation}
- \umlassoc{Utilisateur}{add_relation}
- \umlassoc{Administrateur}{add_concept}
- \umlassoc{Administrateur}{add_relation_type}
- \umlassoc{Administrateur}{config_supervisor}
- \end{tikzpicture}
- \caption{Diagramme des cas d'utilisation}
- \label{fig:use_case_diagram}
-\end{figure}
-
-L'objectif principal est d'écrire une plateforme d'apprentissage de représentations latentes.
-Les objets manipulés doivent être persistant, ainsi, on peut distinguer deux bases de données~:
-\begin{itemize}
- \item Une base contenant les données d'apprentissage.
- \item Une base contenant les modèles appris.
-\end{itemize}
-
-Les modèles sont appris sous l'égide d'un superviseur, se sont des MLP et il sont décomposables en trois catégories~:
-\begin{itemize}
- \item Les encodeurs qui permettent de projeter un vecteur observé dans l'espace latent.
- \item Les décodeurs qui permettent de projeter un vecteur concept de l'espace latent dans un espace d'observation.
- \item Les métriques qui permettent d'établir des relations entre les concepts de l'espace latent.
-\end{itemize}
-
-\subsection{Contraintes techniques}
-\nmlp{} est une bibliothèque permettant l'apprentissage de MLP.
-Les MLP sont traités comme des ensembles de modules, qui sont appris sous la gouvernance d'un critère.
-La plateforme développée utilisera \nmlp{} pour la représentation et l'apprentissage des modèles.
-
-Le développement se fera en C++03 (ISO/IEC 14882:2003).
-De plus, le livrable devra se limiter autant que possible aux dépendances de \nmlp{}, c'est à dire les bibliothèques Boost et CUDA.
-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.
-Le livrable devra être compilable avec le moteur de production CMake utilisé par \nmlp{}.
-
-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~:\\
-\indent\indent\url{https://bitbucket.org/ejls/mi024}
-
-\section{Description de la solution demandée}
-\begin{figure}[h]
- \centering
- \begin{tikzpicture}
- [action/.style={->,ultra thick,postaction={decorate,decoration={raise=1ex,text along path,text align=center,text={|\sffamily|#1}}}}]
- \node [draw, cylinder, shape border rotate=90, minimum height=4cm, minimum width=3.5cm, aspect=2.5, label={[above]Bases de données}] (database) {};
- \path (database.center)+(0,0.75) node [draw] (model) {Modèles};
- \path (database.center)+(0,-0.75) node [draw,align=center] (data) {Données \\ d'apprentissage};
- \path (database.west)+(-3,0) node [draw, rectangle, rounded corners] (supervisor) {Superviseur};
- \draw [<->, ultra thick] (model) to (supervisor);
- \draw [->, ultra thick] (data) to (supervisor);
- \umlactor[x=-5,y=-1.5]{Utilisateur}
- \umlactor[x=-8,y=1.8]{Administrateur}
- \draw [action=remplit] (Utilisateur) to (data);
- \draw [action=initialise] (Administrateur) to (model);
- \draw [action=configure] (Administrateur) to (supervisor);
- \end{tikzpicture}
- \caption{Diagramme (informel) présentant l'architecture de la solution logicielle.}
- \label{fig:architecture}
-\end{figure}
-La figure~\ref{fig:architecture} présente les principaux composant de l'architecture logicielle.
-La majeure partie du travail s'effectuera sur le superviseur.
-À 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.)
-
-Une description plus détaillée avec une liste des activités et un calendrier sont présents dans le plan de développement.
-
-\section{Composition du livrable}
-\begin{itemize}
- \item Un script de compilation CMake
- \item Des binaires superviseurs
- \item Une interface d'ajout de données d'apprentissage
- \item Un contrôleur (serveur) gérant un ensemble de superviseur
- \item La documentation du projet
- \begin{itemize}
- \item Le cahier des charges
- \item Le plan de développement
- \item Le dossier d'analyse et de conception
- \item La documentation développeur
- \item Le rapport des tests
- \item Les manpages relatives aux différents binaires
- \item Les README et INSTALL usuels
- \item Le rapport final
- \end{itemize}
-\end{itemize}
-\end{document}