Retropropagazione: differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 9: Riga 9:
* in una rete "statica" per la classificazione, o [[Feed-forward neural network|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 "statica" per la classificazione, o [[Feed-forward neural network|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 [[Recurrent Neural Network (RNN)|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 una [[Recurrent Neural Network (RNN)|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 [[Sequence to Sequence (seq2seq)|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 [https://arxiv.org/abs/1406.1078] , l'output del decoder dopo essere "primato" con il token '''start''', fino all'emissione del token '''end'''
* in un modello [[Sequence to Sequence (seq2seq)|seq2seq]] per la traduzione automatica, la backpropagation utilizza la funzione obiettivo ([[Cross-Entropy Loss]] ) fra la sequenza in output del decoder e la sequenza nell'etichetta. Si consideri che la sequenza di ouput è generata in modo autoregressivo: quindi la backpropagation "porterà" la rete verso la crezione di una sequenza "migliore" '''dato''' il contesto creato dall'encoder, e cercherà di far sì che questo contesto contenga la migliore rappresentazione possibile della sequenza di input. Come esempio di implementazione di veda per esempio [https://github.com/astorfi/sequence-to-sequence-from-scratch/blob/3e4660a6a2e26293657e1cdd528516887cf9e0d2/seq2seq.py#L338 qui] .
* Alessandro continua


=== In PyTorch ===
=== In PyTorch ===

Versione delle 23:44, 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 utilizza la funzione obiettivo (Cross-Entropy Loss ) fra la sequenza in output del decoder e la sequenza nell'etichetta. Si consideri che la sequenza di ouput è generata in modo autoregressivo: quindi la backpropagation "porterà" la rete verso la crezione di una sequenza "migliore" dato il contesto creato dall'encoder, e cercherà di far sì che questo contesto contenga la migliore rappresentazione possibile della sequenza di input. Come esempio di implementazione di veda per esempio qui .

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