I campioni di allenamento estratti casualmente per le reti neurali di addestramento mini-batch devono essere estratti senza sostituzione?


18

Definiamo un'epoca come aver esaminato tutti i campioni di addestramento disponibili e le dimensioni del mini-lotto come il numero di campioni su cui calcoliamo la media per trovare gli aggiornamenti ai pesi / errori necessari per scendere il gradiente.

La mia domanda è se dovremmo trarre senza sostituzione dall'insieme degli esempi di addestramento al fine di generare ogni mini-lotto in un'epoca. Sento che dovremmo evitare la sostituzione per assicurarci di "disegnare tutti i campioni" per soddisfare i requisiti di fine epoca, ma ho difficoltà a trovare una risposta definitiva in un modo o nell'altro.

Ho provato a cercare su Google e leggere Ch. 1 delle reti neurali di Nielsen e Deep Learning ma non hanno trovato una risposta chiara. In quel testo Nielsen non specifica che il campionamento casuale debba essere effettuato senza sostituzione, ma sembra implicarlo.

Una formalizzazione più chiara della formazione in epoche può essere trovata qui se lo si desidera - /stats//a/141265/131630

Modifica: questa domanda mi è sembrata simile ma non è chiaro come applicare il fatto che la linearità delle aspettative sia indifferente all'indipendenza di questa situazione - Se il campionamento dovesse avvenire con o senza sostituzione


A meno che non vi sia un motivo specifico per i dati, il mini-batch per l'allenamento della rete neurale viene sempre disegnato senza sostituzione. L'idea è che vuoi stare da qualche parte tra la modalità batch, che calcola il gradiente con l'intero set di dati e SGD, che utilizza solo un casuale.
OrazioT

SGD non è limitato all'uso di un campione casuale. Questo processo si chiama formazione online. "Una versione estrema della discesa del gradiente consiste nell'utilizzare una dimensione mini-batch di solo 1 ... Questa procedura è nota come apprendimento online, online o incrementale." Inoltre, "Un'idea chiamata discesa gradiente stocastica può essere utilizzata per accelerare l'apprendimento. L'idea è di stimare il gradiente ∇C calcolando [esso] per un piccolo campione di input di allenamento scelti casualmente. Mediando su questo piccolo campione .. .possiamo ottenere rapidamente una buona stima del gradiente reale ". Entrambe le citazioni da Nielsen Ch. 1.
bobo,

Risposte:


13

Una buona analisi teorica di con e senza schemi di sostituzione nel contesto di algoritmi iterativi basati su disegni casuali (che sono il numero di reti neurali profonde discriminanti (DNN) discriminate) può essere trovata qui

In breve, risulta che il campionamento senza sostituzione, porta a una convergenza più rapida rispetto al campionamento con sostituzione.

Darò qui una breve analisi basata sull'esempio di giocattolo che forniscono: Diciamo che vogliamo ottimizzare la seguente funzione oggettiva:

xopt=argminx12i=1N(xyi)2

dove il target . In questo esempio, stiamo cercando di risolvere la ottimale , date ovviamente le etichette di .x N y iyiN(μ,σ2)xNyi

Ok, quindi se dovessimo risolvere direttamente la ottimale di cui sopra, prenderemmo qui la derivata della funzione di perdita, la imposteremmo su 0 e risolveremo per . Quindi, per il nostro esempio sopra, la perdita èxxx

L=12i=1N(xyi)2

ed è il primo derivato sarebbe:

δLδx=i=1N(xyi)

Impostando su 0 e risolvendo per , si ottiene: xδLδxx

xopt=1Ni=1Nyi

In altre parole, la soluzione ottimale non è altro che la media campionaria di tutti gli campioni di .yNy

Ora, se non potessimo eseguire tutto il calcolo sopra in una sola volta, dovremmo farlo in modo ricorsivo, tramite l'equazione di aggiornamento della discesa del gradiente di seguito:

xi=xi1λi(f(xi1))

e semplicemente inserendo i nostri termini qui si ottiene:

xi=xi1λi(xi1yi)

