Il Percettrone: Origine, Funzionamento e Limiti

Il Percettrone: Origine, Funzionamento e Limiti
mnist numbers grid sample

Le reti neurali artificiali, diffusissime nelle attuali tecnologie avanzate, affondano le loro radici in un modello concettuale degli anni '50: il percettrone. Ideato nel 1958 da Frank Rosenblatt, il percettrone segnò una svolta rivoluzionaria nell’intelligenza artificiale, introducendo per la prima volta un sistema capace di apprendere da dati supervisionati (dati che sono già stati classificati), ispirandosi al funzionamento dei neuroni biologici.

Con il percettrone, si immaginava che un programma, per la prima volta, potesse essere generato direttamente dai dati trattati durante le fasi di training e test. Le conoscenze acquisite potevano essere salvate e riutilizzate senza scrivere espressamente il codice del loro programma, aprendo la strada a un nuovo paradigma nella programmazione.

Le sue origini

Come già detto, il percettrone ha una caratteristica interessante: può imparare dai dati stessi che analizza e classificarli. In pratica, la sua conoscenza viene condensata nella sua semplice formula matematica e arricchita da pesi e bias che vengono inseriti nella formula in base all'esperienza nella fase di apprendimento.

La funzione a soglia è una funzione matematica che confronta il valore dell'input aggregato del percettrone con una soglia prestabilita. Se il valore supera la soglia, la funzione restituisce un output attivo (tipicamente 1); altrimenti restituisce un output inattivo (tipicamente 0).

Matematicamente, è rappresentata come:

$$ f(x) = \begin{cases} 1 & \text{se } x > 0 \\ 0 & \text{se } x \leq 0 \end{cases} $$

Dove:

$$ x = f\left(\sum_{i} w_i x_i + b\right) $$

Param| Descrizione
xi   | può ricevere più dati di input. Ad esempio, tutti i pixel di una immagine
wi   | peso associato a ciascun input
b    | bias, che regola la soglia
f    | funzione di attivazione con soglia a gradino (f(x) = {1 se x>0 0 se x≤0})

​Come funziona?

Si inizia con pesi casuali e una soglia casuale. Attraverso successive prove, il sistema è in grado di aggiustarli progressivamente per migliorare la sua capacità di classificare i dati forniti. Questo processo di apprendimento si chiama supervisionato perché richiede un "insegnante" che gli dica se le sue classificazioni sono corrette o sbagliate.

Le sue capacità e il suo limite: il problema XOR

Un limite cruciale del percettrone fu evidenziato da Marvin Minsky: l'incapacità di risolvere problemi non linearmente separabili, come la funzione XOR (OR esclusivo). Questo problema dimostrò che un singolo percettrone può classificare solo dati linearmente separabili.

Esempio XOR:

Input   | Output
0 0     | 0
0 1     | 1
1 0     | 1
1 1     | 0

Un percettrone non può tracciare una linea che separi correttamente questi casi e quindi riconoscere quale Output è corretto in relazione all'input.

Un caso concreto

Immaginiamo di utilizzare un sistema per risolvere un problema concreto: il riconoscimento di cifre scritte a mano, da 0 a 9. Questo è un esempio di OCR (Optical Character Recognition), un compito in cui il modello analizza immagini di numeri e determina quale cifra rappresentano. Per raggiungere il risultato il sistema deve svolgere una fase di training e di test che possono essere paragonate a come un bambino impara a riconoscere numeri scritti in modi diversi:

  1. Durante il training, il bambino studia molti esempi di "3", "5", o "8", imparando a riconoscerne le caratteristiche principali (curve, linee dritte, spazi chiusi).
  2. Durante il test, il bambino vede numeri scritti in uno stile diverso o con una calligrafia nuova. Se ha imparato bene, saprà comunque identificare il numero corretto.

Perché il Training e il Test sono importanti?

Il training permette al percettrone di imparare dai dati etichettati, ma è il test che dimostra se il modello ha davvero appreso qualcosa di significativo o si è limitato a memorizzare gli esempi. In un OCR, questo significa non solo riconoscere numeri già visti, ma anche leggere cifre nuove scritte in stili diversi.

Insegnare al Percettrone a riconoscere le cifre

La fase di training è il momento in cui il sistema apprende dai dati etichettati. Nel caso dell'OCR, il dataset può essere composto da immagini di numeri scritti a mano (ad esempio, cifre del dataset MNIST). Ogni immagine è associata a un’etichetta che indica la cifra rappresentata. Vediamo i passaggi che poi verranno eseguiti nel programma python in coda all'articolo:

