web-dev-qa-db-fra.com

Comment calculer le paramètre de régularisation en régression linéaire

Lorsque nous avons un polynôme linéaire de haut degré qui est utilisé pour ajuster un ensemble de points dans une configuration de régression linéaire, pour éviter le sur-ajustement, nous utilisons la régularisation et nous incluons un paramètre lambda dans la fonction de coût. Ce lambda est ensuite utilisé pour mettre à jour les paramètres thêta dans l'algorithme de descente de gradient.

Ma question est de savoir comment calculer ce paramètre de régularisation lambda?

39
London guy

Le paramètre de régularisation (lambda) est une entrée pour votre modèle, donc ce que vous voulez probablement savoir, c'est comment vous sélectionnez la valeur de lambda. Le paramètre de régularisation réduit le sur-ajustement, ce qui réduit la variance de vos paramètres de régression estimés; cependant, cela se fait au détriment de l'ajout de biais à votre estimation. L'augmentation du lambda entraîne moins de sur-ajustement mais également un biais plus important. La vraie question est donc: "Quel est le biais que vous êtes prêt à tolérer dans votre estimation?"

Une approche que vous pouvez adopter consiste à sous-échantillonner au hasard vos données plusieurs fois et à examiner la variation de votre estimation. Répétez ensuite le processus pour une valeur légèrement supérieure de lambda pour voir comment il affecte la variabilité de votre estimation. Gardez à l'esprit que quelle que soit la valeur de lambda que vous décidez appropriée pour vos données sous-échantillonnées, vous pouvez probablement utiliser une valeur plus petite pour obtenir une régularisation comparable sur l'ensemble de données complet.

47
bogatron

FORME FERMÉE (TIKHONOV) VERSUS GRADIENT DESCENT

Salut! Belles explications pour les approches mathématiques intuitives et de premier ordre là-bas. Je voulais juste ajouter quelques spécificités qui, si elles ne sont pas de "résolution de problèmes", peuvent certainement aider à accélérer et à donner une certaine cohérence au processus de recherche d'un bon hyperparamètre de régularisation.

Je suppose que vous parlez de la régularisation L2 (ak "weight decay"), pondérée linéairement par le lambda terme, et que vous optimisez les poids de votre modèle soit avec forme fermée Tikhonov équation (fortement recommandé pour les faibles modèles de régression linéaire dimensionnelle), ou avec une variante de descente de gradient avec rétropropagation . Et que dans ce contexte, vous voulez choisir la valeur pour lambda qui fournit la meilleure capacité de généralisation.


FORMULAIRE FERMÉ (TIKHONOV)

Si vous pouvez suivre la voie Tikhonov avec votre modèle ( Andrew Ng dit en dessous de 10k dimensions, mais cette suggestion a au moins 5 ans) Wikipedia - détermination du facteur Tikhonov = offre une solution intéressante de forme fermée, qui s'est avérée fournir la valeur optimale . Mais cette solution soulève probablement des problèmes d'implémentation (complexité temporelle/stabilité numérique) dont je ne suis pas au courant, car il n'y a pas d'algorithme courant pour l'exécuter. Cela article de 2016 semble très prometteur et peut valoir la peine d'être essayé si vous devez vraiment optimiser votre modèle linéaire à son meilleur.

  • Pour une implémentation plus rapide du prototype, ce 2015 Python semble le traiter de manière itérative, vous pouvez le laisser optimiser puis extraire la valeur finale pour le lambda:

Dans cette nouvelle méthode innovante, nous avons dérivé une approche itérative pour résoudre le problème général de régularisation de Tikhonov, qui converge vers la solution silencieuse, ne dépend pas fortement du choix de lambda, et pourtant évite toujours le problème d'inversion.

Et à partir du GitHub README du projet: InverseProblem.invert(A, be, k, l) #this will invert your A matrix, where be is noisy be, k is the no. of iterations, and lambda is your dampening effect (best set to 1)


DESCENTE GRADUELLE

Tous les liens de cette partie proviennent de l'étonnant livre en ligne de Michael Nielsen "Neural Networks and Deep Learning", lecture recommandée !

