\chapter{Introduction}

Le but de ce rapport est  d'étudier le comportement des réseaux de neurones
de type perceptron multicouche (PMC) sur un problème simple.

Le problème consiste en un ensemble  de points en 2 dimensions possédant un
caractère : Rouge  ou Vert.  On demande au  réseau d'apprendre le caractère
des points  en fonction de leur coordonnées\footnote{On  remarquera que les
  coordonnées  ne sont  pas  les  entrées les  plus  intéressantes pour  le
  percetron, il aura peut-être été plus intéressant de mettre en entrée des
  valeurs  statistiques telles  que la  couleur du  points le  plus proche,
  etc\dots Mais notre  but est ici d'étudier le comportement  du PMC et non
  de réellement résoudre le problème}.   Le perceptron doit être capable de
généraliser   le  résultat   aux  points   proches  des   points   de  base
d'apprentissage.

Nous utilisons comme base de travail  un PMC avec en entrée les coordonnées
en  X  et  Y du  point  et  en  sortie  deux  neurones, l'un  indiquant  la
pseudo-probabilité que le point  soit vert et l'autre la pseudo-probabilité
que le point  soit rouge. Le nombre de couches cachées  et leurs tailles ne
sont pas fixés et seront modifiée au cours de cette étude.

Le PMC est  implémenté à l'intérieur d'une bibliothèque  en C++.  Cela nous
permettra de  facilement réutiliser  le code pour  de prochain  projets. Le
choix du C++ comme langage  de programmation est contestable (et contesté). 
Nous  voulions avoir  la possibilité  d'utiliser la  STL  et éventuellement
Boost. De plus, le C++ permet d'avoir du code facillement réutilisable tout
en gardant ses  optimisations. Néanmoins, le code C++  est assez complexe à
comprendre, à debugguer,  à gérer la mémoire et à  optimiser et encore plus
dans le cas où on veut le rendre généraliste.

Nous avons  ensuite une interface  permettant de manipuler  plus rapidement
les  valeurs  du  PMC. L'interface  a  pour  but  d'être utilisée  par  des
programmeurs, elle ne dispence pas de la recompilation pour le changment de
certains  paramètres.  Elle  permet néeanmoins  de facilement  produire des
tests et d'afficher  les résultats.  L'interface se divise  en trois.  Tout
d'abord un script Perl nous permet d'utiliser Tk pour produire des bouttons
et gérer les événements  extérieurs.  L'utilisation d'un language de script
facilite  énorment  la  création  de l'interface.   Nous  communiquons  les
événement à un progamme en C++ par l'intermédiaire de l'entrée standard. Ce
programme en C++, nous permet de faire le lien avec le reste de l'espace de
travail.  Pour afficher les résultats, nous utilisons GnuPlot. Le programme
en  C++  s'interface avec  Gnuplot  par  l'intermédiaire des  entrée/sortie
standard.   L'utilisation  de Gnuplot  nous  permet  d'avoir une  interface
d'affichage  très extensible.   Ce  programme nous  permet  aussi de  faire
l'interface avec  la bibliotèque  PMC\footnote{Au départ, nous  avions pour
  idée d'utiliser  SWIG pour interfacer  le script Perl et  la bibliothèque
  Perceptron (Le script perl s'occupait alors de gérer GnuPlot). Néanmoins,
  des  difficultés techniques avec  GnuPlot nous  ont poussés  a abandonner
  cette idée.}. Pour résumer, le script Perl ne s'occupe que d'afficher les
les bouttons de l'interface,  Gnuplot d'afficher simplement les graphiques,
libPerceptron est le PMC en lui même, le programme en C++ est un morceau de
middleware pour faire le joint  entre ces technologies. Un soin particulier
a été  apporté à la bibliothèque dans  le but de facilement  la réutiliser. 
Tandis    que   le    morceau   de    middleware   est    considéré   comme
non-réutilisable\footnote{jettable?}.

Le  projet  dans  l'état  actuel   implémente  un  PMC  basique.   Il  gère
correctement la back-propagation, centre et normalise les données et permet
d'étudier les differentes erreurs\footnote{modulo quelques lignes de code à
  décommenter...}.   L'initialisation  des   poids  des  neurones  se  fait
aléatoirement entre  -0.5 et 0.5.  La fonction  d'activation est facilement
paramètrable. Il ne comporte pas de bug connu.

Pour  décider de  la  couleur d'un  point à  partir  de la  sortie du  PMC,
l'interface utilise  la sortie ayant  la plus forte  pseudo-probabilité. On
remarque  que, par  cette méthode,  l'affichage perd  de  l'information. Il
serait effectivement interressant de voir les variation des neuronne rouges
et vert.

Dans la  partie suivante,  nous allons étudier  différents cas qui  se sont
posés à nous pendant l'apprentissage  du PMC. Nous verrons quels paramètres
permettent d'agir sur ces cas.