Se eseguiamo quanto sopra per tutti , stiamo effettivamente eseguendo questo aggiornamento senza sostituzione. La domanda allora diventa: possiamo ottenere anche il valore ottimale di in questo modo? (Ricorda che il valore ottimale di non è altro che la media campionaria di ). La risposta è sì, se si lascia . Per vedere, questo espandiamo: x x y λ i = 1 / ii1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

L'ultima equazione tuttavia non è altro che la formula per la media corrente! Pertanto, mentre eseguiamo il ciclo attraverso l'insieme da , , ecc., Fino a , avremmo eseguito i nostri aggiornamenti senza sostituzione e la nostra formula di aggiornamento ci offre la soluzione ottimale di , che è il campione medio!i = 2 i = Ni=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

Al contrario, se effettivamente disegnassimo con la sostituzione, allora mentre i nostri disegni sarebbero quindi veramente indipendenti, il valore ottimizzato sarebbe diverso dalla media (ottimale) , e l'errore quadrato sarebbe dato da:xNμ

E{(xNμ)2}

che sarà un valore positivo e questo semplice esempio di giocattolo può essere esteso a dimensioni più elevate. Ciò ha come conseguenza che vorremmo eseguire il campionamento senza sostituzione come soluzione più ottimale.

Spero che questo lo chiarisca ancora!


Questo esempio usa molte ipotesi, ovvero l'uso dell'errore al quadrato e la convessità del paesaggio di perdita. Il risultato vale quando tali presupposti non sono soddisfatti?
Bayerj,

@bayerj Questo particolare esempio di giocattolo, sì. Tuttavia, il documento continua ad estenderlo per alcuni altri casi teorici. Credo che altre fonti [Boutou penso] dimostrino che il supporto empirico per il campionamento senza sostituzione sia superiore.
Tarin Ziyaee,

@TarinZiyaee Grazie per questa risposta - puoi chiarire λ_k = 1 / k? Di quale k stiamo parlando qui, la k dell'equazione sopra? Non ti ho seguito qui, il che ha reso difficile seguire la successiva sintesi e conclusione. Grazie.
Bobo,

1
@bobo Proverò a chiarire il post stasera.
Tarin Ziyaee,

1
@bobo Ho aggiornato un po 'la mia risposta. Per favore, dai un'occhiata e fammi sapere se questo aiuta.
Tarin Ziyaee,

5

Secondo il codice nel repository di Nielsen, i mini-batch vengono disegnati senza sostituzione:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Possiamo vedere che non vi è alcuna sostituzione di campioni di addestramento in un'epoca. È interessante notare che possiamo anche vedere che Nielsen sceglie di non preoccuparsi di regolare eta(il tasso di apprendimento) per l'ultima dimensione di mini_batch, che potrebbe non avere tanti campioni di allenamento dei precedenti mini-batch. Presumibilmente questa è una modifica avanzata che lascia per i capitoli successivi. **

** EDIT: in realtà, questo ridimensionamento si verifica nella def update_mini_batchfunzione. Ad esempio, con i pesi:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Ciò è necessario perché l'ultimo mini_batch potrebbe essere inferiore ai precedenti mini_batch se il numero di campioni di allenamento per mini_batch non si divide uniformemente nel numero totale di campioni di allenamento disponibili.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Produzione:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Passando mini_batch_sizea 3, che non si divide uniformemente nei nostri 10 campioni di allenamento. Per l'output otteniamo:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

Quando si valuta un intervallo sugli indici dell'elenco (qualcosa del modulo in [x:y]cui sono xe ysono alcuni indici nell'elenco), se il nostro valore a destra supera la lunghezza dell'elenco, Python restituisce semplicemente gli elementi dall'elenco in su fino a quando il valore non esce dall'intervallo dell'indice .

Quindi l'ultimo mini-batch potrebbe essere più piccolo dei precedenti mini-batch, ma se è ponderato dallo stesso, etai campioni di training contribuiranno maggiormente all'apprendimento rispetto ai campioni degli altri mini-batch di dimensioni maggiori. Dato che questo è solo l'ultimo mini-batch, probabilmente non vale la pena preoccuparsi troppo, ma può essere facilmente risolto ridimensionando etala lunghezza del mini-batch.

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.