Version 25, last updated by SylvainPL at May 08, 2010 20:08 UTC

Influence des donnees utilisees dans les SDA

Auteur:  

Sylvain Pannetier Lebeuf, le code utilisé est au /ift6266/deep/stacked_dae/v_sylvain et à été adapté du code /ift6266/deep/stacked_dae/ de François Savard.

 

Tâche:

Ce carnet d'expérience fait référence au ticket:#39.

Motivation pour cette expérience: Voir comment l'erreur de test réagit lorsqu'on pré-entraîne un SDA avec P07 ou NIST et qu'on utilise différents jeu de données pour l'entraînement supervisé. P07 et NIST sont tous deux utilisés comme ensemble de test.

Les scénarios étudiés:

-Entrainement non-supervisé avec NIST avec

   -Entraînement supervisé effectué avec NIST

   -Entraînement supervisé effctué avec P07

   - Entraînement supervisé effectué avec NIST suivi de P07

   - Entraînement supervisé effectué avec NIST, mais seulement sur les couches du MLP avec toutes les couches cachées connectées sur le MLP.

 

-Entrainement non-supervisé avec P07 avec

   -Entraînement supervisé effectué avec NIST

   -Entraînement supervisé effctué avec P07

   - Entraînement supervisé effectué avec NIST suivi de P07

   - Entraînement supervisé effectué avec NIST, mais seulement sur les couches du MLP avec toutes les couches cachées connectées sur le MLP.

 

Les données utilisées:

  P07 et NIST_all

Matériel informatique utilisé:

Pour le finetune sur CPU, le calcul a été commandé avec dbidispatch. Par la suite, tous les calculs ont été fait sur Boltzmann sur GPU.


Résultats:

4 couches cachées, 800 unitées par couches, 10 époques de pre-training, taux d'apprentissages de 0.01 pour le pretrain ainsi que le finetune, niveau de corruption de 0.2, version_ift6266: '067e747fd9c0', version_theano: 'c02f8559e0f2+' :

Pré-entrainement avec NIST:

La sortie du pré-entraînement se trouve à: /data/lisa/data/ift6266h10/experiments_SDA/ift6266h10_db/pannetis_SDA/1/stdout

On y retrouve aussi un fichier contenant les parametres finaux.

Il a pris environ 20 heures sur CPU et environ 6 522 880 exemples ont été vus durant le pré-train

La sortie des finetunings se trouve à /data/lisa/data/ift6266h10/experiments_SDA/NIST
On y retrouve aussi les parametres finaux de chaque finetune.

Finetune avec NIST:

erreur de validation: 11.951250 %

erreur de test sur NIST: 22.980616 %

erreur de test sur P07: 97.778750 %

erreur d'entraînement sur 500 000 exemples de NIST: 10.3982 %

141 999 900 exemples vus

temps de calcul:  373 minutes (6 heures) sur GPU (une prédécente expérience qui a planté avait "fine-tuné" pendant 3.5 jours et n'était pas arrivée à 60% du total nécessaire. Le GPU est d'une utilité exceptionnelle ici)

Finetune avec P07:

erreur de validation sur NIST: 53.275000 %,   ?!?

erreur de test P07: 54.730000 %

erreur de test NIST: 27.063845 %

erreur d'entraînement sur 500 000 exemples de P07: 53.0346 %

77 999 900 exemples vus

temps de calcul: 205 minutes (3.4 heures) sur GPU

