IA subsimbolica: reti neurali

Come simulare il cervello umano con una rete neurale artificiale

Questa parte è tratta da:

  • Simon Haykin. Neural Networks and Learning Machines, 3rd Edition, 2009 [Capitolo 1]

  • Stephen Wolfram. What is chatGPT doing and why does it work? Stephen Wolfram Writings, 2023.

Modelli computazionali

Supponiamo di voler sapere (come fece Galileo alla fine del 1500) quanto tempo impiegherà una palla di cannone lanciata da ogni piano della Torre di Pisa a toccare il suolo. Si potrebbe misurare il tempo in ogni caso e compilare una tabella dei risultati. Oppure si potrebbe fare ciò che è l'essenza della scienza: creare un modello che fornisca una sorta di procedura per calcolare la risposta, anziché limitarsi a misurare e ricordare ogni caso.

Immaginiamo di avere dati (in qualche modo idealizzati) su quanto tempo impiega una palla di cannone a cadere da diverse altezze. Mettiamo sull'asse delle x l'altezza (questa variabile si chiama esplicativa) e sull'asse delle y il tempo (questa variabile si chiama risposta):

Potremmo fare un'ipotesi matematica, ad esempio usare una funzione lineare (una retta) del tipo y=ax+by = a x + b, dove yy è la variabile tempo, xx la variabile altezza, e a,ba, b sono dei parametri costanti ma incogniti, come modello per interpolare i dati:

Potremmo scegliere diverse rette. Ma quella visualizzata sopra è quella che in media si avvicina di più ai dati che ci vengono forniti, cioè quella che minimizza l'errore misurato come somma dei quadrati dei residui (differenze) tra i valori reali osservati e quelli previsti dal modello.

Potremmo anche provare qualcosa di matematicamente più complicato - ad esempio una funzione quadratica y=a+bx+cx2y = a + b x + c x^2 - e verificare che in questo caso abbiamo un modello migliore (con meno errore):

Qualsiasi modello si utilizzi ha una particolare struttura di fondo: il tipo di funzione, come quella lineare, quadratica, esponenziale e altre ancora. Ogni famiglia di modelli ha dei parametri liberi, una sorta di manopole da impostare per adattarsi ai dati risolvendo un problema di minimizzazione dell'errore. Ad esempio, in y=a+bx+cx2y = a + b x + c x^2, i parametri liberi sono a,b,ca, b, c.

Ricordiamo sempre che ogni modello è una astrazione, e dunque una semplificazione, della realtà, ovvero:

Una mappa non è il territorio. Alfred Korzybski

L'esempio che abbiamo fatto sopra riguarda la creazione di un modello per dati numerici che provengono essenzialmente dalla fisica e per i quali abbiamo una relazione esplicita, una formula matematica, tra dati di ingresso e risposta del modello.

Per realizzare modelli per compiti di tipo umano, come ad esempio modelli che riconoscono immagini o che riconoscono e generano il linguaggio naturale umano, dobbiamo cambiare strategia. Per una cosa del genere non abbiamo (almeno per ora) nulla di simile a formule matematiche esplicite e spiegabili. Quindi come potrebbe essere un tale modello?

Consideriamo il problema del riconoscimento di immagini che contengono cifre numeriche, come quelle mostrate in figura sotto.

Se consideriamo il valore del livello di grigio di ogni pixel ii come una variabile xix_i, esiste una funzione di tutte queste variabili che, una volta valutata, ci dica quale cifra è disegnata nell'immagine?

Come vedremo parlando di reti neurali artificiali, è di fatto possibile costruire una funzione di questo tipo, ma tale funzione non è particolarmente semplice. In ogni caso il risultato finale è che se inseriamo in questa funzione l'insieme dei valori dei pixel di un'immagine, ne uscirà il numero che specifica di quale cifra si tratta.

Reti neurali artificiali

La ricerca sulle reti neurali artificiali (artificial neural networks, o ANN), comunemente chiamate reti neurali, è stata motivata fin dall'inizio dalla consapevolezza che il cervello umano calcola in modo completamente diverso dal computer digitale convenzionale. Il cervello è un sistema di elaborazione delle informazioni altamente complesso, non lineare e parallelo. Ha la capacità di organizzare i suoi componenti strutturali, noti come neuroni, in modo da eseguire determinati calcoli (ad esempio, il riconoscimento di pattern, la percezione e il controllo motorio) molto velocemente.

Ad esempio, consideriamo il sonar di un pipistrello. I pipistrelli utilizzano una tecnica chiamata ecolocazione per localizzare le loro prede e navigare nell'ambiente circostante. L'ecolocazione è un sistema biologico che coinvolge l'emissione di suoni ad alta frequenza e l'ascolto dell'eco riflesso per ottenere informazioni sull'ambiente circostante. Ecco come funziona:

  1. Emissione di suoni: i pipistrelli emettono ultrasuoni a frequenze molto elevate, al di fuori della gamma uditiva umana. Questi suoni vengono emessi attraverso la bocca o il naso del pipistrello, a seconda della specie.

  2. Propagazione degli ultrasuoni: gli ultrasuoni si propagano attraverso l'ambiente circostante. Quando incontrano un oggetto solido, come una preda o un ostacolo, parte dell'energia degli ultrasuoni viene riflessa indietro verso il pipistrello.

  3. Ascolto dell'eco: il pipistrello ascolta attentamente l'eco degli ultrasuoni riflessi. Sulla base del tempo trascorso tra l'emissione del suono e la ricezione dell'eco, nonché dalla frequenza e dall'intensità dell'eco, il pipistrello può determinare la distanza, la direzione e persino la forma degli oggetti circostanti.

  4. Adattamento in tempo reale: i pipistrelli sono in grado di adattare la frequenza e il ritmo dell'ecolocazione in tempo reale a seconda delle caratteristiche dell'ambiente e delle prede presenti.

Nel processo di formazione dell'immagine sono incorporate invarianze per caratteristica che lo rendono essenzialmente indipendente dal movimento del bersaglio e dal movimento del pipistrello stesso.

Le complesse computazioni neurali necessarie per estrarre tutte queste informazioni dall'eco del bersaglio avvengono in un cervello grande come una prugna. In effetti, un pipistrello ecolocalizzatore può inseguire e catturare il suo bersaglio con una facilità e un tasso di successo che farebbero invidia a un ingegnere umano.

