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