Comment régler (systématiquement) le taux d'apprentissage en utilisant Gradient Descent comme Optimizer?

12

Un étranger au domaine ML / DL; a commencé le cours Udacity Deep Learning basé sur Tensorflow; faire la tâche 3 problème 4; essayer de régler le taux d'apprentissage avec la configuration suivante:

  • Taille du lot 128
  • Nombre d'étapes: suffisant pour remplir 2 époques
  • Tailles des calques masqués: 1024, 305, 75
  • Initialisation du poids: tronquée normale avec std. écart de sqrt (2 / n) où n est la taille de la couche précédente
  • Probabilité de décrochage: 0,75
  • Régularisation: non appliquée
  • Algorithme de taux d'apprentissage: décroissance exponentielle

joué avec les paramètres de taux d'apprentissage; ils ne semblent pas avoir d'effet dans la plupart des cas; code ici ; résultats:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Comment régler systématiquement le taux d'apprentissage?
  • Comment le taux d'apprentissage est-il lié au nombre d'étapes?
Thoran
la source
1
tpot fournit des pipelines de réglage automatique ML
denfromufa

Réponses:

4

Utilisez un optimiseur de descente de gradient. Ceci est un très bon aperçu.

Concernant le code, jetez un œil à ce tutoriel . Ceci et ceci sont quelques exemples.

Personnellement, je suggère d'utiliser ADAM ou RMSprop. Il y a encore quelques hyperparamètres à régler, mais il y en a des «standard» qui fonctionnent 99% du temps. Pour ADAM, vous pouvez consulter son article et RMSprop sur ces diapositives .

ÉDITER

Ok, vous utilisez déjà un optimiseur de dégradé. Ensuite, vous pouvez effectuer une optimisation d'hyperparamètres pour sélectionner le meilleur taux d'apprentissage. Récemment, une approche automatisée a été proposée . De plus, il y a beaucoup de travaux prometteurs de Frank Hutter concernant le réglage automatisé des hyperparamètres.

Plus généralement, jetez un œil au défi AutoML , où vous pouvez également trouver le code source des équipes. Dans ce défi, l'objectif est d'automatiser l'apprentissage automatique, y compris le réglage des hyperparamètres.

Enfin, cet article de LeCun et ce très récent didacticiel de DeepMin (consultez le chapitre 8) donnent quelques idées qui pourraient être utiles pour votre question.

Quoi qu'il en soit, gardez à l'esprit que (en particulier pour les problèmes faciles), il est normal que le taux d'apprentissage n'affecte pas beaucoup l'apprentissage lors de l'utilisation d'un optimiseur de descente de gradient. Habituellement, ces optimiseurs sont très fiables et fonctionnent avec différents paramètres.

Simon
la source
J'utilise déjà Gradient Descent Optimizer dans le code. Merci pour les liens!
Thoran
@Thoran Ok, je n'ai pas lu le code: D (et la question ne mentionne pas d'optimiseur). J'ai modifié ma réponse pour vous donner plus d'aide :)
Simon
De beaux développements, rend le travail plus facile pour les étrangers comme <. Savez-vous comment le nombre d'étapes et le taux d'apprentissage sont liés? Mon instinct me dit que s'il y a plus d'étapes, le processus d'apprentissage devrait être plus lent.
Thoran
@Thoran Généralement oui, plus le nombre d'étapes est élevé, plus le processus est lent (mais aussi plus stable). J'ai encore modifié ma réponse en ajoutant quelques références pour quelques "astuces" qui peuvent être utiles pour régler manuellement les hyperparamètres.
Simon
trucs très cool, il me faudra du temps pour le digérer: D
Thoran
1

Vous pouvez automatiser le réglage des hyper-paramètres dans de nombreux algorithmes d'apprentissage automatique eux-mêmes, ou simplement les hyperparamètres pour l'optimiseur de descente de gradient, c'est-à-dire le taux d'apprentissage.

Une bibliothèque qui a été populaire pour ce faire est la menthe verte.

https://github.com/JasperSnoek/spearmint

iratzhash
la source
1

Un tuner de taux d'apprentissage automatique très récent est fourni dans Adaptation du taux d'apprentissage en ligne avec descente hypergraduée

Cette méthode est très simple à mettre en œuvre, le résultat principal pour SGD est donné comme suit:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0

eqzx
la source
0

Pour régler les hyperparamètres (qu'il s'agisse du taux d'apprentissage, du taux de décroissance, de la régularisation ou de toute autre chose), vous devez établir un ensemble de données conservé; cet ensemble de données est dissocié de votre ensemble de données d'entraînement. Après avoir réglé plusieurs modèles avec différentes configurations (où une configuration = un choix particulier de chaque hyperparamètre), vous choisissez la configuration en sélectionnant celle qui maximise la précision maintenue.

Alireza
la source
En quoi le jeu de données conservé est-il différent du jeu de données de test ou de validation?
Thoran
holdout est un autre nom pour la validation. Fondamentalement, vous avez trois ensembles de données disjoints: former, suspendre et tester. Le train est uniquement utilisé pour l'apprentissage des poids des modèles (par exemple, en utilisant la descente de gradient). Heldout est utilisé pour régler les paramètres du modèle. Le test est uniquement utilisé pour mesurer les performances de généralisation (c'est-à-dire comment puis-je m'attendre à ce que mon modèle fonctionne sur des données invisibles)
Alireza
Merci @Alireza d'avoir pris le temps d'expliquer. J'utilise déjà un ensemble de données de validation. Et sans test, il n'est pas possible de mesurer la précision!
Thoran
Eh bien, votre question initiale portait sur la détermination du taux d'apprentissage: si la première colonne de votre message d'origine avait une précision (pas de formation), alors vous pouvez dire que 0,5 est meilleur que 0,1 (bien que vous devriez continuer à essayer des valeurs> 0,5). [note: si vous refaites vos expériences, il vous suffit de partitionner certaines données pour servir de test]
Alireza