Ma come fa un cervello umano o quello di un pipistrello a farlo? Alla nascita, un cervello ha già una struttura considerevole e la capacità di costruire le proprie regole di comportamento attraverso ciò che di solito chiamiamo esperienza. In effetti, l'esperienza si costruisce nel tempo: gran parte dello sviluppo del cervello umano avviene nei primi due anni dalla nascita, ma lo sviluppo continua ben oltre questa fase. Un sistema nervoso "in via di sviluppo" è sinonimo di un cervello plastico: la plasticità permette al sistema nervoso in via di sviluppo di adattarsi all'ambiente circostante. Così come la plasticità sembra essere essenziale per il funzionamento dei neuroni come unità di elaborazione delle informazioni nel cervello umano, lo è anche per le reti neurali costituite da neuroni artificiali.

Nella sua forma più generale, una rete neurale è una macchina progettata per modellare il modo in cui il cervello esegue un particolare compito; la rete è solitamente implementata utilizzando componenti elettronici o è simulata in un software su un computer digitale. Per ottenere buone prestazioni, le reti neurali utilizzano una massiccia interconnessione di semplici cellule di calcolo, chiamate neuroni o unità di elaborazione.

Possiamo quindi dare la seguente definizione di rete neurale vista come macchina adattativa:

Una rete neurale è un processore distribuito e parallelo composto da semplici unità di elaborazione che ha una naturale propensione a immagazzinare la conoscenza esperienziale e a renderla disponibile per l'uso. Assomiglia al cervello per due aspetti:

  1. La conoscenza viene acquisita dalla rete dal suo ambiente attraverso un processo di apprendimento.

  2. Le forze delle connessioni tra neuroni, note come pesi sinaptici, sono utilizzate per memorizzare la conoscenza acquisita.

La procedura utilizzata per eseguire il processo di apprendimento è chiamata algoritmo di apprendimento, la cui funzione è modificare i pesi sinaptici della rete per raggiungere un obiettivo desiderato. La modifica dei pesi sinaptici costituisce il metodo tradizionale per la progettazione delle reti neurali. Tuttavia, è anche possibile che una rete neurale modifichi la propria topologia, il che è motivato dal fatto che i neuroni del cervello umano possono morire e possono crescere nuove connessioni sinaptiche.

Pesi sinaptici nelle reti neurali biologiche

Nelle reti neurali biologiche, come quelle presenti nel cervello umano, il concetto analogo a quello di "pesi" nelle reti neurali artificiali si trova nella forza o efficacia delle connessioni sinaptiche tra i neuroni. La forza di questo segnale può essere modulata da vari fattori, rendendo la sinapsi più o meno efficace nel trasmettere il segnale al neurone successivo. Questa modulazione è simile alla regolazione dei pesi nelle reti neurali artificiali ed è fondamentale per l'apprendimento e la memoria nei sistemi biologici.

Quindi, sebbene i meccanismi di regolazione dei pesi nelle reti neurali artificiali (algoritmi matematici) siano diversi da quelli delle reti neurali biologiche (processi biochimici), il principio di fondo della modifica della forza delle connessioni per imparare dall'esperienza è un punto di corrispondenza tra i due. Questo concetto di apprendimento attraverso la regolazione delle forze di connessione è una delle ispirazioni fondamentali delle neuroscienze che hanno influenzato lo sviluppo delle reti neurali artificiali.

Caratteristiche delle reti neurali

Le reti neurali posseggono svariate capacità che consentono di trovare buone soluzioni approssimate a problemi complessi che sono intrattabili su larga scala.

Apprendimento

Una rete neurale ha la capacità di apprendere e quindi di generalizzare. La generalizzazione si riferisce alla produzione da parte della rete neurale di output ragionevoli per input non incontrati durante l'addestramento.

Un paradigma popolare di apprendimento, chiamato apprendimento con insegnante o apprendimento supervisionato, prevede la modifica dei pesi sinaptici di una rete neurale mediante l'applicazione di una serie di esempi di addestramento etichettati. Ogni esempio consiste in un unico segnale di ingresso e in una corrispondente risposta desiderata (target). Alla rete viene presentato un esempio scelto a caso dall'insieme e i pesi sinaptici (parametri liberi) della rete vengono modificati per minimizzare la differenza tra la risposta desiderata e la risposta effettiva della rete prodotta dal segnale di ingresso. L'addestramento della rete viene ripetuto per molti esempi dell'insieme, finché la rete non raggiunge uno stato stazionario in cui non si verificano più cambiamenti significativi nei pesi sinaptici. In questo modo la rete apprende dagli esempi costruendo una mappatura input-output per il problema in questione.

Parallelismo

In una struttura parallela, diversi componenti del sistema possono lavorare simultaneamente su parti indipendenti dei dati o dei calcoli. In particolare, le reti neurali sono composte da un insieme di nodi o neuroni interconnessi. In una rete parallela, i calcoli su questi nodi possono essere eseguiti in modo simultaneo. Questa parallelizzazione avviene spesso grazie a hardware specializzato, come le unità di elaborazione grafica (GPU) o le unità di elaborazione tensoriale (TPU), che sono in grado di gestire operazioni matriciali in modo efficiente e parallelo.

Non linearità

Si riferisce al fatto che la relazione tra l'ingresso e l'uscita di una rete neurale non è una semplice funzione lineare. Nei sistemi lineari, l'uscita è una combinazione lineare dell'ingresso, ad esempio F(x)=ax+bF(x) = ax + b. La non linearità permette alle reti neurali di apprendere e rappresentare schemi e relazioni complesse dei dati.

Adattabilità e stabilità

Le reti neurali hanno la capacità di adattare i loro pesi sinaptici ai cambiamenti dell'ambiente circostante. Inoltre, quando opera in un ambiente non stazionario (ovvero che cambia nel tempo), una rete neurale può essere progettata per modificare i suoi pesi sinaptici in tempo reale. Come regola generale, si può affermare che quanto più un sistema è adattivo, pur garantendo che rimanga stabile, tanto più robuste saranno le sue prestazioni quando il sistema dovrà operare in un ambiente non stazionario.

Va sottolineato, tuttavia, che l'adattabilità non sempre porta alla robustezza; anzi, può fare l'esatto contrario. Ad esempio, un sistema adattivo con costanti di breve durata può cambiare rapidamente e quindi tendere a rispondere ai minimi cambiamenti dell'ambiente, causando un drastico degrado delle prestazioni del sistema. Un sistema d'allarme non si deve attivare se una molecola d'aria si sposta, ma solo se c'è un cambiamento significativo.

Per sfruttare appieno i vantaggi dell'adattabilità, le costanti di tempo principali del sistema dovrebbero essere sufficientemente lunghe da permettere al sistema di ignorare i cambiamenti irrilevanti, ma sufficientemente brevi da rispondere a cambiamenti significativi nell'ambiente; un problema noto come dilemma della stabilità-plasticità.