(L'optimisation aurait du durer plus longtemps. Je n'avait pas imaginé que le total des données devrait être visitées plus d'une fois, des expériences futures prendront en compte cette réalité)

Finetune avec NIST suivi de P07:

erreur de validation sur NIST: 25.335000 %

erreur de test sur P07: 81.166250 %

erreur de test sur NIST: 35.322980 %

erreur d'entraînement sur 500 000 exemples de NIST:24.5428 %

erreur d'entraînement sur 500 000 exemples de P07: 80.623  %

1 499 900 exemples vus

temps de calcul: 4 minutes sur GPU  Le modèle a rapidement commencé à performer moins bien sur NIST, ce qui a pour effet d'arrêter l'entraînement rapidement. Un essai intéressant serait de le forcer à fine-tuner plus longtemps.

Toutes les sorties des couches intermédiaires reliées a une régression logistique:

Pas encore au point

 

Pré-entrainement avec P07:

La sortie du pré-entraînement se trouve à: /data/lisa/data/ift6266h10/experiments_SDA/ift6266h10_db/pannetis_SDA_P07a/1/stdout

On y retrouve aussi les parametres finaux du pre-entrainement

Il a pris environ 20 heures sur CPU et environ 6 522 880 exemples ont été vus durant le pré-train

La sortie du finetuning se trouve à:/data/lisa/data/ift6266h10/experiments_SDA/P07

On y retrouve aussi les paramètres finaux de chaque finetune.

Finetune avec NIST:

erreur de validation: 12.418750 %

erreur de test sur NIST: 23.689210 %

erreur de test sur P07: 97.440000 %

erreur d'entraînement sur 500 000 exemples de NIST: 10.6656 %

132 999 900 exemples vus

temps de calcul:  332 minutes (5.5 heures) sur GPU.

Finetune avec P07:

erreur de validation sur NIST: ,55.760000 %   ?!?

erreur de test P07: 57.247500 %

erreur de test NIST:  29.798892 %

erreur d'entraînement sur 500 000 exemples de P07: 55.805 %

47 999 900 exemples vus

temps de calcul: 125 minutes (2 heures) sur GPU

(L'optimisation aurait du durer plus longtemps. Je n'avait pas imaginé que le total des données devrait être visitées plus d'une fois, des expériences futures prendront en compte cette réalité)

Finetune avec NIST suivi de P07:

erreur de validation sur NIST: 24.548750 %

erreur de test sur P07: 79.768750 %

erreur de test sur NIST: 31.283335 %

erreur d'entraînement sur 500 000 exemples de NIST: 23.846 %

erreur d'entraînement sur 500 000 exemples de P07: 79.8166 %

1 499 900 exemples vus

temps de calcul: 4 minutes sur GPU  Le modèle a rapidement commencé à performer moins bien sur NIST, ce qui a pour effet d'arrêter l'entraînement rapidement. Un essai intéressant serait de le forcer à fine-tuner plus longtemps.

Toutes les sorties des couches intermédiaires reliées a une régression logistique:

Pas encore au point

4 couches cachées, 1500 unitées par couches, 15 époques de pre-training, taux d'apprentissages de 0.01 pour le pretrain ainsi que le finetune, niveau de corruption de 0.2, version_ift6266: '067e747fd9c0', version_theano:  'c02f8559e0f2+':

Pré-entrainement avec NIST:

La sortie du pre-entraînement et des finetunings se trouve à /data/lisa/data/ift6266h10/experiments_SDA/NIST_big
On y retrouve aussi les parametres finaux de chaque finetune.

Le pre-entraînement a duré 305 minutes (5 heures) sur GPU et environ 9 784 320 exemples ont été vus durant le pré-train

Finetune avec NIST:

erreur de validation: 11.675000 %

erreur de test sur NIST: 23.015057 %

erreur de test sur P07: 97.701250 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.5046 %

175 999 900 exemples vus

temps de calcul:  1029 minutes (17 heures) sur GPU

Finetune avec P07:

erreur de validation sur NIST: 51.010000 %,   ?!?

erreur de test P07: 52.700000 %

erreur de test NIST:  25.476678 %

erreur d'entraînement sur 500 000 exemples de P07: 50.8662 %

77 999 900 exemples vus

temps de calcul: 461 minutes (7.7 heures) sur GPU

Finetune avec NIST suivi de P07:

erreur de validation sur NIST: 24.637500 %

erreur de test sur P07: 73.965000 %

erreur de test sur NIST: 32.595558 %

erreur d'entraînement sur 500 000 exemples de NIST: 23.853 %

erreur d'entraînement sur 500 000 exemples de P07: 73.5094 %

1 499 900 exemples vus

temps de calcul: 9 minutes sur GPU  Le modèle a rapidement commencé à performer moins bien sur NIST, ce qui a pour effet d'arrêter l'entraînement rapidement. Un essai intéressant serait de le forcer à fine-tuner plus longtemps.

Toutes les sorties des couches intermédiaires reliées a une régression logistique:

Pas encore au point

 

Finetuning avec P07 suivi de NIST (à  /data/lisa/data/ift6266h10/experiments_SDA/NIST_big/SDA_NIST_retrieve.txt)

erreur de validation sur NIST: 11.810000 %

erreur de test sur P07: 89.120000 %

erreur de test sur NIST: 22.388968 %

Pour avoir l'erreur d'entraînement, il faudrait refaire l'expérience. Si cette info pourrait vous être utile, n'hésitez pas à me demander ! Dans le cas contraire, je vais concentrer mes efforts sur d'autres expériences.

72 999 900 de NIST vus par dessus ceux de P07 vus (1 499 900)

temps de calcul: 435 minutes sur GPU (7.25 heures)  

Pré-entrainement avec P07:

La sortie du pré-entraînement se trouve à: /data/lisa/data/ift6266h10/experiments_SDA/P07_big 

On y retrouve aussi les parametres finaux du pre-entrainement et de chaque finetune.

Le pre-entraînement a duré 468 minutes (7.8 heures) sur GPU et environ 9 784 320 exemples ont été vus durant le pré-train

Finetune avec NIST:

erreur de validation: 11.631250 %

erreur de test sur NIST: 24.000167 %

erreur de test sur P07: 97.693750 %

erreur d'entraînement sur 500 000 exemples de NIST: 8.6238 %

303 999 900 exemples vus

temps de calcul:  1701 minutes (28.35 heures) sur GPU

Finetune avec P07:

erreur de validation sur NIST: 47.265000 %,   ?!?

erreur de test P07: 49.517500 %

erreur de test NIST:  22.864087 %

erreur d'entraînement sur 500 000 exemples de P07: 47.2322 %

147 999 900 exemples vus

temps de calcul: 835 minutes (14 heures) sur GPU

Finetune avec p07 suivi de NIST:

erreur de validation sur NIST: 11.306250 %

erreur de test sur P07: 87.217500 %

erreur de test sur NIST: 22.244719 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.2994 %

erreur d'entraînement sur 500 000 exemples de P07: 86.015 %

133 999 900 exemples vus sur NIST après avoir passé P07 (147 999 900 exemples)

temps de calcul: 763 minutes sur GPU  (12.72 heures)

Toutes les sorties des couches intermédiaires reliées a une régression logistique:

Pas encore au point

 

Expériences faisant varier le taux d'apprentissage

Les modèles utilisés sont pre-train avec P07 ainsi que finetune avec P07 suivi de NIST.

4 couches cachées, 1500 unitées par couches, 15 époques de pre-training, taux d'apprentissages de 0.01 pour le pretrain, niveau de corruption de 0.2, 'version_ift6266': 'b762ac18a2d7', 'version_theano': 'c02f8559e0f2+':

Taux d'apprentissage de 0.05 pour le finetune:

(voir/data/lisa/data/ift6266h10/experiments_SDA/P07_LR_05)

erreur de validation sur NIST:10.753750 %

erreur de test sur NIST: 19.618992 %

erreur de test sur P07: 54.343750 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.6816 %

erreur d'entraînement sur 500 000 exemples de P07: 50.3436 %

409 499 900 exemples de P07 visités (et il s'est arrêté faute d'exemples. D'autres expériences suivront) ainsi que  8 999 900 exemples de NIST visités.

Le temps de calcul pour le finetune: 2305 minutes sur GPU (phase P07) + 53 minutes sur GPU (phase NIST)

Taux d'apprentissage de 0.005 pour le finetune:

(voir/data/lisa/data/ift6266h10/experiments_SDA/P07_LR_005)

erreur de validation sur NIST:12.285000 %

erreur de test sur NIST: 21.981158 %

erreur de test sur P07:  71.982500 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.6816 %

erreur d'entraînement sur 500 000 exemples de P07: 50.3436 %

409 499 900 exemples de P07 visités (et il s'est arrêté faute d'exemples. D'autres expériences suivront) ainsi que  30 999 900 exemples de NIST visités.

Le temps de calcul pour le finetune: 2378 minutes sur GPU (phase P07) + 184 minutes sur GPU (phase NIST)

Taux d'apprentissage variable pour le finetune (Part à 0.1 et est divisé par 2 à chacune des époques):

 (voir/data/lisa/data/ift6266h10/experiments_SDA/P07_LR_decrease)

'version_theano': 'c02f8559e0f2+'

Finetune seulement sur P07: 

erreur de validation sur NIST:13.588750 %

erreur de test sur NIST: 19.455735 %

erreur de test sur P07:  40.801250 %

499 000 000 exemples de P07 visités (et il s'est arrêté faute d'exemples. On dirait que le finetune pourrait durer une éternité. Par contre, on voit que l'erreur de test n'est pas strictement décroissante. Je suis porté à croire que c'est le taux d'apprentissage maximal qui est utilisé.)

Le temps de calcul pour le finetune: 2815 minutes sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:10.881250 %

erreur de test sur NIST: 20.459186 %

erreur de test sur P07:  51.652500 %

erreur d'entraînement sur 500 000 exemples de NIST: 10.324 %

erreur d'entraînement sur 500 000 exemples de P07: 47.3858 %

7 000 000 exemples de NIST visités. Le second finetune n'a pas duré longtemps. L'erreur de validation a baissé, mais l'erreur de test sur NIST a monté. Cette situation est un peu inhabituelle. Je suis porté à croire que peut-être le taux d'apprentissage était trop élevé pour ce second finetune.

Le temps de calcul pour le finetune: 41 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 468+2815+41=3324 minutes (55.4 heures)

Expériences faisant varier l'ensemble de validation

4 couches cachées, 1500 unitées par couches, 15 époques de pre-training, taux d'apprentissages de 0.01 pour le pretrain, niveau de corruption de 0.2, 'version_ift6266': 'b762ac18a2d7', 'version_theano': 'c02f8559e0f2+':

Auparavant, toutes les expériences avaient NIST comme ensemble de validation. Dans cette section, l'ensemble de validation provient de la même distribution que l'ensemble d'entraînement.

Taux d'apprentissage décroissant commençant à 0.1 et étant divisé par 2 à chacune des époques. FInetune sur P07 + NIST (voir /data/lisa/data/ift6266h10/experiments_SDA/P07_validP07)

Finetune sur P07 seulement:

erreur de validation sur P07:38.730000 %

erreur de test sur NIST:  19.773288 %

erreur de test sur P07:  41.122500 %

329 000 000 exemples de P07 visités. Le finetune n'a pas utilisé son maximum d'exemples permis (il a terminé dans sa 5e époque de P07).

Le temps de calcul pour le finetune: 1838 minutes sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:10.925000 %

erreur de test sur NIST:  21.018508 %

erreur de test sur P07:  51.753750 %

erreur d'entraînement sur 500 000 exemples de NIST: 10.3662 %

erreur d'entraînement sur 500 000 exemples de P07: 47.4586 %

6 000 000 exemples de NIST visités. Le finetune n'a pas duré longtemps. Peut-être encore une fois le taux d'apprentissage aurait pu être plus petit.

Le temps de calcul pour le finetune: 36 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 468+1838+36=2342 minutes (39 heures)

Expériences faisant varier la durée du pré-entraînement

4 couches cachées, 1500 unitées par couches cachées, tous les exemples de P07 train sont vus durant le pre-train, taux d'apprentissages de 0.01 pour le pretrain, niveau de corruption de 0.2, 'version_ift6266': 'a79db7cee035', 'version_theano': 'c02f8559e0f2+':

Auparavent, les expériences faites avec 1500 unitées cachées par couche voyaient 15% de P07 lors du pré-entraînement. Maintenant, j'ai essayé de voir tout P07 lors du pré-entraînement.

Taux d'apprentissage décroissant pour le finetune commençant à 0.1 et étant divisé par 2 à chacune des époques pour P07. Pour NIST, le taux d'apprentissage commence à 0.01 et est divisé par 2 à chaque 100 époques. Finetune sur P07 + NIST (voir /data/lisa/data/ift6266h10/experiments_SDA/P07_pre_LR_diff_dec)

Le pré-entraînement a demandé 2408 minutes sur GPU (40 heures)

Finetune sur P07 seulement:

erreur de validation sur NIST: 14.045000 %

erreur de test sur NIST:  20.206340 %

erreur de test sur P07:  41.315000 %

erreur d'entraînement sur 500 000 exemples de P07: 38.7062 %

406 000 000 exemples de P07 visités. Le finetune n'a pas utilisé son maximum d'exemples permis (il a terminé dans sa 5e époque de P07).

Le temps de calcul pour le finetune: 2278 minutes (38 heures) sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:10.945000 %

erreur de test sur NIST:  22.059670 %

erreur de test sur P07:  51.381250 %

erreur d'entraînement sur 500 000 exemples de NIST: 10.2954 %

erreur d'entraînement sur 500 000 exemples de P07: 47.592 %

12 000 000 exemples de NIST visités. Le second finetune n'a pas duré longtemps.

Le temps de calcul pour le finetune: 70 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 2408+2278+70=4756 minutes (79 heures)


Expériences faisant varier la capacité du modèle

Taux d'apprentissages de 0.01 pour le pretrain, 15% de P07 vu durant le pre-train, niveau de corruption de 0.2, 'version_ift6266': '625c0c3fcbdb+', 'version_theano': 'c02f8559e0f2+', taux d'apprentissage décroissant pour le finetune commençant à 0.1 et étant divisé par 2 à chacune des époques pour P07. Pour NIST, le taux d'apprentissage commence à 0.02 et est divisé par 2 à chaque 100 époques.

Auparavent, les expériences ont été faites avec 4 couches cachées contenant chacunes 1500 unitées.

Avec 4 couches cachées, mais 1000 unitées cachées par couche. Finetune sur P07 + NIST (voir /data/lisa/data/ift6266h10/experiments_SDA/P07_mid_LR_decrease)

Le pré-entraînement a demandé 248 minutes sur GPU (4 heures)

Finetune sur P07 seulement:

erreur de validation sur NIST: 13.918750  %

erreur de test sur NIST:  20.094779 %

erreur de test sur P07:  41.160000 %

erreur d'entraînement sur 500 000 exemples de P07: 38.6568 %

573 000 000 exemples de P07 visités.

Le temps de calcul pour le finetune: 1927 minutes (32 heures) sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:10.785000 %

erreur de test sur NIST:  20.181765 %

erreur de test sur P07:  58.072500 %

erreur d'entraînement sur 500 000 exemples de NIST:  9.919 %

erreur d'entraînement sur 500 000 exemples de P07: 53.8496 %

18 000 000 exemples de NIST visités. Le second finetune n'a pas duré longtemps.

Le temps de calcul pour le finetune: 61 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 248+1927+61=2236 minutes (37.3 heures)

Avec 3 couches cachées, mais 1500 unitées cachées par couche. Finetune sur P07 + NIST (voir /data/lisa/data/ift6266h10/experiments_SDA/P07_3cc_LR_decrease)

Le pré-entraînement a demandé 278 minutes sur GPU (4.6 heures)

Finetune sur P07 seulement:

erreur de validation sur NIST: 14.048750 %

erreur de test sur NIST:  20.093749 %

erreur de test sur P07:  42.432500 %

erreur d'entraînement sur 500 000 exemples de P07:39.8856 %

472 000 000 exemples de P07 visités.

Le temps de calcul pour le finetune: 2030 minutes (34 heures) sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:  10.773750

erreur de test sur NIST:  20.876318 %

erreur de test sur P07:   65.532500 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.0704 %

erreur d'entraînement sur 500 000 exemples de P07: 61.998 %

38 000 000 exemples de NIST visités. Le second finetune n'a pas duré longtemps.

Le temps de calcul pour le finetune: 163 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 278+2030+163=2471 minutes (41 heures)

Avec 3 couches cachées, 1000 unitées cachées par couches, une non-linéarité de sortie sigmoïde ainsi qu'une non-linéarité tanh à l'intérienr du réseau. (voir /data/lisa/data/ift6266h10/experiments_SDA/P07_demo )

Le pré-entraînement a duré 22 minutes sur GPU

Finetune avec P07 seulement:

erreur de validation sur NIST: 13.085000 %

erreur de test sur NIST:  18.719114

erreur de test sur P07:  39.991250 %

erreur d'entraînement sur 500 000 exemples de P07: 37.372 %

439 000 000 exemples de P07 visités.

Le temps de calcul pour le finetune: 1218 minutes (20.3 heures) sur GPU (phase P07)

Finetune avec P07 suivi de NIST:

erreur de validation sur NIST:  10.463750 %

erreur de test sur NIST:  20.669478 %

erreur de test sur P07:   51.395000 %

erreur d'entraînement sur 500 000 exemples de NIST: 9.595 %

erreur d'entraînement sur 500 000 exemples de P07: 47.7414 %

12 000 000 exemples de NIST visités. Le second finetune n'a pas duré longtemps. Le learning rate ne semble pas approprié encore

Le temps de calcul pour le finetune: 51 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle au complet est donc: 22+1218+51=1291 minutes (21.5 heures)

Expériences découlant du tableau sommaire tenant d'obtenir les meilleures performances:

Taux d'apprentissages de 0.01 pour le pretrain, 15% de PNIST vu durant le pre-train, niveau de corruption de 0.2, 'version_ift6266': '9fcd0215b8d5+', 'version_theano': 'c02f8559e0f2+', taux d'apprentissage décroissant pour le finetune commençant à 0.1 et étant divisé par 2 à chacune des époques pour PNIST. Pour NIST, le taux d'apprentissage commence à 0.02 et est divisé par 2 à chaque 100 époques. Il y a 4 couches cachées de 1500 unitées chaque. Non-linéarité interne tanh et non-linéarité de sortie softmax.

Ensemble de validation NIST:(/data/lisa/data/ift6266h10/experiments_SDA/PNIST_gros_softmax_tanh)

45 minutes de pre-train sur GPU

Finetune PNIST

erreur de validation sur NIST:  11.511250 %

erreur de validation sur P07: 93.220000 %

erreur de validation sur PNIST: 26.502500 %

erreur de test sur NIST:  16.727046 %

erreur de test sur PNIST07: 27.995000 %

erreur de test sur P07:   93.528750 %

erreur sur les chiffres NIST: 1.2311155066 %

erreur sur les minuscules NIST:  9.63333333333 %

erreur sur les majuscules NIST: 2.71334059124 %

336 000 000 exemples de PNIST visités.

Le temps de calcul pour le finetune: 1988 minutes sur GPU (phase PNIST)

Le temps de calcul pour le modèle est donc: 45+1988=2033 minutes (33.9 heures)

Finetune PNIST+NIST

erreur de validation sur NIST:  9.830000 %

erreur de validation sur P07: 93.660000 %

erreur de validation sur PNIST: 30.631250 %

erreur de test sur NIST:  19.360580 %

erreur de test sur PNIST07: 32.845000 %

erreur de test sur P07:   93.965000 %

erreur sur les chiffres NIST: 1.0827677932 %

erreur sur les minuscules NIST: 9.03333333333 %

erreur sur les majuscules NIST: 2.30298969936 %

8 000 000 exemples de NIST visités.

Le temps de calcul pour le finetune: 52 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle est donc: 45+1988+52=2085 minutes (34.75 heures)

Ensemble de validation PNIST: (/data/lisa/data/ift6266h10/experiments_SDA/PNIST_gros_softmax_tanh_validPNIST)

56 minutes de pre-train sur GPU

Finetune PNIST

erreur de validation sur PNIST:  27.518750 %

erreur de validation sur P07: 93.820000 %

erreur de validation sur NIST: 11.826250 %

erreur de test sur NIST:  17.294843 %

erreur de test sur PNIST07: 29.085000 %

erreur de test sur P07:   94.276250 %

erreur sur les chiffres NIST: 1.37264263547 %

erreur sur les minuscules NIST: 9.84166666667 %

erreur sur les majuscules NIST: 2.78871116322 %

164 000 000 exemples de PNIST visités.

Le temps de calcul pour le finetune: 1011 minutes sur GPU (phase PNIST)

Le temps de calcul pour le modèle est donc: 56+1011=1067 minutes (17.8 heures)

Finetune PNIST+NIST

erreur de validation sur PNIST:  28.686250 %

erreur de validation sur P07: 93.495000 %

erreur de validation sur NIST: 10.738750 %

erreur de test sur NIST:  19.157009 %

erreur de test sur PNIST07: 30.975000 %

erreur de test sur P07:   94.046250 %

erreur sur les chiffres NIST: 1.17996112267 %

erreur sur les minuscules NIST: 9.49166666667 %

erreur sur les majuscules NIST: 2.64634452726 %

1 500 000 exemples de NIST visités.

Le temps de calcul pour le finetune: 9 minutes sur GPU (phase NIST)

Le temps de calcul pour le modèle est donc:56+1011+9=1076 minutes (17.9 heures)



Conclusions:

 

Lorsque le pre-entraînement se fait avec P07, on obtient des erreurs de test un peu plus petites sur P07 et aussi sur NIST, mais à moindre mesure. Cela de fait pas une très grande différence et la différence n'est pas toujours à l'avantage du pré-entraînement avec P07.

Lorsqu'on fait un finetune sur NIST, l'erreur de test est très grande sur P07 (dans un voisinage de 95%), par contre, lorsque le finetune est effectué avec P07, les résultats de test sur P07 sont bien meilleur (dans les environ de 50%, ce qui est environ ma moyenne personnelle sur les 30 premiers exemples de test de P07).

Effectuer un finetune sur NIST et ensuite sur P07 n'est pas très utile. Par contre, un finetune sur P07 suivi d'un finetune sur NIST apporte de bons résultats. Les meilleurs erreurs de test sur NIST one été effectuéees avec un tel modèle.

Un modèle avec plus d'unitées cachées a généralement une erreur de test plus basse, tant pour NIST que pour P07.

Une taux d'apprentissage décroissant semble intéressant pour le finetune avec P07. Par contre, lorsqu'on utilise un second finetune, il semble qu'il faudrait commencer le second finetune avec un taux d'apprentissage plus petit.

De plus, il semble que le fait d'utiliser un ensemble de validation provenant de la même distribution que l'ensemble d'entraînement n'ait pas eu un impact positif sur les erreur de test de P07. Dans le test effectué avec pre-train=P07, finetune=P07+NIST, valid ~distribution_train avec finetune_lr décroissant ait été victime d'early-stopping et ne se soit pas autant entraîné que lorsque valid ~ NIST. Ainsi, nous obtenons de meilleurs résultats dans le second cas, tant avec NIST que sur P07 et pour finetune=P07 autant que pour finetune=P07+NIST.

Lorsqu'un pré-entraînement très long est effectué sur le modèle, une expérience montre que cela n'apporte pas de bénéfices. Les résultats avec un pré-entraînement utilisant P07 au complet pour chaque couche cachée sont un peu moins bons que lorsqu'on utilise plutôt 15% de P07 pour le pré-entraînement de chacune des couches cachées. Par contre, la différence est plutôt petite, ce n'est pas flagrant qu'un pré-entraînement plus long nuis aux résultats. Ainsi, Il appert qu'un pré-entraînement moins long est souhaitable tant au niveau du temps de calcul qu'au niveau de la précision des résultats.

De plus, nous pouvons voir que lorsque la capacité du modèle est moindre, les résultats ne sont pas tellement affecté. Par exemple, en faisant passer le nombre de couches cachées de 4 à 3, l'erreur de test augmente un peu, mais pas énormément. Ce serait un compromis intéressant pour un modèle plus petit pour la démo. De plus, sur un modèle à 4 couches cachées, en faisant passer le nombre d'unitées cachées par couche de 1500 à 1000, on obtient une petite augmentation de l'erreur de test, mais encore moins grande que lorsqu'on fait diminier le nombre de couches cachées. Pour la démo, je vais donc essayer un modèle à 3 couches cachées contenant 1000 unitées cachées chacunes.

Une non-linéarité tanh dans le réseau semble avoir un effet fantastique sur le réseau. Pour l'instant, mes meilleurs résultats sont avec un réseau plus petit, mais qui utilise la tanh comme non-linéarité à l'intérieur du réseau.

Il est aussi étonnant de voir que le test utilisant uniquement PNIST comme ensemble de validation dans la phase de finetune avec PNIST (et aussi avec NIST) donne de moins bon résultats que lorsque NIST est utilisé. Le early stopping s'est rapidement déclaré, ce qui fait que le modèle n'a pas pu s'entraîner autant qu'avec NIST. Le second finetune avec NIST et ensemble de validation PNIST donne aussi de moins bon résultats que lorsque l'ensemble de validation utilisé est NIST. Ce résultat est un peu surprenant.

 

Meilleur modèle:

 

Le meilleur modèle par rapport à l'ensemble de test NIST:

Taux d'apprentissages de 0.01 pour le pretrain, 15% de PNIST vu durant le pre-train, niveau de corruption de 0.2, 'version_ift6266': '9fcd0215b8d5+', 'version_theano': 'c02f8559e0f2+', taux d'apprentissage décroissant pour le finetune commençant à 0.1 et étant divisé par 2 à chacune des époques pour PNIST. Pour NIST, le taux d'apprentissage commence à 0.02 et est divisé par 2 à chaque 100 époques. Il y a 4 couches cachées de 1500 unitées chaque. Non-linéarité interne tanh et non-linéarité de sortie softmax.

Ensemble de validation NIST:

45 minutes de pre-train sur GPU

Finetune PNIST

erreur de validation sur NIST:  11.511250 %

erreur de validation sur P07: 93.220000 %

erreur de validation sur PNIST: 26.502500 %

erreur de test sur NIST:  16.727046 %

erreur de test sur PNIST07: 27.995000 %

erreur de test sur P07:   93.528750 %

336 000 000 exemples de PNIST visités.

Le temps de calcul pour le finetune: 1988 minutes sur GPU (phase PNIST)

Le temps de calcul pour le modèle est donc: 45+1988=2033 minutes (33.9 heures)

Erreur sur les différentes classes de NIST (en sachant quelle est la classe qui sera demandée)

chiffres: 1.37264263547 %

minuscules: 9.84166666667 %

majuscules: 2.78871116322 %