Retropropagazione: differenze tra le versioni
(Creata pagina con "La backpropagation è un metodo per il calcolo dei gradienti utilizzato per il training delle reti neurali. Essa ha senso solo in un contesto di apprendimento supervisionato o autosupervisionato, cioè quando si conosce il valore atteso del modello per un dato input. Essa è la chiave per capire come le reti neurali si addestrano. Data una funzione obiettivo che misura la distanza fra il '''valore previsto''' dal modello nel suo stato attua...") |
Nessun oggetto della modifica |
||
Riga 19: | Riga 19: | ||
A questo punto sarà possibile chiamare l'ottimizzatore | A questo punto sarà possibile chiamare l'ottimizzatore | ||
optim.step() #gradient descent | optim.step() #gradient descent | ||
[[Category:concetto]] |
Versione delle 15:35, 28 mar 2024
La backpropagation è un metodo per il calcolo dei gradienti utilizzato per il training delle reti neurali. Essa ha senso solo in un contesto di apprendimento supervisionato o autosupervisionato, cioè quando si conosce il valore atteso del modello per un dato input. Essa è la chiave per capire come le reti neurali si addestrano.
Data una funzione obiettivo che misura la distanza fra il valore previsto dal modello nel suo stato attuale, ed il valore atteso, fornito come etichetta, la backpropagation calcola i gradienti di ogni parametro del modello - parametri che possono essere pesi e bias nel caso di reti feed-forward o RNN, oppure i valori di Q,K e V nei meccanismi di attention, oppure ancora la rappresentazione densa dei vettori per i layer embedding - per minimizzare questa funzione obiettivo o "loss". In generale, tutti i parametri così detti "learnable" sono soggetti a ottimizzazione da parte della backpropagation.
I valori così calcolati vengono normalmente passati all'ottimizzatore che, in base ad altri parametri, decide quali parametri aggiornare e di quanto.
Seguono alcuni esempi di come interpretare la backpropagation nelle varie architetture:
- in una rete "statica" per la classificazione, o feed-forward (layer densi), la backpropagation aggiorna i pesi e i bias di tutti i layer, per far sì che il valore del o dei neuroni di ouput sia più simile a quello dell'etichetta fornita
- in una rete neurale ricorrente (RNN) la backpropagation calcola il gradiente di pesi e bias dei layer densi Whi, Whh, Who rispetto alla differenza dell'output con il valore predetto dopo il numero di step, prefissato. La backpropagation, in questo caso, è chiamata backpropagation-through-time (BPTT)
- in un modello seq2seq per la traduzione automatica, la backpropagation parte dal valore della funzione obiettivo calcolata fra l'output del decoder e l'etichetta. Per esempio in [1] , l'output del decoder dopo essere "primato" con il token start, fino all'emissione del token end
- Alessandro continua
In PyTorch
La backpropagation in pytorch viene calcolata, dopo la chiamata del forward pass, nel seguente modo
prediction = model(data) # forward pass loss = (prediction - labels).sum() loss.backward() # backward pass
A questo punto sarà possibile chiamare l'ottimizzatore
optim.step() #gradient descent