Je viens d'apprendre la régularisation en tant qu'approche pour contrôler le sur-ajustement, et je voudrais intégrer l'idée dans une simple mise en œuvre de la rétropropagation et du perceptron multicouche (MLP) que j'ai mis en place.
Actuellement, pour éviter le sur-ajustement, je fais une validation croisée et conserve le réseau avec le meilleur score jusqu'à présent sur l'ensemble de validation. Cela fonctionne bien, mais l'ajout de la régularisation me serait bénéfique car le choix correct de l'algorithme et du paramètre de régularisation ferait converger mon réseau sur un modèle non surajusté plus systématiquement.
La formule que j'ai pour le terme de mise à jour (du cours Coursera ML) est indiquée comme une mise à jour par lots, par exemple pour chaque poids, après avoir résumé tous les deltas applicables pour l'ensemble de la formation à partir de la propagation des erreurs, un ajustement de lambda * current_weight
est ajouté également avant le combiné delta est soustrait à la fin du lot, où lambda
est le paramètre de régularisation.
Mon implémentation de la rétropropagation utilise des mises à jour de poids par article. Je crains de ne pas pouvoir simplement copier l'approche par lots, même si cela me semble intuitif. Un terme de régularisation plus petit par article fonctionne-t-il aussi bien?
Par exemple, lambda * current_weight / N
lorsque N est la taille de l'ensemble d'entraînement - à première vue, cela semble raisonnable. Cependant, je n'ai rien trouvé sur le sujet, et je me demande si c'est parce que la régularisation ne fonctionne pas aussi bien avec une mise à jour par article, ou même sous un nom différent ou une formule modifiée.
la source
Pour compléter ce que Insys a dit:
La régularisation est utilisée lors du calcul de la rétropropagation pour tous les poids de votre MLP. Par conséquent, au lieu de calculer le gradient en ce qui concerne toutes les entrées de l'ensemble d'apprentissage (
batch
), vous n'utilisez qu'un ou plusieurs éléments (stochastic or semi-stochastic
). Vous finirez par limiter un résultat de la mise à jour en ce qui concerne un élément au lieu de tout ce qui est également correct.Aussi, si je me souviens bien, Andrew NG a utilisé
L2-regularization
. L'/N
enlambda * current_weight / N
est pas obligatoire, juste aide redimensionnant l'entrée. Cependant si vous choisissez de ne pas l'utiliser, vous devrez (dans la plupart des cas) sélectionner une autre valeur pourlambda
.Vous pouvez également utiliser l' algorithme de recherche de grille pour choisir la meilleure valeur
lambda
(l' hyperparamètre => celui que vous devez choisir).la source