Passa ai contenuti principali

Backpropagation


In questo post viene letteralmente visualizzata un'affascinante tecnica che consente alle macchine di apprendere dai propri errori: la backpropagation.
Sebbene già nota in ristretti ambiti scientifici, è diventata famosa nel 1986 grazie ai lavori di Rumelhart, Hinton e Williams.
Ma come avviene questa misteriosa forma di apprendimento? 
Pensate a come si impara a suonare il pianoforte: all'inizio si sbaglia la posizione delle dita, il ritmo è incerto, il tocco è troppo forte o troppo debole. Ma con il tempo, attraverso piccoli aggiustamenti, il nostro cervello affina il controllo e la musica prende forma. 
La backpropagation segue lo stesso principio: confronta il risultato prodotto dalla rete neurale con quello desiderato, calcola l’errore e poi lo propaga a ritroso, correggendo passo dopo passo ogni parametro (aggiornamento dei pesi).
Ciò che rende questo meccanismo oggi così efficace è l’incredibile progresso tecnologico. Processori dedicati al calcolo tensoriale e la disponibilità di enormi quantità di dati hanno trasformato quella che un tempo era solo un’idea promettente in una vera e propria rivoluzione.
Grazie alla backpropagation, oggi abbiamo sistemi in grado di tenere conversazioni simili a quelle umane, riconoscere volti, tradurre lingue e persino guidare veicoli autonomamente. 
Nella GIF animata si può osservare, come in una sorta di danza numerica, quello che avviene, nel corso di venti epoche, all'interno di una semplicissima rete neurale composta da soli 3 neuroni e 4 parametri.
Ancora una volta, la scienza ci sorprende con la sua combinazione di logica ed eleganza.

Struttura della rete neurale utilizzata per questo esperimento:
  • Un input: un singolo valore.
  • Un hidden layer: costituito da due neuroni (H1 e H2).
  • Un output: un singolo neurone che fornisce il risultato finale.
Al confronto, altre reti neurali utilizzate negli esperimenti illustrati in altri post di questo blog arrivano fino a 60 milioni di parametri.
Come si evince dall'animazione, l'addestramento porta a una progressiva e significativa riduzione dell'errore.
Le fasi descritte sono:
  1. Il forward pass
Calcolo dei neuroni del layer nascosto
Per ciascun neurone nascosto:
    • H1: h1 = σ(z₁) = σ(w₁·x)
    • H2: h2 = σ(z₂) = σ(w₂·x)
dove:
- x è il valore di input (nel codice 0.5),
- w₁ e w₂ sono i pesi associati alle connessioni dall'input a H1 e H2,
- σ(u) = 1/(1 + e−u) è la funzione di attivazione sigmoide.
  1. Calcolo del neurone di output
L'output finale viene calcolato combinando le uscite dei neuroni nascosti:
o = σ(zₒ) = σ(w₃·h₁ + w₄·h₂)
dove w₃ e w₄ sono i pesi che collegano H1 e H2 al neurone di output.

  1.  Calcolo dell'errore

Una volta ottenuto l'output o, il passo successivo è confrontarlo con il target (valore desiderato, nel mio script 0.8). L'errore viene calcolato usando la funzione di errore quadratico:
E = ½·(target-o)²
Questo valore misura quanto l'output della rete si discosta dal valore atteso.
  1. La backpropagation
La vera potenza della backpropagation sta nel modo in cui l'errore viene retropropagato attraverso la rete neurale per aggiornare i pesi. 
Questo avviene tramite il calcolo dei gradienti, che indicano la direzione e l'intensità delle variazioni necessarie per ridurre l'errore.

a. Calcolo del delta per il neurone di output
Il primo passo è calcolare il delta dell'output:
δₒ = (o - target)·σ'(zₒ)
Essendo la derivata della funzione sigmoide:
σ'(zₒ) = o·(1 - o)
otteniamo:
δₒ = (o - target)·o·(1 - o)

b. Aggiornamento dei pesi nel layer di output
I gradienti per i pesi che connettono i neuroni nascosti al neurone di output sono:
    • ∂E/∂w₃ = δₒ·h₁
    • ∂E/∂w₄ = δₒ·h₂
