Régularisation et mise à l'échelle des fonctionnalités dans l'apprentissage en ligne?

15

Disons que j'ai un classificateur de régression logistique. Dans l'apprentissage par lots normal, j'aurais un terme régularisateur pour éviter le surapprentissage et garder mes poids petits. Je normaliserais également et ferais évoluer mes fonctionnalités.

Dans un environnement d'apprentissage en ligne, je reçois un flux continu de données. Je fais une mise à jour de descente de gradient avec chaque exemple, puis je le jette. Suis-je censé utiliser le terme de mise à l'échelle et de régularisation des fonctionnalités dans l'apprentissage en ligne? Si oui, comment faire? Par exemple, je n'ai pas de jeu de données de formation sur lequel évoluer. Je n'ai pas non plus de validation pour régler mon paramètre de régularisation. Si non, pourquoi pas?

Dans mon apprentissage en ligne, j'obtiens un flux d'exemples en continu. Pour chaque nouvel exemple, je fais une prédiction. Ensuite, dans la prochaine étape, j'obtiens la cible réelle et fais la mise à jour de la descente de gradient.

siamii
la source

Réponses:

9

Le projet open-source vowpal wabbit comprend une implémentation de SGD en ligne qui est améliorée par le calcul à la volée (en ligne) de 3 facteurs supplémentaires affectant les mises à jour de poids. Ces facteurs peuvent être activés / désactivés par leurs options de ligne de commande respectives (par défaut, les trois sont activés, l' --sgdoption, les désactive tous, c'est-à-dire: retombe sur SGD "classique").

Les 3 options d'amélioration SGD sont:

  • --normalized mises à jour ajustées à l'échelle de chaque fonctionnalité
  • --adaptive utilise un gradient adaptatif (AdaGrad) (Duchi, Hazan, Singer)
  • --invariant mises à jour sensibles à l'importance (Karampatziakis, Langford)

Ensemble, ils s'assurent que le processus d'apprentissage en ligne effectue une compensation / un ajustement automatique à 3 voies pour:

  • mise à l'échelle par fonction (grandes ou petites valeurs)
  • décroissance du taux d'apprentissage par fonctionnalité en fonction de l'importance des fonctionnalités
  • ajustement du taux d'apprentissage adaptatif par caractéristique pour la prévalence / rareté des caractéristiques dans les exemples

Le résultat est qu'il n'est pas nécessaire de prénormaliser ou de mettre à l'échelle différentes fonctionnalités pour rendre l'apprenant moins biaisé et plus efficace.

De plus, vowpal wabbit implémente également la régularisation en ligne via une descente de gradient tronquée avec les options de régularisation:

  • --l1 (Norme L1)
  • --l2 (Norme L2)

D'après mon expérience avec ces améliorations sur plusieurs ensembles de données, elles ont considérablement amélioré la précision du modèle et une convergence plus fluide lorsque chacun d'eux a été introduit dans le code.

Voici quelques articles universitaires pour plus de détails sur ces améliorations:

arielf
la source
Arielf - Si vous désactivez les trois améliorations (via --sgd), c'est le sgd qui est fait, illustré sur la diapositive 11 de github.com/JohnLangford/vowpal_wabbit/wiki/v6.1_tutorial.pdf afin que power_t et initial_t deviennent pertinents ?
B_Miner
1
B_miner: pour autant que je comprends --power_tet --initial_tsont des options indépendantes globales (pas par fonctionnalité). --sgdne reprend que le SGD "classique". OIEau: --sgdannule uniquement --invariant, --normalizedet --adaptive(qui impliquent différents, l' apprentissage des taux par fonction)
arielf
Savez-vous s'il existe un moyen d'effectuer ces mises à jour de manière asynchrone parallèle (comme cela se fait dans SGD asynchrone)? Il semble que VW avec plusieurs travailleurs fasse la moyenne du modèle de chaque travailleur à la fin de chaque passe. Y a-t-il des articles / logiciels sur la façon de procéder?
JC1
1

oui vous avez certainement besoin de régularisation ... ça aide aussi la descente du gradient (et initialisez le taux d'apprentissage à 1 / C)

voir par exemple le papier SGD-QN http://leon.bottou.org/papers les papiers de bottou

vous n'avez pas vraiment expliqué ce que vous entendez par apprentissage en ligne: par exemple, pour chaque point, obtenez-vous une valeur cible? Je ne sais pas comment vous incorporeriez ... la recherche de C ... Je suppose que vous auriez plusieurs classificateurs avec différents termes de régularisation et suivriez l'erreur de prédiction (avant de mettre à jour les poids)

seanv507
la source
Par l'apprentissage en ligne, j'obtiens un exemple et fais une prédiction. À l'étape de temps suivante, j'obtiens la cible réelle pour mon exemple et fais une mise à jour de la descente de gradient.
siamii
eh bien, cela devrait être comme je l'ai suggéré - vous exécutez un tas de classificateurs avec différents paramètres de régularisation et gardez une trace des erreurs de prédiction de chaque classificateur.
seanv507
Je ne sais pas ce que vous entendez par initialiser le taux d'apprentissage à 1 / C. Qu'est-ce que C? Parlez-vous de machines à vecteurs de support? Je parle de régression logistique où le régularisateur a un coefficient lambda. Je ne sais pas ce que cela a à voir avec le taux d'apprentissage.
siamii
oui le paramètre de régularisation l2, C, lambda ou autre. son quelque chose qui est mentionné dans un aparté dans le papier sgdqn de bottou, et je présume expliqué mieux ailleurs. Fondamentalement, votre taux d'apprentissage devrait être le 1 / courbure (inverse de la Hesse) de votre surface d'erreur .. maintenant si votre surface d'erreur est
seanv507
1
Dois-je également effectuer une mise à l'échelle des fonctionnalités? Comment faire cela dans un cadre en ligne?
siamii