Version 12, last updated by guitch at May 03, 2010 09:16 UTC

Entraînement sur une distribution plus large

Auteur

Guillaume Sicard

Tache

Cette expérience fait référence au ticket #44.

Motivation

On cherche à observer l'effet d'un apprentissage sur une distribution de données plus large que la distribution de test : par exemple, on entraîne sur les chiffres et la minuscules, mais on teste seulement sur les chiffres. On compare ensuite avec les résultats obtenus en entraînant seulement sur les chiffres. La classe testée est dite classe principale, et le reste des classes sont les classes auxiliaires. Pour chaque modèle testé, on utilisera les paramètres (couches cachées, ...) donnant les meilleurs résultats de test, tels indiqués dans les carnets d'experience correspondants.

Données utilisées

On utilise la base NIST séparée en digits, lower_case et upper_case. Puis on teste sur ces 3 classes, les modèles entraînés respectivement sur tout NIST, et la classe concernée.

On effectue d'abord les experiences sur le MLP à une couche cachée, qui servira de comparaison pour les tests sur les architectures profondes.Les hyperparamètres sont issus de la page MLP sur les donnees non transformees de NIST :

learning_rate: 0.5

nb_hidden_units: 1000

adaptive_lr: 1

Puis on teste sur un SDA (non-linéarité : tanh, et softmax en sortie), pré-entraîné et fine-tuné sur NIST dont les paramètres, tirés de la page Influence des donnees utilisees dans les SDA, sont les suivants :

decrease_lr: 1
pretraining_epochs_per_layer: 15
hidden_layers_sizes: 1000
num_hidden_layers: 3
max_finetuning_epochs: 1000
finetuning_lr: 0.1
pretrain_choice: 0
corruption_levels: 0.2
finetune_set: 0
pretraining_lr: 0.01
minibatch_size: 100

Tableau de résultats

Pour plus de lisibilité, les erreurs ont été arrondies au centième près.

Les colonnes 3,4 et 5 correspondent aux différentes erreurs de test.

La dernière colonne représente l'évolution de l'erreur en % entre un entraînement sur une classe et un entraînement général avec à priori : 100 * (erreur_single - erreur_all) / erreur_single.

 

Class (Model)
Erreur de test sans à priori sur la classe testée, pour un entraînement sur NIST all
Erreur de test avec un à priori sur la classe testée, pour un entraînement sur NIST all
Erreur de test, pour un entraînement sur la seule classe concernée
évolution
digits (MLP)
17.49 3.77 3.99 5.56
upper (MLP) 40.63 7.84 7.54 -4.06
lower (MLP) 57.14 17.41 16.85 -3.34
digits (SDA)
20.23 2.60 3.56 26.94
upper (SDA) 22.65 5.93 6.78 12.58
lower (SDA) 51.53 12.27 14.44 15.06

 

Dans un premier temps, les entraînements "single" semblaient donner de bien meilleurs résultats qu'un entraînement sur tout NIST. Cependant, l'erreur utilisée était l'erreur en test sans a priori, rapportée aux proportions de chaque classe.

On remarque maintenant plusieurs choses, dont :

_ La généralisation apporte un gain pour le MLP seulement pour les chiffres (classe la plus simple), de seulement 5%

_ La généralisation apporte toujours un gain pour le SDA

_ Le gain en généralisation est dans les 2 cas le plus fort pour les chiffres, alors même que c'est la classe la plus présente dans NIST (i.e. le nombre d'exemples d'apprentissage en plus est moindre que dans les autres cas).

_ Cependant, je n'ai pas testé les hyperparamètres des modèles SDA spécialisés de manière extensive, ils peuvent sans doute être améliorés, réduisant le gain de généralisation, mais le résultat devrait rester valable.

Résultats MLP

Test sur les chiffres :

_ ratio_start = 0.39, ratio_end = 0.39 (ratios d'origine) : erreur de validation de 1.809345 % pour une erreur de test sans a priori de 6.094816 %

_ ratio_start = 1, ratio_end = 1 (entraînement uniquement sur les chiffres) : erreur de validation de 1.248295 % pour une erreur de test de 4.227490 %

_ ratio_start = 0.2, ratio_end = 0.2 : erreur de validation de 3.301501 % pour une erreur de test de 10.032401 %

 

Test sur les majuscules :

_ ratio_start = 0.27, ratio_end = 0.27 (ratios d'origine) : erreur de validation de 14.916248 % pour une erreur de test sans a priori de 25.175879 %

_ ratio_start = 1, ratio_end = 1 (entraînement uniquement sur les majuscules ) : erreur de validation de 4.782245 % pour une erreur de test de 8.299832 %

 

Résumé :

La table utilisée pour ces expériences est "sicard_mlp_ratios3"

On a entraîné plusieurs MLP à une couche cachée avec un nombre croissant d'unités cachées (500, 1000, 2000, 3000, 4000, 5000 et 6000) sur tout l'ensemble d'apprentissage, ainsi que sur les classes spécifiques (digits, upper, lower). Les graphiques suivants résument les résultats (erreur de test en ordonnée, nombre d'unités cachées en abscisse) :

L'accroissement du nombre d'unités cachées ne semble pas apporter de gain par rapport aux paramètres originaux.