Come vengono aggiornati i pesi nel metodo di apprendimento batch nelle reti neurali?


15

Qualcuno può dirmi come dovrei costruire una rete neurale usando il metodo batch?

Ho letto che, in modalità batch, per tutti i campioni nel set di allenamento, calcoliamo i pesi di errore, delta e quindi delta per ciascun neurone nella rete e quindi invece di aggiornare immediatamente i pesi, li accumuliamo e quindi prima di iniziare nell'epoca successiva, aggiorniamo i pesi.

Ho anche letto da qualche parte che, il metodo batch è come il metodo online ma con la differenza che uno deve solo sommare gli errori per tutti i campioni nel set di addestramento e quindi prenderne la media e quindi utilizzarlo per aggiornare i pesi proprio come si fa nel metodo online (la differenza è proprio quella media) in questo modo:

for epoch=1 to numberOfEpochs

   for all i samples in training set

         calculate the errors in output layer
         SumOfErrors += (d[i] - y[i])
   end

   errorAvg = SumOfErrors / number of Samples in training set

   now update the output layer with this error
   update all other previous layers

   go to the next epoch

end
  • Quali di questi sono veramente la forma corretta del metodo batch?
  • Nel caso del primo, accumulare tutti i pesi delta non comporta un numero enorme?

1
Il metodo "corretto" dipende dal contesto. Si scopre che in molti casi, l'aggiornamento dei pesi solo una volta per epoca converge molto più lentamente dell'aggiornamento stocastico (aggiornamento dei pesi dopo ogni esempio). Aggiungo che c'è un consenso sul fatto che generalmente vorrai usare una qualche forma di aggiornamento batch, ma molto più spesso di 1x per epoca.
Tahlor,

Risposte:


9

L'uso della media o della somma sono equivalenti, nel senso che esistono coppie di tassi di apprendimento per i quali producono lo stesso aggiornamento.

Per confermare ciò, innanzitutto ricordare la regola di aggiornamento:

Δwioj=-αEwioj

μEnnμEnw

Δwioj=-α(nμ)wioj=-αnμwioj

ΔwΔw


1
La discesa gradiente mini-batch è la stessa discesa gradiente batch? Mi sono perso qui! se no qual è la differenza tra questi? Correggimi se sbaglio, in modalità Batch, l'intero set di dati deve essere letto in batch, i gradienti vengono calcolati e quando tutti vengono letti, vengono mediati e quindi i parametri aggiornati, mentre, in mini-batch, ciascuno viene letto il batch, vengono calcolati i gradienti e quindi i parametri vengono aggiornati, quindi viene letto il mini batch successivo fino al termine di un'epoca.
Rika,

1
Questa è la definizione generalmente fornita: aggiorna i parametri usando un sottoinsieme dei dati di allenamento alla volta. (Esistono alcuni metodi in cui i mini-batch vengono campionati casualmente fino alla convergenza, ovvero il batch non verrà attraversato in un'epoca.) Verifica se ciò è utile.
Sean Easter

0

Le due risposte sono equivalenti. Personalmente lo considererei un errore medio anziché la somma. Ma ricorda che la discesa del gradiente ha un parametro chiamato rate di apprendimento e che viene sottratta solo una parte del gradiente dell'errore. Pertanto, se l'errore viene definito come totale della media può essere compensato modificando il tasso di apprendimento.


grazie, ma se sono davvero gli stessi, perché preoccuparsi di sprecare così tanta memoria nel conservare gli aggiornamenti cumulativi per ogni modello, quando possiamo solo sommare gli errori che sarebbero solo una semplice variabile?
Rika,
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.