Rappresentazione dei dati:

Ad esempio, ogni immagine è una griglia di pixel, ad esempio 28×28, con ogni pixel che rappresenta un valore di luminosità (da 0 per il nero a 255 per il bianco).

L'immagine viene "appiattita" in un vettore di 784 valori (28×28) da fornire come input al vettore di percettroni. Dovendo riconoscere 10 numeri si avrà bisogno di 10 percettoni.

Predizione iniziale:

Ogni percettrone viene inizializzato con pesi casuali e calcola una predizione iniziale in relazione all'immagine che gli viene sottoposta. Somma i contributi dei pixel ponderati dai rispettivi pesi, aggiunge il bias e passa il risultato attraverso una funzione di attivazione a gradino: f(x) = { 1 se x > 0 0 se x ≤ 0 } che ritorna 1 se x è maggiore di 0 altrimenti 0.

Confronto con l’etichetta reale:

Se l'immagine rappresenta un "3", ma il percettrone predice "7", viene calcolato l'errore confrontando l’etichetta reale ("3") con quella predetta ("7") e aggiornati i suoi pesi e bias in modo da minimizzare l'errore.

Iterazione o Epoche:

Questo processo viene ripetuto per tutte le immagini del dataset per ogni classe di training, più volte (detta anche "epoche"), finché l’errore non si riduce significativamente. L'aggiornamento dei pesi e del bias è il meccanismo che permette al sistema di correggere i suoi errori e migliorare nel tempo.

Cosa sono i pesi e il bias?

Pesi (wi​): Ogni input (ad esempio, un pixel in un'immagine) ha un peso associato, che indica l'importanza relativa di quell’input nel determinare l’output.

Bias (b): Un valore aggiuntivo che consente al modello di spostare la soglia decisionale, indipendentemente dai pesi.

La regola di aggiornamento:

Per correggere un errore, i pesi e il bias vengono modificati secondo una regola matematica:

§  Aggiornamento dei pesi: Ogni peso viene aggiustato in base a tre fattori: La formula è: wi=wi+η⋅e. ​Questo significa che il peso aumenta o diminuisce proporzionalmente all’errore e all’importanza dell’input.

§  Tasso di apprendimento (η): Una costante che determina quanto velocemente il modello si adatta. Un valore troppo alto può portare a instabilità, uno troppo basso a un apprendimento lento.

§  Errore (e): La differenza tra il risultato reale e quello predetto.

§  Input (xi​): Il valore dell'input specifico associato a quel peso.

 Un esempio: Immaginiamo che il percettrone stia cercando di riconoscere una cifra scritta a mano, ad esempio il numero "5". In un primo tentativo, il modello potrebbe predire erroneamente che si tratta di un "3". Questa predizione errata genera un errore (e), che guida l’aggiornamento dei pesi. Se, ad esempio, alcuni pixel nella parte superiore dell’immagine (la curva del "5") sono stati ignorati, i pesi associati a quei pixel verranno aumentati, rendendoli più significativi nelle predizioni future. Allo stesso modo, il bias potrebbe essere aggiustato per spostare leggermente la soglia decisionale del modello, aiutandolo a distinguere meglio tra "5" e "3".

 Fase di Test: Verificare l’apprendimento

Una volta terminata la fase di training, il modello viene testato con dati mai visti prima per verificare se ha imparato a generalizzare. Nel caso dell'OCR, queste sono immagini di numeri scritti a mano che non facevano parte del dataset di training.

Predizione sui Dati di Test:

    • Il percettrone riceve una nuova immagine di un numero, la elabora usando i pesi appresi durante il training, e restituisce la predizione.

Confronto con l’Etichetta Reale:

    • Le predizioni vengono confrontate con le etichette reali delle immagini per calcolare metriche come l'accuratezza.

Valutazione della Generalizzazione:

    • Se il modello riconosce correttamente anche numeri scritti da persone diverse o in stili leggermente variati, significa che ha imparato un criterio generale valido per distinguere le cifre.

In conclusione

Il percettrone, sebbene ampiamente superato, ha aperto la strada a concetti chiave come l’apprendimento supervisionato e l’uso di dati per migliorare le prestazioni delle macchine. Il suo sviluppo ha rappresentato un passaggio fondamentale nella storia dell'IA, dimostrando che concetti semplici possono evolversi in tecnologie rivoluzionarie. La capacità di apprendere dai dati, di generalizzare l'apprendimento e di migliorare progressivamente le proprie prestazioni rappresenta ancora oggi il fulcro dell'intelligenza artificiale moderna.

Il programma python che implementa un semplice OCR

Read more