La backpropagation è il metodo che le reti neurali usano per calcolare i gradienti: quanto cambierebbe la loss se modificassi di poco ogni peso o bias. In parole semplici, dice al modello quali parametri hanno spinto la previsione nella direzione sbagliata e di quanto.

La versione breve è semplice: esegui la rete in avanti, misuri l'errore, poi torni indietro attraverso gli stessi calcoli usando la regola della catena. Questo rende gestibile un modello profondo, perché ogni layer deve contribuire solo con una piccola derivata locale.

Che cosa calcola la backpropagation

La backpropagation non aggiorna da sola i parametri. Calcola gradienti come Lw\frac{\partial L}{\partial w} e Lb\frac{\partial L}{\partial b}, dove LL è la loss. Un ottimizzatore come la discesa del gradiente usa poi questi gradienti per effettuare l'aggiornamento vero e proprio.

Se il modello e la loss sono differenziabili, o almeno sufficientemente differenziabili a tratti per i metodi basati sul gradiente, la backpropagation permette di calcolare questi gradienti in modo efficiente con un solo passaggio all'indietro.

Perché la regola della catena è l'idea chiave

Pensa a una rete neurale come a una lunga catena di calcoli. Ogni layer prende un input, lo trasforma e passa il risultato al successivo. Quando arrivi alla loss, l'errore finale dipende da ogni scelta fatta prima.

La backpropagation pone una domanda locale a ogni passaggio: se questo valore intermedio cambiasse un po', come cambierebbe la loss finale? Questi effetti locali si moltiplicano tra loro mentre torni indietro. Questa è la regola della catena, detta in modo semplice.

Esempio di backpropagation con un neurone

Usa un neurone con un input:

z=wx+bz = wx + b a=σ(z)a = \sigma(z) L=12(ay)2L = \frac{1}{2}(a - y)^2

Qui xx è l'input, ww è il peso, bb è il bias, aa è la previsione, yy è il target e σ\sigma è la funzione sigmoide.

Prendi

x=2,w=0.5,b=0,y=1.x = 2, \qquad w = 0.5, \qquad b = 0, \qquad y = 1.

Passo 1: passaggio in avanti

Per prima cosa calcola la somma pesata del neurone:

z=wx+b=0.52+0=1.z = wx + b = 0.5 \cdot 2 + 0 = 1.

Ora applica la sigmoide:

a=σ(1)0.731.a = \sigma(1) \approx 0.731.

Ora calcola la loss:

L=12(0.7311)20.036.L = \frac{1}{2}(0.731 - 1)^2 \approx 0.036.

La previsione è sotto il target, quindi la loss è positiva.

Passo 2: passaggio all'indietro

Ora calcola il gradiente rispetto al peso.

Parti dalla loss e procedi verso l'interno:

La=ay.\frac{\partial L}{\partial a} = a - y.

Per la sigmoide,

az=a(1a).\frac{\partial a}{\partial z} = a(1-a).

E per la somma pesata,

zw=x,zb=1.\frac{\partial z}{\partial w} = x, \qquad \frac{\partial z}{\partial b} = 1.

Ora concatena i vari pezzi:

Lw=Laazzw=(ay)a(1a)x.\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} = (a-y)a(1-a)x. Lb=Laazzb=(ay)a(1a).\frac{\partial L}{\partial b} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial b} = (a-y)a(1-a).

Sostituisci i numeri:

Lb(0.7311)(0.731)(10.731)0.0529\frac{\partial L}{\partial b} \approx (0.731 - 1)(0.731)(1 - 0.731) \approx -0.0529 Lw(0.0529)(2)0.1058.\frac{\partial L}{\partial w} \approx (-0.0529)(2) \approx -0.1058.

I segni negativi contano. Dicono che aumentare leggermente ww o bb ridurrebbe la loss in questo caso, il che ha senso perché la previsione attuale è troppo bassa.

Se usi la discesa del gradiente con learning rate η=0.1\eta = 0.1, allora

wnew=wηLw=0.50.1(0.1058)0.5106w_{\text{new}} = w - \eta \frac{\partial L}{\partial w} = 0.5 - 0.1(-0.1058) \approx 0.5106 bnew=bηLb=00.1(0.0529)0.0053.b_{\text{new}} = b - \eta \frac{\partial L}{\partial b} = 0 - 0.1(-0.0529) \approx 0.0053.

Questa è l'idea completa in miniatura: passaggio in avanti, loss, passaggio all'indietro, aggiornamento.

Perché la backpropagation funziona per reti profonde

In una rete più profonda, fai la stessa cosa layer dopo layer. La differenza principale è che ogni layer nascosto influenza la loss in modo indiretto attraverso i layer successivi, quindi il suo gradiente include più fattori della regola della catena.

La backpropagation resta pratica perché ogni layer ha bisogno solo della sua derivata locale e del segnale che arriva dal layer successivo. Non devi ricalcolare l'intera rete da zero per ogni parametro.

Errori comuni nella backpropagation

Confondere la backpropagation con la discesa del gradiente

La backpropagation calcola i gradienti. La discesa del gradiente usa questi gradienti per aggiornare i parametri. Sono strettamente collegate, ma non sono lo stesso passaggio.

Dimenticare che la loss si trova alla fine

Il passaggio all'indietro parte dalla loss, non da un layer nascosto qualsiasi. Se perdi di vista da cosa dipende la loss, la catena delle derivate di solito si interrompe.

Ignorare il comportamento delle funzioni di attivazione

Alcune funzioni di attivazione producono gradienti molto piccoli in certe regioni. Se questo accade ripetutamente in molti layer, l'apprendimento può rallentare.

Supporre che un solo passaggio all'indietro significhi che il modello ha imparato

Un solo passaggio all'indietro fornisce un insieme di gradienti per un batch. L'addestramento richiede di solito molti aggiornamenti su molti esempi.

Quando si usa la backpropagation

La backpropagation è il metodo standard di calcolo dei gradienti per addestrare molte reti neurali, incluse reti multilayer perceptron, reti convoluzionali, modelli ricorrenti e transformer.

L'ottimizzatore specifico può cambiare e alcune architetture aggiungono accorgimenti pratici, ma l'idea di base di solito resta la stessa: calcolare la loss, propagare i gradienti all'indietro e aggiornare i parametri per ridurre l'errore futuro.

Un modo pratico per ricordarla

La backpropagation è un modo strutturato per assegnare meriti e responsabilità all'interno di un modello a layer. Se l'output è sbagliato, il metodo riporta quell'errore all'indietro così che ogni parametro riceva un segnale su come ha contribuito.

Per questo l'espressione "come imparano le reti neurali" è in gran parte corretta. L'apprendimento avviene tramite aggiornamenti ripetuti dei parametri, e la backpropagation è ciò che rende questi aggiornamenti informati invece che casuali.

Prova un problema simile

Mantieni lo stesso esempio, ma cambia il target da y=1y = 1 a y=0y = 0. Ricalcola Lw\frac{\partial L}{\partial w} e Lb\frac{\partial L}{\partial b}, poi controlla come cambiano i segni. Questo singolo cambiamento rende il ruolo della loss molto più chiaro che limitarsi a memorizzare le formule.

Hai bisogno di aiuto con un problema?

Carica la tua domanda e ottieni una soluzione verificata, passo dopo passo, in pochi secondi.

Apri GPAI Solver →