Questi gradienti vengono poi utilizzati per aggiornare i pesi:
wnew = wold - η·(∂E/∂w)
dove η è il learning rate (nel nostro caso 0.1).

c. Propagazione dell'errore all'hidden layer
Per ciascun neurone nascosto, l'errore viene propagato indietro. 
Ad esempio, per il neurone H1:
δh1 = δₒ·w₃·h₁·(1 - h₁)
Analogamente, per H2:
δh2 = δₒ·w₄·h₂·(1 - h₂)

d. Aggiornamento dei pesi dell'hidden layer
I gradienti per i pesi che collegano l'input ai neuroni nascosti sono dati da:
    • ∂E/∂w₁ = δh1·x
    • ∂E/∂w₂ = δh2·x
Anche in questo caso, i pesi vengono aggiornati usando la formula:
wnew = wold - η·(∂E/∂w)






 

Post popolari in questo blog

Salmoni, scarpette, cetrioli e altro

Tutto il testo contenuto in questa pagina è stato pensato e scritto dall'autore del blog.   1. Come il salmone 2. Ooops! 3. Le scarpette hi-tech 4. Equivoci contemporanei 5. I saccenti 6. Medaglie di legno 7. La festività del Nulla 8. Gli aggiornamenti elettronici del Libro dell'Apocalisse 9. Dubbi ne ho 10. La maieutica del vulcaniano 11. Un piacevole vasetto di miele 12. Povere sfere 13. Caos comune mezzo gaudio 14. La fontana senza volti 15. Il piromane super beffardo 16. Boom di serpenti 17. Sistemi in via di degradazione 18. Il gatto nero 19. Alain Delon è ancora vivo? 20. Per sempre con i cani 21. Eventi imprevedibili 22. I robot sottomessi 23. Lady Gaga e Bruno Mars incantano 24. Definizioni mancate 25. Il mio nemico drone 26. Errore di valutazione 27. Ringraziamenti 28. Cari cetrioli, vi scrivo 29. Boom di detective 30. Gli UFO trascurati 31. Il grande salto delle rane 32. La malattia artificiale 33. Homo consumens 34. Lacune informatiche 35. Sei troppo! 36. ...

Generatore Markmap HD

Pagina per il download di  Memento Lite Generatore Markmap Avanzato - Specifiche per l'utente finale Scopo principale: l'applicazione “Generatore Markmap Avanzato” permette agli utenti di trasformare testo scritto in formato Markdown in mappe mentali interattive. Offre funzionalità per creare, visualizzare, salvare, modificare, gestire ed esportare queste mappe mentali in vari formati. Interfaccia utente: l'interfaccia è strutturata nelle seguenti sezioni principali: Link al blog esterno: un link “🌐 Visita il Blog: Pensieri d'assestamento” che apre il blog associato in una nuova scheda. Intestazione (Header): Titolo: “Generatore Markmap Avanzato”. Sottotitolo: “Trasforma, salva e condividi il tuo testo Markdown in mappe mentali interattive”. Area Principale dei Contenuti: divisa in due pannelli affiancati (o impilati su schermi piccoli): Pannello di Input (Editor Markdown): Titolo: “✏️ Editor Markdown”. Area di Testo: un campo multiriga dove l...

Neural Tic-Tac-Toe Lab

Questo articolo presenta l'implementazione di una rete neurale specializzata nel gioco del tris (tic-tac-toe), addestrata mediante una metodologia innovativa basata sull'enumerazione completa degli stati di gioco. L'approccio supera le limitazioni dei metodi tradizionali di campionamento casuale, garantendo una copertura totale dello spazio delle configurazioni possibili. Struttura della rete neurale La rete implementata utilizza un'architettura feed-forward compatta con 9 neuroni di input, 16 neuroni nel layer nascosto e 9 neuroni di output. I neuroni di input ricevono la rappresentazione numerica dello stato della board (-1, 0, 1 per ciascuna delle 9 caselle), mentre i neuroni di output producono valutazioni numeriche per ogni possibile mossa. Il layer nascosto utilizza 16 neuroni con funzione di attivazione relu per introdurre capacità di apprendimento non-lineare. La rete contiene complessivamente 297 parametri: 144 pesi per le connessioni input-hidden, 16 bi...