Page d'Olivier Teytaud


Page personnelle
d'Olivier Teytaud
.



Cette page est obsolète:

ALLEZ ICI !
Mon blog: ici . Sa table des matieres: ici . Avec des offres d'emploi, de la vulgarisation scientifique, de la discussion littéraire.
  • Table des matieres:


  • Etat civil.


  • Centres d'interet en sciences.


  • CV Version imprimable




  • Mes enseignements en universitaire(total 192h d'enseignement en trois ans de these/monitorat).


  • Langues parlees: français et anglais.


  • Langages connus: C, Pascal, Octave, Matlab, Maple, Java, Basic, C++, html... J'ai fait du mpi, et diverses autres choses mais par honnêteté si je dois m'y remettre faudra réviser.


  • Bibliographie de theorie de l'apprentissage et reseaux de neurones


  • Quel algorithme d'apprentissage choisir et quel estimateur d'erreur utiliser ?

    I Généralités
    On propose ici des méthodes heuristiques pour choisir son algorithme d'apprentissage. C'est probablement très imparfait et très dépendant du matériel à disposition (notamment: mémoire, vitesse, et même précision machine, parfois importante pour des fonctions objectif trop plates). ==> suis ouvert à tout commentaire pour optimiser ces heuristiques. Document inspiré de mon expérience personnelle, du manuel JetNet trouvable sur www, et du tutorial DMS du LIS. On laisse délibérement de côté toutes les approches où l'on suppose fourni un modèle des données, hors de mon propos (bien sûr, on gagne à prendre en compte les a priori "métiers" quand on en a). Pour des problèmes qui ne sont pas iid du tout, je ne change pas les infos qui suivent dans le cadre de la prédiction par exemple de données temporelles; à part que pour des systèmes non-chaotiques, le fenêtrage peut être très dommageables et donc des solutions prenant en compte des "distorsions" sont préférables: modèles mixtes neuronaux/markoviens, ou réseaux de neurones avec boucles. Les réseaux de neurones peuvent s'adapter en temps continu. Pour des taches de type contrôle, on préfère pour certaines manoeuvres fines la rétropropagation dans le temps; sinon le contrôle neurogenetique est une solution simple et efficace. Dans tous les cas, prendre connaissance avec des avis d'experts sur les reformulations éventuelles de données est infiniment plus efficace en général que prendre des données "brutes". Les SVM ont des adaptations en-ligne, moins naturelles que le cas des réseaux neuronaux, naturellement "en-ligne" de par l'algorithme d'apprentissage usuel. Enfin, préférer une SVM car la fonction objectif est convexe ou strictement convexe (elle n'est pas nécessairement strictement convexe en fait, même avec un noyau symétrique défini positif) oublie le fait que la fonction objectif des SVM est souvent très plate. Des praticiens m'ont affirme preferer largement les Lp-machines, et certains defendent avec des arguments geometriques sympathiques les Bayes Point Machines comme alternatives. Dans tous ces cas, les cas de tres grande efficacité me semblent surtout se trouver du cote des petits ensembles d'apprentissage.
    II Choix de l'algorithme d'apprentissage

    0. Le temps de calcul en apprentissage est-il limité à des durées raisonnables (je sais "raisonnable n'est pas très précis!) ? Si oui, aller en 1. Sinon, si l'important est la compréhensibilité, tester les arbres de décisions. Sinon, si le temps en reconnaissance est important, tester SVM linéaire ou polynomiale de petit degré (si votre algo est bien fait au niveau de la vitesse en reconnaissance...), ainsi que la rétropropagation. Si vous n'avez pas de limite ni en temps d'apprentissage ni en temps de reconnaissance, testez... tout!!!

    1. La compréhensibilité de l'algorithme obtenu est-elle importante ? Oui: aller en 3. Non: aller en 2.

    2. La dimension des donnees est-elle supérieure à 5000 ? Si oui, aller en 4. Si non, aller en 5.

    3. La dimension des données est-elle supérieure à 1000 ? Si oui, utiliser l'extraction de caractéristiques (basées sur les corrélations, l'information mutuelle...). Ensuite, les arbres de décision.

    4. La taille de la base est-elle supérieure à 10000, ou le temps de reconnaissance est-il important pour l'application souhaitée ? Si non (doublement), vous pouvez tenter les SVM, en choisissant le noyau par hold out (ou les techniques plus bas si vous en avez le temps), ou d'autres techniques proches: Bayes Point Machines, RBF, Lp-machines. Les Lp-machines permettent notamment de se ramener a un algorithme de simplexe. Des SVM a fonction d'erreur L^2 existent. Comparer aux algorithmes proposes en 5.

    Si la taille de la base est grande, mais si les vecteurs d'exemples sont creux (c'est notamment parfois le cas pour des données bas-niveau sur des textes ou des images), aller en 5, en utilisant des implémentations spécialisées pour les vecteurs creux.

    5. Utiliser une rétropropagation. Au risque de choquer les optimiseurs, je me contente de recommander l'algorithme de rétropropagation, en mode "apprentissage sur un exemple par un" (et non sur toute la base à la fois), plutot que les variantes plus complexes, qui n'ont pas vraiment montré une écrasante supériorité. Toutefois, selon des praticiens, il est préférable lorsque l'on utilise plus d'une couche cachée, d'ajouter une perturbation (dite de Langevin) pour accélérer la descente de gradient. Il s'agit seulement d'ajouter des quantités tirées au sort gaussiennement aux corrections des poids.

    Plutot que d'imposer un petit nombre de poids, utiliser un weight decay fort semble efficace.

    Si on a le temps, il est toujours sympathique de choisir weight decay et architecture du réseau par tests sur un échantillon séparé; voire d'utiliser les estimateurs ci-dessous. Une architecture basique utilisable consiste en une unique couche cachée, de taille choisie (dans l'esprit de la theorie de l'approximation pour des réseaux neuronaux ayant des poids petits grace au weight decay) proportionnelle à la racine de l'inverse de la précision souhaitée. Allez au pif, comme la précision souhaitée n'est généralement pas connue à l'avance, disons racine de (n/100) avec n le nombre d'exemples, monté à la dimension de la base si c'est en dessous. On peut monter un peu s'il y a plusieurs sorties. Quand on dépasse la trentaine de neurones, on peut ajouter raisonnablement une couche. Pour de très gros réseaux, certains conseillent les algorithmes génétiques pour choisir les poids (voire même l'architecture).

    III Quel estimateur d'erreur ? (inspiré de LIS - Rudjer Boskovic Institute, DMS Tutorial - evolution of generated models, 2001)

    Plus de 100 exemples: utiliser la 10-validation croisee ou le leave-one-out; la validation croisée est moins chère.

    Entre 50 et 100 exemples: utiliser le leave-one-out.

    En dessous de 50 exemples: utiliser min(max(0.632bootstrap,leave-one-out),2-validation croisée répétée). Le leave-one-out est notamment dans certains cas beaucoup trop pessimiste.


  • Autres.

    (parenthèse chauvine)