Perché i dati devono essere mescolati per le attività di apprendimento automatico


30

Nelle attività di apprendimento automatico è comune mescolare i dati e normalizzarli. Lo scopo della normalizzazione è chiaro (per avere lo stesso intervallo di valori di funzionalità). Ma, dopo aver lottato molto, non ho trovato alcun motivo valido per mescolare i dati.

Ho letto questo post qui discutendo quando dobbiamo mescolare i dati, ma non è ovvio il motivo per cui dovremmo mescolare i dati. Inoltre, ho visto spesso in algoritmi come Adam o SGD in cui abbiamo bisogno della discesa del gradiente batch (i dati dovrebbero essere separati in mini-batch e la dimensione del batch deve essere specificata). È essenziale secondo questo post, mescolare i dati per ogni epoca per avere dati diversi per ogni lotto. Quindi, forse i dati vengono mescolati e, cosa più importante, cambiati.

Perché lo facciamo?


1
Potrebbe essere utile indicare esattamente perché la risposta nel primo link non ti è stata di aiuto. Altrimenti, stiamo correndo il rischio di ripetere il contenuto già detto lì con piccoli miglioramenti.
E_net4 dice Ripristina

Come ho affermato, voglio sapere perché non quando, sai perché? è davvero spiegato lì? Non ho visto alcun documento per questo
Media

1
Per ulteriori informazioni sull'impatto dell'esempio di ordinazione, leggere Curriculum Learning [pdf].
Emre,

1
L'ho pubblicato su CrossValidated e penso che sia pertinente. stats.stackexchange.com/a/311318/89653
Josh

@Emre in realtà questo documento è contro il mescolamento, grazie, non ho sentito parlare di questo tipo di apprendimento.
Media

Risposte:


19

