Il Percettrone

STORIA

Il percettrone nacque da una prima bozza di neurone artificiale teorizzato da Warren Mc Culloch e Walter Pitts.

Warren McCulloch
Warren McCulloch
Walter Pitts
Walter Pitts

L’idea del neurone artificiale venne successivamente ripresa da Frank Rosenblatt il quale sviluppò una macchina elettromeccanica costituita da potenziometri, motori, e fotocellule che avrebbe avuto lo scopo di riconoscere semplici forme geometriche.

Frank Rosenblatt
Frank Rosenblatt

Il percettrone era un semplice classificatore lineare binario e quindi era in grado di apprendere efficacemente la regola necessaria per riconoscere due classi di input diverse e linearmente separabili.

Frank Rosenblatt, oltre ad averlo realizzato fisicamente, studiò anche un semplice algoritmo per l’addestramento.



L’idea del neurone artificiale venne successivamente ripresa da Frank Rosenblatt il quale sviluppò una macchina elettromeccanica costituita da potenziometri, motori, e fotocellule che avrebbe avuto lo scopo di riconoscere semplici forme geometriche.

Il percettrone era un semplice classificatore lineare binario e quindi era in grado di apprendere efficacemente la regola necessaria per riconoscere due classi di input diverse e linearmente separabili.

Frank Rosenblatt, oltre ad averlo realizzato fisicamente, studiò anche un semplice algoritmo per l’addestramento.

STRUTTURA

Prima di addentrarci nello studio dell’algoritmo di addestramento del percettrone è necessario conoscerne la struttura.

Come ho già detto, la struttura del percettrone è molto simile a quella di un neurone biologico e le varie sezioni sono molto simili.

Abbiamo i dendriti assieme alle sinapi che costituiscono l’input del neurone.

Il nucleo e infine gli assoni che costituiscono l’uscita del segnale dal neurone per andare ad interagire con gli altri neuroni.

Passiamo quindi all’analisi degli elementi che costituiscono il percettrone.

Analogamente al neurone biologico il percettrone è costituito da :

– almeno due o più connessioni o sinapsi di input

– un nucleo di calcolo o sommatore

– da un uscita o anche detta attivazione

Struttura percettrone

L’input del percettrone

Nella versione originale i valori possibili di input e output potevano essere esclusivamente 1, -1 ma visto la scarsa utilità di un modello simile passeremo direttamente alla versione un po’ più sofisticata che permette valori di input in virgola mobile da -1 a 1.

Quando vogliamo che il percettrone risponda ad un dato problema dobbiamo aver un modo per comunicare i dati del problema.

Per fare un semplice esempio: se il nostro  percettrone avesse lo scopo di distinguere mele dalle banane attraverso l’altezza e il peso ogni qual volta che desideriamo che il percettrone esegua questo task di riconoscimento dobbiamo fornire il dato (Altezza,Peso) e cioè una coppia ordinata di numeri reali (es: (5.2 , 122 )  ).

L’input del percettrone sarà quindi costituito da un vettore di numeri reali in cui di volta in volta andremo a inserire i valori di input. (x1,x2 … xn )

Oltre a questo vettore di variabili di input c’è un ulteriore vettore della stessa dimensione del precedente. Questo array ulteriore, sempre costituito da numeri reali, è detto array dei pesi che vengono indicati con w1, w2, … wn

In fine per ottenere il vero e proprio dato che verrà immesso nel nucleo del percettrone si eseguirà la semplice operazione xn * wn per ogni xn di input.

Il nucleo del percettrone

Il nucleo viene anche chiamato anche sommatore e non fa nulla di speciale se non sommare tra di loro i polinomi xn*wn . Per comodità indicheremo questa somma con la lettera z.

Output o attivazione

L’attivazione è la parte del percettrone che trasforma l’informazinoe data dal nucleo nella vera e propria risposta. L’attivazione è una funzione di z (la somma nel nucleo) e questa funzione viene detta funzione di trasferimento. Più avanti vedremo che esistono diverse funzioni di trasferimento e per ora ci accontenteremo della funzione di trasferimento “segno”.

La funzione di trasferimento “segno” è di fatto la funzione “soglia” con soglia zero e risponde alla seguente regola

se Z>0 allora o=1

se Z<=0 allora o=-1

dove o è il valore di uscita del percettrone.

quindi quando la somma nel nucleo sarà maggiore di zero l’attivazione ossia l’output del percettrone sarà 1 altrimenti sarà -1 .

Il fatto di inserire Z=0 nella classe -1 è una scelta arbitraria e irrilevante.

ADDESTRAMENTO SUPERVISIONATO

Ora che abbiamo visto i componenti principali possiamo  parlare di come viene addestrato il percettrone.

Per addestrare un percettrone si può usare la strategia supervisionata ossia si collezionano degli esempi di dati di input di cui si conosce la risposta.