Tolleranza ai guasti

Una rete neurale ha il potenziale per essere intrinsecamente tollerante ai guasti, o capace di calcolo robusto, nel senso che le sue prestazioni degradano in modo graduale in condizioni operative avverse. Ad esempio, se un neurone o i suoi collegamenti sono danneggiati, il recupero di un dato memorizzato è invalidato. Tuttavia, a causa della natura distribuita delle informazioni memorizzate nella rete, il danno deve essere esteso a molti neuroni prima che la risposta complessiva della rete sia seriamente compromessa. In linea di principio, quindi, una rete neurale presenta un degrado graduale delle prestazioni piuttosto che un guasto catastrofico. In effetti, il cervello umano è la prova vivente che l'elaborazione parallela con tolleranza ai guasti non solo è fisicamente possibile, ma anche efficiente.

Modelli di neuroni

Il neurone è l'unità di elaborazione dell'informazione fondamentale per il funzionamento di una rete neurale.

Qui identifichiamo gli elementi fondamentali del modello neurale:

  1. Un insieme di segnali di ingresso xix_i che raccolgono gli ingressi dai neuroni pre-sinaptico;

  2. Un insieme di sinapsi, o collegamenti, ognuno dei quali è caratterizzato da un peso, detto anche forza. In particolare, il segnale di ingresso xix_i associato alla sinapsi ii collegata al neurone kk viene moltiplicato per il peso sinaptico wkiw_{ki}. È importante notare il modo in cui sono scritti i pedici del peso sinaptico wkiw_{ki}. Il primo pedice di wkiw_{ki} si riferisce al neurone in questione, mentre il secondo pedice si riferisce al neurone pre-sinaptico che fornisce l'ingresso. In sostanza, l'insieme di tutti i pesi sinaptici si può rappresentare con una matrice W=(wi,j)W = (w_{i,j}). A differenza del peso di una sinapsi nel cervello, il peso sinaptico di un neurone artificiale può essere compreso in un intervallo che include valori negativi e positivi.

  3. Un combinatore Σ\Sigma per sommare i segnali di ingresso, ponderati per i rispettivi pesi sinaptici del neurone; in questo caso abbiamo un combinatore lineare perché i pesi vengono moltiplicati per gli ingressi e sommati.

  4. Una funzione di attivazione φ()\varphi(\cdot) per limitare l'ampiezza dell'uscita di un neurone. La funzione di attivazione è detta anche funzione di schiacciamento (squashing function), in quanto schiaccia (limita) l'intervallo di ampiezza ammissibile del segnale di uscita a un valore finito.

  5. Un bias applicato dall'esterno, indicato con bkb_k. Il bias ha l'effetto di aumentare o diminuire l'ingresso netto della funzione di attivazione, a seconda che sia positivo o negativo, rispettivamente. In modo simile al modo in cui i neuroni biologici si attivano solo quando il potenziale di attivazione supera una certa soglia, il bias in un neurone artificiale può essere visto come un modo per regolare la soglia di attivazione del neurone. Si noti che il bias non dipende dai valori di input e questo significa che anche se tutti gli input al neurone sono zero, il bias può permettere al neurone di produrre un output non nullo.

  6. Una risposta yky_k, ovvero l'uscita del neurone.

In formule, possiamo descrivere questo modello per un neurone kk come segue:

uk=i=1mxiwkivk=uk+bkyk=φ(uk+bk)\begin{array}{lcl} u_k & = & \sum_{i=1}^{m} x_i w_{ki} \\ v_k & = & u_k + b_k \\ y_k & = & \varphi(u_k + b_k) \end{array}

dove:

  • uku_k è l'uscita del combinatore lineare;

  • vkv_k è il potenziale di attivazione (detto anche campo locale indotto);

  • φ\varphi è la funzione di attivazione;

  • yky_k è il segnale di uscita del neurone.

Possiamo riformulare il modello includendo il bias tra gli input, ovvero aggiungendo un nuovo ingresso x0=1x_0 = 1 con peso wk0=bkw_{k0} = b_k, come mostrato nella figura seguente.

La nuova formulazione matematica è dunque:

vk=i=0mxiwkiyk=φ(vk)\begin{array}{lcl} v_k & = & \sum_{i=0}^{m} x_i w_{ki} \\ y_k & = & \varphi(v_k) \end{array}

dove x0=1x_0 = 1 e wk0=bkw_{k0} = b_k.

Tipi di funzioni di attivazione

Una semplice funzione di attivazione è la funzione soglia (threshold function), definita come segue:

