8

Salve ragazzi: Sto cercando di verificare come viene mantenuto lo "stato" di VowpalWabbit al crescere delle dimensioni del set di input. In un tipico ambiente di machine learning, se ho 1000 vettori di input, mi aspetto di inviare tutti quelli in una volta, attendere il completamento di una fase di costruzione del modello e quindi utilizzare il modello per creare nuove previsioni.VowpalWabbit: Differenze e scalabilità

In VW, sembra che la natura "online" dell'algoritmo modifichi questo paradigma per essere più performante e in grado di adattarsi in tempo reale.

1) Come viene implementata questa modifica del modello in tempo reale?

2) VW investe sempre più risorse rispetto alle dimensioni totali dei dati di input nel tempo? Cioè, come aggiungo più dati al mio modello VW (quando è piccolo), i calcoli di regolazione in tempo reale iniziano a richiedere più tempo quando il numero cumulativo di input del vettore di funzionalità aumenta a 1000, 10000 o milioni?

+0

Dipende da cosa si intende per * "[più alto] dimensione dati di input totali nel tempo" *. Se utilizzi funzionalità categoriali, se "più dati" implicano "più livelli nelle categorie" e, soprattutto, se attivi le interazioni di ordine superiore, ottieni collisioni hash che influiscono sull'accuratezza, quindi sì, alla fine dovrai aumentare "- b 'hash bitdepth, e quindi il tuo requisito di memoria per l'hash della funzione. Tuttavia il vettore di peso (che è tenuto in memoria) è ancora piccolo. – smci

risposta

19

Solo per aggiungere a carlosdc 's buona risposta.

Alcune delle caratteristiche che regolano vowpal wabbit parte, e permettono di scalare a tera-feature (10) data-formati sono:

Il peso vettore linea: vowpal wabbit mantiene una memoria weight-vector che è essenzialmente il vettore di pesi per il modello che sta costruendo. Questo è ciò che chiami "lo stato" nella tua domanda.

dimensione dei dati illimitata: La dimensione del peso-vettore è proporzionale al numero di caratteristiche (variabili di ingresso indipendenti), non il numero di esempi (istanze). Questo è ciò che rende wabbit vowpal, a differenza di molti altri studenti (non in linea), scala nello spazio. Dal momento che non ha bisogno di caricare tutti i dati in memoria come fa un tipico studente batch, può ancora imparare da insiemi di dati troppo grandi per adattarsi alla memoria.

modalità Cluster: vowpal wabbit supporti esecuzione su più host in un cluster, imponendo una struttura grafico albero binario sui nodi e con la riduzione all-reduce da foglie di radice.

Hash trucco: vowpal wabbit impiega ciò che è chiamato il hashing trick. Tutti i nomi delle funzioni vengono convertiti in hash in un numero intero utilizzando murmurhash-32. Ciò presenta diversi vantaggi: è molto semplice ed efficiente in termini di tempo non dover gestire la gestione e le collisioni della tabella hash, consentendo al tempo stesso alle funzionalità di scontrarsi.Risulta (in pratica) che un piccolo numero di collisioni di caratteristiche in un set di allenamento con migliaia di caratteristiche distinte è simile all'aggiunta di un termine di regolarizzazione implicito. Questo in modo intuitivo, spesso migliora la precisione del modello piuttosto che diminuirlo. È anche agnostico alla sparsità (o densità) dello spazio delle feature. Infine, consente ai nomi delle funzioni di input di essere stringhe arbitrarie a differenza della maggior parte degli studenti convenzionali che richiedono che i nomi delle caratteristiche/ID siano sia a) numerici che b) unici.

parallelismo: vowpal wabbit sfrutta CPU multi-core eseguendo l'analisi e l'apprendimento in due thread separati, aggiungendo ulteriore alla sua velocità. Questo è ciò che rende vw in grado di apprendere velocemente quanto legge i dati. Risulta che gli algoritmi più supportati in vw, in modo intuitivo, sono strozzati dalla velocità IO, piuttosto che dalla velocità di apprendimento.

checkpoint e di apprendimento incrementale: vowpal wabbit consente di salvare il vostro modello su disco mentre si impara, e poi per caricare il modello e continuare ad imparare dove si era interrotto con l'opzione --save_resume.

stima dell'errore Test-simile: La perdita media calcolata vowpal wabbit "come va" è sempre invisibile (fuori dal campione) dei dati (*). Ciò elimina la necessità di preoccuparsi di ritardi pre-pianificati o di convalida incrociata. Il tasso di errore che vedi durante l'allenamento è 'test-like'.

Beyond modelli lineari: vowpal Wabbit supporta diversi algoritmi, tra matrice fattorizzazione (approssimativamente sparse matrice SVD), allocazione di dirichlet latente (LDA), e altro ancora. Supporta anche la generazione al volo di interazioni a termine (bi-lineare, quadratica, cubica e feed-forward sigmoide neurale-rete con numero di unità specificato dall'utente), classificazione multi-classe (oltre alla regressione di base e binario classificazione), e altro ancora.

Ci sono tutorial e molti esempi in the official vw wiki su github.

(*) Un'eccezione è se si utilizzano più passaggi con l'opzione --passes N.

+0

Pensavo che vw facesse solo reti neurali a 1 strato? (ad es. --n 10 per un singolo strato con 10 neuroni). Come faresti una rete multistrato? – Zach

+0

@ Zach: Penso che tu abbia ragione. Ho modificato la risposta di conseguenza. Grazie e scusa. – arielf

+0

Per quanto riguarda VW che sfrutta più core, ho l'impressione che VW usi solo un core, non importa quanti core hai. Sì, ha 2 thread: uno per I/O e uno per l'informatica. È tutto. – piggybox

8

VW è un'implementazione (molto) sofisticata della discesa del gradiente stocastico. Puoi leggere di più sulla discesa del gradiente stocastico here

Si scopre che una buona implementazione della discesa del gradiente stocastico è fondamentalmente I/O legata, va veloce come si può ottenere i dati, quindi VW ha alcune strutture dati sofisticate per "compilare" i dati.

Pertanto la risposta alla domanda (1) consiste nel fare una discesa con gradiente stocastico e la risposta alla domanda (2) non lo è.