Regolarizzazione e ridimensionamento delle funzionalità nell'apprendimento online?


15

Diciamo che ho un classificatore di regressione logistica. Nell'apprendimento in batch normale, avrei un termine di regolarizzazione per prevenire un eccesso di adattamento e mantenere i miei pesi piccoli. Inoltre normalizzerei e ridimensionerei le mie funzionalità.

In un ambiente di apprendimento online, sto ottenendo un flusso continuo di dati. Faccio un aggiornamento della discesa gradiente con ogni esempio e poi lo scarto. Dovrei usare il termine di ridimensionamento e regolarizzazione delle funzionalità nell'apprendimento online? Se sì, come posso farlo? Ad esempio, non ho un set di dati di allenamento su cui scalare. Inoltre, non ho impostato la convalida per ottimizzare il mio parametro di regolarizzazione. Se no, perché no?

Nel mio apprendimento online, ricevo continuamente un flusso di esempi. Per ogni nuovo esempio, faccio una previsione. Quindi, nel passaggio successivo, ottengo il target effettivo e eseguo l'aggiornamento della discesa del gradiente.

Risposte:


9

Il progetto open source vowpal wabbit include un'implementazione di SGD online che è migliorata dal calcolo al volo (online) di 3 fattori aggiuntivi che influenzano gli aggiornamenti di peso. Questi fattori possono essere abilitati / disabilitati dalle rispettive opzioni della riga di comando (per impostazione predefinita tutti e tre sono attivati, l' --sgdopzione li disattiva tutti, ovvero: fallback su SGD "classico").

Le 3 opzioni di miglioramento SGD sono:

  • --normalized aggiornamenti adeguati per la scala di ogni funzione
  • --adaptive usa il gradiente adattivo (AdaGrad) (Duchi, Hazan, Singer)
  • --invariant aggiornamenti consapevoli dell'importanza (Karampatziakis, Langford)

Insieme, assicurano che il processo di apprendimento online esegua una compensazione / regolazione automatica a 3 vie per:

  • ridimensionamento per funzione (valori grandi o piccoli)
  • decadimento del tasso di apprendimento per funzione in base all'importanza della funzione
  • per adattamento adattivo della frequenza di apprendimento per prevalenza / rarità delle funzioni negli esempi

Il risultato è che non è necessario pre-normalizzare o ridimensionare funzionalità diverse per rendere lo studente meno distorto ed efficace.

Inoltre, vowpal wabbit implementa anche la regolarizzazione online tramite discesa gradiente troncata con le opzioni di regolarizzazione:

  • --l1 (L1-norm)
  • --l2 (Norma L2)

La mia esperienza con questi miglioramenti su più set di dati è stata che hanno migliorato in modo significativo l'accuratezza del modello e una convergenza più fluida quando ciascuno di essi è stato introdotto nel codice.

Ecco alcuni documenti accademici per maggiori dettagli relativi a questi miglioramenti:


Arielf - Se disattivi i tre miglioramenti (tramite --sgd) è lo sgd che viene fatto mostrato nella diapositiva 11 di github.com/JohnLangford/vowpal_wabbit/wiki/v6.1_tutorial.pdf in modo che power_t e initial_t diventino rilevanti ?
B_Miner,

1
B_miner: per quanto ho capito --power_te --initial_tsono opzioni indipendenti globali (non per funzione). --sgdritorna solo allo SGD "classico". IOW: --sgdcancella solo --invariant, --normalizede --adaptive(che implicano, per-funzione di apprendimento-rate separate)
arielf

Sai se esiste un modo per eseguire questi aggiornamenti in modo asincrono parallelo (come avviene in SGD asincrono)? Sembra che VW con più lavoratori media sia il modello di ciascun lavoratore alla fine di ogni passaggio. Qualche suggerimento su documenti / software su come farlo?
JC1,


1

sì, hai sicuramente bisogno di regolarizzazione ... aiuta anche la discesa del gradiente (e inizializza il tasso di apprendimento a 1 / C)

vedi ad es. SGD-QN paper http://leon.bottou.org/papers bottou's papers

non hai davvero spiegato cosa intendi per apprendimento online: ad es. per ogni punto ottieni valore target? Non so come vorresti incorporare ... alla ricerca di C ... Immagino che avresti più classificatori con termini di regolarizzazione diversi e tenere traccia dell'errore di previsione (prima di aggiornare i pesi)


Con l'apprendimento online, ho un esempio e faccio una previsione. Al passaggio successivo, ottengo il target effettivo per il mio esempio e eseguo un aggiornamento della discesa gradiente.
Siamii,

bene allora dovrebbe essere come ho suggerito: esegui un sacco di classificatori con diversi parametri di regolarizzazione e tieni traccia degli errori di predizione di ciascun classificatore.
seanv507,

Non sono sicuro di cosa intendi inizializzando il tasso di apprendimento a 1 / C. Che cos'è C? Stai parlando di macchine vettoriali di supporto? Sto parlando della regressione logistica in cui il regolarizzatore ha il coefficiente lambda. Non so cosa abbia a che fare con il tasso di apprendimento.
Siamii,

sì, il parametro di regolarizzazione l2, C, lambda o altro. è qualcosa che è menzionato a parte nel documento sgdqn di bottou, e presumo spiegato meglio altrove. in pratica il tuo tasso di apprendimento dovrebbe essere 1 / curvatura (inversa dell'Assia) della tua superficie di errore .. ora se la tua superficie di errore è
seanv507

1
Devo anche eseguire il ridimensionamento delle funzionalità? Come farlo in un ambiente online?
Siamii,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.