Connessionismo e reti neurali Il periodo che va dall’inizio degli anni ottanta ad oggi ha visto una sempre crescente attenzione verso i sistemi di simulazione connessionisti e c’è stato un rifiorire della ricerca nel campo delle reti neurali artificiali, non solo nell’ambito della psicologia, ma anche in molti altri ambienti scientifici, dopo una diminuzione di interesse nei confronti di questi sistemi, che si determinò intorno alla fine degli anni sessanta. Tutto questo portò ad un’affermazione di quella che abbiamo denominato scienza cognitiva, e con essa i modelli della psicologia cognitivista ed il paradigma dell’elaborazione seriale delle informazioni. A partire dagli anni ottanta, invece, gli studi sulle reti neurali artificiali hanno mostrato come fosse possibile un nuovo approccio allo studio della psicologia, mentre le differenze fra i due paradigmi sono tali da risultare difficile accomunarli sotto un unico tetto. Dal punto di vista della psicologia, i vantaggi del connessionismo nei confronti della scienza cognitiva, così com’è stata descritta, sono parecchi e sono interpretabili da diverse angolazioni, qui ne accenneremo solo le linee generali. Le reti neurali artificiali sono sistemi computazionali che hanno alla base un’ispirazione biologica, essendo il loro funzionamento ispirato a quello delle reti di neuroni reali, e si è tentati di scorgere in esse un modello di simulazione del funzionamento cerebrale che rispetti la struttura funzionale dello stesso, benché in maniera molto approssimata, ed in questo senso si sviluppano una serie di ricerche che tendono a rafforzare la plausibilità biologica di queste reti, cercando di rendere il loro funzionamento sempre più approssimabile a quello del cervello. Allo stesso modo, certe critiche al connessionismo provengono da chi cerca di dimostrare come non si possa in alcun modo dare plausibilità biologica a sistemi che implementano solo in minima parte i reali processi neurobiologici1. D’altro canto, l’interesse psicologico verso le reti neurali artificiali può partire da un’altra prospettiva: abbiamo già visto, dalla definizione di sistema dinamico complesso, come tanto le reti neurali naturali quanto quelle artificiali siano entrambe implementazioni di sistemi complessi. A questo punto, risulta interessante vedere come un sistema di questo genere si comporta alle prese con un compito da risolvere; in questo modo si sposta l’accento da un’analogia di tipo “funzionale” ad una di tipo “formale”. Comunque sia, i modelli connessionisti appaiono superiori, per certi aspetti che a noi sembrano fondamentali, a quelli tradizionali e nel seguito del discorso le differenze si renderanno evidenti. 1.1 Una prospettiva storica L’idea che le funzioni cognitive, potessero essere studiate a partire dalle associazioni di processi elementari del cervello non è cosa recente: l’associazionismo, così viene chiamato, trova sostenitori già nel secolo scorso, ma solo di recente l’attenzione ai processi neurali sottesi alle nostre funzioni superiori si è via via intensificata, accompagnandosi ai primi tentativi di simulare tali processi. Già nel 1943, ad opera di McCulloch e Pitts, troviamo il 1 Gli stessi neuroscienziati, per rimarcare la differenza fra i neuroni reali e quelli artificiali, hanno consigliato di chiamare questi ultimi nodi o processori, ma non neuroni e preferiscono definire le reti neurali “sistemi di calcolo paralleli”. primo modello di neurone artificiale e la prima idea (per quanto notevolmente diversa da quella che presenteremo nelle prossime pagine) di rete neurale artificiale. Solo pochi anni più tardi, con The Organisation of Behavior [1949], Donald Hebb propose di studiare il comportamento a partire dalle associazioni fra neuroni, ipotizzando anche un meccanismo di apprendimento per le reti di neuroni che ebbe molta influenza sullo sviluppo delle reti connessioniste. Per la verità, le proposte di Hebb si riferivano ad un quadro teorico del tutto differente, che aveva alla base osservazioni del comportamento umano ed animale, nel tentativo di ricondurre tali comportamenti a modificazioni della base neurale, ma visto il legame che stringe i meccanismi del sistema nervoso ai sistemi connessionisti, l’eco delle ricerche di Hebb non avrebbero potuto non influenzare lo sviluppo del connessionismo. Del resto i già citati McCulloch e Pitts posero le basi per uno sviluppo “pratico”, oltre che teorico, delle reti neurali artificiali. I loro neuroni (vedi Fig.1.1) erano dei processori, caratterizzati da una soglia e da un’attivazione binaria, che svolgevano una semplice funzione logica: ricevevano dall’esterno un input binario e fornivano il valore della rispettiva funzione come output. Da soli, quindi, oltre il calcolo di una semplice funzione logica come AND o OR, ad esempio, non potevano compiere, ma la loro combinazione in parallelo ed in strati successivi permetteva di affrontare problemi di una certa complessità, AND INP (1) S=2 OUT INP (2) OR INP (1) S=1 OUT INP (2) Fig. 1.1 Due esempi di neuroni artificiali che computano funzioni differenti: nel caso AND la funzione computata è la congiunzione (AND) ed il neuro ne “scarica” solo quando gli input sono entrambi 1, essendo l’unico caso in cui la somma degli input eguaglia la soglia S. Nel caso OR, la funzione è la disgiunzione non esclusiva (OR) ed il neurone scarica quando la somma degli input è uguale o superiore a 1. nonostante che questo genere di reti avessero un deficit che solo in seguito verrà colmato: i valori numerici delle connessioni fra i singoli neuroni dovevano essere determinate dallo sperimentatore. Successivamente a questi primi tentativi, il 1962 vede la creazione del percettrone da parte di Frank Rosenblatt: un tipo di modello neurale che aveva la capacità di riconoscere figure e, benché la struttura di quest’ultimo, nel suo complesso, fosse diversa dalle reti di McCulloch e Pitts, il modello di neurone da essi proposto è rimasto la base di ogni altro modello neurale moderno, compreso quello di Rosenblatt. Un percettrone è costituito da un unico neurone che riceve input da una serie di recettori di luminosità (una retina artificiale) e la sua caratteristica specifica è la possibilità di variare la forza (i valori numerici) delle connessioni fra i recettori ed il neurone (Fig.1.2). Ciò permette al percettrone, dopo che gli siano state presentate una serie di differenti configurazioni, di distinguerne una dalle altre. La differenza fondamentale tra il percettrone di Rosenblatt e la rete di neuroni artificiali che abbiamo precedentemente considerato sta nel fatto che esso “apprende” a discriminare fra varie configurazioni in maniera autonoma, senza che lo sperimentatore intervenga sui valori da assegnare alle connessioni. L’importante, a questo punto, era riuscire a trovare una regola di apprendimento che faccia riconoscere correttamente le figure al percettrone sulla base delle risposte date dallo stesso, in maniera da correlare l’errore della risposta ad un’opportuna variazione dei valori delle connessioni. Questa è l’essenza di una buona parte degli algoritmi di apprendimento per le reti neurali ed in tutto questo la “regola di Hebb”, ed i suoi derivati, hanno avuto un ruolo determinante. Il seguito di queste scoperte fu un generale interesse nei confronti dei percettroni e dei sistemi neurali in generale, ma dopo la pubblicazione di Perceptrons ad opera di Minsky e Papert la situazione mutò radicalmente. Retina artificiale Unità di Input W1 Unità di Output W… S Wn Fig. 1.2 Rappresentazione schematica di un percettrone. Alla retine sono connesse un certo numero di unità di input. Queste sono poi connesse al neurone di output fornito di una soglia S ed il funzionamento di quest’ultima analogo a quello dei neuroni artificiali di McCulloch e Pitts. Le connessioni hanno dei valori, anche detti pesi, W1,…,Wn per i quali viene moltiplicato il valore di attivazione delle unità di input. I risultati verranno poi sommati dell’unità di output che li confronterà con il valore soglia S. Nel loro libro analizzavano le prestazioni dei percettroni e riuscirono a dimostrare che essi non erano in grado di risolvere alcune funzioni logiche che non erano linearmente separabili, come la disgiunzione esclusiva (Xor), e mostrarono un certo scetticismo riguardo al futuro di tali sistemi. L’autorevolezza delle loro opinioni, unita alla prova matematica dei limiti del percettrone, non tardarono ad influenzare il panorama scientifico del periodo, soprattutto negli Stati Uniti, allontanando parecchi ricercatori (e fondi per la ricerca) dai sistemi di calcolo paralleli, mentre solo pochi continuarono a studiarli e svilupparli. La caduta di interesse fu tale che l’arco di anni compreso fra gli anni settanta ed la prima metà degli anni ottanta viene oggi denominato “il periodo del silenzio”. Bisogna aspettare i primi anni ottanta per riscoprire in tutta la loro forza i metodi di calcolo connessionisti: i limiti riscontrati da Minski e Papert furono ampiamente superati da nuovi modelli e da nuove regole di apprendimento che hanno permesso di connettere in più strati le unità di elaborazione, i neuroni artificiali, e queste nuove reti neurali oggi esibiscono capacità che le rendono interessanti agli occhi di parecchie discipline, non ultima la psicologia, che non ha tardato a sferrare, attraverso esse, un nuovo colpo a quella che già si stava configurando come una vittoria del dualismo mente-corpo e l’”analogia del computer” ha dovuto confrontarsi con nuove istanze. Tra le altre, una nuova concezione del computer, non più fonte di ispirazione per i modelli della psicologia, ma, semplicemente, efficace mezzo di simulazione2. A tal proposito, non trovo migliori parole di quelle di Parisi, nell’introduzione a PDP. Microstruttura dei processi cognitivi di D. Rumelhart e J. McClelland [1986]:” il cognitivismo ha utilizzato il calcolatore per dare una veste moderna al tradizionale dualismo tra mente e natura, mentre il connessionismo è un nuovo strumento concettuale che per la prima volta pone seriamente il problema di sviluppare una scienza della mente che non sia separata dalle scienze della natura”. 1.2 Che cos’è una rete neurale artificiale Come è stato detto, i sistemi di elaborazione connessionisti traggono ispirazione dalla biologia, ed in particolare dalla complessa struttura dei sistemi nervosi biologici. Le funzioni che vengono riprodotte, però, sono una versione estremamente ridotta di ciò che esibiscono detti sistemi ed in effetti, più che i reali meccanismi di funzionamento, ciò che interessa maggiormente al connessionismo è la struttura “formale”, logica per così dire, del sistema nervoso. In questo senso, una rete neurale artificiale è costituita da una serie di neuroni, variamente connessi fra di loro in strati successivi. La versione più semplice è costituita da un solo strato di neuroni, mentre il secondo livello di “complessità” è simile ad un percettrone di Rosenblatt: due strati di neuroni altamente connessi fra loro ed i limiti computazionali di questo genere di reti sono già stati considerati nel paragrafo precedente. Gli strati di una rete neurale possono però aumentare, e possiamo trovare modelli a 3, 4 e più strati. Oggi questo genere di struttura è il più studiato e diffuso, non essendo affetto da quei limiti computazionali che interessano le reti a due strati. Le unità che sono in contatto con l’ambiente esterno, e ricevono stimoli da esso, sono dette unità di input, quelle che forniscono il risultato della computazione, anch’esse quindi in 2 Facciamo notare come Dario Floreano, in Manuale sulle reti neurali [1996], sottolinei il fatto che “di per sé le reti neurali non richiedono un hardware dedicato: è possibile ad esempio simulare una rete neurale con un sistema di bacinelle e canali a portata variabile collegati a un rubinetto”. contatto con l’ambiente esterno, sono dette unità di output, mentre quelle unità che si trovano negli strati intermedi fra questi due sono dette unità nascoste: esse, infatti, sono in relazione solo con altre unità L’attività delle unità è all’incirca quella svolta dai processori di McCulloch e Pitts: si attivano (scaricano) quando la quantità totale di segnale che ricevono è superiore ad una certa soglia, in caso contrario restano inattivi. Al momento dell’attivazione un’unità emette un segnale che viene trasmesso alle altre unità attraverso le connessioni ed in base al valore, o peso, associato alla connessione esso risulterà inibitorio o eccitatorio per il neurone che lo riceve. Proprio per l’importanza fondamentale delle connessioni nel processo di elaborazione ci si riferisce più spesso ad esse, definendole inibitorie o eccitatorie, essendo proprio loro il filtro del segnale emesso dalle singole unità. I punti di connessione fra le unità simulano i rispettivi punti di contatto fra neuroni biologici, le sinapsi, ed il loro ruolo consiste proprio nel “pesare” l’intensità dei segnali trasmessi dai neuroni. Praticamente, l’operazione eseguita da una sinapsi non è altro che il prodotto tra il valore del segnale ricevuto ed il valore della sinapsi stessa (cioè il valore associato alla connessione). Mentre il segnale emesso da un neurone artificiale ni , per l’x-iesimo neurone, è uguale a: (1) N ni = F ∑ wij xi − S i j ossia ad un funzione F della somma dei prodotti fra i segnali di ingresso nj (provenienti da altri nodi o dall’esterno) ed i rispettivi pesi wij meno il valore della soglia Si dell’unità in questione. Ambiente esterno Unità di output Unità nascoste Unità di input Fig.1.3 Rappresentazione schematica di una rete neurale artificiale. 1.3 Sistemi neurali biologici e artificiali Dal momento che è stata più volte sottolineata la matrice biologica delle reti neurali artificiali, cercheremo di mettere in evidenza cosa accomuna i due sistemi e quali sono gli elementi di differenza. 1.3.1 Il sistema nervoso La struttura del sistema nervoso è abbastanza conosciuta (almeno per quanto riguarda l’organizzazione anatomica e la costituzione citologica ed istologica) e consta di innumerevoli cellule caratterizzate da prolungamenti. Alcune di esse svolgono un ruolo di sostegno (cellule gliali), una sorta di impalcatura nella quale trovano spazio le cellule più importanti del nostro organismo, quelle che sono responsabili di tutte le nostre funzioni superiori: i neuroni. Il neurone, dunque, è l’unità fondamentale del sistema nervoso. Esso è costituito dalla cellula propriamente detta e dai suoi prolungamenti (Fig.1.4): Soma Dendriti Assone Fig.1.4 Raffigurazione schematica di un neurone nella quale sono rappresentate le tre componenti principali: dendriti, soma, ed assone. Le sue componenti principali, come possiamo osservare nella figura, sono i dendriti, il soma, che corrisponde al corpo cellulare del neurone, e l’assone. Nel sistema nervoso i neuroni sono disposti in rete, ovvero sono altamente connessi fra loro attraverso giunzioni, dette sinapsi, che mettono in contatto l’assone di una cellula con i dendriti di un’altra. Tale costituzione reticolare è la base delle capacità esibite dai sistemi nervosi biologici e tutto ciò è dovuto alle proprietà funzionali dei neuroni, che hanno la possibilità di scambiarsi segnali elettrochimici l’un l’altro, causando l’ulteriore attivazione di altri neuroni e trasferendo quindi il segnale in regioni dell’organismo (non solo cerebrali, naturalmente) talvolta molto lontane dal sito di origine del segnale stesso. Questa capacità del neurone è dovuta alla sua costituzione molecolare, che permette alla membrana cellulare di mantenere una differenza di potenziale fra l’interno e l’esterno della cellula (circa –70 mV), solo quando la ricezione di segnali da altri neuroni raggiunge una certa soglia la membrana si depolarizza rapidamente provocando l’emissione di una scarica (detta potenziale d’azione) lungo l’assone, trasferendo il segnale di attivazione alle altre cellule alle quali esso è collegato per mezzo dei dendriti. All’attivazione segue un periodo di iperpolarizzazione verso valori negativi che raggiunge i –90 mV, detto periodo refrattario, in quanto il neurone non è in grado di ricevere altri segnali. Dopo tale periodo il neurone torna al suo stato di riposo di –70 mV. In questo scambio di segnali le sinapsi assumono un ruolo fondamentale, essendo esse a determinare le caratteristiche del segnale in entrata e facendo in modo che esso si aggiunga o si sottragga all’insieme dei segnali che giungono ad un neurone da altre cellule, per questo motivo le sinapsi possono essere eccitatorie oppure inibitorie. Il modo in cui vengono trasferiti i segnali, ovvero cosa succede a livello delle sinapsi in presenza di un potenziale d’azione è materia di studio di questi anni: si sa che esse producono sostanze, i neurotrasmettitori, che trasferendosi dal neurone pre-sinaptico a quello post-sinaptico ne modificano il potenziale elettrico, determinando in un senso o nell’altro la sua attivazione, ma la ricerca è ancora intensa e, in ogni caso, ai fini della nostra discussione, lo specifico di tali meccanismi assume un valore piuttosto marginale. Quel che ci interessa è che le sinapsi sono il mezzo attraverso il quale i neuroni comunicano e ci interessa ancor di più sapere come esse si formano, dal momento che una importante caratteristica esibita dal sistema nervoso è la così detta plasticità sipnaptica , ovvero il fatto dimostrato che i contatti fra i neuroni non rimangono stabili nel corso del tempo, ma mutano frequentemente determinando la creazione, o la rimozione, di sinapsi3. Esattamente questa caratteristica strutturale del sistema nervoso è ritenuta l’origine delle complesse facoltà comportamentali esibite dalle forme viventi, capaci come sono di adattarsi all’ambiente e di sfruttarne le caratteristiche a proprio vantaggio. Il già citato Hebb propose un processo di apprendimento che interessava proprio le sinapsi e l’attivazione reciproca dei neuroni, formulando quella che oggi viene definita la “regola di Hebb”, che suona più o meno così: Se le unità A e B sono eccitate contemporaneamente, si determina un aumento della forza della connessione che vi è tra esse. L’importanza della regola di Hebb deriva dal fatto che fu un tentativo di mettere in relazione macro e micro strutture dei processi cognitivi: un approccio caro al connessionismo. Allo stato attuale della ricerca è difficile dubitare che siano proprio le particolari caratteristiche mostrate dai neuroni a determinare i processi mnemonici e di apprendimento, oltreché, naturalmente, tutto il resto, ma il modo esatto in cui vengono compiuti tali processi non è ancora chiaro ed è a questo punto che interviene la psicologia, con le sue ipotesi e le sue simulazioni. 3 Il numero di neuroni e di sinapsi in un cervello umano è impressionante. Si calcola il numero di circa 100 miliardi di neuroni per una densità, nella corteccia cerebrale, di circa 40.000/mm3 e una densità sinaptica di circa 800 milioni per millimetro cubo con una media di 20.000 sinapsi per neurone. 1.3.2 Sistemi neurali artificiali Le reti neurali artificiali rappresentano un’estrema semplificazione del loro corrispettivo biologico, ma nonostante questo, alcune caratteristiche, almeno per quanto concerne la forma logica, sono rispettate. Intanto, la forza computazionale dei sistemi neurali artificiali sta nel collegamento in rete delle semplici unità di elaborazione e poi, tornando a considerare la formula (1), che ci dava il segnale emesso da un neurone artificiale, si può notare come anche il concetto della somma del segnale in entrata, grossomodo, sia rispettato. Il neurone artificiale, infatti, scarica quando la somma degli input supera una certa soglia, ricordandoci, però, che il segnale emesso da un’unità non è identico al suo input netto Ai, che è uguale a: N Ai = ∑ wij x j , j infatti, la risposta del neurone yi viene calcolata sottraendo alla somma degli input in entrata la soglia Si del neurone e passando tale risultato per una funzione F, detta di attivazione4. Fatto questo, in pratica, si ottiene la (1), cioè: N yi = F ∑ wij xi − S i . j Nella maggior parte dei casi i pesi wij, che corrisponderebbero alle sinapsi, possono essere tanto positivi quanto negativi ed, in ogni caso, modificabili daurante il processo di apprendimento e questo elemento rende una rete neurale artificiale, anche dal punto di vista della plasticità sinaptica, analoga ad un sistema biologico. 4 Per quanto riguarda le funzioni di attivazione, bisogna dire che ne esistono di diversi tipi, le più comuni sono la funzione introdotta da McCulloch e Pitts, detta a gradino, per via del suo andamento. In questo tipo di funzione l’attivazione di un neurone è del tipo “tutto o niente”, infatti: 1 F (x) = 0 per x > S altrimenti dove S è la soglia del neurone. Funzioni che permettono più “elasticità” nella risposta sono le tipiche funzioni continue lineari del tipo: F(x) = kx, dove k è una costante. Esistono anche funzioni continue, ma non lineari, che vengono prevalentemente utilizzate in reti composte da più di due strati. La più comune è la funzione “schiacciante”4, detta sigmoide o logistica a causa del suo andamento che descrive una S,: F ( x) = 1 1 + e − kx Schematizzando quanto è stato detto, un neurone artificiale risulta costituito di due unità di calcolo: una che somma tutti i segnali in entrata e l’altra che passa questo risultato per la funzione di attivazione determinando il valore della stessa (Fig.1.5): X(1) W(1) W(…) SOMMA X(…) X(n) FUNZIONE Segnale W(n) Fig 1.5 Una rappresentazione schematica di un neurone artificiale dove X(1),…,X(n) sono i segnali in input e W(1),…,W(n) sono i pesi sinaptici. 1.4 Apprendimento e memoria Le peculiarità delle reti neurali che le rendono così interessanti agli occhi di scienziati di ogni campo, compresi gli psicologi, sono parecchie e sono tutte dovute tanto alla loro struttura quanto alla particolare caratteristica che hanno di imparare da sole, a differenza dei sistemi seriali che necessitano di istruzioni precise per ogni passaggio del calcolo, e questo le rende, in un certo senso, più adatte dei sistemi seriali a simulare eventi che si presentano naturalmente in ogni sistema nervoso biologico, a partire dall’apprendimento. Quando un bambino impara ad andare in bicicletta, ad esempio, non gli sarebbe di nessun aiuto sapere esattamente la relazione fra l’inclinazione della bicicletta rispetto al suolo e l’ampiezza di curvatura del manubrio. Sarà il suo stesso organismo a trovare i giusti equilibri, apprendendo spontaneamente i movimenti adatti ed il nostro compito sarà solo quello di assisterlo durante le sue prime esperienze, sicuri che i nostri consigli, per quanto minuziosi, non gli saranno di grande aiuto. A partire da ciò, la differenza fra un sistema seriale ed uno connessionista diventa importante. Supponiamo di dover costruire un robot che impari ad andare in bicicletta: in intelligenza artificiale probabilmente, e semplificando parecchio, data una velocità costante, verrebbe approntato un algoritmo che metterebbe in relazione l’inclinazione del robot rispetto al suolo con opportune sterzate del manubrio, in modo da garantire un assetto stabile al ciclista. In tutto questo, i movimenti del robot saranno regolati da semplici funzioni logiche di tipo condizionale “se…allora…” (per un’inclinazione x sterza il manubrio di y). Se dovessimo togliere un braccio al robot, supponendo che ne abbia due, molto probabilmente saremo costretti a modificare l’algoritmo considerando la nuova situazione. E se togliessimo una riga del programma cosa succederebbe? Semplicemente, il robot non andrà mai più in bicicletta! Passiamo ora ad una prospettiva connessionista: costruiamo il nostro robot con un adeguato apparato sensoriale, che potrebbe anche essere simile a quello precedente (inclinazione), ma ora, invece di approntare un algoritmo, progettiamo una rete neurale che abbia come input la percezione dell’inclinazione e come output le modifiche del manubrio, entrambi connessi ad un certo numero di unità nascoste. Mettendo il nostro robot sulla strada, lasciato da solo inevitabilmente cadrà a terra, ma se lo seguiremo per un po’, reggendolo ogni volta che stia per cadere, imparerà a stare in equilibrio, ricostruendo da solo i rapporti esistenti fra inclinazione e sterzata, ma c’è di più: se lo priveremo di un braccio, non sarà necessario ricostruire una nuova rete neurale, ma sarà sufficiente aiutarlo ancora un po’, in modo che impari a sopperire alla menomazione e soprattutto, non c’è nessuna semplice riga di programma che sia capace di immobilizzarlo. Anche se dovessimo procurargli una lesione al “sistema nervoso”, ovvero danneggiassimo in qualche modo la sua rete neurale, dopo una sorta di terapia riabilitativa, consistente in un nuovo training di apprendimento, tornerebbe quasi come nuovo. Naturalmente questo è un modo ipersemplificato di presentare il discorso intorno all’apprendimento, ma tutte le proprietà che sono state messe in luce sono realmente esibite dalle reti neurali artificiali (che mostrano anche qualcosa di più) e ciò le rende molto efficaci, non solo come strumento computazionale, ma anche come mezzo simulativo per la psicologia. Infatti, non si da il caso che una riga difettosa di un programma impedisca ad un organismo di camminare, ad esempio, si sa invece che una lesione localizzata del sistema nervoso possa farlo, e si sa anche che nonostante una tale lesione, a patto che non sia troppo estesa, gli arti interessati recupereranno una certa funzionalità. Ma come apprende una rete neurale artificiale? Abbiamo già accennato al fatto che le connessioni sinaptiche fra le varie unità sono modificabili ed in sostanza l’apprendimento di una rete neurale consiste nel trovare quei pesi (valori associati alle connessioni) che permettono la risoluzione di un problema. Prendendo a modello un tipico associatore di configurazioni5 (pattern), quindi, bisogna trovare un modo per modificare i pesi della rete in maniera tale che presentando un pattern di input (che può essere di vario genere, ma noi consideriamolo formato da una stringa di 1 e 0) la configurazione delle unità in output sia quella che ci attendiamo, di modo che, ad una successiva presentazione dello stesso pattern, la rete fornisca sempre la medesima risposta. Il percettrone di Rosenblatt riusciva a riconoscere una configurazione fra tante altre e questo accadeva proprio perché i pesi delle connessioni fra le unità di input e quella di output determinavano l’attivazione di quest’ultima in un solo caso, quello che aveva imparato a riconoscere, lasciandola inattiva per il resto dei casi. Per far ciò è necessaria una regola che agisca su tali connessioni e le modifichi adeguatamente. 1.4.1 Algoritmi di apprendimento Uno dei primi ad aver ispirato i connessionisti in direzione di una procedura di apprendimento da applicare alle reti neurali artificiali fu Hebb con la sua regola che abbiamo già presentato. Hebb, abbiamo visto, la formulò in riferimento ai meccanismi di apprendimento del sistema nervoso, ma non tardò ad essere esportata nel campo del connessionismo, prestandosi perfettamente ad un adattamento. Il concetto della “regola di Hebb” è che quando due unità sono attive contemporaneamente, la loro connessione si rafforza. Questo si traduce nel fatto che quando due unità sono attive nello stesso tempo aumenta il peso della loro connessione, quindi, aumentando in tal modo la capacità eccitatoria dell’unità presinaptica nei confronti di quella postsinaptica, 5 Sistema che ad ogni configurazione in input ne associa una in output riconoscendo, quindi, e discriminando le diverse configurazioni. aumenterà parimenti la probabilità che ad ogni attivazione della prima si attivi anche la seconda. Formalmente, la variazione del peso sinaptico wij fra le unità xj ed yi è data da ∆wij = ηyi x j dove ηcorrisponde ad tasso arbitrario di apprendimento. Naturalmente questo avviene solo dopo un numero sufficiente di presentazioni successive tanto della configurazione in input quanto di quella in output, che sarebbe la risposta desiderata. In realtà, fermandoci a questo punto, la regola di Hebb risulta piuttosto limitata sia dal lato della potenza computazionale che da quello della plausibilità biologica, infatti, variando la forza delle connessioni in un solo senso (l’incremento), da un lato permette esclusivamente l’apprendimento di pattern ortogonali (in cui la somma dei prodotti dei singoli componenti è zero) e dall’altro non tiene conto di quelle che abbiamo chiamato connessioni inibitorie, che invece sono presenti nel sistema nervoso. Per ovviare a tali inconvenienti sono state formulate diverse varianti della regola di Hebb, che tengono conto dell’inibizione. La regola di apprendimento del percettrone di Rosenblatt, invece, è leggermente diversa, ma il concetto rimane lo stesso: sia nella regola di Hebb che in quest’ultima la modificazione sinaptica è funzione di un evento presinaptico e di una postsinaptico. C’è solo da notare, ma non ne daremo dimostrazione, che Rosenblatt presentò il cosiddetto teorema di convergenza del percettrone, con il quale si dimostrava che se esisteva un vettore di pesi sinaptici capace di soddisfare la trasformazione dall’input all’output, il percettrone lo avrebbe trovato in un numero finito di cicli di apprendimento. Uno sviluppo ulteriore dei metodi di apprendimento si ha con la regola delta, un algoritmo che grazie all’utilizzo di unità con funzione di attivazione continua, a differenza di quelle del percettrone che hanno una funzione a gradino (vedi nota n.3), permette la descrizione delle prestazioni di una rete neurale attraverso una funzione continua che misura l’errore globale della rete, che sarebbe la differenza fra l’output reale fornito dalla rete per un determinato pattern di input e l’output desiderato dall’istruttore. In altre parole, mentre nel percettrone e nella regola di Hebb, ai fini dell’apprendimento, si considerano i “rapporti” diretti fra le singole unità, nella regola delta si descrive direttamente il cambiamento dell’errore globale in funzione del cambiamento dei pesi sinaptici ed il nome di questo algoritmo deriva proprio dal fatto che in esso la modifica dei pesi si basa sulla differenza δ tra la risposta desiderata e quella ottenuta dalla rete. Formalmente abbiamo δ = ( d i − oi ) ∆wij = ηδ i x j dove d i è l’uscita desiderata dell’i-esima unità di output e oi l’uscita corrente. ηè sempre il tasso di apprendimento ed xj l’attività presinaptica dell’i-esima unità di output. Nella regola delta, quindi, la funzione di calcolo dell’errore descrive una superficie (dell’errore, naturalmente) in uno spazio n-dimensionale (dove n sta per il numero di pesi sinaptici della rete) caratterizzata da “massimi” e “minimi” in cui l’algoritmo cerca quella configurazione di pesi che determini il minimo errore: questo è possibile perché la regola delta produce sempre una “discesa” sulla superficie dell’errore fino a trovare il punto in cui l’errore è minimo. Inoltre, il rinato interesse per il connessionismo si è determinato soprattutto quando si è riusciti a trovare un metodo di apprendimento per le reti neurali multistrato, come abbiamo visto in precedenza, ed il più usato e popolare di questi metodi è denominato back-propagation (retropropagazione – dell’errore) oppure regola delta generalizzata. Questo importante algoritmo, in pratica, sfrutta le stesse proprietà della regola delta, ma fa propagare l’errore dall’ultimo strato di unità fino al primo, passando per tutti quelli intermedi. In questo modo l’errore globale della rete viene in un certo senso suddiviso fra i vari strati di connessioni e queste poi vengono modificate con lo stesso criterio adottato dalla regola delta, ma strato per strato a partire dalle ultime fino alle prime. Purtroppo in questa procedura c’è un inconveniente: la superficie dell’errore la possiamo immaginare molto varia, caratterizzata da picchi (i massimi) e da vallate (i minimi), ed il nostro scopo è quello di trovare la vallata più profonda e percorrerla tutta fino in fondo, laddove l’errore è più prossimo allo zero, ma, siccome la configurazione iniziale dei pesi sinaptici è casuale, può capitare di trovare nei pressi del nostro punto di partenza una vallata abbastanza profonda da farci credere di avere raggiunto il minimo, ma non abbastanza da assicurarci un errore sufficientemente basso, abbiamo trovato, cioè, un minimo locale (Fig.1.6). In questa situazione i pesi non si modificano sostanzialmente più, ma in pratica la rete non ha appreso nulla. Nel corso del tempo, comunque, sono stati approntati notevoli miglioramenti all’originaria formulazione di questo algoritmo e, ad oggi, è ancora il più potente algoritmo di apprendimento per reti neurali multistrato a nostra disposizione. La back-propagation, nel campo della psicologia, a segnato un po’ la rinascita del connessionismo dopo i colpi inferti da Minsky e Papert e la sua descrizione è fornita da Rumelhart e McClelland nel già citato PDP. Microstruttra dei processi cognitivi, che è da considerarsi un po’ come la “bibbia” del connessionismo6, avendo con forza posto nuovamente l’attenzione sull’utilizzo delle reti neurali artificiali come metodo simulativo per la psicologia ed avendo presentato quello che sarà, da lì in poi, il più diffuso algoritmo di apprendimento per reti multistrato. 6 Non si fornisce alcuna notazione formale della back-propagation, così come si è evitato di dilungarsi nella descrizione degli algoritmi di apprendimento nel loro complesso, che sono numerosi e di vario genere. In questa sede ci limitiamo a dire che le due procedure descritte, insieme alla back-propagation e altri metodi, sono sistemi di apprendimento supervisionato, in quanto necessitano di un “istruttore” esterno che fornisca tanto i pattern di input quanto i rispettivi output. Esistono, però, altri metodi che permettono alle reti neurali un apprendimento per auto-organizzazione in cui non c’è una risposta desiderata fornita da un “istruttore” esterno, anche se, all’atto pratico, la differenza fra questi due generi di apprendimento non è ben determinata e, in ultima analisi, la preferenza dell’uno rispetto all’altro dipende più dal modo in cui viene affrontato il problema che non dal problema stesso. Per una trattazione esaustiva, completa di descrizione algoritmica delle varie procedure, rimando al manuale di Dario Floreano già nominato. Errore Minimo locale 0 W1 W2 Minimo ottimale Fig.1.6 Grafico semplificato di una funzione di errore in cui sono presenti solo due pesi sinaptici W1 e W2. Il minimo ottimale rappresenta un punto in cui l’apprendimento della rete è soddisfaciente. Supponendo che il nostro punto di partenza fosse su valori alti di W2, cadere nel minimo locale sarebbe molto probabile. 1.4.2 Memoria e proprietà emergenti Quando insegnamo ad un computer a distinguere una lettera qualsiai, supponiamo una “A”, da un’altra, una “M” ad esempio, il nostro calcolatore non farà altro che mettere la “A”, e tutto ciò che gli serve per riconoscerla, in una delle tante “schede” della sua memoria, ed altrettanto farà per la “M”. Le due lettere avranno quindi due posti differenti in questo ipotetico archivio che è la memoria del computer, avranno cioè due indirizzi di memoria differenti. Nel momento in cui si troverà di fronte ad una delle due lettere, non farà altro che prendere le due schede e confrontare il loro contenuto con i dati di cui è in possesso e l’esito di questo confronto deciderà la risposta del computer: se i dati sono uguali al contenuto della scheda corrispondente alla “A”, la sua risposta sarà una “A”, altrimenti li confronterà con quelli della “M”, e se coincideranno, la risposta sarà “M”. Ma se dovessimo mostrare al nostro computer una “F” cosa accadrebbe? Accadrebbe che non ci fornirebbe nessuna risposta, perché la “F” non l’aveva imparata. Affinché possa riconoscerela, infatti, lo dovremo istruire e nella sua memoria si creerà una nuova scheda per la “F” con un altro indirizzo, diverso dai primi due. Con questa procedura potrà imparare tutte le lettere dell’alfabeto e nella sua memoria ci saranno ventuno indirizzi di memoria differenti, uno per ogni lettera. Ogni volta che si troverà difronte ad una lettera, la confronterà con tutte quelle che ha in memoria fino a trovare quella corrispondente. Supponiamo ora di presentargli una “E” priva del trattino centrale: quale sarà la sua risposta? Molto probabilmente nessuna, ed il motivo è che per il computer una “E” senza trattino centrale non è “una “E” senza trattino centrale” (come sarebbe per un simbolo di tal genere), ma un simbolo diverso da tutti quelli che ha nella sua memoria e non saprà quindi riconoscerlo. Sappiamo già che i nostri computer svolgono un’elaborazione seriale dei processi ed infatti, dovendo riconoscere una lettera, confrontano una per una le schede che hanno in memoria con i dati che ricevono dall’esterno, senza nessuna elasticità in questo senso: esiste una relazione biunivoca fra i dati in entrata e le rispettive risposte, a meno che non si costruisca un programma che tenga conto di queste caratteristiche, ma anche in questo caso, il nostro computer riconoscerà la “E” senza trattino centrale come una “E” solo perché noi gli avremo insegnato che un simbolo di quel genere è comunque una “E”. Anche la “E” senza trattino avrà, quindi, il suo indirizzo di memoria, al pari delle altre lettere. Una conseguenza di tutto questo, naturalmente, è che se per qualsiasi ragione dovessimo privare il computer di una delle schede che ha in memoria, esso non potrebbe in alcun modo rispondere per la lettera corrispondente alla scheda danneggiata o perduta. Ciò detto, risulta difficile pensare che una persona impegnata in un compito simile a quello del computer, sapendo che deve riconoscere delle lettere, attuerebbe una così complessa procedura di riconoscimento ed in effetti esistono numerose ricerche in questo senso, che mettono in evidenza come il nostro modo di riconoscere i simboli, e di ricostruirli, come nel caso della “E” senza trattino, sia, da un lato più complesso, richiedendo ad esempio un’adeguata informazione di contesto, e da un altro richieda una procedura sicuramente più veloce, considerata la lentezza con la quale interagiscono i nostri neuroni (nell’ordine dei millisecondi) rispetto alla velocità di calcolo di un moderno computer (un qualunque Pentium II della Intel viaggia nell’ordine di circa mezzo miliardo di operazioni al secondo, un fattore di oltre 106 più veloce). A fronte di queste considerazioni i modelli di simulazione seriale incontrano qualche difficoltà che sono ben evidenziate nel libro di Rumelhart e McClelland 7. Passiamo ora ad una simulazione connessionista. Costruiamo la nostra rete neurale ed insegnamole, con i metodi che abbiamo già conosciuto (la back-propagation, ad esempio), a riconoscere le lettere dell’alfabeto. Le lettere non saranno più delle schede di memoria, ma delle particolari configurazioni dei pesi sinaptici. Alcune lettere attiveranno alcune unità ed altre magari no, ma quello che produce dopo avere imparato non è altro che un pattern di connettività, ovvero una matrice formata da quei pesi sinaptici che riescono a fornire le risposte giuste per ogni presentazione e naturalmente, se volessimo che la nostra rete impari a riconoscere un nuovo simbolo, la dovremmo istruire in questo senso, in modo che modifichi le sue connessioni in maniera adeguata, anche se, purtroppo, si presenterebbe una difficoltà, infatti dovremmo ripresentare nuovamente alla rete tutte le lettere aggiungendo quella nuova. Un difficoltà che la allontana da quanto ci mostrano i sistemi intelligenti naturali, che non richiedono di ricominciare sempre daccapo per imparare cose nuove. Non 7 Un esempio è il vincolo dei 100 passi per un programma seriale: il compito che un uomo svolge in un secondo o meno deve implicare un programma di 100 passi o meno. Un vincolo che hai ricercatori di intelligenza artificiale forse interessa poco, ma deve interessare gli psicologi. dimentichiamo comunque che si tratta di una simulazione, e da questo punto di vista sono più i pregi che i difetti. Sottoponendo la nostra rete neurale alle stesse prove cui abbiamo sottoposto il precedente programma seriale, noteremmo notevoli differenze di funzionamento: non basterebbe eliminare un’unità per non fare funzionare correttamente la rete ed in oltre, e questo è di estremo interesse, quando le presenteremo la “E” senza trattino, molto probabilmente riceveremo come risposta una “E”. Tutto ciò è possibile perché, per dirla con Rumelhart e McClelland nel citato volume, quello che “differenzia i nostri modelli da quelli ispirati dalla metafora del computer [è] il vincolo che tutte le conoscenze sono nelle connessioni. Noi siamo abituati a concepire le conoscenze, in base ai calcolatori convenzionali programmabili, come immagazzinate nello stato di certe unità del sistema. Noi postuliamo per i nostri modelli che nello stato di certe unità del sistema possano verificarsi solo degli immagazzinamenti a brevissimo termine; la memoria a lungo termine ha luogo nelle connessioni tra unità”. La cosa interessante delle reti neurali, ma naturalmente tutto dipende dal tipo struttura della rete, è che non codificano in maniera separata le informazioni che devono ricordare, ma ne disperdono le caratteristiche in microtratti, ognuno dei quali attiverà alcune specifiche unità. Solo il concorso di tutte le unità che codificano i microtratti relativi ad una specifica informazione porterà alla ricostruzione della stessa, mettendo la rete in grado di fornire la risposta esatta: in questo caso si dice che la rappresentazione è distribuita (Tav.1). Se torniamo per un attimo a quanto dicemmo nell’introduzione sulle rappresentazioni ci rendiamo conto di quanto sia differente il paradigma connessionista da quello proprio delle scienze cognitive: in un modello connessionista non c’è un simbolo che sta per un altro simbolo, ma la rappresentazione è dispersa in quelle che vengono chiamate componenti principali, il simbolo viene scomposto nei suoi tratti peculiari, comuni anche ad altri simboli. Ecco perché il danneggiamento parziale di una rete neurale non porta ad una inefficienza generale del sistema, a differenza di quanto accadrebbe in un sistema ad elaborazione seriale. Privare la rete di un certo numero di unità o di connessioni determina la perdita di alcuni microtratti che non pregiudicano in maniera determinante le prestazioni generali della rete stessa: potrà accadere, in relazione all’entità del danno, che verranno persi uno o più simboli che il sistema sapeva riconoscere, oppure che le risposte presentino un errore maggiore, ma solo un danno molto esteso pregiudica definitivamente il funzionamento del sistema. Proprio questa proprietà ha suggerito a molti ricercatori l’idea di utilizzare il danneggiamento di reti neurali artificiali per simulare patologie neurologiche derivanti da danni cerebrali, come hanno fatto Hinton e Shallice in un importante articolo apparso su Psychological Review [1991] dal significativo titolo Lesioning an Attrattor Network: Investigatios of Aquired Dyslexia in cui descrivono un esperimento nel quale veniva danneggiata una rete di associazione semantica (parole-input, significati-output). Le lesioni determinavano comportamenti della rete molto simili a quelli riscontrabili in individui che avevano acquisito la dislessia profonda in seguito a danni cerebrali. Anche la possibilità, molto probabile peraltro, che la nostra rete riconosca una “E” senza trattino centrale come una “E” a tutti gli effetti deriva dal fatto che le rappresentazioni sono distribuite, infatti, una “E” senza trattino produrrebbe un’attivazione delle unità molto simile a quella di una “E”, o comunque, più simili alla”E” o alla “F”, ad esempio, che non ad una “M” o una “A”. In ogni caso, produrrebbe comunque una risposta, che è già qualcosa in confronto al silenzio che un sistema seriale ci darebbe nelle stesse condizioni. Su questo filone sono stati compiuti numerosi esperimenti che vanno ben oltre il semplice riconoscimento di lettere. Basti pensare ai risultati raggiunti da Rumelhart e coll. nel “lontano” 1982, pubblicati su Psychological Review con l’articolo An Interactiv Activation Model of Context Effects in Letter Perception in cui mettono in evidenza come una rete neurali, al pari di una persona, ha più difficoltà a riconoscere una lettera incompleta quando questa si trova all’interno di una non-parola, piuttosto che quando contribuisca a formare una parola dotata di significato. Questa proprietà di ricostruzione delle rappresentazioni, oltre ad essere molto simile a prestazioni umane, la possiamo considerare come una proprietà emergente da una più generale, quale quella di generalizzare, ovvero, riuscire a collocare all’interno di un insieme di appartenenza generico delle rappresentazioni particolari, che non sono mai state presentate prima alla rete, solo sulla base degli esempi forniti durante il ciclo di apprendimento. Una capacità, tra l’altro, molto apprezzata anche al di là della ricerca psicologica: reti neurali artificiali sono state progettate, ad esempio, per esaminare i segnali sonar sui sommergibili, caratterizzati da notevole rumore di fondo, affinché distinguessero fra scogli, mine, balene e quant’altro può trovarsi in fondo al mare, oppure per la valutazione di rischi nella concessione di prestiti da parte di istituti di credito. Tav.1 La rappresentazione distribuita Supponendo di dover costruire un sistema che debba riconoscere i tre simboli in basso, un sistema di elaborazione seriale dovrebbe archiviarli in tre indirizzi di memoria differenti, al pari di quella che è una codifica locale per una rete neurale. Utilizzando l’impostazione grafica di Floreano nel suo manuale, vediamo che la fila di unità al di sopra dei simboli rappresenta una codifica locale: un’unità per ogni simbolo, ognuno dei quali provoca l’attivazione di un’unica unità (cerchietto nero). All’estremità inferiore troviamo invece una codifica distribuita. Notiamo come quest’ultima richieda un numero inferiore di unità per la codifica dello stesso numero di simboli. Questo accade perché la rete distingue autonomamente i simboli in base alle caratteristiche che presentano, i loro componenti principali quindi: nel primo caso la figura presenta degli spigoli ma non è chiusa, nel secondo caso è sia spigolosa che chiusa e nel terzo caso è chiusa ma non spigolosa. 1.5 Conclusione In questo capitolo si è cercato di mettere in risalto quali sono le caratteristiche principali dei sistemi connessionisti e come funzionano. Sia dai confronti con i sistemi ad elaborazione, seriale, sia tenendo a mente quanto è stato detto nell’introduzione, risulta evidente la diversità intrinseca dei due approcci. La mente disegnata dal connessionismo non è un elaboratore di simboli che cataloga e distingue, ma una cosa molto più prossima a quello che sembra essere il reale funzionamento del cervello: un sistema dinamico e capace di modificarsi massicciamente in funzione dei suoi rapporti con l’ambiente. Un sistema in cui l’adattamento non è un punto di partenza con il quale giustificare la costruzione di modelli che, in verità, hanno poco di naturale, ma la regola sulla quale si plasmano tutte le caratteristiche dei sistemi intelligenti di natura biologica. Questo aspetto, che forse sembra ancora un po’ oscuro, sarà debitamente chiarito nel prossimo capitolo, in cui vedremo come si possono sviluppare organismi artificiali che si riproducono e migliorano grazie ad una forma di selezione naturale. Riguardo alla critiche, naturalmente, il connessionismo non poteva certo esserne indenne, ed infatti sono giunte, e giungono, da più parti e delle specie più diverse8, anche se c’è ne una che merita una breve digressione: qualcuno ha sostenuto, a partire dallo schema dei livelli di analisi di Marr, che i modelli connessionisti si pongono al livello dell’implementazione, mentre il livello proprio delle descrizioni psicologiche è quello computazionale, quindi essi sarebbero irrilevanti per la ricerca psicologica. Naturalmente noi dissentiamo con una tale critica, ritenendo che le simulazioni con reti neurali artificiali, sempre rispettando l’impostazione dall’alto in basso di Marr, si pongano al livello algoritmico, in quanto cercano di dimostrare che le proprietà di un sistema che possono sembrare frutto di complesse elaborazioni simboliche è possibile riprodurle ad un livello più basso, microstrutturale quindi, a patto di collocare in una nuova prospettiva il significato di input e di output e sfruttando processi di trasformazione differenti da quelli del cognitivismo. Nel nostro caso i processi distribuiti in parallelo. Come hanno ben detto i soliti Runelhart e McClelland: “la prospettiva fondamentale [del connessionismo] è che molti dei costrutti delle descrizioni a livello macro come schemi, prototipi, regole, produzioni, e così via, possono essere visti come emergenti dalle interazioni tra le microstrutture dei modelli distribuiti”. In conclusione facciamo notare che alcuni autori tendono a far rientrare il connessionismo nell’alveo delle scienze cognitive, ma, anche alla luce di quanto abbiamo detto fin qui, una tale operazione sembra poco percorribile. Nell’introduzione è stata presentata una nozione “forte” di scienza cognitiva, nella quale è ravvisabile una matrice cognitivista piuttosto diretta ed identificabile soprattutto nel persistere della separazione fra mente e corpo e nell’analogia del computer che si è conservata sostanzialmente immutata. Altrettanto non è possibile dire nei riguardi del connessionismo, che si pone invece come un diretto antagonista di tutto ciò che il cognitivismo significa nelle sue istanze più intime e solo una nozione molto “debole” di scienza cognitiva potrebbe accomunarli entrambi. E a questo proposito non basta l’ipotesi di Posner, avanzata in Foundation of cognitive science [1989], secondo cui tanto la scienza cognitiva quanto il connessionismo si fondano su un modello computazionale della mente, perché abbiamo visto che non si tratta della stessa logica computazionale e nemmeno, in ultima analisi, della stessa “mente”. 8 Per una più ampia e completa trattazione rimando a P. Quinlan, Connessionismo e psicologia [1991] e PDP. Microstrutture dei processi cognitivi [1986] di Rumelhart e McClelland