Une introduction douce à la descente de gradient en mini-lots et à la configuration de la taille du lot
La descente de gradient stochastique est la méthode dominante utilisée pour former des modèles d'apprentissage profond.
Il existe trois variantes principales de descente de gradient et il peut être difficile de savoir laquelle utiliser.
Dans cet article, vous découvrirez le type de descente de pente que vous devez utiliser en général et comment le configurer.
Après avoir terminé cet article, vous saurez :
- Qu'est-ce que la descente de pente et comment elle fonctionne à un niveau élevé.
- Qu'est-ce que la descente de gradient par lots, stochastique et mini-lots, ainsi que les avantages et les limites de chaque méthode.
- Cette descente de gradient en mini-lots est la méthode incontournable et comment la configurer sur vos applications.
Démarrez votre projet avec mon nouveau livre Deep Learning With Python, comprenant des tutoriels pas à pas et les fichiers code source Python pour tous exemples.
Commençons.
- Mise à jour d'avril 2018 : ajout d'une référence supplémentaire pour prendre en charge une taille de lot de 32.
- Mise à jour juin/2019 : suppression de la mention du gradient moyen.
Présentation du didacticiel
Ce tutoriel est divisé en 3 parties ; ils sont:
- Qu’est-ce que la descente de dégradé ?
- Contraster les 3 types de descente de gradient
- Comment configurer la descente de dégradé en mini-lots
Qu’est-ce que la descente de dégradé ?
La descente de gradient est un algorithme d'optimisation souvent utilisé pour trouver les poids ou les coefficients des algorithmes d'apprentissage automatique, tels que les réseaux de neurones artificiels et la régression logistique.
Cela fonctionne en demandant au modèle d'effectuer des prédictions sur les données d'entraînement et en utilisant l'erreur sur les prédictions pour mettre à jour le modèle de manière à réduire l'erreur.
Le but de l'algorithme est de trouver des paramètres de modèle (par exemple des coefficients ou des poids) qui minimisent l'erreur du modèle sur l'ensemble de données d'entraînement. Pour ce faire, il apporte des modifications au modèle qui le déplacent le long d'un gradient ou d'une pente d'erreurs vers une valeur d'erreur minimale. Cela donne à l’algorithme son nom de « descente de gradient ».
L'esquisse du pseudocode ci-dessous résume l'algorithme de descente de gradient :
model = initialization(...)
n_epochs = ...
train_data = ...
for i in n_epochs:
train_data = shuffle(train_data)
X, y = split(train_data)
predictions = predict(X, model)
error = calculate_error(y, predictions)
model = update_model(model, error)
Pour plus d'informations, consultez les articles :
- Descente de gradient pour l'apprentissage automatique
- Comment implémenter la régression linéaire avec descente de gradient stochastique à partir de zéro avec Python
Contraster les 3 types de descente de gradient
La descente de gradient peut varier en termes de nombre de modèles d'entraînement utilisés pour calculer l'erreur ; qui est à son tour utilisé pour mettre à jour le modèle.
Le nombre de modèles utilisés pour calculer l'erreur inclut la stabilité du gradient utilisé pour mettre à jour le modèle. Nous verrons qu'il existe une tension dans les configurations de descente de gradient en termes d'efficacité de calcul et de fidélité du gradient d'erreur.
Les trois principaux types de descente de gradient sont le batch, le stochastique et le mini-batch.
Examinons chacun de plus près.
Qu’est-ce que la descente de gradient stochastique ?
La descente de gradient stochastique, souvent abrégée SGD, est une variante de l'algorithme de descente de gradient qui calcule l'erreur et met à jour le modèle pour chaque exemple de l'ensemble de données d'entraînement.
La mise à jour du modèle pour chaque exemple de formation signifie que la descente de gradient stochastique est souvent appelée algorithme d'apprentissage automatique en ligne.
Avantages
- Les mises à jour fréquentes donnent immédiatement un aperçu des performances du modèle et du taux d'amélioration.
- Cette variante de descente de pente est peut-être la plus simple à comprendre et à mettre en œuvre, notamment pour les débutants.
- La fréquence accrue de mise à jour du modèle peut entraîner un apprentissage plus rapide sur certains problèmes.
- Le processus de mise à jour bruyant peut permettre au modèle d'éviter les minima locaux (par exemple une convergence prématurée).
Inconvénients
- La mise à jour du modèle aussi fréquemment est plus coûteuse en termes de calcul que d'autres configurations de descente de gradient, et prend beaucoup plus de temps pour former des modèles sur de grands ensembles de données.
- Les mises à jour fréquentes peuvent entraîner un signal de gradient bruyant, ce qui peut faire varier les paramètres du modèle et, par conséquent, l'erreur du modèle (avoir une variance plus élevée sur les époques d'entraînement).
- Le processus d'apprentissage bruyant sur le gradient d'erreur peut également rendre difficile pour l'algorithme de fixer un minimum d'erreur pour le modèle.
Qu’est-ce que la descente de gradient par lots ?
La descente de gradient par lots est une variante de l'algorithme de descente de gradient qui calcule l'erreur pour chaque exemple de l'ensemble de données d'entraînement, mais ne met à jour le modèle qu'une fois que tous les exemples d'entraînement ont été évalués.
Un cycle sur l’ensemble des données de formation est appelé une époque de formation. Par conséquent, on dit souvent que la descente de gradient par lots effectue des mises à jour du modèle à la fin de chaque époque de formation.
Avantages
- Moins de mises à jour du modèle signifient que cette variante de descente de gradient est plus efficace sur le plan informatique que la descente de gradient stochastique.
- La diminution de la fréquence de mise à jour entraîne un gradient d'erreur plus stable et peut entraîner une convergence plus stable sur certains problèmes.
- La séparation du calcul des erreurs de prédiction et de la mise à jour du modèle confère à l'algorithme des implémentations basées sur un traitement parallèle.
Inconvénients
- Le gradient d’erreur plus stable peut entraîner une convergence prématurée du modèle vers un ensemble de paramètres moins optimal.
- Les mises à jour à la fin de l'époque de formation nécessitent une complexité supplémentaire liée à l'accumulation d'erreurs de prédiction dans tous les exemples de formation.
- Généralement, la descente de gradient par lots est implémentée de telle manière qu'elle nécessite l'intégralité de l'ensemble de données d'entraînement en mémoire et disponible pour l'algorithme.
- Les mises à jour des modèles, et par conséquent la vitesse de formation, peuvent devenir très lentes pour les grands ensembles de données.
Qu’est-ce que la descente de gradient en mini-lots ?
La descente de gradient en mini-lots est une variante de l'algorithme de descente de gradient qui divise l'ensemble de données d'entraînement en petits lots utilisés pour calculer l'erreur du modèle et mettre à jour les coefficients du modèle.
Les implémentations peuvent choisir de additionner le gradient sur le mini-lot, ce qui réduit encore la variance du gradient.
La descente de gradient en mini-lots cherche à trouver un équilibre entre la robustesse de la descente de gradient stochastique et l'efficacité de la descente de gradient par lots. Il s’agit de l’implémentation la plus courante de la descente de gradient utilisée dans le domaine de l’apprentissage profond.
Avantages
- La fréquence de mise à jour du modèle est supérieure à la descente de gradient par lots, ce qui permet une convergence plus robuste, évitant les minima locaux.
- Les mises à jour par lots fournissent un processus informatique plus efficace que la descente de gradient stochastique.
- Le traitement par lots permet à la fois l'efficacité de ne pas avoir toutes les données d'entraînement en mémoire et l'implémentation d'algorithmes.
Inconvénients
- Le mini-batch nécessite la configuration d'un hyperparamètre supplémentaire « taille du mini-lot » pour l'algorithme d'apprentissage.
- Les informations sur les erreurs doivent être accumulées sur des mini-lots d'exemples de formation comme la descente de gradient par lots.
Comment configurer la descente de dégradé en mini-lots
La descente de gradient en mini-lots est la variante recommandée de la descente de gradient pour la plupart des applications, en particulier dans le domaine de l'apprentissage profond.
Les tailles de mini-lots, communément appelées « tailles de lots » par souci de concision, sont souvent adaptées à un aspect de l'architecture informatique sur laquelle l'implémentation est exécutée. Comme une puissance de deux qui correspond aux besoins en mémoire du matériel GPU ou CPU comme 32, 64, 128, 256, etc.
La taille du lot est un curseur sur le processus d'apprentissage.
- De petites valeurs donnent un processus d'apprentissage qui converge rapidement au prix du bruit dans le processus de formation.
- Des valeurs élevées donnent un processus d'apprentissage qui converge lentement avec des estimations précises du gradient d'erreur.
Conseil 1 : Une bonne valeur par défaut pour la taille du lot pourrait être 32.
… [taille du lot] est généralement choisie entre 1 et quelques centaines, par ex. [taille du lot]=32 est une bonne valeur par défaut, avec des valeurs supérieures à 10 tirant parti de l'accélération des produits matrice-matrice par rapport aux produits matrice-vecteur.
— Recommandations pratiques pour la formation basée sur le gradient des architectures profondes, 2012
Mise à jour 2018 : voici un autre article prenant en charge une taille de lot de 32, voici le devis (m est la taille du lot) :
Les résultats présentés confirment que l’utilisation de lots de petite taille permet d’obtenir les meilleures performances de stabilité d’entraînement et de généralisation, pour un coût de calcul donné, sur un large éventail d’expériences. Dans tous les cas, les meilleurs résultats ont été obtenus avec des tailles de lots m=32 ou inférieures, souvent aussi petites que m=2 ou m=4.
— Revisiter la formation en petits lots pour les réseaux de neurones profonds, 2018.
Astuce 2 : Il est judicieux d'examiner les courbes d'apprentissage de l'erreur de validation du modèle par rapport au temps d'entraînement avec différentes tailles de lot lors du réglage de la taille du lot.
… il peut être optimisé séparément des autres hyperparamètres, en comparant les courbes d'entraînement (erreur d'entraînement et de validation vs durée d'entraînement), après que les autres hyper-paramètres (sauf le taux d'apprentissage) aient été sélectionnés.
Astuce 3 : Ajustez la taille du lot et le taux d'apprentissage après avoir réglé tous les autres hyperparamètres.
… [taille du lot] et [taux d'apprentissage] peuvent légèrement interagir avec d'autres hyper-paramètres, les deux doivent donc être réoptimisés à la fin. Une fois que [taille du lot] est sélectionné, il peut généralement être corrigé tandis que les autres hyper-paramètres peuvent être encore optimisés (à l'exception d'un hyper-paramètre d'impulsion, s'il est utilisé).
Lectures complémentaires
Cette section fournit plus de ressources sur le sujet si vous cherchez à approfondir.
Articles connexes
- Descente de gradient pour l'apprentissage automatique
- Comment implémenter la régression linéaire avec descente de gradient stochastique à partir de zéro avec Python
Lecture supplémentaire
- Descente de gradient stochastique sur Wikipédia
- Apprentissage automatique en ligne sur Wikipédia
- Un aperçu des algorithmes d'optimisation de descente de gradient
- Recommandations pratiques pour la formation basée sur le gradient des architectures profondes, 2012
- Formation efficace en mini-batch pour l'optimisation stochastique, 2014
- En apprentissage profond, pourquoi n’utilisons-nous pas l’ensemble de la formation pour calculer le gradient ? sur Quora
- Méthodes d'optimisation pour l'apprentissage automatique à grande échelle, 2016
Résumé
Dans cet article, vous avez découvert l'algorithme de descente de gradient et la version que vous devez utiliser en pratique.
Concrètement, vous avez appris :
- Qu'est-ce que la descente de pente et comment elle fonctionne à un niveau élevé.
- Qu'est-ce que la descente de gradient par lots, stochastique et mini-lots, ainsi que les avantages et les limites de chaque méthode.
- Cette descente de gradient en mini-lots est la méthode incontournable et comment la configurer sur vos applications.
Avez-vous des questions ?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.