Des différences de régularisation dans MLP entre les mises à jour par lots et individuelles?

9

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_weightest ajouté également avant le combiné delta est soustrait à la fin du lot, où lambdaest 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 / Nlorsque 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.

Neil Slater
la source

Réponses:

2

La régularisation est également pertinente dans l'apprentissage par élément. Je suggérerais de commencer par une approche de validation de base pour découvrir lambda, que vous fassiez un apprentissage par lots ou par article. Il s'agit de l'approche la plus simple et la plus sûre. Essayez manuellement avec un certain nombre de valeurs différentes. par exemple 0,001. 0,003, 0,01, 0,03, 0,1 etc. et voyez comment se comporte votre ensemble de validation. Plus tard, vous pourrez automatiser ce processus en introduisant une méthode de recherche linéaire ou locale.

En remarque, je pense que la valeur de lambda doit être considérée en relation avec les mises à jour du vecteur de paramètres, plutôt que la taille de l'ensemble d'apprentissage. Pour la formation par lots, vous avez une mise à jour des paramètres par passe de jeu de données , tandis que pour la mise en ligne une mise à jour par échantillon (quelle que soit la taille du jeu de formation).

J'ai récemment trébuché sur cette question croisée , qui semble assez similaire à la vôtre. Il existe un lien vers un article sur un nouvel algorithme SGD , avec un contenu pertinent. Il pourrait être utile de jeter un coup d'œil (en particulier les pages 1742-1743).

insys
la source
Oui, j'ai toujours l'intention de procéder à une validation croisée pour vérifier le sur-ajustement, ma question est plus basique que cela - je ne trouve aucune référence à l'utilisation de la régularisation avec un ajustement du poids par article dans MLP, et je crains qu'il y ait un bon raison - par exemple, il ne fonctionne pas dans ce mode d'apprentissage, ou doit être ajusté. La question validée de manière croisée est très similaire cependant et me donne plus de confiance, merci. La page de l'algorithme SGD semble avoir une méthode stochastique différente pour introduire la régularisation, qui pourrait être un peu avancée pour moi, mais c'est exactement ce que je recherche.
Neil Slater
La régularisation est également pertinente dans l'apprentissage par élément. Je suggérerais toujours de commencer par une approche de validation de base pour découvrir lambda. Il s'agit de l'approche la plus simple et la plus sûre. Essayez manuellement avec un certain nombre de valeurs différentes. par exemple 0,001. 0,003, 0,01, 0,03, 0,1 etc. et voyez comment se comporte votre ensemble de validation. Plus tard, vous pourrez automatiser ce processus en introduisant une méthode de recherche linéaire ou locale.
insys
Si votre commentaire ci-dessus a été modifié et remplacé la première phrase / question dans votre réponse, je pense que je pourrais l'accepter.
Neil Slater
Merci de l'avoir signalé, je suis d'accord. Modifié en. J'espère que c'est plus clair.
insys
2

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' /Nen lambda * current_weight / Nest 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 pour lambda.

Vous pouvez également utiliser l' algorithme de recherche de grille pour choisir la meilleure valeur lambda(l' hyperparamètre => celui que vous devez choisir).

Orelus
la source