Pour cette approche, il semble être encore moins à dire: la fonction de coût est généralement non convexe, l'optimisation est effectuée numériquement et les performances du modèle sont mesurées par une certaine forme de validation croisée (voir Sur-ajustement et régularisation) et pourquoi la régularisation aide-t-elle à réduire le sur-ajustement si vous n'en avez pas assez). Mais même lors de la validation croisée, Nielsen suggère quelque chose: vous voudrez peut-être regarder cette explication détaillée sur la façon dont la régularisation L2 fournit un effet de décomposition du poids, mais le résumé est qu'il l'est inversement proportionnelle au nombre d'échantillons n, donc lors du calcul de l'équation de descente de gradient avec le terme L2,

utilisez simplement la rétropropagation, comme d'habitude, puis ajoutez (λ/n)*w à la dérivée partielle de tous les termes de pondération.

Et sa conclusion est que, quand on veut un effet de régularisation similaire avec un nombre d'échantillons différent, lambda doit être changé proportionnellement:

nous devons modifier le paramètre de régularisation. La raison en est que la taille n de l'ensemble d'entraînement est passée de n=1000 À n=50000, Ce qui modifie le facteur de décroissance du poids 1−learning_rate*(λ/n). Si nous continuions à utiliser λ=0.1, Cela signifierait beaucoup moins de perte de poids et donc beaucoup moins d'effet de régularisation. Nous compensons en changeant en λ=5.0.

Cela n'est utile que lors de l'application du même modèle à différentes quantités des mêmes données, mais je pense que cela ouvre la porte à une certaine intuition sur la façon dont cela devrait fonctionner, et, plus important encore, accélère le processus d'hyperparamétrisation en vous permettant de peaufiner lambda dans des sous-ensembles plus petits, puis évoluer.

Pour choisir les valeurs exactes, il suggère dans ses conclusions sur comment choisir les hyperparamètres d'un réseau de neurones l'approche purement empirique: commencez par 1 puis multipliez et divisez progressivement par 10 jusqu'à ce que vous trouviez l'ordre de grandeur approprié, et puis effectuez une recherche locale dans cette région. Dans les commentaires de cette question liée à SE , l'utilisateur Brian Borchers suggère également une méthode très connue qui peut être utile pour cette recherche locale:

  1. Prenez de petits sous-ensembles des ensembles de formation et de validation (pour pouvoir en créer plusieurs dans un délai raisonnable)
  2. En commençant par λ=0 Et en augmentant par petites quantités dans une certaine région, effectuez une formation et une validation rapides du modèle et tracez les deux fonctions de perte
  3. Vous observerez trois choses:
    1. La fonction de perte de CV sera toujours plus élevée que celle de la formation, car votre modèle est optimisé pour les données de formation exclusivement ( EDIT: Après un certain temps, j'ai vu un cas MNIST où l'ajout de L2 a aidé la perte de CV à diminuer plus rapidement que celui de la formation jusqu'à la convergence. Probablement en raison de la cohérence ridicule des données et d'une hyperparamétrisation sous-optimale cependant).
    2. La fonction de perte d'entraînement aura son minimum pour λ=0, Puis augmentera avec la régularisation, car empêcher le modèle d'ajuster de manière optimale les données d'entraînement est exactement ce que fait la régularisation.
    3. La fonction de perte de CV commencera à un niveau élevé à λ=0, Puis diminuera, puis recommencera à augmenter à un moment donné ( EDIT: ceci en supposant que la configuration est capable de s'ajuster pour λ=0, c'est-à-dire que le modèle a suffisamment de puissance et aucun autre moyen de régularisation n'est fortement appliqué).
  4. La valeur optimale pour λ Sera probablement quelque part autour du minimum de la fonction de perte de CV, elle peut également dépendre un peu de la façon dont la fonction de perte d'entraînement ressemble. Voir l'image pour une représentation possible (mais pas la seule) de ceci: au lieu de "complexité du modèle", vous devriez interpréter l'axe des x comme λ Étant zéro à droite et en augmentant vers la gauche .

L2 diagnostics: instead of "model complexity" one should interpret the x axis **as <code>λ</code> being zero at the right and increasing towards the left

J'espère que cela t'aides! À votre santé,
Andres

25
fr_andres

La validation croisée décrite ci-dessus est une méthode souvent utilisée dans le Machine Learning. Cependant, le choix d'un paramètre de régularisation fiable et sûr est toujours un sujet très chaud de recherche en mathématiques. Si vous avez besoin d'idées (et avez accès à une bibliothèque universitaire décente), vous pouvez consulter ce document: http://www.sciencedirect.com/science/article/pii/S0378475411000607

7
Jean-Luc Bouchot