Basato su Cosa dovremmo fare quando una domanda pubblicata su DataScience è un duplicato di una domanda pubblicata su CrossValidated? , Sto ripubblicando la mia risposta alla stessa domanda posta su CrossValidated ( /stats//a/311318/89653 ).

Nota: in questa risposta mi riferisco alla minimizzazione della perdita di allenamento e non discuto criteri di interruzione come la perdita di validazione. La scelta dei criteri di arresto non influisce sul processo / sui concetti descritti di seguito.

Il processo di allenamento di una rete neurale consiste nel trovare il valore minimo di una funzione di perdita , dove rappresenta una matrice (o più matrici) di pesi tra neuroni e rappresenta il set di dati di allenamento. Uso un pedice per per indicare che la nostra minimizzazione di verifica solo sui pesi (ovvero, stiamo cercando tale che sia minimizzato) mentre è fisso.X(W)WXXWWX

Ora, se assumiamo che abbiamo elementi in (cioè, ci sono pesi nella rete), è una superficie in uno spazio dimensionale . Per fornire un analogo visivo, immagina di avere solo due pesi di neuroni ( ). Quindi ha una facile interpretazione geometrica: è una superficie in uno spazio tridimensionale. Ciò deriva dal fatto che per ogni data matrice di pesi , la funzione di perdita può essere valutata su e quel valore diventa l'elevazione della superficie.PWPP+1P=2WX

Ma c'è il problema della non convessità; la superficie che ho descritto avrà numerosi minimi locali, e quindi gli algoritmi di discesa del gradiente sono suscettibili di diventare "bloccati" in quei minimi mentre una soluzione più profonda / più bassa / migliore potrebbe trovarsi nelle vicinanze. È probabile che ciò accada se rimane invariato su tutte le iterazioni di addestramento, poiché la superficie è fissa per una data ; tutte le sue caratteristiche sono statiche, compresi i suoi vari minimi.XX

Una soluzione a questo è l'allenamento mini-batch combinato con lo shuffling. Mescolando le righe e allenandosi su un solo sottoinsieme di esse durante una data iterazione, cambia ad ogni iterazione ed è in realtà del tutto possibile che non vengano eseguite due iterazioni sull'intera sequenza di iterazioni ed epoche di allenamento sulla stessa identica . L'effetto è che il risolutore può facilmente "rimbalzare" da un minimo locale. Immagina che il solutore sia bloccato al minimo locale durante l'iterazione con l'addestramento del mini-batch . Questo minimo locale corrisponde a valutato con un particolare valore di pesi; lo chiameremoXXiXiXi(Wi). Nella successiva iterazione la forma della nostra superficie di perdita in realtà cambia perché stiamo usando , ovvero potrebbe assumere un valore molto diverso da ed è del tutto possibile che non corrisponda ad un minimo locale! Ora possiamo calcolare un aggiornamento gradiente e continuare con la formazione. Per essere chiari: la forma di sarà - in generale - diversa da quella di . Si noti che qui mi riferisco alla funzione di perdita valutata su un set di allenamento ; è una superficie completa definita su tutti i possibili valori diXi+1Xi+1(Wi)Xi(Wi)Xi+1XiXW, Piuttosto che la valutazione di tale perdita (che è solo uno scalare) per un valore specifico di . Si noti inoltre che se si utilizzano mini-batch senza mescolare, esiste ancora un certo grado di "diversificazione" delle superfici di perdita, ma ci sarà un numero finito (e relativamente piccolo) di superfici di errore uniche viste dal solutore (in particolare, vedrà lo stesso insieme esatto di mini-lotti - e quindi superfici di perdita - durante ogni epoca).W

Una cosa che ho deliberatamente evitato è stata una discussione sulle dimensioni dei mini-lotti, perché ci sono un milione di opinioni su questo e ha implicazioni pratiche significative (si può ottenere una maggiore parallelizzazione con lotti più grandi). Tuttavia, credo che valga la pena menzionare quanto segue. Poiché viene valutato calcolando un valore per ogni riga di (e sommando o prendendo la media; ovvero un operatore commutativo) per un determinato set di matrici di peso , la disposizione delle righe di non ha alcun effetto quando si utilizza full- discesa gradiente batch (ovvero, quando ogni batch è la completa e iterazioni ed epoche sono la stessa cosa).XWX X


+1. Questa risposta è tecnicamente meglio spiegata dell'altra risposta con un numero più elevato di voti.
Gokul NC,

29

La miscelazione dei dati ha lo scopo di ridurre la varianza e assicurarsi che i modelli rimangano generici e si adattino meno.

Il caso ovvio in cui dovresti mescolare i tuoi dati è se i tuoi dati sono ordinati in base alla loro classe / destinazione. Qui, dovrai mescolare per assicurarti che i tuoi set di addestramento / test / validazione siano rappresentativi della distribuzione complessiva dei dati.

Per la discesa del gradiente batch, si applica la stessa logica. L'idea alla base della discesa del gradiente batch è che calcolando il gradiente su un singolo batch, di solito si ottiene una stima abbastanza buona del gradiente "vero". In questo modo, si risparmia tempo di calcolo non dovendo calcolare ogni volta il gradiente "vero" sull'intero set di dati.

Volete mescolare i vostri dati dopo ogni epoca perché avrete sempre il rischio di creare batch che non sono rappresentativi del set di dati complessivo, e quindi la vostra stima del gradiente sarà disattivata. Mescolando i dati dopo ogni epoca si assicura che non si sarà "bloccati" con troppi lotti danneggiati.

Nella normale discesa del gradiente stocastico, quando ogni lotto ha dimensione 1, si desidera comunque mescolare i dati dopo ogni epoca per mantenere l'apprendimento generale. In effetti, se il punto dati 17 viene sempre utilizzato dopo il punto dati 16, il proprio gradiente sarà distorto con qualsiasi aggiornamento il punto 16 dati sta facendo sul modello. Mescolando i dati, si assicura che ciascun punto dati crei una modifica "indipendente" sul modello, senza essere influenzato dagli stessi punti prima di essi.


1
Come ho spiegato, mescoli i tuoi dati per assicurarti che i tuoi set di allenamento / test siano rappresentativi. In regressione, usi il mescolamento perché vuoi assicurarti di non allenarti solo sui valori piccoli, ad esempio. Mescolare è per lo più una salvaguardia, nel peggiore dei casi, non è utile, ma non perdi nulla facendolo. Per la parte di discesa gradiente stocastica, si desidera nuovamente assicurarsi che il modello non sia il modo in cui è a causa dell'ordine in cui sono stati forniti i dati, quindi per assicurarsi di evitarlo, si mescola
Valentin Calomme

2
Penso che il mescolamento diminuisca la varianza ed è probabile che aumenti la distorsione (vale a dire, riduce la tendenza a sovrautilizzare i dati). Immagina che stessimo facendo una discesa con gradiente completo, in modo tale che epoche e iterazioni siano la stessa cosa. Quindi esiste un minimo globale (non che possiamo necessariamente trovarlo) che il nostro risolutore sta cercando di individuare. Se stiamo usando la perdita di MSE, ridurremo al minimo i pregiudizi se potessimo raggiungere questa soluzione ogni volta. Ma poiché è probabile che questo minimo globale si trovi in ​​un posto diverso per diversi set di allenamento, questa soluzione tenderà ad avere una varianza elevata.
Josh,

2
Mischiando, abbiamo meno probabilità di convergere in una soluzione che si trova nel minimo globale per l'intero set di allenamento (maggiore distorsione), ma è più probabile trovare una soluzione che generalizzi meglio (minore varianza).
Josh,

7

Supponiamo che i dati vengano ordinati in un ordine specificato. Ad esempio un set di dati che viene ordinato in base alla loro classe. Pertanto, se si selezionano i dati per l'addestramento, la convalida e il test senza considerare questo argomento, si selezionerà ogni classe per compiti diversi e il processo fallirà.

Quindi, per impedire questo tipo di problemi, una semplice soluzione è la mescolanza dei dati per ottenere diversi set di dati di addestramento, validazione e test.

A proposito del mini-batch, le risposte a questo post possono essere una soluzione alla tua domanda.


1
@Media La risposta più correlata nel link fornito è: "Mescolare i mini-batch rende i gradienti più variabili, il che può aiutare la convergenza perché aumenta la probabilità di colpire una buona direzione"
OmG

In realtà l'ho visto nel documento di SGD ma questo, come hanno affermato gli autori dell'articolo, è il motivo della convergenza e non del mescolamento. Ho visto il link e ne dubito un po '. per maggiore chiarezza guarda questo fantastico documento. Gli autori hanno menzionato il punto qui, ma come vedrai non c'è motivo esatto per mescolare
Media,

1

Abbiamo bisogno di mescolare solo per minibatch / SGD, non è necessaria la discesa del gradiente batch.

Se non mescolare i dati, i dati possono essere ordinati o punti di dati simili si trovano uno accanto all'altro, il che porta a una convergenza lenta:

  • Campioni simili produrranno superfici simili (1 superficie per la funzione di perdita per 1 campione) -> il gradiente punta verso direzioni simili ma questa direzione punta raramente al minimo-> può guidare il gradiente molto lontano dal minimo
  • “Migliore direzione”: la media di tutto il gradiente di tutte le superfici (discesa gradiente discendente) che punta direttamente al minimo
  • “Minibatch direction”: la media di una varietà di direzioni punta più vicino al minimo, anche se non di esse punta al minimo
  • “1-direction direction”: punta più lontano al minimo rispetto al minibatch

Ho disegnato la trama della funzione di perdita di L-2 per la regressione lineare per y=2x qui


1

Poiché viene valutato calcolando un valore per ogni riga di (e sommando o prendendo la media; ovvero un operatore commutativo) per un determinato set di matrici di peso , la disposizione delle righe di non ha alcun effetto quando si utilizza full- discesa con gradiente discontinuoXWX

A complemento della risposta di @Josh, vorrei aggiungere che, per lo stesso motivo, è necessario eseguire il mescolamento prima del raggruppamento. Altrimenti, si ottiene lo stesso numero finito di superfici.


Grazie e benvenuto nella nostra comunità.
Media

1

Per la massima precisione del modello, si consiglia sempre che i dati di allenamento abbiano tutti i tipi di dati.

La miscelazione dei dati di allenamento ci aiuta a raggiungere questo obiettivo.


1

Mescolando le righe e allenandosi su un solo sottoinsieme di esse durante una data iterazione, 𝑋 cambia ad ogni iterazione, ed è in realtà del tutto possibile che non vengano eseguite due iterazioni sull'intera sequenza di iterazioni ed epoche di allenamento sullo stesso identico 𝑋

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.