Projet de session
IFT6266 A06
Dates importantes
- Proposition de projet à rendre le 14 novembre au plus tard .
- Rapport de projet dû le 20 décembre.
Objectifs
Le but du projet est de vous donner une expérience concrète avec les
algorithmes d'apprentissage et un aperçu de la recherche dans ce domaine. Il
vous permettra aussi de vous familiariser avec les techniques de comparaison
entre algorithmes d'apprentissage, et vous donnera l'occasion d'être créatif!
Finalement vous devrez considérer l'écriture du rapport comme une 'pratique'
pour l'écriture d'un article scientifique.
Spécifications du projet
Le projet type devrait en gros être structuré de la manière suivante:
- On définit plusieurs algorithmes d'apprentissage ou des variantes de
certains algorithmes d'apprentissage.
- On définit une question à laquelle on voudrait répondre
expérimentalement concernant ces algorithmes.
- Pour répondre à la question il faut habituellement pouvoir répondre à
des sous-questions de la forme
- "Est-ce que l'algorithme A est significativement meilleur que
l'algorithme B sur des données comme D"?
D'habitude on s'intéresse principalement à comparer la performance en
généralisation (c'est le but principal des algorithmes d'apprentissage,
obtenir une bonne généralisation), mais dans certains cas on pourrait
vouloir comparer (aussi) d'autres caractéristiques, comme le temps de
calcul pour l'apprentissage ou la prédiction. Pour répondre à ce type de
question il vous faudra mettre au point un protocole expérimental et une
procédure statistique permettant de faire un test d'hypothèse ou de
calculer un intervalle de confiance nous informant sur la réponse à la
question. Pour arriver à de telles estimations statistiques, il faut
généralement procéder par de multiples simulations dans lesquelles les
éléments aléatoires (comme le choix particulier d'un sous-ensemble de
données, ou les conditions initiales des paramètres avant l'optimisation)
seront échantillonnés un nombre raisonnable de fois (assez pour obtenir
des moyennes et des écarts-types adéquats).
- On définit un ou préférablement plusieurs ensembles de données qui vont
servir à faire les expériences ci-dessus.
- On implante les algorithmes d'apprentissage, c'est un exercice qui nous
permet de réellement comprendre les algorithmes... Dans des cas
particuliers j'accepte aussi que vous preniez du code existant disponible
publiquement (je préfère que vous implantiez votre propre code mais si
vous êtes moins rôdés en programmation ou si vous avez besoin de
composantes non-apprentissage c'est OK).
- On se familiarise avec notre code, l'effet des hyper-paramètres et des
différentes techniques d'optimisation, et on débogue le code en faisant
des petites simulations sur des données générées artificiellement et pour
lesquelles on sait ce que l'algorithme devrait idéalement apprendre.
- On fait ensuite notre série d'expériences, en prenant soin de sauver
dans des fichiers toutes les informations pertinentes qui nous
permettront ensuite d'analyser statistiquement les résultats.
- On analyse les résultats, d'abord pour vérifier leur cohérence afin de
débusquer d'autres bogues, peut-être réviser nos hypothèses et notre
protocole expérimental, et ensuite pour préparer notre rapport avec les
comparaisons statistiques, l'analyse des résultats et les conclusions qui
en découlent.
Si vous regardez la littérature scientifique sur les algorithmes
d'apprentissage (par exemple allez voir les articles de la conférence NIPS), vous allez voir que la
question la plus courante est "est-ce que le NOUVEL algorithme A est
significativement meilleur en généralisation que l'ANCIEN algorithme B?" et
pour ce type de question, si les algorithmes sont assez génériques, on va
considérer plusieurs ensembles de données pour faire la comparaison (car on
veut éviter une conclusion trop hâtive basée sur un jeu de données très
particulier).
Certains points administratifs sont à noter:
- LES PROJETS SONT INDIVIDUELS ET NON EN ÉQUIPE.
- Vous pouvez prendre une idée de projet dans la liste des suggestions ou
bien proposer votre propre idée (c'est encore mieux).
- Je vous encourage à choisir un sujet qui est pertinent à votre sujet de
recherche de maîtrise ou doctorat. Vous pouvez aussi obtenir vos propres
données (soir sur le web soit ailleurs) plutôt que d'utiliser celles
suggérées.
- VOUS NE POUVEZ PAS UTILISER UN TRAVAIL DÈJÀ FAIT, mais
- Vous pouvez faire un travail CONJOINT avec un autre cours que vous
prenez en ce moment SI VOUS M'EN AVISEZ. Je m'attends à un travail plus
important si vous faites un tel double emploi. Il faut évidemment que
l'autre professeur soit aussi d'accord.
- VOUS POUVEZ RÉ-UTILISER DU CODE EXISTANT dans une mesure raisonnable,
par exemple pour des composantes de votre système qui sont périphériques
à l'algorithme d'apprentissage lui-même, comme par exemple du code
d'optimisation, d'algèbre linéaire (vecteurs propres, SVD, etc...), ou du
code de calculs dans des graphes, etc...
Une violation de ces règles du jeu simples pourrait avoir des conséquences
très fâcheuses donc je vous suggère d'être bon joueur ou de me parler si vous
avez des doutes.
En plus des proceedings de NIPS, une bonne manière de trouver des articles
sur le web est d'utiliser CiteSeer et Google Scholar. Ce sont des engins de recherche pour articles
scientifiques, qui couvre la grande majorité de ce qui se fait en machine
learning.
Spécifications du rapport
Le rapport de projet devrait être structuré comme un article de la
conférence NIPS (voir les proceedings). Les buts d'un tel article sont
les suivants:
- expliquer une idée,
- la mettre en perspective de ce qui s'est déjà fait et donc la
motiver,
- convaincre que cette idée est bonne grâce à des arguments mathématiques
et/ou des résultats expérimentaux,
- décrire les données, les expériences ou les théorèmes avec suffisamment
de détails pour être reproductibles.
Les articles de NIPS sont limités à 7 ou 8 pages, ce qui impose une forte
contrainte et rend le texte et les explications très compacts et les
expériences pas toujours reproductibles. C'est pour ça que les meilleurs
articles se retrouvent généralement en version longue dans une revue
scientifique (voir par exemple le Journal of
Machine Learning Research, disponible gratuitement). Dans votre cas il
n'y a pas de limite sur le nombre de pages (mais SVP pas de roman-savon) donc
je m'attends à avoir suffisamment de détails pour que les expériences soient
reproductibles. La structure générale d'un tel article est la suivante:
- introduction: motivations, objectifs, survol de la littérature
pertinente, plan du rapport (figures intuitives motivant le problème,
etc...)
- description des algorithmes existants, variantes, ou nouveaux
algorithmes évalués (pseudo-code, figures explicatives, etc...)
- description des hypothèses testées, du protocole expérimental et des
procédures statistiques, des données, etc...
- description des résultats (figures, tableaux) et analyse des
résultats
- conclusions qu'on peut tirer OU PAS de ces résultats (vous pouvez avoir
des résultats NÉGATIFS, i.e. votre hypothèse est rejetée, ou
INCONCLUSIFS, e.g. les différences ne sont pas statistiquement
significatives). En général on essaie d'éviter les résultats inconclusifs
en modifiant le protocolel expérimental ou en utilisant plus de
données.
- liste des références bibliographiques pertinentes et lien vers le code
source de votre projet (inutile de l'inclure dans le rapport)
N'oubliez pas que ce rapport, comme tout article scientifique, est avant
tout un exercice de communication. Je m'attends donc à des
efforts importants de votre part pour la présentation, la structure, la
cohérence, la clarté, etc... Vous pouvez écrire en français OU en anglais.
C'est un travail important au-delà du travail d'implantation
et de simulation. Comptez une bonne semaine avant la date de remise pour
prendre le temps de bien penser à la structure de votre rapport, aux
arguments que vous voulez avancer, et à la manière d'exprimer vos idées.
Prenez le temps de corriger l'orthographe, il existe de nombreux outils pour
vous y aider...
Spécification de la proposition de projet
La proposition de projet vise
- à éviter que vous commenciez à travailler à la dernière minute
- à vous forcer à faire un certain travail préliminaire avant
l'implantation et les simulations:
- faire un choix concernant votre projet
- lire de nombreux articles sur le sujet
- comprendre les algorithmes impliqués
- décider d'un plan de travail, protocole expérimental, etc...
Ca correspond un peu à une demande de subvention pour un professeur. Vous
devez avoir fait vos devoirs concernant la littérature scientifique
pertinente, vous devez montrer que vous maîtrisez autant que possible le
sujet, et que vous savez où vous vous en allez. Vous pourrez réutiliser une
partie du texte écrit et la liste de références pour votre rapport final.
Quelle devrait être la longueur de la proposition de projet? Je vous
laisse décider mais on doit y trouver pas mal d'informations, donc il faut
sûrement compter plusieurs pages (3 à 6 serait raisonnable). Idéalement, on
devrait retrouver dans cette proposition tous les éléments du rapport sauf
les résultats.
Je m'attends à ce que plusieurs d'entre vous CHANGENT DE SUJET EN COURS DE
ROUTE. C'est OK mais j'aimerais être avisé et recevoir une proposition
révisée. La note finale du projet tiendra compte du travail fait pour la
proposition de projet et pour le rapport final.
Détails techniques sur l'écriture du rapport
Pensez à faire des figures lisibles en noir et blanc.
Il est conseillé d'utiliser LateX pour l'écriture de l'article. Voici deux
liens utiles pour débuter ou se débloquer avec LateX: 'Getting Started with
LaTeX' et 'FAQ
LateX'
Vous pouvez par exemple utiliser le modèle du Journal of Machine Learning Research, qui se
compose d'un fichier .sty
à inclure et d'un fichier .tex à éditer.
Suggestions préliminaires de sujets de projet
Pointeurs à des ensembles de données
Delve Datasets
Beaucoup d'ensembles de donnees pour regression