Version 17, last updated by XavierMuller at April 28, 2010 03:33 UTC
MLP sur les donnees non transformees de NIST
Auteur
Xavier Muller
Tache
Cette expérience fait référence au ticket #8.
Motivation
On cherche à établir un baseline sur les données NIST non transformées a l'aide d'un MLP à une couche cachée. Pour ce faire, on essayera plusieurs valeurs d'hyper-parametres. Dans un premier temps, nous allons essayer l'ensemble suivant d'hyper-parametre:
learning rate : 10e-7, 10e-6, 10e-5, 10e-4, 10e-3, 10e-2, 10e-1
nombre d'exemples: 10 000 000, 100 000 000, 500 000 000
Nombre de neurones caches: 100, 300, 1000, 3000
Une fois ces résultats obtenus, nous allons faire une deuxième série d'expériences avec des nouveaux paramètres pour essayer de réduire notre erreur de test.
Dans la deuxième série d'expériences, nous avons raffiné les paramètres. De plus, nous avons ajouté une modification au code pour permettre au pas du gradient de s'adapter a travers le temps. Cette adaptation se produit à chaque fois que l'erreur sur l'ensemble de validation augmente. Quand cette condition est rencontrée, nous divisons par deux la valeur du pas de gradient. Ceci à été fait avec comme hypothèse qu'une augmentation de l'erreur de validation dans notre situation est fort probablement due à un pas de gradient trop élevé et non pas à de l'over-fitting.
Nous avons essaye les paramètres suivants:
learning_rate: 0.01, 0.025, 0.075, 0.1, 0.5
number_exemples: 10 000 000
nb_hiden_units: 300, 500, 1000
adaptive_lr: 0,1 (ce paramètre contrôle l'adaptation du pas de gradient)
Données utilises
Nous allons nous servir des caractères (minuscule et majuscule) et des chiffres de la base de données NIST. En tout, nous avons 62 classes. Nous allons utiliser 649080 exemples pour l'entrainement, 82580 exemples pour notre ensembles de test et de validation.
Résultats
Les meilleurs résultats ont été obtenus avec les paramètres suivants:
learning_rate: 0.5
nb_hidden_units: 1000
adaptive_lr: 1
Nous avons obtenus avec ce modèle les erreurs suivantes:
erreur de training: 12.146
erreur de validation: 13.259
erreur de test: 24.189
Les erreurs ci-bas reflètent le taux d'erreur sur chaque sous catégorie:
erreur de test sur chiffres: 17.486
erreur de test sur lettres: 40.634
erreur de test sur minuscules: 57.142
erreur de test sur majuscules: 22.634
erreur de trainning sur chiffres: 5.275
erreur de trainning sur lettres: 19.728
erreur de trainning sur minuscules: 25.368
erreur de trainning sur majuscules: 14.749
Les erreurs ci-bas reflètent le taux d'erreur sur chaque sous-catégorie étant donne que l'on sait que la classe à identifier appartient à la sous-catégorie (ces résultats sont préliminaires):
erreur de test sur chiffres: 3.77
erreur de test sur lettres: 34.280
erreur de test sur minuscules: 17.413
erreur de test sur majuscules: 7.844
erreur de trainning sur chiffres: 0.911
erreur de trainning sur lettres: 13.890
erreur de trainning sur minuscules: 6.756
erreur de trainning sur majuscules:4.059
Notes sur ces résultats
- La différence entre les résultats pour 500 et 1000 neurones cachés est assez marginale pour un grand nombre de pas de gradient initial. L'erreur de test tourne autour de 24%. D'autres tests sont en cours avec 3000 et 5000 neurones pour confirmer ceci.
-Les meilleurs résultats sont obtenus avec un pas de gradient adaptatif. Une autre série d'expérience va être lancée pour comparer ce pas adaptatif à une adaptation plus classique (learning rate decay).
-Le taux d'erreur sur les chiffres est nettement meilleur que sur les caractères. Sur les caractères, les résultats sur les minuscules sont nettement pire que sur les majuscules.
Nous avons pris les mêmes hyper-parametres de ce réseau de neurones et nous avons créé 3 autres réseaux de neurones que nous avons entraine séparément sur les chiffres, les minuscules et la majuscules. Nous voulions comparer les résultats d'un entrainement sur les trois groupes simultanément versus séparément. Les résultats sont reproduit ici:
erreur de test sur chiffres: 3.927
erreur de test sur minuscules:16.875
erreur de test sur majuscules: 8.559
erreur de trainning sur chiffres: 0.466
erreur de trainning sur minuscules: 4.209
erreur de trainning sur majuscules: 2.524
Notes sur ces résultats:
-l'entrainement sur les trois groupes simultanément semble avoir aidé à baissé le taux d'erreur sur les chiffres mais pas sur les lettres. Les différences sont assez petites.
-Le réseau de neurones à 1000 unités cache a peut être trop de capacité pour être utilisé sur les trois groupes de façon séparée. En effet, l'erreur de training était en général 2 fois plus petite que l'erreur de validation. Ceci pourrait indique un léger sur-entrainement. Des tests avec seulement 300 et 500 unités ont été lance pour comparer les résultats.
Les résultats peuvent être retrouvés dans la base de données: ift6266h10_sandbox_db\xm_nist_final0_mlp_view
Les résultats avec un learning rate decay peuvent être retrouvés dans la base de données: ift6266h10_sandbox_db\xm_nist_final2_mlp_view
La version du code utilise pour ces résultats est:
(internal)
Running experiments:
#test 3 with classic lr + lots of weight
#test 4 with lots of exemples
digitD,lowerF,upperF (300 and 500 weights)
todo, lr =1, but use 0.8 and 0.6 instead
opritmise stop decision to optimise train time
| Training Set | Fine Tuning | NIST Overall Test Error | NIST Digit Error | NIST Character Test Error | Model Parameter |
| NIST | None |
||||
| P07 | None | ||||
| PNIST | None | ||||
| P07 | NIST | ||||
| PNIST | NIST |