Si costruisce un dataset composto da N coppie composte in questo modo

[1]  VETTORE INPUT , VALORE_OUT_ASPETTATO

[2]  VETTORE INPUT , VALORE_OUT_ASPETTATO

[3]  VETTORE INPUT , VALORE_OUT_ASPETTATO

[n] VETTORE INPUT , VALORE_OUT_ASPETTATO

Questo viene chiamato dataset di training e serve appunto nella prima fase per addestrare il percettrone.

L’algoritmo è composto praticamente da 4 steps

l’algoritmo acquisisce ciascun dato dalla lista in ordine di posizione oppure in ordine casuale ed ad ogni passaggio esegue le queste istruzioni:

1.         Dato uno tra gli N input ne calcolo l’output

Supponiamo che il dataset di training sia composto da un migliaio di elementi del tipo

   VETTORE_INPUT , VALORE_OUT_ATTESO[Y]

      A. calcola il prodotto x0*w0, x1*w1 … xi*wi

      B. somma i polinomi del punto A e produce la somma Z

      C. calcola l’output del percettrone applicando la funzione di trasferimento “segno” a Z

2.         Calcolo l’errore rispetto al valore aspettato

   Dopo aver calcolato l’output possiamo verificare quanto la rete si è avvicinata alla risposta corretta che appunto è compresa nel dataset di training.

Il risposta corretta, ossia il valore atteso, da ora in poi verrà indicato con la lettera Y.

In pratica calcoliamo l’errore commesso ad ogni previsione.

   Nel percettrone tale errore viene calcolato semplicemente come yn-on

Dove yn è il valore atteso corrispondente al vettore xn ed xn è il valore di output calcolato corrispondente all’input xn

Nel percettrone tale errore viene calcolato semplicemente come yn-on

Dove yn è il valore atteso corrispondente al vettore xn ed on è il valore di output calcolato corrispondente all’input xn

Nel percettrone le cose sono molto semplificate perchè le possibili combinazioni di valori di Y e O sono 4

3.         Utilizzando l’errore vengono corretti i pesi w del percettrone

Il motivo per cui il percettrone apprende è proprio grazie al fatto che, ad ogni tentativo di formulare un ipotesi di classificazione dell’ennesimo input Xn, viene calcolato l’errore commesso e di conseguenza regolati i pesi con l’obbiettivo di “far meglio” al prossimo colpo!

Proprio così : sbagliando s’impara!

la regola per determinare il nuovo peso wi(t) è:

wi(t) = wi(t-1) + errn*xin*r
dove wi(t) è il nuovo peso ricalcolato
wi(t-1) è il vecchio peso ( perciò non ancora regolato)

errn è l’errore calcolato nel passo 2. ( ricordo la formula errn = yn – on)

Per quanto riguarda xin : ricordo che stiamo elaborando un dataset di n elementi del tipo

   [1]  VETTORE_INPUT , VALORE_OUT_ATTESO

   [2]  VETTORE_INPUT , VALORE_OUT_ATTESO

   [3]  VETTORE_INPUT , VALORE_OUT_ATTESO

   …

   [n]  VETTORE_INPUT , VALORE_OUT_ATTESO

il valore atteso l’abbiamo etichettato yn
mentre gli elementi che compogono VETTORE_INPUT, cioè Xn

è composto come segue

[x0,x1…, xi,xi+1.. ] e così via

quindi in sostanza xin è l’input x i-esimo dell’n-esimo elemento del dataset

In fine r è un valore chiamato learning rate, o anche tasso di apprendimento, ed è un parametro che possiamo scegliere.

Più piccolo è r e più lento e preciso è l’apprendimento.
Al contrario, più grande è il learning rate e più veloce e grossolano sarà l’apprendimento.

Un learning rate per iniziare potrebbe essere 0.01

4.         Se sono state elaborate tutte le righe del dataset di training e l’errore medio è accettabile mi fermo altrimenti ricomincio dallo step 1.
A questo punto si procede con tutti gli elementi del dataset di training.
Una volta elaborato tutto il dataset potremo dire di aver concluso un epoca di apprendimento.

Finita un epoca si valuta l’errore medio commesso e se questo è irrilevante per il risultato voluto potremmo considerare conclusa la fase di training e testare quindi il comportamento del percettrone.

Se al contrario, finita un epoca, riscontriamo un errore medio relativamente alto allora si continua riproponendo nuovamente l’apprendimento.

Normalmente sono necessarie da qualche decina di epoche di apprendimento (per problemi più semplici) a qualche migliaio.

L’apprendimento supervisionato prevede appunto che le correzioni del comportamento del percettrone avvengano , appunto, per supervisione.

La storia del Percettrone

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Articolo precedente

Deep Learning e Java