φ(v)={1se v00se v<0\varphi(v) = \left\{\begin{array}{lrl} 1 & \text{se } v \geq 0 \\ 0 & \text{se } v < 0 \\ \end{array}\right.

Dunque con questa funzione l'uscita è binaria (0 o 1) a seconda che il potenziale di attivazione sia negativo o non-negativo, ovvero vale la proprietà "tutto o niente". Un neurone di questo tipo viene chiamato modello McCulloch-Pitts, in riconoscimento del lavoro pionieristico svolto da McCulloch e Pitts (1943).

La funzione sigmoide, il cui grafico è a forma di S, è di gran lunga la forma più comune di funzione di attivazione utilizzata nella costruzione di reti neurali. È definita come una funzione strettamente crescente che presenta un equilibrio aggraziato tra comportamento lineare e non lineare. Un esempio di funzione sigmoide è la funzione logistica, definita da:

φ(v)=11+eav\varphi(v) = \frac{1}{1 + e^{-av}}

dove aa è il parametro di pendenza della funzione logistica. Variando il parametro aa, si ottengono funzioni logistiche con pendenze diverse. Al limite, quando il parametro della pendenza si avvicina all'infinito, la funzione logistica diventa semplicemente una funzione soglia. Mentre una funzione soglia assume il valore di 0 o 1, una funzione sigmoide assume un intervallo continuo di valori da 0 a 1.

Si noti anche che la funzione sigmoide è differenziabile (ovvero ammette una derivata), mentre la funzione soglia non lo è. Una funzione differenziabile è una funzione matematica che ha una derivata in ogni punto del suo dominio. La derivata di una funzione rappresenta il tasso di variazione istantaneo della funzione in un determinato punto e può essere interpretata come la pendenza della retta tangente al grafico della funzione in quel punto. La differenziabilità è una caratteristica importante della teoria delle reti neurali.

Le funzioni di attivazione definite finora vanno da 0 a 1. A volte è auspicabile che la funzione di attivazione vada da -1 a 1. In particolare, la funzione soglia è ora definita come:

φ(v)={1se v00se v=01se v<0\varphi(v) = \left\{\begin{array}{ll} 1 & \text{se } v \geq 0 \\ 0 & \text{se } v = 0 \\ -1 & \text{se } v < 0 \\ \end{array}\right.

che viene comunemente chiamata funzione signum.

Per la forma corrispondente di una funzione sigmoide, possiamo usare la funzione tangente iperbolica, ovvero il rapporto tra seno e coseno iperbolici, definita da:

φ(v)=tanh(v)=sinh(v)cosh(v)=evevev+ev=1e2v1+e2v\varphi(v) = \mathrm{tanh}(v) = \frac{\mathrm{sinh}(v)}{\mathrm{cosh}(v)} = \frac{e^v - e^{-v}}{e^v + e^{-v}} = \frac{1 - e^{-2v}}{1 + e^{-2v}}

Il modello neurale descritto finora è deterministico, nel senso che il suo comportamento input-output è definito con precisione per tutti gli input. Per alcune applicazioni delle reti neurali, è auspicabile basare l'analisi su un modello neurale stocastico. In questo modello, alla funzione di attivazione del modello McCulloch-Pitts viene data un'interpretazione probabilistica. In particolare, a un neurone è consentito di risiedere solo in uno dei due stati, diciamo 0 o 1. La decisione di un neurone di attivarsi (cioè di cambiare il suo stato da spento ad acceso) è probabilistica.

Sia xx lo stato del neurone e P(v)P(v) la probabilità di accensione, dove vv è il campo locale indotto del neurone. Possiamo quindi scrivere:

x={1con probabilitaˋ P(v)0con probabilitaˋ 1P(v)x = \left\{\begin{array}{ll} 1 & \text{con probabilità } P(v)\\ 0 & \text{con probabilità } 1 - P(v) \\ \end{array}\right.

Una scelta standard per P(v)P(v) è la funzione di forma logistica con parametro a=1/Ta = 1/T:

P(v)=11+ev/TP(v) = \frac{1}{1 + e^{-v/T}}

dove TT è una pseudo-temperatura utilizzata per controllare l'incertezza del neurone di accendersi. Si noti che quando TT tende a 0, il parametro di pendenza aa tende a infinito e il neurone stocastico si riduce a una forma "fredda" priva di incertezza, cioè al modello deterministico di McCulloch-Pitts. Viceversa quando la temperatura aumenta, cresce anche l'incertezza, ovvero la componente stocastica, del modello.

Reti neurali come grafi diretti

I diagrammi a blocchi del modello di un neurone artificiale possono essere semplificati utilizzando l'idea dei grafi di flusso del segnale, senza sacrificare nessuno dei dettagli funzionali del modello. Tali grafi sono stati originariamente sviluppati da Mason (1953) per le reti lineari.

Un grafo di flusso del segnale è una rete di collegamenti diretti che sono interconnessi in determinati punti chiamati nodi. Si veda la figura seguente.

Il flusso dei segnali nelle varie parti del grafo è dettato da tre regole fondamentali:

  • Regola 1. Un segnale scorre lungo un collegamento solo nella direzione definita dalla freccia sul collegamento (vedere le parti (a) e (b) della figura precedente).

  • Regola 2. Il segnale di un nodo è uguale alla somma algebrica di tutti i segnali che entrano nel nodo in questione attraverso i collegamenti in entrata (si veda la parte (c) della figura precedente).

  • Regola 3. Il segnale di un nodo viene trasmesso a ciascun collegamento in uscita che ha origine da quel nodo (si veda la parte (d) della figura precedente).

Si possono distinguere due diversi tipi di collegamenti:

  • Collegamenti sinaptici, il cui comportamento è regolato da una relazione lineare ingresso-uscita. In particolare, il segnale del nodo xix_i viene moltiplicato per il peso sinaptico wkiw_{ki} per produrre il segnale del nodo yky_k (vedi parte (a) della figura precedente).

  • Collegamenti di attivazione, il cui comportamento è governato da una relazione tipicamente non lineare ingresso-uscita, corrispondente ad funzione di attivazione φ()\varphi(\cdot) (vedi parte (b) della figura precedente).

Ad esempio, utilizzando queste regole, possiamo costruire il grafo del flusso del segnale del modello di un neurone che abbiamo descritto in precedenza. Questo è chiaramente più semplice in apparenza, ma contiene tutti i dettagli funzionali del modello originale.

In effetti, sulla base del grafo del flusso del segnale come modello di un neurone, possiamo ora offrire la seguente definizione matematica di rete neurale.

Una rete neurale è un grafo diretto costituito da nodi con collegamenti sinaptici e di attivazione ed è caratterizzata da quattro proprietà:

  1. Ogni neurone è rappresentato da un insieme di collegamenti sinaptici lineari, un bias applicato dall'esterno e un collegamento di attivazione possibilmente non lineare. Il bias è rappresentato da un collegamento sinaptico connesso a un ingresso fissato a 1.

  2. I collegamenti sinaptici di un neurone pesano i rispettivi segnali di ingresso.

  3. La somma ponderata dei segnali di ingresso definisce il potenziale di attivazione del neurone in questione.

  4. I collegamenti di attivazione modulano il potenziale di attivazione del neurone per produrre un'uscita.

Un grafo diretto, così definito, è completo nel senso che descrive non solo il flusso di segnali da neurone a neurone (flusso inter-neuronale), ma anche il flusso di segnali all'interno di ciascun neurone (flusso intra-neuronale). Quando, tuttavia, l'attenzione si limita al flusso di segnali da neurone a neurone, possiamo utilizzare una forma astratta di questo grafo, omettendo i dettagli del flusso di segnali all'interno dei singoli neuroni. Un tale grafo diretto è chiamato grafo dell'architettura della rete neurale.

Retroazione (feedback)

Si parla di retroazione (feedback) in un sistema dinamico quando l'uscita di un elemento del sistema influenza in parte l'ingresso di quello stesso elemento, dando così origine a uno o più percorsi chiusi (loop) per la trasmissione di segnali all'interno del sistema.

In effetti, la retroazione si verifica in quasi tutte le parti del sistema nervoso di ogni animale. Inoltre, svolge un ruolo importante nello studio di una classe speciale di reti neurali artificiali, note come reti ricorrenti.

La figura seguente mostra il grafo del flusso del segnale di un sistema di retroazione a loop singolo, in cui sono presenti un segnale di ingresso xjx_j, un segnale interno xjx'_j e un segnale di uscita yky_k. Il sistema è composto da un percorso di andata e uno di ritorno, caratterizzati rispettivamente dalle funzioni di attivazione AA e BB.

Possiamo descrivere matematicamente questo sistema ricorrente come segue:

yk=A(xj)xj=xj+B(yk)\begin{array}{lcl} y_k & = & A(x'_j) \\ x'_j & = & x_j + B(y_k) \end{array}

Eliminando il segnale interno otteniamo un'equazione ricorsiva in cui segnale di uscita yky_k in un dato istante tt influenza il medesimo segnale all'istante successivo t+1t+1:

yk(t+1)=A(xj+B(yk(t)))y_k(t+1) = A(x_j + B(y_k(t)))

Architetture di reti

Il modo in cui i neuroni di una rete neurale sono strutturati è intimamente legato all'algoritmo di apprendimento utilizzato per addestrare la rete. Possiamo quindi dire che gli algoritmi di apprendimento utilizzati nella progettazione di reti neurali sono strutturati. La classificazione degli algoritmi di apprendimento verrà presa in considerazione più avanti; qui ci concentriamo sulle architetture (strutture) delle reti. In generale, possiamo identificare tre classi fondamentalmente diverse di architetture di rete.

Reti in avanti a singolo strato

In una rete neurale a strati, i neuroni sono organizzati in forma di strati (layer). Nella forma più semplice di rete a strati, abbiamo uno strato di ingresso di nodi sorgente che proietta direttamente su uno strato di uscita di neuroni, ma non viceversa. In altre parole, in questa rete la computazione è strettamente in avanti, dagli ingressi all'uscita (feedforward). Una rete di questo tipo è chiamata rete a singolo strato, con la designazione "a singolo strato" riferita allo strato di uscita di neuroni di calcolo. Non contiamo lo strato di ingresso dei nodi sorgente perché in essi non viene eseguita alcuna computazione.

Reti in avanti multistrato

La seconda classe di reti neurali in avanti si distingue per la presenza di uno o più strati nascosti, i cui nodi di calcolo sono chiamati neuroni nascosti; il termine "nascosto" si riferisce al fatto che questa parte della rete neurale non è vista direttamente né dall'ingresso né dall'uscita della rete.

La funzione dei neuroni nascosti è quella di intervenire tra l'input esterno e l'output della rete in qualche modo utile. Aggiungendo uno o più strati nascosti, la rete è in grado di estrarre statistiche di ordine superiore dai suoi ingressi. In un certo senso, la rete acquisisce una prospettiva globale nonostante la sua connettività locale.

I nodi sorgente dello strato di ingresso della rete (vettore di ingresso) riforniscono i neuroni del primo strato nascosto. I segnali di uscita di questo strato vengono utilizzati come input per il secondo strato e così via. In genere, i neuroni di ogni strato della rete hanno come ingresso solo i segnali di uscita dello strato precedente (la computazione avviene in avanti, ovvero feedforward). L'insieme dei segnali di uscita dei neuroni dello strato di uscita (finale) della rete costituisce la risposta complessiva (vettore di uscita) della rete rispetto al vettore di ingresso.

In generale, dunque, una rete calcola una funzione sui numeri reali che trasforma un vettore di ingresso in un vettore di uscita (possibilmente di dimensioni diverse), passando per zero o più strati nascosti di computazione. Come vedremo tra un attimo, la computazione può essere anche retroattiva, ovvero tornare indietro.

Reti ricorrenti

Una rete neurale ricorrente si distingue da una rete neurale feedforward per la presenza di almeno un ciclo di retroazione (feedback loop). Ad esempio, una rete ricorrente può consistere in un singolo strato di neuroni, con ogni neurone che restituisce il suo segnale di uscita agli ingressi di tutti gli altri neuroni, come illustrato nel grafo di architettura sottostante.

Nella struttura rappresentata nella figura di sopra non ci sono cicli di auto-retroazione (self-feedback loop) nella rete. L'auto-retroazione si riferisce a una situazione in cui l'uscita di un neurone viene reimmessa nel suo ingresso. Inoltre, la rete ricorrente illustrata nella figura di sopra non ha neuroni nascosti.

Nella figura successiva viene illustrata un'altra classe di reti ricorrenti con neuroni nascosti. Le connessioni di retroazione mostrate provengono sia dai neuroni nascosti (i due più in basso) sia dai neuroni di uscita (i due più in alto). Inoltre, sono presenti cicli di auto-retroazione.

La presenza di cicli di retroazione in generale ha un profondo impatto sulla capacità di apprendimento della rete e sulle sue prestazioni. Inoltre, i loop di retroazione comportano l'uso di particolari rami composti da elementi di ritardo a tempo unitario (indicati con z1z^{-1}), la cui uscita è ritardata di un'unità di tempo rispetto all'ingresso.

Rappresentazione della conoscenza nella rete

La conoscenza si riferisce alle informazioni memorizzate da una persona o da una macchina per interpretare, prevedere e rispondere in modo appropriato al mondo esterno.

Uno dei compiti principali di una rete neurale è quello di apprendere un modello del mondo (ambiente circostante) in cui è inserita e di mantenere il modello sufficientemente coerente con il mondo reale, in modo da raggiungere gli obiettivi specificati dell'applicazione di interesse. La conoscenza del mondo consiste in due tipi di informazioni:

  1. Lo stato del mondo conosciuto, rappresentato da fatti relativi a ciò che è e ciò che è stato conosciuto; questa forma di conoscenza è definita conoscenza pregresse e invarianti.

  2. Le osservazioni (misure) del mondo, ottenute per mezzo di sensori progettati per sondare l'ambiente in cui la rete neurale dovrebbe operare. Le osservazioni sono la base per estrarre gli esempi utilizzati per addestrare la rete neurale.

Esistono quattro regole generali per la rappresentazione della conoscenza:

  1. Regola 1. Input simili (tratti da classi che si assomigliano) devono produrre rappresentazioni di conoscenza (pesi sinaptici) simili all'interno della rete.

  2. Regola 2. Input diversi (tratti da classi disparate) devono produrre rappresentazioni ampiamente diverse nella rete.

  3. Regola 3. Se una particolare caratteristica è importante, allora ci dovrebbe essere un gran numero di neuroni coinvolti nella rappresentazione di quell'elemento nella rete.

  4. Regola 4. Le informazioni pregresse e gli invarianti dovrebbero essere incorporate nella progettazione di una rete neurale ogni volta che sono disponibili, in modo da semplificare la progettazione della rete evitando di doverle apprendere.

Come incorporare la conoscenza pregressa

La regola 4 della rappresentazione della conoscenza è particolarmente importante perché, rispettandola correttamente, si ottiene una rete neurale con una struttura specializzata. Questo è altamente auspicabile per diverse ragioni:

  1. Le reti biologiche visive e uditive sono note per essere molto specializzate.

  2. Una rete neurale con struttura specializzata ha di solito un numero inferiore di parametri liberi da regolare rispetto a una rete completamente connessa. Di conseguenza, la rete specializzata richiede un set di dati più piccolo per l'addestramento, apprende più velocemente e spesso generalizza meglio.

  3. La velocità di trasmissione delle informazioni attraverso una rete specializzata (throughput) è accelerata.

  4. Il costo di costruzione di una rete specializzata si riduce grazie alle sue dimensioni ridotte rispetto alla sua controparte completamente connessa.

Si noti, tuttavia, che l'incorporazione di conoscenze pregresse nella progettazione di una rete neurale limita l'applicazione della rete al problema specifico affrontato dalla conoscenza di interesse.

Una questione importante da affrontare, ovviamente, è come sviluppare una struttura specializzata incorporando informazioni pregresse nella sua progettazione. Possiamo utilizzare una combinazione di due tecniche:

  1. la restrizione dell'architettura della rete, ottenuta attraverso l'uso di connessioni locali note come campi recettivi;

  2. la limitazione della scelta dei pesi sinaptici, che si realizza attraverso l'uso della condivisione dei pesi.

Ad esempio, si consideri la rete feedforward parzialmente connessa rappresentata nella figura successiva.

Questa rete ha un'architettura ristretta per definizione. I primi sei nodi sorgente costituiscono il campo recettivo del primo neurone nascosto, i secondi sei sono il campo ricettivo del secondo neurone nascosto e così via. Il campo recettivo di un neurone è definito come quella regione del campo di ingresso su cui gli stimoli in arrivo possono influenzare il segnale di uscita prodotto dal neurone.

Inoltre, per soddisfare il vincolo di condivisione dei pesi, è sufficiente utilizzare lo stesso insieme di pesi sinaptici per ciascuno dei neuroni dello strato nascosto della rete.

Come incorporare gli invarianti

Consideriamo i seguenti fenomeni fisici:

  • Quando un oggetto di interesse ruota, l'immagine dell'oggetto percepita da un osservatore cambia in modo corrispondente, ma l'oggetto è il medesimo.

  • Una persona può parlare con voce bassa o alta, in modo lento o veloce, ma le parole sono le stesse.

Un sistema di riconoscimento di oggetti o un sistema di riconoscimento vocale deve essere in grado di gestire una serie di trasformazioni del segnale osservato, ovvero produrre risultati che sono invarianti rispetto a queste trasformazioni (la rotazione dell'oggetto o il cambio di voce umana).

Esistono almeno tre tecniche per rendere le reti neurali di tipo classificatore invarianti alle trasformazioni:

  1. Invarianza per struttura. L'invarianza può essere imposta a una rete strutturandone opportunamente la topologia. In particolare, le connessioni e i pesi sinaptici tra i neuroni della rete vengono create in modo che le versioni trasformate dello stesso input siano costrette a produrre lo stesso output.

  2. Invarianza per addestramento. La rete viene addestrata presentandole un certo numero di esempi diversi dello stesso oggetto, scelti in modo da corrispondere a diverse trasformazioni dell'oggetto. Se il numero di esempi è sufficientemente grande e se la rete viene addestrata per imparare a discriminare tra le diverse viste dell'oggetto, possiamo aspettarci che la rete generalizzi correttamente a trasformazioni diverse da quelle che le vengono presentate.

  3. Spazio delle caratteristiche invarianti. La terza tecnica si basa sulla premessa che sia possibile estrarre caratteristiche che definiscono il contenuto informativo essenziale di un insieme di dati in ingresso e che siano invarianti rispetto alle trasformazioni dell'ingresso. Se si utilizzano tali caratteristiche, la rete come classificatore viene sollevata dall'onere di dover delineare la gamma di trasformazioni di un oggetto.

Processi di apprendimento

Così come esistono diversi modi in cui noi stessi impariamo dall'ambiente che ci circonda, lo stesso vale per le reti neurali. In senso lato, possiamo classificare i processi di apprendimento attraverso i quali funzionano le reti neurali come segue: apprendimento con un insegnante (o supervisionato) e apprendimento senza insegnante (o non supervisionato). Una via di mezzo è l'apprendimento per rinforzo. Queste diverse forme di apprendimento eseguite dalle reti neurali hanno una naturale controparte nell'apprendimento umano.

L'apprendimento supervisionato, il metodo più utilizzato, prevede l'addestramento di un modello su dati etichettati, in cui ogni esempio in ingresso è accompagnato dalla corrispondente risposta. Questa guida permette al modello di apprendere una mappatura tra gli input e gli output desiderati, consentendogli di generalizzare a nuovi dati non visti. I compiti di classificazione e regressione esemplificano la versatilità dell'apprendimento supervisionato, applicato con successo al filtraggio dello spam e al riconoscimento delle immagini.

Al contrario, l'apprendimento non supervisionato opera su dati non etichettati, privi di categorie o etichette predefinite. Il compito del modello è quello di scoprire schemi e strutture nascoste all'interno dei dati stessi senza sapere a priori quali sono. Questa capacità trova applicazione nel clustering, dove gli elementi in uno spazio vengono raggruppati in base alla loro somiglianza, e nel rilevamento delle anomalie, dove i valori anomali vengono identificati come deviazioni dalla norma.

L'apprendimento per rinforzo si distingue dalle sue controparti supervisionate e non supervisionate perché immerge l'agente in un ambiente interattivo. L'agente impara interagendo con l'ambiente, compiendo azioni e ricevendo ricompense o penalità in base ai risultati. Questo approccio per tentativi ed errori (trial-and-error) consente all'agente di sviluppare una politica (policy, una sorta di strategia), un insieme di regole che guidano le sue azioni alla ricerca della massimizzazione della ricompensa cumulativa. I giochi, la robotica e la finanza sono domini in cui l'apprendimento per rinforzo ha dimostrato notevole successo.

Nei primi tempi delle reti neurali, si tendeva a pensare che si dovesse far fare alla rete neurale il meno possibile. Ad esempio, per convertire il parlato in testo si pensava che si dovesse prima analizzare l'audio del parlato, scomporlo in fonemi e così via. Ma si è scoperto che, almeno per compiti simili a quelli umani, di solito è meglio cercare di addestrare la rete neurale al problema finale, lasciando che scopra da sola le caratteristiche intermedie, le codifiche e così via.

C'era anche l'idea di introdurre singole componenti complicate nella rete neurale, per consentirle di implementare esplicitamente particolari idee algoritmiche. Ma, ancora una volta, ciò si è rivelato nella maggior parte dei casi inutile; invece, è meglio avere a che fare con componenti molto semplici e lasciare che si organizzino da sole (anche se di solito in modi che non riusciamo a capire) per ottenere presumibilmente l'equivalente di quelle idee algoritmiche.

Apprendimento supervisionato

L'apprendimento con un insegnante è anche definito apprendimento supervisionato. La figura successiva mostra un diagramma a blocchi che illustra questa forma di apprendimento.

In termini concettuali, possiamo pensare che l'insegnante abbia una conoscenza dell'ambiente e che tale conoscenza sia rappresentata da una serie di esempi di input-output. L'ambiente, tuttavia, è sconosciuto alla rete neurale (nella figura, l'ambiente è esterno al ciclo di retroazione colorato in azzurro). Supponiamo ora che l'insegnante e la rete neurale siano entrambi esposti a un vettore di addestramento (cioè un esempio) tratto dallo stesso ambiente. In virtù della conoscenza pregressa, l'insegnante è in grado di fornire alla rete neurale una risposta desiderata per quel vettore di addestramento. La risposta desiderata rappresenta l'azione ottimale che la rete neurale deve eseguire.

I parametri della rete vengono quindi regolati sotto l'influenza combinata del vettore di addestramento e del segnale di errore. Il segnale di errore è definito come la differenza tra la risposta desiderata e la risposta effettiva data dalla rete. Questa regolazione viene effettuata in modo iterativo, passo dopo passo, con l'obiettivo di far sì che la rete neurale emuli l'insegnante.

In questo modo, la conoscenza dell'ambiente a disposizione dell'insegnante viene trasferita alla rete neurale attraverso l'addestramento e immagazzinata sotto forma di pesi sinaptici fissi, che rappresentano la memoria a lungo termine. Quando si raggiunge questa condizione, si può fare a meno dell'insegnante e lasciare che la rete neurale si occupi dell'ambiente da sola.

Ad esempio, immaginiamo che la rete neurale debba distinguere le immagini di un gatto da quello di un bambino. Potremmo fornire alla rete un certo numero di immagini associate all'etichetta "Gatto" o "Bambino". In fase di addestramento, per ogni immagine fornita, la rete vede solo l'immagine, senza conoscere l'etichetta (ovvero la semantica). Se la rete risponde correttamente, nulla viene fatto. Altrimenti i pesi della rete vengono modificati opportunamente. Quando la rete risponde sufficientemente bene, l'addestramento è concluso.

Più precisamente, la tecnica usata per modificare i pesi è detta retropropagazione (backpropagation). Il processo è chiamato backpropagation perché consiste nel lavorare a ritroso dallo strato di uscita a quello di ingresso, regolando sistematicamente i pesi in base all'errore (la differenza tra l'uscita prevista e quella effettiva).

Ecco una descrizione passo per passo del funzionamento della retropropagazione (qui una animazione):

  1. Passaggio in avanti: In primo luogo, un input viene fatto passare attraverso la rete neurale strato per strato (dall'input all'output) per produrre una previsione. Questa operazione è nota come passaggio in avanti.

  2. Calcolo della perdita: Una volta che la rete produce un'uscita, la differenza tra questa uscita e il valore vero (target) viene calcolata utilizzando una funzione di perdita (loss function). Le funzioni di perdita più comuni sono l'errore quadratico medio nella regressione o la perdita di entropia incrociata per la classificazione.

  3. Passaggio all'indietro: Qui avviene la vera azione della retropropagazione. Partendo dallo strato di uscita, l'errore viene utilizzato per calcolare il gradiente della funzione di perdita rispetto a ciascun peso della rete. Il gradiente è un vettore che contiene le derivate parziali della funzione di perdita e quindi ci indica la direzione e la velocità di discesa nello spazio multidimensionale di tutti i pesi.

  4. Aggiornamento dei pesi: Il gradiente calcolato durante il passaggio all'indietro viene utilizzato per apportare piccole modifiche ai pesi. Di solito si tratta di una semplice operazione di addizione, in cui una parte del gradiente (scalata da un tasso di apprendimento) viene aggiunta ad ciascun peso.

  5. Iterazione: Questo processo (passaggio in avanti, calcolo della perdita, passaggio indietro, aggiornamento dei pesi) viene ripetuto per molte iterazioni (o epoche) sul set di dati di addestramento, finché la rete non ottiene prestazioni sufficienti.

Un'analogia per la retropropagazione potrebbe essere il tentativo di trovare il punto più basso in un terreno collinare mentre si è bendati. Si percepisce la pendenza del terreno sotto i piedi e si fanno dei passi nella direzione che sembra essere in discesa. Gradualmente si arriva a valle. Allo stesso modo, la retropropagazione si muove gradualmente verso l'errore più basso percependo la pendenza del paesaggio degli errori.

Funzione di perdita per la regressione

Nel caso di compiti di regressione, in cui l'obiettivo è prevedere valori continui, una delle funzioni di perdita più comunemente utilizzate è la funzione di perdita Mean Squared Error (MSE).

L'MSE viene calcolato con la seguente formula:

MSE=1ni=1n(y^iyi)2\text{MSE} = \frac{1}{n} \sum_{i=1}^n (\hat{y}_i - y_i)^2

Dove:

  • nn è il numero di elementi del dataset

  • y^i\hat{y}_i è il valore previsto per l'i-esimo dato

  • yiy_i è il valore effettivo dell'i-esimo dato

Uno dei vantaggi dell'MSE è che è differenziabile, il che consente di utilizzare algoritmi di ottimizzazione efficienti come la discesa del gradiente, in cui le derivate vengono calcolate per aggiornare i pesi del modello. Infatti, in una rete neurale, la risposta prevista del modello, e quindi anche la funzione MSE, ha come variabili i pesi sinaptici della rete. Quindi i pesi possono essere calibrati minimizzando la funzione MSE, ovvero riducendo al minimo l'errore.

Esistono due tipi principali di apprendimento supervisionato: classificazione e regressione.

  • La classificazione viene utilizzata quando l'output è una categoria o una classe, come "spam" o "non spam" nel filtraggio delle e-mail, o "sano" o "malato" nella diagnosi medica. Il modello impara a mappare i dati di input a una delle possibili categorie di output.

  • La regressione viene utilizzata quando l'output è un valore continuo, come il prezzo di una casa o il numero di giorni di permanenza di un paziente in ospedale. Il modello impara a mappare i dati di input su un valore continuo all'interno di un certo intervallo.

L'apprendimento supervisionato è uno strumento per risolvere un'ampia varietà di problemi, tra cui:

  • Riconoscimento di immagini. Classificare immagini di oggetti, come volti o automobili.

  • Elaborazione del linguaggio naturale. Classificare testi, ad esempio assegnare ad un testo un sentimento positivo, neutro o negativo.

  • Sistemi di raccomandazione. Raccomandare prodotti, film o musica agli utenti in base al loro comportamento passato e al comportamento di utenti simili.

Apprendimento per rinforzo

L'apprendimento per rinforzo è un tipo di apprendimento in cui un agente interagisce con un ambiente per massimizzare una ricompensa. L'agente non ha accesso alle regole complete dell'ambiente, quindi deve imparare per tentativi ed errori.

Il processo di apprendimento per rinforzo è tipicamente suddiviso in quattro fasi:

  1. Osservazione: l'agente osserva l'ambiente e raccoglie informazioni sul suo stato attuale.

  2. Decisione: l'agente utilizza le informazioni ricavate dall'osservazione per decidere un'azione da intraprendere.

  3. Azione: l'agente intraprende l'azione scelta e osserva il cambiamento dell'ambiente che ne risulta.

  4. Ricompensa: l'agente riceve una ricompensa o una penalità in base al risultato della sua azione.

L'obiettivo dell'agente è imparare una politica, ovvero una mappatura dagli stati di conoscenza alle azioni che massimizzi la ricompensa cumulativa attesa.

La figura successiva mostra un diagramma a blocchi che illustra questa forma di apprendimento. Si noti che a differenza dell'apprendimento supervisionato in questo caso l'ambiente è interno al feedback loop del sistema. In altri termini, la rete impara provando e sbagliando nell'ambiente. Inoltre, nel diagramma è presente la figura del critico, che a differenza dell'insegnante dell'apprendimento supervisionato, ha il compito di fornire rinforzi (ricompense o penalità) all'agente in base a come questi si agisce nell'ambiente. Il critico è una forma di insegnante che non fornisce all'agente la soluzione finale ma indica se l'agente è sulla giusta via per raggiungerla.

Per esempio, consideriamo l'IA Botto che cerca di imparare a programmare opere d'arte generativa in p5.js. Quando Botto crea uno sketch, questo innanzitutto viene valutato sintatticamente dal compilatore del linguaggio. Se non è corretto, Botto riceve una penalità. Se è corretto, lo sketch viene valutato (semanticamente) dai membri della DAO di Botto, che fungono da critici. Se un'opera piace a molti, Botto riceve una gratificazione, e usa con maggiore probabilità quell'opera per proseguire la propria ricerca artistica.

L'apprendimento per rinforzo è stato applicato per risolvere un'ampia varietà di problemi, tra cui:

  • Giochi: è stato utilizzato per sviluppare agenti in grado di giocare a livelli sovrumani. Ad esempio, AlphaGo sviluppato da DeepMind è stato addestrato con questa tecnica.

  • Robotica: è stato utilizzato per sviluppare robot in grado di camminare, afferrare oggetti e navigare in labirinti.

  • Finanza: può essere utilizzato per sviluppare algoritmi di trading in grado di prendere decisioni basate su dati di mercato in tempo reale.

  • Assistenti virtuali: può essere utilizzato per sviluppare assistenti virtuali in grado di imparare a comprendere e rispondere a domande in linguaggio naturale.

Apprendimento non supervisionato

L'apprendimento non supervisionato è un tipo di apprendimento automatico in cui il modello viene addestrato su dati non etichettati. Ciò significa che i dati non hanno etichette o categorie predefinite. L'obiettivo del modello è quello di trovare schemi e strutture nei dati senza alcuna guida da parte dell'uomo.

Riconsideriamo l'esempio di sopra del riconoscimento di immagini di gatti e bambini. In tal caso le immagini non hanno l'etichetta semantica. Il compito della rete è quello di classificare ogni immagine in gruppi. Verosimilmente, la rete creerà due gruppi, una per i gatti e una per i bambini. Infatti i gatti tendono ad avere caratteristiche diverse, come il fatto che camminano con quattro zampe, il fatto di avere la coda e il pelo. Si noti che la rete non sa che i gruppi corrispondono semanticamente a gatti e bambini; sa solo che le immagini hanno una distribuzione statistica di pixel differente e quindi le separa. Se nel dataset di addestramento ci sono molti bambini che gattonano, questi potrebbero essere scambiati per gatti, oppure la rete potrebbe creare un gruppo a parte per questi esempi.

Alcuni esempi in cui l'apprendimento non supervisionato viene tipicamente usato sono:

  1. Clustering: si tratta di raggruppare un insieme di elementi in uno spazio in base alla loro somiglianza (esiste una metrica che misura quanto distanti sono due elementi). Ad esempio, un algoritmo di clustering può essere utilizzato per raggruppare i clienti in diversi segmenti in base alle loro abitudini di acquisto.

  2. Rilevamento di anomalie: si tratta di identificare gli insiemi di dati che sono diversi dal resto dei dati. Ad esempio, un algoritmo di rilevamento delle anomalie potrebbe essere utilizzato per identificare le transazioni fraudolente in un set di dati finanziari.

  3. Riduzione della dimensionalità: consiste nel ridurre il numero di caratteristiche in un set di dati senza perdere troppe informazioni. Ad esempio, un tale algoritmo potrebbe essere utilizzato per comprimere un set di dati di immagini in modo che occupino meno spazio.

Esempio di apprendimento

Esaminiamo un problema di apprendimento apparentemente molto semplice. Cerchiamo di far apprendere la funzione unaria a una rete neurale:

Per questo compito, avremo bisogno di una rete che abbia un solo ingresso e una sola uscita, come:

Come possiamo trovare i pesi che riproducono la funzione? L'idea di base è quella di fornire molti esempi di input → output, ovvero coppie di valori x,f(x)x, f(x) da cui apprendere, e poi cercare di trovare i pesi che riproducano questi esempi. Ecco il risultato di questa operazione con un numero progressivo di esempi:

In ogni fase dell'addestramento i pesi della rete vengono progressivamente regolati e vediamo che alla fine otteniamo una rete che riproduce con successo la funzione desiderata. Per scoprire quanto siamo lontani, calcoliamo la funzione di perdita, che in questo caso è semplicemente la somma dei quadrati delle differenze tra i valori predetti dal modello e i valori effettivi calcolati dalla funzione. Vediamo che, man mano che il processo di addestramento procede, l'errore diminuisce progressivamente (seguendo una certa curva di apprendimento che è diversa per i diversi compiti) fino a raggiungere un punto in cui la rete riproduce con successo la funzione desiderata:

Last updated