giovedì 3 dicembre 2015

"Dio esiste e vive a Bruxelles": l'immagine di una Europa al tramonto che va difesa



 
Fuori tema/ Ho visto ieri "Dio esiste e vive a Bruxelles", di Jaco van Dormael, il regista di "Totò le héros". Nel film Dio è rappresentato come un alcolista violento, che vive con una abbruttita e sottomessa moglie e una figlia di dieci anni che non lo sopporta, in un squallido appartamento di una cinquantina di metri quadri a Bruxelles. Passa le giornate a guardare lo sport alla tv girando per casa in vestaglia, calzini e ciabatte da mare. Gesù, J.C. lo chiama la sorellina, è scappato di casa tanto tempo fa.

Per ingannare il tempo Dio ha costruito il mondo e si diverte a trovare sempre nuovi modi per torturare gli uomini, inventando leggi del tipo "se ti cade il pane con la marmellata, cadrà sempre dalla parte della marmellata", "al supermercato la fila accanto andrà sempre più veloce della tua" o "se ti innamori di una donna molto probabilmente non ci passerai la vita iniseme".

Il film è denso del tipico umorismo nero francese e descrive un mondo che fa schifo, fatto di persone sole, che passano la vita con familiari che non amano a fare cose per le quali non hanno alcun interesse, ricatattate da un Dio che ha già deciso tutto quello che succederà loro, che ha già stabilito di quali malattie soffriranno e quale sarà la data della loro morte. Ma che non glielo dice per tenerle "per le palle".

E' un ottimo esempio di una libertà che dovremmo tenerci stretta in Europa. Possiamo mandare nelle sale un film che è integralmente blasfemo, dalla prima all'ultima scena. Possiamo dire ciò che pensiamo, il che ci permette di pensare meglio e di esplorare la catena che si sviluppa da un singolo pensiero. La censura non solo non ti permette di dire ciò che pensi, ma ti impedisce di lavorarci e di capire come si sviluppa quel pensiero che sei costretto a tenere segreto. L'energia si consuma a tenerlo segreto e non a svilupparlo e questo è proprio uno degli obiettivi della censura.

Ciò detto, è un pessimo film, perfetta espressione del motivo per cui gli europei non guidano più il pianeta: sono ripiegati su se stessi. Intanto descrivere il mondo come un posto piccolo piccolo, fatto di cose insignificanti è inutili, non è un'idea nuova, c'è letteratura da due secoli là fuori su questo argomento. Ma soprattutto è sbagliata: il mondo non fa schifo per niente. Chiedetelo a un siriano, o a un nigeriano, o a un sudafricano, o a un egiziano o anche a un cinese. Se uscire di casa senza rischiare di essere ammazzati, se salire sulla popria auto e andare al lavoro, con la possibilità di avere in abbondanza da mangiare per sé e per i propri figli, se avere a disposizione una scuola pubblica, un ospedale se ti ammali, un sistema pensionistico, se poter passare la domenica in pizzeria con le persone che ti sei scelto nella vita, potersi concedere un viaggio ogni tanto, poter noleggiare un film o leggere un libro. Se tutto questo fa schifo, confrontatelo con le alternative.

Non è detto che sia necessario vivere con una persona che non ami, né che si debba condurre una esistenza mediocre. Semplicemente, purtroppo, anche se viviamo in una società che ce ne darebbe le possiblilità - per conquistare le quali sono morti davvero in tanti - spesso non destiniamo abbastanza energia alle cose importanti e ci facciamo divorare dalla paura. Di essere inadeguati, incapaci, impreparati, che sia impossibile raggiungere quel risultato, realizzare quel sogno. E fiorisce l'industria dell'intrattenimento - drammatica parola derivata da "trattenere" - alla quale ci sottoponiamo per sfuggire ai nostri pensieri, e un peso ci scende nello stomaco. Certo nessuno può ammettere di essere causa del suo male, e così la colpa è di Dio e della società. Ma apriamo bene le orecchie: se le cose continuano così, e sul mondo si rovesceranno ancora una volta il conflitto e la guerra, la società che seguirà a quella che abbiamo ora farà molto ma molto più schifo. Quindi cerchiamo di apprezzarla e cerchiamo di evitare di perderla, invece di prendercela con Dio. Se Dio fosse stato così cattivo con i belgi, la Leffe non sarebbe così buona.

lunedì 9 dicembre 2013

Facebook plans for artificial intelligence lab

Facebook unveiled plans Monday on a partnership with New York University for a new center for artificial intelligence, aimed at harnessing the huge social network's massive trove of data. The California-based tech giant named professor Yann LeCun of NYU's Center for Data Science to head up the project. "As one of the most respected thinkers in this field, Yann has done groundbreaking research in deep learning and computer vision," said Mike Schroepfer, Facebook's chief technology officer. "We're thrilled to welcome him to Facebook." Facebook, the world's biggest social network with more than a billion members, is building the team across three locations -- New York, London and its headquarters in Menlo Park, California. The lab will work on "machine learning," -- a branch of artificial intelligence that involves computers "learning" to extract knowledge from giant data sets. LeCun, a French-born mathematician and computer scientist, said in a blog post that he was pleased to
  head up the project with "the ambitious, long-term goal of bringing about major advances in artificial intelligence." "I am thrilled to announce that I have accepted the position of director of this new lab," LeCun wrote. "I will remain a professor at New York University on a part-time basis, and will maintain research and teaching activities at NYU." Facebook chief and co-founder Mark Zuckerberg spoke of the plans during a call in October to discuss the company's quarterly earnings. Zuckerberg said a working group was formed in September "to do world-class artificial intelligence research using all of the knowledge that people have shared on Facebook." "The goal here is to use new approaches in AI to help make sense of all the content that people share so we can generate new insights about the world to answer people's questions," Zuckerberg said at the time. He added that one of the goals was "to build services that are much more natural to interact with and can help solve
  many more problems than any existing technology today." LeCun is a professor at NYU's Courant Institute of Mathematical Sciences and is the founding director of the university's Center for Data Science. He is known for creating an early version of a pattern-recognition algorithm which mimics, in part, the visual cortex of animals and humans.  The algorithm helped allow AT&T's Bell Labs to deploy a check-reading system that by the late 1990s was reading about 20 percent of all the checks written in the US, according to NYU. LeCun's recent research projects include the application of "deep learning" methods for visual scene understanding and navigation autonomous ground robots, driverless cars, and small flying robots, as well as speech recognition, and applications in biology and medicine. LeCun is set to start the job in January. Facebook joins other Internet firms like Google and Microsoft in researching artificial intelligence, which could help in delivering improved sear
 ch results and in new products ranging from video games to driverless vehicles.

sabato 9 novembre 2013

Sogno e umorismo

Sogno, umorismo e gestualità. Sono tre elementi indispensabili senza i quali non sarà possibile realizzare una compiuta intelligenza artificiale. Sto leggendo il libro di Kurzweil la singolarità è vicina. Ha ragione su molte cose. Lui prevede che l'aumento delle capacità di calcolo dei computer consentirà di raggiungere la massa critica necessaria a eguagliare le capacità del cervello umano. Il punto è che la capacità di calcolo non è sufficiente. Occorre capire alcuni meccanismi che presiedono al funzionamento del cervello e hanno a che hanno a che fare con la natura stessa dell'intelligenza. Se il riconoscimento vocale appare ormai a portata di mano, così come l'esecuzione di compiti via via più complessi, siamo ancora molto lontani dalla creatività. La chiave per capire l'origine di questo fenomeno potrebbe essere proprio nel sogno e nell'umorismo, due fenomeni il cui ruolo nel funzionamento complessivo del cervello non è ancora affatto chiaro. Occorre inoltre indagare con più attenzione il rapporto tra il linguaggio, il cervello e la mano, integrando nei progetti di intelligenza artificiale anche l'esame della gestualità della mano robotica e il suo rapporto con l'apprendimento del linguaggio.

martedì 16 luglio 2013

Ameriano colpito dall'amnesia: dimentica l'inglese, ora parla svedese

  PALM SPRINGS, Calif. (AP) _ Doctors are looking into the mystery of a Florida man who awoke speaking only Swedish, with no memory of his past, after he was found unconscious four months ago at a Southern California motel.

   Michael Boatwright, 61, woke up with amnesia, calling himself Johan Ek, The Desert Sun reported (http://mydesert.co/145PNGw).

   Boatwright was found unconscious in a Motel 6 room in Palm Springs, Calif., in February. After police arrived, he was transported to the Desert Regional Medical Center in Palm Springs where he woke up.

   Hospital officials said Boatwright may have been in town for a tennis tournament in the Coachella Valley. He was found with a duffel bag of exercise clothes, a backpack and tennis rackets. He also carried four forms of identification _ a passport, a California identification card, a veteran's medical card and a Social Security card _ all of which identified him as Michael Thomas Boatwright.

   Palm Springs police have documented his information in case anyone lists Boatwright as missing or wanted, authorities said.

   In March, doctors diagnosed Boatwright with Transient Global Amnesia, a condition triggered by physical or emotional trauma that can last for several months.

   The rare mental disorder is characterized by memory loss, ``sudden and unplanned travel,'' and possible adoption of a new identity, according to the Sun.

   After an extensive search, medical personnel and social workers have been unable to locate Boatwright's next of kin. Authorities are still unsure of his birthplace, listed on his ID as Florida _ photos show him in Sweden at a young age.

   Boatwright doesn't recall how to exchange money, take public transportation, or seek temporary housing like homeless shelters or hotels, the social worker assigned to his case, Lisa Hunt-Vasquez, told the Sun.

   He doesn't remember his son and two ex-wives, either.

   He has no income or insurance, further complicating his treatment at Desert Regional. And he has little money he can access _ only $180. He also has a few Chinese bank accounts, but can only access one account, which holds $7, according to the newspaper.

   Doctors don't know how much longer he will be able to stay at the center _ aside from his amnesia, Boatwright is in good health. The hospital is currently looking for alternatives that would keep him off the streets. For now, Boatwright is unsure of both his past and his future.

   ``Sometimes it makes me really sad and sometimes it just makes me furious about the whole situation and the fact that I don't know anybody, I don't recognize anybody,'' Boatwright told the newspaper.

   Last year, a North Dakota college student who went missing for nearly a week before turning up in Arizona said she had a bout of amnesia and didn't know who she was.

   Amber Glatt, a 22-year-old Valley City State University student, vanished on the Fourth of July, prompting aerial searches. She contacted her mother five days later from the Grand Canyon. Her mother said Glatt has had recurring amnesia since suffering a head injury years ago.

   Glatt told WDAY-TV (http://bit.ly/NmbSnR ) that after she lost her memory she met a man in a bar who let her tag along on his trip to the Grand Canyon. She said the man eventually saw online that she'd been reported missing and alerted her.

   Glatt regained most of her memory.

   AP/LaPresse-WF-07-16-13 0815GMT<

lunedì 6 maggio 2013

Nasce l'elettronica organica: arriva il transistor neuronale


Roma, 6 mag. (LaPresse) - Strumenti più efficaci per la conoscenza del funzionamento del cervello e la riparazione dei neuroni mal funzionanti in Parkinson ed epilessia. E' la prospettiva aperta da una ricerca del Cnr pubblicata su Nature Materials. Tutto grazie alla messa a punto di una nuova tecnologia, l'elettronica organica trasparente, capace di ottenere informazioni in merito all'attività neuronale, apre una nuova piattaforma d'indagine. La ricerca, condotta da due istituti del Consiglio nazionale delle ricerche di Bologna, l'Istituto per lo studio dei materiali nanostrutturati (Ismn-Cnr) e l'Istituto per la sintesi organica e la fotoreattività (Isof-Cnr), in collaborazione con l'Istituto italiano di tecnologia (Iit) e con Etc, spin off del Cnr e start up del Gruppo Saes, ha dimostrato che si può stimolare l'attività neuronale, manipolarla e leggerla attraverso uno strumento biocompatibile: l'Ocst (organic cell stimulating and sensing transistor).

"Il dispositivo è costituito da un microchip organico trasparente sul quale vengono adagiate le reti neuronali, caratterizzato dalla capacità di stimolare e registrare segnali elettrici e, in prospettiva, di generare luce", illustra Michele Muccini, responsabile del Cnr-Ismn di Bologna e coordinatore del progetto insieme con Valentina Benfenati e Stefano Toffanin. "Inoltre, in quanto biocompatibile, Ocst riesce a rimanere a contatto per lungo tempo con i neuroni primari senza che questi vengano danneggiati, offrendo la possibilità di comprendere il loro funzionamento e di modulare la loro attività con maggiore efficacia rispetto alle tecnologie esistenti".

L'applicazione di questo strumento fornisce numerosi vantaggi. "Il suo sviluppo permetterà di studiare anche altri tipi di neuroni e di cellule, dando la possibilità di compiere significativi passi avanti nella determinazione del funzionamento del cervello umano", prosegue Muccini. "In futuro - continua - la capacità di interazione tra cellule nervose e dispositivo potrebbe trovare applicazioni per la rigenerazione del tessuto nervoso periferico compromesso da incidenti traumatici, da malattie neurodegenerative come il Parkinson o nella diagnosi precoce di eventi epilettici".

Lo studio ha impegnato un team di 13 ricercatori, tra cui esperti in scienza e tecnologia dei materiali, neuroscienziati ed elettrofisiologi, che ha lavorato per due anni presso la sede del Cnr di Bologna, nell'ambito delle linee strategiche del dipartimento di Scienze chimiche e tecnologie dei materiali dell'Ente e delle ricerche sullo sviluppo di tecnologie per la comprensione del funzionamento del cervello, oggetto di importanti programmi strategici europei e americani. L'importanza socio-economica di queste attività ha spinto la Commissione europea a designare maggio 2013 'mese europeo del cervello'.

lunedì 11 marzo 2013

Ascolta, guarda e clicca


Leggo  questo articolo su Repubblica e devo dire ne resto impressionato.

Ascolta, clicca e guarda ecco la nuova formula per insegnare ai ragazzi
http://www.flcgil.it/rassegna-stampa/nazionale/ascolta-clicca-e-guarda-ecco-la-nuova-formula-per-insegnare-ai-ragazzi.flc

Trovo paradossale l'entusiasmo con cui non solo ci arrendiamo, ma addirittura ci appassioniamo a questo nuovo metodo di comunicazione fatto di inquinamento mentale e caos. I ragazzi non sono capaci di mantenere la concentrazione cinque minuti sulla stessa cosa, perché studiano tra Facebook, le vibrazioni del cellulare, gli mp3 e la televisione? E allora si inventano modi caotici di studiare, per intercettare la loro attenzione. "Navigando nel V canto dell’Inferno nella piattaforma di My-LabLetteratura, collegata a un manuale scolastico cartaceo, ecco la voce di Gassman che recita la passione di Paolo e Francesca,mentre una “linea del tempo” sottolinea le date fondamentali della vita del poeta. E, sullo sfondo, scorrono i quadri ispirati al canto più celebre della Divina Commedia". 

Ottimo, così siamo noi a certificare allo studente che tenere l'attenzione su una cosa per cinque minuti è una cosa inutile. E' più o meno come dire che dato che il mare è inquinato, tanto vale rovesciarvi dentro il petrolio e prendere atto, possibilmente con un certo entusiasmo, che il mare 2.0 è fatto al 50% di acqua e al 50% di petrolio.

La questione è semplice. Il learning by doing è una eccezionale forma di apprendimento, scarsamente utilizzata in Italia, che può funzionare molto bene col digitale. Anche gli stessi ebook, opportunamente collegati a dizionari, wikipedia, e strumenti di approfondimento, sono una ottima evoluzione degli strumenti di studio. Ma insegnare, invece, ai ragazzi che non serve saper leggere per un'ora di seguito, e attirare la loro attenzione su video, musica, animazioni e infografiche, è un boomerang. E' un danno cognitivo enorme.

La verità è il consumo culturale generale sta calando livello. Le edicole sono piene di spazzatura, le tv altrettanto. Internet, con la sua legge assoluta delle pageview, è l'impero del male da questo punto di vista. Le cose più lette, più viste, più cliccate, sono quasi sempre spazzatura (e infatti hanno quasi sempre a che fare con la tv). Il motivo è semplice. E' l'intrattenimento la cosa più consumata, perché è quello che non richiede impegno. Il problema è che l'intrattenimento dovrebbe essere neutro. Non dovrebbe impegnare la mente, ma neanche provocarle un danno. Invece ne provoca, e molto. Riempie la testa delle persone di informazioni ridondanti, contraddittorie, consuma capacità di memoria e di computazione. Il cervello finisce per restare inquinato. Tutto questo ha ovvi motivi commerciali, che si possono comprendere. Quello che è criminale è trasformare questo modo di comunicare nel sistema di apprendimento a cui vogliamo affidare la crescita dei nostri figli.

venerdì 15 febbraio 2013

Overfitting è memoria? Questo è il problema

Quasi sempre un problema rappresenta una soluzione a un problema precedente. In questo caso il problema dell'overfitting, esaminato nel post del 13 dicembre, rappresenta un inizio di soluzione a un problema precedente: la memoria. La questione è semplice: come memorizza il cervello? Dove mette le informazioni, come le organizza? Ci sono alcune caratteristiche che ci permettono di escludere una organizzazione a matrice sul modello di un hard disk.

Una è che il cervello ricerca per associazioni di idee e non è in grado di intercettare una singola informazione se non inserita in un contesto (il colore dell'altalena del campeggio lo ricordiamo solo se facciamo lo sforzo di ricordare tutti i dettagli del campeggio, ripercorrendone la pianta, l'organizzazione, le persone conosciute).

Allo stesso tempo, in generale è molto più facile per il cervello stabilire se una cosa è nota, piuttosto che ricordarne tutti i dettagli. Per esempio è più facile dire davanti a una foto se una certa faccia l'abbiamo già vista, piuttosto che visualizzare nella testa un viso e descriverne i tratti. In altre parole, è molto facilitante per il cervello avere davanti un pattern da riconoscere piuttosto che ricordarne uno completamente. Questa seconda cosa è esattamente la stessa che succede con l'overfitting. In effetti l'overfitting è una forma di memorizzazione. E' una forma un po' laterale di apprendimento, in cui invece che "capire la lezione" la si "impara a memoria". Insomma la cosa è comunque molto interessante. Ora, si può dire però che sia un modo compiuto di memorizzare solo se siamo poi in grado di estrarre l'informazione. Di fronte a una immagine, con il metodo illustrato il 1 dicembre (quello che ha il problema dell'overfitting), siamo in grado di dire se appartiene all'insieme di quelle memorizzate, o se si tratti di una nuova. La questione è: siamo anche in grado di estrarre le 40 immagini memorizzate e salvarle da qualche parte in maniera "tradizionale"? Se sì, abbiamo risolto il problema della memorizzazione del cervello. Attualmente un metodo che consenta di farlo non c'è. Trovarlo sarebbe un enorme passo avanti nella costruzione di un cervello artificiale.

Il tema della memoria è centrale per l'intelligenza artificiale: il suo rapporto con l'apprendimento è il cuore stesso del problema dell'intelligenza. Sull'argomento ho già scritto diversi post:
Rete a riconocimento del già visto
Memoria per associazioni? Per una fuga rapida
La memoria

giovedì 13 dicembre 2012

Riconoscimento volti artigianale: il fantasma dell'overfitting

Con l'esempio di rete neurale per il riconoscimento dei volti che ho pubblicato il primo dicembre c'è un problema: l'overfitting. La questione è presto spiegata: il modello è sovradimensionato, ci sono troppi neuroni di ingresso. Con un coefficiente per ciascun neurone, ci sono circa 100mila paramentri. Il risultato è che, con appena 40 esempi in ingresso, la sua capacità di individuare singole differenze tra una immagine e l'altra è troppo fine.

Dal momento che può confrontare ogni singolo pixel tra una immagine e l'altra, succede che prendono il sopravvento dettagli minori: se in un dato punto compaiono capelli o sfondo, se in un altro c'è la maglietta beige o azzurra, e via di questo passo. E' talmente ampio il numero di dettagli su cui il modello può giocare che è in grado di identificare le singole immagini.

Di fatto le memorizza. Il risultato è che riconosce perfettamente le immagini usate in fase di apprendimento ma poi non è in grado di riconoscerne di nuove. Si basa su dettagli insignificanti e in effetti non fa la cosa più importante: non generalizza, non individua le caratteristiche distintive fondamentali tra un volto e l'altro. Come si risolve questo problema? Con alcune tecniche statistiche che riducono l'immagine a pochi parametri sui quali poi la rete può fare apprendimento. Il primo e il più noto è Eigenface.

Il mio interesse in questo studio però era un altro.

A me non interessa studiare il modo più efficiente di riconoscere i volti in sé, mi interessa studiare le reti neurali come lontano parente del meccanismo di funzionamento del cervello. Il tema è come fa il cervello a riconoscere gli oggetti, le persone, e così via, e ad associarvi suoni (che a sua volta impara a distinguere per fonemi) costruendoci poi sopra un linguaggio.

Detto in altre parole, il problema non è solo riconoscere Piero da Carlo, ma anche riconoscere un temperamatite o una sedia da Carlo e perciò ridurre il problema a pochi parametri facciali con un procedimento analitico a monte non risolve affatto il problema, lo aggira. Farei io il lavoro che vorrei capire invece come fa a fare il cervello.

C'è da dire che probabilmente il cervello non ha grossi problemi di overfitting perché ha letteralmente milioni di esempi su cui fare riconoscimento del pattern, avendo a disposizione un flusso di immagini dagli occhi mediamente 16 ore su 24 per anni, e non i miseri 40 di quel modello. Perciò forse, oltre a trovare un modo di ridurre i parametri senza compromettere l'esperimento, c'è anche da introdurre un meccanismo di input a flusso video, in modo da poter campionare migliaia di immagini.

Non appena avrò le idee più chiare su come affrontare il problema lo scriverò qui. Ringrazio molto Raistlin, della lista hackmeeting, per aver segnalato il problema.
 

sabato 1 dicembre 2012

Come farsi in casa una rete neurale per il risconoscimento dei volti

[Nota posteriore: questo procedimento contiene un problema che ho descritto qui]

Cosa sono le reti neurali e perché sono tanto interessanti? Perché sono una trovata matematica grazie alla quale si rovescia la normale logica di programmazione e si può costruire una macchina che impara da sè. Per esempio, le reti neurali sono perfette per riconoscere i volti delle persone. Ecco un programma che, dati due volti, riconosce se abbiamo di fronte l'uno o l'altro. Ecco i due volti sui quali lavoreremo.






PROGRAMMAZIONE CLASSICA
Anche con un programma classico, a impostazione imperativa, si può fare riconocimento dei volti. Basta individuare le caratteristiche distintive delle due immagini. Il primo dei due ragazzi ha capelli più lunghi e più neri, sopracciglia più marcate, naso più lungo. Se prendiamo la matrice di pixel che compone l'immagine possiamo confrontare porzioni equivalenti e stabilire se appartengono all'uno o all'altro ragazzo in modo relativamente semplice. Qual è il problema? Che il programma funzionerà solo con queste due facce, non sarà per niente flessibile. Lo si può fare allora in modo decisamente più complesso, in modo che, dati due volti generici, il programma ne analizzi le porzioni equivalenti e memorizzi le differenze. Così sarà più flessibile, sarà in grado di esaminare qualsiasi faccia, ma il lavoro per scriverlo sarà molto complesso. Questa è programmazione con una impostazione imperativa classica. La programmazione con le reti neurali invece è radicalmente diversa. Di fatto noi non abbiamo bisogno di individuare le caratteristiche distintive tra le due immagini. E' la rete che lo fa.

E come lo fa? Correggendo la propria configurazione interna, in funzione degli esempi che le mettiamo davanti. Le diamo in pasto tante immagini del primo ragazzo, dicendole che è il primo ragazzo, e poi le diamo in pasto tante immagini del secondo, dicendole che è il secondo. Con un processo di correzione progressiva, che è quello viene definito apprendimento, la rete arriva a confingurarsi in modo tale da essere in grado di distingere i due volti.


COS'È UNA RETE NEURALE
Andiamo per ordine. Cos'è una rete? In effetti è ciò che il nome suggerisce: un insieme di nodi collegati tra loro. La caratteristica fondamentale di una rete neurale è quella di avere alcuni nodi di ingresso, alcuni nodi di uscita ed eventualmente alcuni nodi intermedi. Può esserci più di uno strato di nodi intermedi a seconda della complessità della rete.

Questa è una rete semplice, senza nodi intermedi:


Partendo dal generale per andare via via nel dettaglio e nel particolare, l'idea di base è questa: c'è uno scatolotto con alcuni ingressi e una uscita. Nel nostro caso gli ingressi rappresentano i valori dei pixel che compongono l'immagine (i volti sono dentro una bitmap di risoluzione 352x288, quindi abbiamo 101.376 ingressi, uno per pixel) mentre l'uscita sarà una sola e risulterà pari a un numero che identifica il volto: -1 per il primo, 1 per il secondo.

Nella prima fase, quella di apprendimento, forniamo alla rete sia l'ingresso che l'uscita. Le diamo tanti esempi del primo volto, a cui associamo l'uscita -1 e tanti esempi del secondo, dicendo che con quest'altro deve restituire invece +1. Esaurita la fase dell'apprendimento, lo scatolotto dovrebbe essere in grado, data una nuova foto che non aveva mai visto, di restituire l'uscita corretta.

Come lo fa? Generalizzando. Quello che succede è che la rete impara a distinguere le differenze significative da quelle non significative.

In pratica la cosa funziona così: ogni neurone di ingresso è collegato all'unico neurone di uscita. Il valore in arrivo al neurone di uscita sarà perciò la somma dei valori dei neuroni ingresso, vale a dire dei codici colore dei pixel dell'immagine, ognuno moltiplicato per un coefficiente.

Nella figura sono solo due, nel nostro caso sono 101.376, che vanno da x1 a x101376. Ciascun xi è moltiplicato per il rispettivo wi, cioè il relativo coefficiente. Il valore in ingresso al neurone di output è dato perciò da:


L'idea è che i pixel importanti, quelli che permettono di distinguere una immagine dall'altra (per esempio dove ci sono i capelli, che hanno colore diverso tra i due ragazzi), avranno coefficienti alti. Quelli meno importanti (per esempio quelli dello sfondo, la parete azzurrina), che non hanno alcuna importanza nell'individuare di quale dei due volti si tratti, avranno coefficienti molto bassi, prossimi allo zero. In questo modo si ottiene un valore che dà rilievo alle differenze tra le due immagini. Questi sono i pesi sinaptici. Il risultato, cioè a sommatoria complessiva dei valori dei pixel per i rispettivi pesi, poi, a sua volta passa attraverso una funzione di attivazione. Una funzione che si presta molto bene è la tangente iperbolica, che ha questo tipo di risposta:


Perché utilizziamo una funzione di attivazione, in particolare questa? Perché garantisce una uscita sempre compresa tra -1 e +1, qualsiasi sia il dato di partenza. Nel nostro caso, poiché la sommatoria di oltre 100mila ingressi, per quanto i coefficienti possano essere bassi, porta a un valore piuttosto alto, ho diviso - trovando empiricamente il valore vedendo un po' cosa usciva dal programma - il valore per 10.000. Il valore così trovato va in pasto alla tangente iperbolica che restituisce un valore prossimo a -1 o +1 e viene approssimato a quello più vicino.


L'APPRENDIMENTO
Una rete così realizzata è in grado di riconoscere un volto dall'altro se configurata con i coefficienti giusti. E il calcolo dei coefficienti giusti è quello che si definisce apprendimento. Come si calcolano i coefficienti giusti? Per correzioni progressive. All'inizio dell'apprendimento la rete calcola una uscita, in funzione degli ingressi che ha (al primo giro tutti i valori sinaptici valgono zero). Poi corregge i coefficienti in funzione della differenza tra l'uscita calcolata e quella teorica (cioè che noi vorremmo che restituisse, quella che noi abbiamo associato a quella determinata immagine: nel caso del primo volto -1, nel caso del secondo +1).

Dato:
t = risposta teorica
y = risposta calcolata dalla rete con gli attuali pesi sinaptici
xi = valore di ingresso (da 0 a 83.839)

La differenza è calcolata così:

differenza = (t - y) xi (1 - y*y)

(1 - y*y) rappresenta la derivata (y*y vuol dire "y al quadrato") della funzione di attivazione del neurone di uscita, cioè della tangente iperbolica.
Una volta calcolato la differenza, si correggono i pesi sinaptici così:

wi = wi + differenza

Per evitare di andare fuori strada correggendo il differenziale troppo a ogni nuova immagine sottoposta, si applica anche un ulteriore coefficiente, detto tasso di apprendimento, che serve a limitare la velocità del cambiamento. Il tasso di apprendimento è compreso tra 0 e 1 e in genere viene fissato intorno a 0,8. Se a è il tasso di apprendimento, il calcolo della differenza diventa allora:

differenza = a (t - y) xi (1 - y*y)

La cosa migliore è dare in pasto alla rete le immagini in modo incrociato. Cioè prima un esempio del primo volto, poi un esempio del secondo, poi di nuovo uno del primo e così via. In questo modo l'apprendimento è più efficiente, perché a ogni passaggio emergono con più evidenza le differenze tra una e l'altra.

Una volta esaurito il compito, quello che abbiamo è di fatto una matrice di coefficienti, che possiamo salvare, per comodità, ancora in una bitmap, che si presta perfettamente allo scopo, essendo come formato una matrice di valori. Facendo così, poi, è possibile visualizzare l'immagine che ne viene fuori e il risultato è impressionante:

Pesi calcolati con numeri float

Non solo. Ma c'è anche un'altra cosa interessante. Questa è l'immagine che viene fuori se i pesi sono numeri float, cioè numeri con la virgola. Ma se utilizziamo come coefficienti dei numeri interi, allora l'immagine, pur molto simile, perde alcuni dettagli.

Pesi calcolati con numeri interi



DEBOLEZZE DI QUESTA RETE NEURALE
La principale debolezza di questa rete neurale è il fatto che, avendo un solo strato, assegna di fatto un coefficiente a ogni pixel. Quindi le due facce devono trovarsi grosso modo sempre nella stessa posizione. Se in una immagine il volto invece di trovarsi al centro, si trova a destra o a sinistra, la rete perde la bussola. Per renderla in grado di individuare e riconoscere le somiglianze tra le facce anche se l'immagine si sposta, occorrerebbe uno strato di neuroni intermedio. In questo modo il primo strato di connessioni sinaptiche individuerebbero la posizione del volto e il secondo individuerebbe le caratteristiche del volto. L'apprendimento di una rete con uno strato intermedio è però molto diverso da una rete semplice come questa e lo vedremo in futuro.


IL PROGRAMMA
Questi di seguito c'è il programma in C per fare tutto questo.
Il primo file, neuralnet.c, è il programma che, prendendo una immagine, dice se si tratta del primo o del secondo volto.
Il secondo file, training.c, rappresenta il programma di apprendimento della rete e calcola i pesi sinaptici (attenzione: ci sono letteralmente milioni di moltiplicazioni da fare, il processore ci mette del tempo, potrebbe volerci anche qualche ora a completare il processo di apprendimento).
Il terzo file, neuralnet.h, è un file libreria e contiene tutte le funzioni utilizzate nei primi due file.

Se avete una distribuzione Linux i file si compilano così:

gcc neuralnet.c -o neuralnet -lm
gcc training.c -o training -lm

Avete ora così a disposizione i due programmi. Il training si avvia così:

./training

Il programma impara da 40 immagini bitmap di risoluzione 352x288. Le immagini devono essere nella stessa cartella del programma, numerate, e chiamarsi da Image000.bmp a Image039.bmp (con la i maiuscola). Quelle pari, (0, 2, 4, ecc.) devono essere della prima faccia, quelle dispari della seconda. Il programma genera un file che si chiama pesi.bmp nel quale sono registrati tutti i pesi sinaptici.

Esaurito l'apprendimento, si può utilizzare la rete, con il seguente comando:

./neuralnet

L'immagine da verificare deve essere una bitmap di risoluzione 352x288 che si chiama image2test.bmp ed è sempre nella stessa cartella.


CODICE SORGENTE IN C


NEURALNET.C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "./neuralnet.h"
#define num_pixel 76032
#define image_widht 352

int main(void)
{
unsigned int x[num_pixel]; // array dei neuroni dell'immagine di input
float w[num_pixel],x_float[num_pixel]; // array dei pesi sinaptici
unsigned char header_image[54];
char filename_immagine[20]="image2test.bmp"; // nome del file dell'immagine da testare
char filename_pesi[20]="pesi.bmp"; // nome del file dell'immagine dei pesi
float out_neurone[num_pixel];
float out_neurone_uscita = 0;
int j;

if (open_image_int_mono(x,header_image,filename_immagine)==1) 
    {printf("errore di apertura dell'immagine %s",filename_immagine);
    exit (1);}

for (j=0;j<num_pixel;j++)
    {
    x_float[j] = x[j];
    }

if (normalize(x_float)==1) 
    {printf("errore di normalizzazione dell'immagine %s",filename_immagine);
    exit (1);}

if (open_image_float(w,header_image,filename_pesi)==1) // legge l'array dei pesi
    {printf("errore di apertura dell'immagine %s",filename_pesi);
    exit (1);}

/*
// fine della fase di apprendimento
// uso della rete
printf("\nTEST DELLA RETE\n");
printf("la rete risponde con -1 per un'immagine simile a una delle prime 50 immagini di training (0-49)\n");
printf("la rete risponde con +1 per un'immagine simile a una delle seconde 50 immagini di training (50-99)\n");
printf("(ATTENZIONE: i neuroni sono bipolari quindi i valori sono 1 e -1, non i soliti 1 e 0.)\n");
*/

for (j=0;j<num_pixel;j++)
    {
    out_neurone[j] = x_float[j] * w[j];
    out_neurone_uscita = out_neurone_uscita + out_neurone[j];
    }

    out_neurone_uscita = out_neurone_uscita /100000;
    printf("out_neurone_uscita non elaborata: %f\n",out_neurone_uscita);

    out_neurone_uscita=tanhf(out_neurone_uscita);
    printf("out_neurone_uscita con la tang iperbolica: %f\n",out_neurone_uscita);

/* 
attenzione: se il neurone è bipolare come in questo caso e non continuo allora Ú necessario interpretare il valore raggiunto e verificare se supera la soglia, in modo da determinare se vale 1 oppure -1. un neurone bipolare non può avere un'uscita come 3 oppure -3 ma solo 1 e -1.
il comportamento di questi neuroni è:
y = 1 se { sommatoria di tutti i [valore di input della sinapsi per il relativo peso] > 0 }
y = 1 se { sommatoria di tutti i [valore di input della sinapsi per il relativo peso] <= 0 }
(è riportato a pagina 68 del manuale)
*/

if (out_neurone_uscita < 0) printf ("\nvolto 1\n");
if (out_neurone_uscita > 0) printf ("\nvolto 2\n");

//printf("\n y: %f\n",out_neurone_uscita);

}




TRAINING.C

#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
#include <math.h>
#include "./neuralnet.h"
#define num_pixel 101376
#define image_widht 352

void main(void)
{
unsigned int array_image[288][image_widht]; // array dei pixel dell'immagine
unsigned int x[num_pixel]; // vettore monodimensionale che raccoglie i valori dell'array dell'immagine
float x_float[num_pixel]; // vettore che trasforma i valori in float
//unsigned int *punt;
unsigned char header_image[54];
float w[num_pixel]; // vettore dei pesi
unsigned int w_int[num_pixel]; // vettore dei pesi convertiti in intero

//fase di apprendimento

float apprendimento;
char filename[100][20];
char filenamew[20]="pesi.bmp"; // nome del file per salvare i pesi sinaptici calcolati
float t[100];
//float x[num_pixel];
float y,y_tot,y_diviso;
float delta_w;
int i,j,k,p,n;

// nb: num_pixel è il risultato di 288 x image_widht.

apprendimento=0.9;// tasso di apprendimento

strcpy(filename[0],"Image000.bmp"); t[0]=-1;
strcpy(filename[1],"Image001.bmp"); t[1]=1;
strcpy(filename[2],"Image002.bmp"); t[2]=-1;
strcpy(filename[3],"Image003.bmp"); t[3]=1;
strcpy(filename[4],"Image004.bmp"); t[4]=-1;
strcpy(filename[5],"Image005.bmp"); t[5]=1;
strcpy(filename[6],"Image006.bmp"); t[6]=-1;
strcpy(filename[7],"Image007.bmp"); t[7]=1;
strcpy(filename[8],"Image008.bmp"); t[8]=-1;
strcpy(filename[9],"Image009.bmp"); t[9]=1;

strcpy(filename[10],"Image010.bmp"); t[10]=-1;
strcpy(filename[11],"Image011.bmp"); t[11]=1;
strcpy(filename[12],"Image012.bmp"); t[12]=-1;
strcpy(filename[13],"Image013.bmp"); t[13]=1;
strcpy(filename[14],"Image014.bmp"); t[14]=-1;
strcpy(filename[15],"Image015.bmp"); t[15]=1;
strcpy(filename[16],"Image016.bmp"); t[16]=-1;
strcpy(filename[17],"Image017.bmp"); t[17]=1;
strcpy(filename[18],"Image018.bmp"); t[18]=-1;
strcpy(filename[19],"Image019.bmp"); t[19]=1;

strcpy(filename[20],"Image020.bmp"); t[20]=-1;
strcpy(filename[21],"Image021.bmp"); t[21]=1;
strcpy(filename[22],"Image022.bmp"); t[22]=-1;
strcpy(filename[23],"Image023.bmp"); t[23]=1;
strcpy(filename[24],"Image024.bmp"); t[24]=-1;
strcpy(filename[25],"Image025.bmp"); t[25]=1;
strcpy(filename[26],"Image026.bmp"); t[26]=-1;
strcpy(filename[27],"Image027.bmp"); t[27]=1;
strcpy(filename[28],"Image028.bmp"); t[28]=-1;
strcpy(filename[29],"Image029.bmp"); t[29]=1;

strcpy(filename[30],"Image030.bmp"); t[30]=-1;
strcpy(filename[31],"Image031.bmp"); t[31]=1;
strcpy(filename[32],"Image032.bmp"); t[32]=-1;
strcpy(filename[33],"Image033.bmp"); t[33]=1;
strcpy(filename[34],"Image034.bmp"); t[34]=-1;
strcpy(filename[35],"Image035.bmp"); t[35]=1;
strcpy(filename[36],"Image036.bmp"); t[36]=-1;
strcpy(filename[37],"Image037.bmp"); t[37]=1;
strcpy(filename[38],"Image038.bmp"); t[38]=-1;
strcpy(filename[39],"Image039.bmp"); t[39]=1;

for (i=0;i<num_pixel;i++)    // inizializzazione dei pesi sinaptici, uno per ogni neurone di ingresso
    {
    w[i] = 0;
    }

/* QUESTO È STATO COMMENTATO PERCHÉ CONVENIVA INCROCIARE LE IMMAGINI
for (i=0;i<20;i++)    // impostazione dell'uscita desiderata: -1 per le immagini da 0 a 19.
    {
    t[i] = -1;
    }

for (i=20;i<40;i++)    // impostazione dell'uscita desiderata: 1 per le immagini da 20 a 39.
    {
    t[i] = 1;
    }
*/


for (i=0;i<40;i++)
  {
    if (open_image_int_mono(x,header_image,filename[i])==1)
        {printf("errore di apertura dell'immagine %s",filename[i]);
        exit (1);}

    for (j=0;j<num_pixel;j++)
        {
        x_float[j] = x[j];
        }

    if (normalize(x_float)==1)
        {printf("errore di normalizzazione dell'immagine %s",filename[i]);
        exit (1);}

/*     VERBOSE MODE

        for (j=0;j<num_pixel;j++)
        {
        printf("x_float[%i]: %f - x: %u\n",j,x_float[j],x[j]);
        }
*/


    y=0;
    for (j=0;j<num_pixel;j++) // calcolo dell'uscita con i pesi correnti
        {
        y = y + (x_float[j] * w[j]);
        }
    y_tot=y;
    y_diviso=(y/10000);
    y=tanhf(y_diviso); // tangente iperbolica calcolata su un numero float
    printf("i: %i - y totale: %f - y diviso: %f - y iperbolica: %f\n",i,y_tot,y_diviso,y);

    for (j=0;j<num_pixel;j++)
        {
        delta_w = apprendimento * (t[i] -y) * x_float[j] * (1-y*y); // correzione con la differenza con
            // il delta_w contiene tra i fattori la derivata della funzione di attivazione:
            // per la tangente iperbolica corrisponde a (1-y*y). dato che la funzione però non
            // è tang_iperb(x), ma tang_iperb(x/100000), si può scorporare un tang_iperb(1/100000),
            // che è una costante, e quindi può essere mantenuta fattore costante. siccome è
            // è un fattore costante, può essere considerato incorporato nel tasso di apprendimento.
        w[j] = delta_w + w[j];
        //if (i>=20) {printf("i: %i - w%i: %f - delta_w: %f - x_float: %f - y: %f - t: %f\n",i,j,w[j],delta_w,x_float[j],y,t[i]);}
        }
  }

/* VERIFICA DEI VALORI DEI PESI SINAPTICI CALCOLATI
printf("PESI SINAPTICI\n");
for (j=0;j<num_pixel;j++)
    {
    printf("w%i: %f\n",j,w[j]);
    }
*/


/* SALVATAGGIO SU PESI2.BMP DEI PESI CON NUMERI INTERI
for (j=0;j<num_pixel;j++)
    {
    w_int[j]=(int)w[j];
    }

if (write_image_int(w_int,header_image,"pesi2.bmp")==1)
    {
    printf("errore di scrittura dell'immagine pesi2.bmp");
    exit(1);
    }
*/


// salvataggio dei pesi sinaptici calcolati:
if (write_image_float(w,header_image,filenamew)==1)
    {
    printf("errore di scrittura dell'immagine %s",filenamew);
    exit(1);
    }


printf("\nI pesi sinaptici sono stati salvati nel file %s\n\n",filenamew);
}




 NEURALNET.H

#define num_pixel 76032
#define image_widht 352

int open_image_int(unsigned int array[288][image_widht], unsigned char header[54], char filename[20]);
int open_image_int_mono(unsigned int array[num_pixel], unsigned char header[54], char filename[20]);
int open_image_float(float array[num_pixel], unsigned char header[54], char filename[20]);

int write_image_int(unsigned int array[num_pixel], unsigned char header[54], char filename[20]);
int write_image_float(float array[num_pixel], unsigned char header[54], char filename[20]);

int normalize(float array[num_pixel]);

int open_image_int(unsigned int array[288][image_widht], unsigned char header[54], char filename[20])
{
FILE *fp;
int i,j;
unsigned char header_f[54];
unsigned int array_f[288][image_widht];

if ((fp=fopen(filename,"rb"))==NULL) 
    {
        return 1;
    }
   else
    {
        fread(&header_f,sizeof(header_f),1,fp);
        fread(&array_f,sizeof(array_f),1,fp);
        fclose(fp);
        for (i=0;i<54;i++)
            {
            header[i]=header_f[i];
            }
        for (i=0;i<288;i++)
            {
                for (j=0;j<image_widht;j++)
                    {
                    array[i][j]=array_f[i][j];
                    }
            }
    }
return 0;
}

int open_image_int_mono(unsigned int array[num_pixel], unsigned char header[54], char filename[20])
{
FILE *fp;
int i,j;
unsigned char header_f[54];
unsigned int array_f[num_pixel];

if ((fp=fopen(filename,"rb"))==NULL) 
    {
        return 1;
    }
   else
    {
        fread(&header_f,sizeof(header_f),1,fp);
        fread(&array_f,sizeof(array_f),1,fp);
        fclose(fp);
        for (i=0;i<54;i++)
            {
            header[i]=header_f[i];
            }
        for (i=0;i<num_pixel;i++)
            {
            array[i]=array_f[i];
            }
    }
return 0;
}

int open_image_float(float array[num_pixel], unsigned char header[54], char filename[20])
{
FILE *fp;
int i,j;
unsigned char header_f[54];
float array_f[num_pixel];

if ((fp=fopen(filename,"rb"))==NULL) 
    {
        return 1;
    }
   else
    {
        fread(&header_f,sizeof(header_f),1,fp);
        fread(&array_f,sizeof(array_f),1,fp);
        fclose(fp);
        for (i=0;i<54;i++)
            {
            header[i]=header_f[i];
            }
        for (i=0;i<num_pixel;i++)
            {
                array[i]=array_f[i];
            }
    }
return 0;
}

int write_image_float(float array[num_pixel], unsigned char header[54], char filename[20])
{
FILE *fp;
int i,j;
unsigned char header_f[54];
float array_f[num_pixel], *array_punt;

if ((fp=fopen(filename,"wb"))==NULL) 
    {
        return 1;
    }
else
    {
        for (i=0;i<54;i++)
            {
            header_f[i]=header[i];
            }

        for (i=0;i<num_pixel;i++)
            {
            array_f[i]=array[i];
            }

/*
        for (i=0;i<288;i++)
            {
                for (j=0;j<image_widht;j++)
                    {
                    array_f[i][j]=array[i][j];
                    }
            }
*/

        fwrite(&header_f,54,1,fp);
        fwrite(&array_f,sizeof(array_f),1,fp);
        fclose(fp);
    }
return 0;
}

int write_image_int(unsigned int array[num_pixel], unsigned char header[54], char filename[20])
{
FILE *fp;
int i,j;
unsigned char header_f[54];
unsigned int array_f[num_pixel], *array_punt;

if ((fp=fopen(filename,"wb"))==NULL) 
    {
        return 1;
    }
else
    {
        for (i=0;i<54;i++)
            {
            header_f[i]=header[i];
            }

        for (i=0;i<num_pixel;i++)
            {
            array_f[i]=array[i];
            }


/*
        for (i=0;i<288;i++)
            {
                for (j=0;j<image_widht;j++)
                    {
                    array_f[i][j]=array[i][j];
                    }
            }
*/

        fwrite(&header_f,54,1,fp);
        fwrite(&array_f,sizeof(array_f),1,fp);
        fclose(fp);
    }
return 0;
}

int normalize(float array[num_pixel])
{
int i;
float max=0;

float array_f[num_pixel];

    for (i=0;i<num_pixel;i++)
        {
        array_f[i]=array[i];
        }

    for (i=0;i<num_pixel;i++)
        {
        if (array_f[i]>max) { max=array_f[i]; }
        }

    for (i=0;i<num_pixel;i++)
        {
        array_f[i]=(array_f[i]/max)*(array_f[i]/max);
        }

    for (i=0;i<num_pixel;i++)
        {
        array[i]=array_f[i];
        }

return 0;
}




DOWNLOAD
Scarica i sorgenti
Scarica i compilati


domenica 25 novembre 2012

Robot alla conquista del potere? Per Cambridge è un rischio serio

Londra (Regno Unito), 25 nov. (LaPresse/AP) - Un centro per valutare il rischio che in futuro robot intelligenti possano conquistare il potere, assoggettando gli umani. Non è il soggetto di un film ma il progetto di una delle università di più note e prestigiose del mondo, quella di Cambridge. L'idea è quella di mettere insieme un centro interdisciplinare che raggruppi esperti e accademici di diversi settori, per valutare i rischi che la rapida evoluzione dell'intelligenza artificiale può creare, incluso quello di "minacciare la nostra stessa esistenza".

Anche se l'idea che i robot possano prendere il potere, spiega Huw Price, professore di filosofia di Cambridge, può apparire lontana, vale la pena di prendere il rischio seriamente. E' difficile al momento, ammette, predire l'esatta natura dei rischi ma proprio questo dimostra, sottolinea, che è necessario capirne di più.

"Nel caso dell'intelligenza artificiale - spiega Price - sembra una ragionevole previsione che in un certo punto del tempo in questo o nel prossimo secolo l'intelligenza sfuggirà ai limiti della biologia". Quando questo accadrà, "non saremo più gli essere più intelligenti" sulla terra e saremo alla mercé di "macchine che non sono maliziose, ma i cui interessi non includono noi". "In genere - aggiunge - tende a essere considerata una preoccupazione poco seria, ma i rischi potenziali sono troppo seri per spazzarla semplicemente via". L'università ha annunciato che il centro sarà aperto nel corso del 2013 e si chiamerà Center for the Study of Existential Risk.

La questione in effetti è più seria di quanto non sembri e da tempo chi si occupa di intelligenza artificiale l'ha individuata. Il primo fu, nel 1965, il matematico inglese Irvin John Good, che la spiegò così: "Definiamo una macchina ultraintelligente come una macchina che può superare di molto tutte le attività intellettuali di una persona, per quanto intelligente. Dal momento che la progettazione delle macchine è una di queste attività intellettuali, una macchina ultraintelligente potrebbe progettare macchine ancora migliori; ci sarebbe allora senza dubbio una 'esplosione di intelligenza', e l'intelligenza dell'uomo sarebbe lasciata molto indietro. Di conseguenza la prima macchina ultraintelligente è l'ultima invenzione che l'uomo avrà bisogno di fare".

Raymond Kurzweil, un visionario futurologo, nel 2005 ha dato alle stampe un libro intitolato 'La singolarità è vicina'. Esperto informatico, Kurzweil si occupa di riconoscimento ottico dei caratteri, sintesi vocale, riconoscimento vocale e altre cose di questo genere, ma è diventato noto per i suoi numerosi libri. La "singolarità", parola presa a prestito dalla fisica, nella quale indica un particolare punto nello spazio-tempo in cui non si applicano le normali leggi della fisica, rappresenta per Kurzweil il momento in cui l'uomo costruirà il primo computer più intelligente delle persone. Lui sostiene che questo potrebbe accadere nel giro di qualche decennio e non appena questo succederà la vita sulla terra subirà un drastico cambiamento.

Ipotesi visionarie senza fondamento? Forse. Ma il fondatore della Microsoft Bill Gates, che lo ha invitato a cena a casa sua più di una volta, dice che Kurzweil è "la persona migliore che conosca nel predire il futuro dell'intelligenza artificiale".

Vi ricordate I Robot? Tolte le esplosioni, le americanate e le seplificazioni, il problema potrebbe anche essere più o meno in questi termini.


Meno inquietante ma altrettanto interessante: L'uomo bicentenario. Forse un po' troppo un Pinocchio contemporaneo, ma centra diversi temi importanti. Costruito in forma di commedia, un bel film.

sabato 24 novembre 2012

Alan Turing: questo è solo un'ombra di quello che sarà

Alan Turing aveva già capito tutto. Aveva già risposto a tutte le domande fondamentali dell'intelligenza artificiale, o meglio aveva già dato tutte le risposte necessarie a indicare la direzione nella quale andare, il che vale ancora di più. Sto leggendo un libro meraviglioso su Turing, noto matematico inglese che fu il padre dell'informatica, oltre al principale artefice della decriptazione del codice che usavano i tedeschi durante la seconda guerra mondiale per trasmettere tra di loro ordini e risultati delle operazioni militari. Nonostante i suoi eccezionali meriti, fu perseguitato per la sua omosessualità e si suicidò a 41 anni, mangiando una mela avvelenata col cianuro di potassio, probabilmente prendendo spunto dalla favola di Biancaneve, la cui versione Disney del 1938 lo aveva colpito particolarmente. Il libro, "L'uomo che sapeva troppo", di David Leavitt, Codice Edizioni, (da cui sono tratte tutte le citazioni di seguito), ripercorre tutta la vita di Turing.


TRATTARE LE MACCHINE IN MODO EQUO: L'INTELLIGENZA NON È INFALLIBILE
Tra gli anni Trenta e Quaranta scriveva ciò che ancora oggi resta alla base dello sviluppo tecnologico del prossimo secolo. Parlando di un suo progetto, l'Ace (Automatic Computing Engine), che stava sviluppando presso il National Physics Laboratory di Teddington (un sobborgo di Londra) scrisse:

Io sostengo che la macchina deve essere trattata in modo equo e leale. Invece di avere una situazione in cui essa a volte non dà risposte, potremmo aggiustare le cose in modo che dia ogni tanto risposte sbagliate. Anche il matematico umano prende qualche cantonata quando sperimenta nuove tecniche. E' facile per noi considerare queste sviste come non rilevanti e dare al ricercatore un'altra possibilità, ma alla macchina non viene riservata alcuna pietà. In altre parole, se si aspetta che la macchina sia infallibile, allora essa non può anche essere intelligente.

Per proseguire nel mio appello per un fair play nei confronti delle macchine nel verificare il loro quoziente di intelligenza, voglio osservare che ogni matematico umano è sempre sottoposto a un addestramento prolungato e che il suo effetto può essere considerato non dissimile dall'inserzione di tavole di istruzioni dentro a una macchina. Non ci si deve perciò aspettare che essa faccia molto nella direzione di costruire tavole di istruzioni sue proprie. Nessun uomo aggiunge granché al corpo generale delle conoscenze umane: perché dovremmo aspettarci di più da una macchina?


LE SCOPERTE DI UN ALLIVEVO BRILLANTE NON APPARTENGONO AL MAESTRO
Le posizioni di Turing accesero la curiosità della stampa e anche le obiezioni dell'opinione pubblica, che si divise sull'idea che fosse possibile costruire macchine intelligenti. Turing rispose elencando le cinque obiezioni principali (che sono sorprendentemente le stesse a settant'anni di distanza), e rispose a una per una:

Una riluttanza ad ammettere la possibilità che il genere umano possa avere rivali nei poteri intellettuali; [...] un sentimento religioso, secondo il quale ogni tentativo di costruire macchine del genere sia una sorta di empietà prometeica; [...] il potere molto limitato delle macchine usate fino ai tempi recenti (possiamo dire fino al 1940) [...] [che ha] incoraggiato la convinzione che le macchine fossero necessariamente limitate a compiti estremamente diretti, forse persino solo a quelli ripetitivi; [...] la scoperta che esistono casi in cui qualunque macchina è incapace di fornire una risposta [mentre] l'intelligenza umana sembra capace di trovare metodi di potenza sempre crescente per trattare tali problemi "trascendendo" i processi disponibili alle macchine; [...] [l'idea che] se e nella misura in cui una macchina può esibire intelligenza, la sua prestazione dev'essere considerata nulla più che un riflesso dell'intelligenza del suo creatore.

Le prime due obiezioni, scrisse, "sono puramente emotive e non richiedono davvero una replica. Se si sente la necessità di una loro confutazione preventiva, c'è ben poco da dire, anche se l'effettiva costruzione delle macchine avrebbe probabilmente un certo peso". Alla terza obiezione rispose che le macchine "possono compiere, ammesso che non si verifichino guasti, numeri immensi di operazioni non ripetitive". Ed è proprio questo, sottolineò, quarta risposta, che rende le macchine non infallibili. Anzi, disse che l'infallibilità non è necessariamente un "un requisito per l'intelligenza".

Per quanto riguarda la quinta obiezione, "il merito per le scoperte di un allievo dovrebbe essere assegnato al maestro. In caso di successo, l'insegnante sarebbe lieto della riuscita dei suoi metodi di educazione, ma non pretenderebbe di attribuirsi i risultati, a meno che non li avesse comunicati proprio lui all'allievo".


L'INIZIATIVA
E centrò il punto fondamentale sul quale i ricercatori dell'intelligenza artificiale si dannano l'anima:

Perché la mente non addestrata del neonato diventi intelligente, dovrà acquisire sia disciplina che capacità di iniziativa. [...] La disciplina da sola non è certamente sufficiente a produrre intelligenza: è richiesta, in aggiunta, anche l'iniziativa (e questa frase dovrà servire da definizione del concetto). Il nostro compito è quello di scoprire la natura di questo "residuo" che si presenta nell'uomo e cercare di "copiarlo" nelle macchine.

Non solo, ma introduce un concetto fondamentale, quello della comunicazione con gli umani, senza la quale l'intelligenza può risultare incomprensibile: "Alla macchina deve essere permesso di avere contatti con gli esseri umani affiché possa adattarsi ai loro criteri".


LA POESIA
Gli rispose Geoffry Jefferson, direttore del dipartimento di neurochirurgia dell'università di Manchester e fautore della lobotomia frontale:

Fino a quando una macchina non potrà scrivere un sonetto, o comporre un concerto, sulla base di pensieri e di emozioni sentite come tali e non per una casuale combinazione di simboli, cioè finché non solo possa farlo, ma sappia di averlo fatto, noi non accetteremo mai che possa essere l'eguale del cervello. Non c'è meccanismo capace di provare (e non semplicemente segnalare artificialmente, il che sarebbe facile da ottenere) piacere per i successi conseguiti, dolore quando le sue valvole bruciano, gioia quando riceve dei complimenti, tristezza per gli errori commessi, l'incanto del sesso, la collera o la delusione perché non riesce ad avere ciò che desidera.

La risposta di Turing è spiazzante e geniale, perché sposta il terreno:

Io non credo che si possa porre il limite di sonetti, sebbene il paragone non sia molto corretto perché un sonetto scritto da una macchina sarebbe meglio apprezzato da un'altra macchina.


QUESTO E' SOLO UN'OMBRA DEL FUTURO
E poi racconta come vede il futuro, mettendo giù quella che ha il sapore di una profezia:

Questo è solo un assaggio di quello che verrà, soltanto un'ombra di quello che sarà. Dobbiamo acquisire un po' di esperienza con la macchina prima di scoprire veramente le sue capacità. Potrebbero volerci degli anni prima che ci applichiamo sulle nuove possibilità, ma non vedo perché [la macchina] non dovrebbe accedere a qualunque campo normalmente dominato dall'intelletto umano e alla fine competere a pari condizioni.

E questo è iCub, un progetto nato a Genova che sembra uscito direttamente dalla testa di Turing... E' una una piattaforma aperta, una delle più promettenti che esistano.

mercoledì 21 novembre 2012

"Tutti non c'è". Ovvero: la correlazione non basta, lingua è regole

Il linguaggio ovviamente si costruisce un po' per volta. Ma finora ho sempre pensato che prima si apprendessero le parole per assonanza e solo molto dopo si arrivasse all'apprendimento delle regole di grammatica. Mi spiego: credevo che imparare a dire correttamente "il cane mangia" e "i cani mangiano", declinando correttamente il verbo, si apprendesse con un meccanismo di correlazione per rinforzo, per cui sentire tante volte "cane" associato a "mangia" e "cani" a "mangiano" (e mai "cane" a "mangiano") portasse a un collegamento rinforzato tra le due parole che ingegneristicamente potrebbe essere un coefficiente alto tra i due elementi oppure, in termini di reti neurali, pattern più fortemente associati nello schema di risposta di una rete, il che è lo stesso.

Ma forse non è così. Mi figlia, da poco passati i due anni, sta imparando a declinare correttamente i verbi sulla base di un evidente ragionamento di tipo grammaticale. Per esempio dice "puliscio", oppure "salo", per indicare la prima persona singolare rispettivamente del verbo pulire e salire. Non ha mai sentito da nessuno dire alcuna delle due parole. Le ha costruite lei, evidentemente estendendo la regola da parole sentite dire e imparate, come "gioco" o "mangio". Insomma, non ha imparato solo singole parole. E non ha solo imparato ad associarle a "io". Ha imparato anche che in generale a "io" si associano verbi (parole che indicano azioni) che finiscono con la lettera "o". E questa è una regola generale, non è una semplice correlazione tra due parole. Indica una correlazione tra classi e non tra singole parole, l'introduzione di un suono, di una variazione fonetica, che viene associato trasversalmente alle singole parole in funzione di un'altra parte della frase.

La conferma arriva da altri elementi. Qualche mese fa diceva frasi tipo "Tutti non c'è", per indicare che non c'era nessuno. Non aveva mai sentito nessuno dire una frase genere, in italiano chiunque dice "non c'è nessuno". Di nuovo era una sua costruzione. "Tutti" indica l'insieme composto da mamma, papà, cane, nonni e zia. "Tutti non c'è" voleva dire letteralmente - e il ragionamento è perfettamente corretto - che tutti gli elementi di questo insieme non ci sono. Solo più tardi ha imparato a dire, come dice ora, "non c'è nessuno". Il ragionamento ha preceduto l'apprendimento per correlazione, cioè la costruzione della frase per imitazione.

Allo stesso modo, diceva "non c'è ancora", per dire che una cosa non c'era più. Per esempio "non c'è ancora nonna", per dire che la nonna era andata via (non per dire che doveva ancora arrivare). Il ragionamento, di nuovo: a tavola "ancora pasta" vuol dire "datemi ancora pasta, ne voglio ancora". La negazione è "non voglio ancora pasta" (oppure "c'è ancora pasta" si nega con "non c'è ancora pasta"). Quindi la negazione di "c'è ancora la nonna" è "non c'è ancora". "Non c'è più" è una frase che ha imparato in seguito, e rappresenta in effetti, a rigore logico, un'eccezione al senso della parola. Non a caso in inglese si dice "some more" oppure "no more" per dire "ancora" e "basta, non più". Gli anglosassoni usano la stessa parola ed è più logico così.

Dal momento che mia figlia non ha mai sentito dire a nessuno "non c'è ancora" qualcosa per indicare che quella cosa "non c'è più", vuol dire che è stata lei a costruire la frase, sulla base di una costruzione linguistica che va dal particolare al generale, cioè con l'individuazione di regole.

In pratica questo cosa ci dice? Ci dice che non possiamo realizzare dei programmi in grado di parlare correttamente una lingua umana affidandoci soltanto o prevalentemente a una intelaiatura fatta di correlazioni rinforzate o indebolite tra le parole. Semplicemente non è così che funziona il cervello e di conseguenza il nostro programma non sarà in grado di emularne le capacità linguistiche. Il che, corollario, significa che i traduttori automatici da una lingua all'altra non saranno mai sufficientemente accurati finché si baseranno solo su correttivi basati su reti di correlazioni fonetiche. Occorrerà introdurre necessariamente anche delle capacità di apprendimento linguistico vero. Il sistema deve essere grado di andare dal particolare al generale e di individuare delle regole.



mercoledì 15 agosto 2012

Il furto del tempo

"Scusate la lunghezza di questa lettera poiché non ho avuto il tempo di farla più corta". Con questa citazione, tratta da un francese (o una francese) del settecento inizia una nota di Leonardo Sciascia a Il giorno della civetta. Perché con l'illuminismo, l'attenzione alla organizzazione del sapere, alla catalogazione delle cose in modo che i fatti possano essere una buona base per il pensiero, è emerso che ci vuole più tempo e maggiore capacità a scrivere in modo sintetico che in modo prolisso (nozione che dopo quasi tre secoli non è ancora arrivata nelle università italiane).

Nel giornalismo la questione si riduce a un problema di furto di tempo. Se chi scrive non impiega il tempo necessario a sintetizzare e a rendere comprensibile la sua comunicazione, quel tempo dovrà mettercelo il lettore. E' il centro stesso del lavoro giornalistico. Un testo molto preciso ma poco comprensibile richiede molto tempo per essere digerito. Si instaura tra il giornalista e il lettore una sorta di contratto. Una comunicazione richiede complessivamente un certo tempo: una parte la mette chi scrive, un'altra chi legge. Tanto più tempo risparmia il giornalista, tanto maggiore è il tempo che ci deve mettere il lettore per leggere la (lunga) notizia fino al fondo e per comprenderla.

Il fatto è che il lettore è disponibile a impiegare sulla notizia solo una certa quantità di tempo e di concentrazione, in funzione all'importanza che per lui o lei riveste. Perciò succede che il tempo richiesto a volte diventa troppo e il contratto si rompe: il lettore non legge più la notizia.

Ciò che non serve, non è inutile, è dannoso: perché confonde, attira l'attenzione e fa fare più fatica a capire il contenuto vero. E' un principio perfettamente noto in ingegneria, dove si definisce "rumore" tutto ciò che non aggiunge nulla alla comunicazione. Se per indicare un numero bastano 2 bit, e invece noi ne trasmettiamo 6, i quattro in eccesso, che sono ridondanti, consumano capacità di elaborazione del processore che li deve interpretare inutilmente. E aumentano anche il rischio di una sbagliata interpretazione da parte del processore, nel caso di qualche errore lungo la linea.

In fondo l'apprendimento di una mente artificiale si risolve in questo: estrarre da un insieme di elementi ambientali l'informazione. Non essendo prigri per definizione, i robot forse saranno dei buoni giornalisti.

giovedì 7 giugno 2012

Rete a riconoscimento del già visto

Tentare di realizzare una memoria sul modello di quella umana potrebbe partire da questo esperimento: costuruire una rete neurale collegata a una webcam (meglio sarebbero due, ma forse conviene in una seconda fase, per avere una fonte video stereoscopica) sulla quale arriva un flusso continuo di oggetti visualizzati dentro una dimensione reale piena di rumore (altri oggetti, persone, mobili...). In una prima fase lo scopo sarebbe quello di insegnare alla rete a distinguere ciò che ha già visto da quello che è nuovo.
In una seconda fase dovrebbe poi imparare a distinguere tra loro gli oggetti conosciuti e ad associare a ciascuno un simbolo, anche questo in arrivo dal mondo reale, cioè disegnato su un pezzo di carta e mostrato.

Il riconoscimento di singoli oggetti esiste già ed ha raggiunto livelli anche relativamente evoluti. Ma si basa su un apprendimento guidato con il quale la rete gradualmente, modificando progressivamente i pesi dei propri neuroni, impara a riconoscere ciò che il progettista decide e indica. Insomma ci sono dei target molto chiari, non c'è autonomia. La rete non distingue ciò che ha visto da ciò che non ha visto, impara solo a riconoscere determinati oggetti. Con questo altro approccio invece la rete guadagna un certo grado di autonomia che consente poi in un secondo tempo associazioni tra oggetti dell'universo di riferimento, elemento finora scarsamente esplorato negli esperimenti di robotica.

Memoria per associazioni? Per una fuga rapida

Il motivo per cui la memoria funziona per associazioni, partendo dai sensi, probabilmente ha un'origine oltre che evolutiva anche funzionale. E' fondamentale per un animale che si trova davanti a un predatore riconoscerlo immediatamente. Perciò il cervello deve funzionare in modo da richiamare subito alla memoria le caratteristiche della figura che ci si trova davanti. Per fare questo occorre un meccanismo diretto. Se la memoria avesse funzionato come la griglia di un hard disk, in cui per accedere alle informazioni occorre fare una scansione, dell'indice delle informazioni, l'accesso sarebbe stato decisamente più lento. Tutte le funzioni primarie, l'alimentazione, l'accoppiamento, la gestione dei rapporti sociali, esigono un accesso alla memoria molto rapido. Tutte le cose la cui presenza non è immediata naturalmente sono meno urgenti e consentono un pensiero più lento e speculativo. Per questo motivo la memoria è associata in primo luogo ai sensi e in questo modo alla realtà immediata. Le cose non immediatamente presenti, come il ricordo di un fatto avvenuto in passato in un posto lontanto, possono essere richiamate con meno urgenza ed essere oggetto di un pensiero più articolato nel richiamo.

Probabilmente poi c'è anche un motivo evolutivo, legato al fatto che una griglia di informazioni va progettata, è difficile immaginarne una evoluzione da qualcosa di primitivo a qualcosa di più evoluto senza un intervento esterno di progettazione.

venerdì 27 aprile 2012

Sintesi vocale naturale

Per realizzare un corretto sintetizzatore vocale il modo più efficiente è probabilmente quello di assegnare a ogni parola, in un dizionario, il suo corrispettivo nell'alfabeto fonetico internazionale (Ipa) e far leggere al sintetizzatore quest'ultimo. In questo modo la lettura, trovando correttamente codificati accenti e suoni, non dovrebbe presentare sorprese (per esempio "asino" letto con la esse dolce e non pronunciata come in Sassari).

Ma le persone non imparano a leggere in questo modo. Noi associamo mnemonicamente dei suoni a dei segni, e in genere buona parte di questi sono parole intere. Quello che un bambino fa, per prima cosa, è creare un dizionario di suoni e segni associati. Le regole fonetiche applicate alle singole lettere si applicano soltanto sulle parole sconosciute, di quelle conosciute la pronuncia è associata alla parola, non alle lettere che la compongono. In italiano una chiara dimostrazione di questo meccanismo emerge dall'uso della s: nessuno confonde la pronuncia da affidare a questa lettera in "sale" o "asta" con quella che alla stessa lettera viene assegnata in "visuale" o "tesoro". Eppure si tratta di due suoni diversi. Ma la cosa più sorprendente è che in genere nessuno si accorge che si tratti di suoni diversi finché la sua attenzione non viene portata sul problema.

Perciò un sintetizzatore che segua il percorso di apprendimento umano deve prima essere educato alle parole intere con un processo di imitazione (pronuncia della parola, comparazione del suono originale con quello pronunciato, correzione e nuova pronuncia, in un ciclo che termina quando la parola pronunciata e quella originale si assomigliano molto) e solo dopo essere educato alle lettere. In questo modo, come nel caso umano, le regole di pronuncia delle lettere saranno applicate alle parole solo in via complementare e non in via prioritaria. Così la pronuncia risulterà naturale e l'apprendimento della macchina risulterà simile a quello umano.

Diversamente, occorrerà associare a ogni parola il suo corrispettivo codice fonetico, che non sempre è disponibile, e il comportamento della macchina sulla pronuncia delle parole sarà molto artificiale e del tutto separato dall'apprendimento del linguaggio (in termini di significato e uso delle parole), a cui invece dovrebbe essere legato.

giovedì 26 aprile 2012

Jobs off topic

Questo è un post un po' fuori tema ma ho deciso di pubblicarlo lo stesso, mi sembra pertinente ai problemi dell'intelligenza... :)

Il fatto che Steve jobs sia diventato un leader carismatico è la conseguenza del fatto che viviamo in una società che non crede e non vuole credere più a niente. Tra gli anni 50 e 70 i leader carismatici erano considerati Gandhi, Che Guevara, Mao: persone che, nel bene o nel male, proponevano un cambio radicale della società. Oggi il leader carismatico è un uomo che promuove il sogno di fare dei telefonini migliori, più belli e funzionali. E' il segno che la società non vuole credere in qualcosa, non ne ha più il coraggio, ma ha bisogno di credere in qualcuno e si sceglie dei leader minimalisti. E' ben triste il nostro destino se a cambiare le nostre vite è la grafica rinnovata di un cellulare.

giovedì 12 aprile 2012

Questo non c'è ciccio

"Questo non c'è ciccio". Mia figlia, 17 mesi, indica la catenina di plastica che serve a evitare che il ciuccio cada per terra quando se lo toglie di bocca. A una estremità della catenita è legata una pinzetta che si stringe sul colletto. All'altra è legata il ciuccio. Solo che, staccato per essere lavato, adesso il ciuccio, il "ciccio" come lo chiama lei, non c'è. La frase vuole dire a tutti gli effetti "Sulla catenina manca il ciuccio". La prima cosa che manca alla frase è la preposizione. Le prime frasi complete dei bambini mancano di preposizioni, o di casi, a seconda delle lingue. Il tipo di complemento (se di termine, di specificazione, oggetto, ecc) si capisce dal contesto. Mia figlia poi usa in modo particolare "c'è", che può assumere vari significati: "è", "c'è", "voglio", "dammi". Per esempio "non c'è pappa" vuol dire "non voglio più pappa".

Oppure "questo è nonno", indicando un'auto, significa "questa è la macchina di nonno". Una cosa che sembra mancare è la nozione di soggetto. Le frasi sembrano essere piane, senza un centro e una periferia, come in genere sono le frasi degli adulti: un soggetto, un'azione, un oggetto e vari complementi, con un progressivo spostamento dal centro dell'azione alla sua periferia. E' difficile stabilirlo però con certezza, potrebbe essere solo una suggestione. O potrebbe indicare che il cervello è più predisposto per una organizzazione piatta del linguaggio che per una gerarchica e funzionale, come quella che si acquisisce da adulti.

domenica 11 marzo 2012

Massa neurale

Mia figlia ha un anno e mezzo e la sua capacità di apprendimento è impressionante. Ogni giorno non solo apprende cose nuove, ma le mette in relazione e impara ad esprimerle.

Uno dei motivi per i quali un bambino di un anno e mezzo ha una velocità di apprendimento non paragonabile a quello del pur eccezionale robot icub sviluppato a Genova è che la massa cerebrale del bambino cresce. Più punti e più connessioni si sviluppano nella rete neurale di un bambino, mentre la struttura neurale del robot, pur evolvendosi, non cresce in termini quantitativi. Il numero di punti e di connessioni è sostanzialmente stabile. Perciò, anche raffinando ed evolvendo la struttura della rete neurale del robot, non ci potrà mai essere una reale competizione finchè la struttura "cerebrale" della macchina non sarà in grado, oltre che di apprendere nuovi pattern, di accrescere significativamente la propria massa durante l'apprendimento e in funzione di questo.

mercoledì 22 febbraio 2012

Cnr studia l'intelligenza della muffa, nuovo modello per Internet

Roma, 22 feb. (LaPresse) - Alcuni studi sperimentali hanno dimostrato che la Physarum Polycephalum, una muffa mucillaginosa di colore giallastro che si nutre di spore e batteri, è in grado di compiere attività sorprendenti per un organismo così semplice, come trovare il cammino più corto in un labirinto. Da questi esperimenti e dal modello matematico da essi ricavato, Vincenzo Bonifaci, dell'Istituto di analisi dei sistemi ed informatica 'Antonio Ruberti' del Consiglio nazionale delle ricerche di Roma (Iasi-Cnr) ha sviluppato un'analisi matematica che conferma come il 'ragionamento' della Physarum Polycephalum sia un 'algoritmo naturale', frutto di un'evoluzione di milioni di anni.

"In questi esperimenti dell'università giapponese dell'Hokkaido, la muffa è stata distribuita uniformemente sopra un labirinto dove sono stati collocati due fiocchi di avena, cibo di cui la muffa è ghiotta. Col passare delle ore, la muffa si ritrae dai percorsi che non portano al cibo, concentrando la massa su quello più corto", premette Bonifaci. "Il nostro studio ha analizzato matematicamente il meccanismo biologico che conduce la muffa a riconfigurarsi nel cammino più breve: ogni 'capillare' della Physarum si espande o si contrae a seconda del maggiore o minore flusso di sostanze nutritive, secondo precise equazioni identificate dai biologi. A sua volta, la maggiore o minore dilatazione del condotto comporta una variazione del flusso attraverso di esso, dando luogo a un processo dinamico".

Lo studio, svolto dal ricercatore del Cnr in collaborazione con colleghi del Max Planck Institute for Informatics tedesco e presentato al convegno internazionale 'Symposium on discrete algorithms' di Kyoto, ha evidenziato come "il meccanismo di regolazione dei 'capillari' sia una conseguenza matematica, indipendente dalla complessità del labirinto sottostante", afferma Bonifaci. "Si potrebbe dire che l'evoluzione, in milioni di anni, ha messo a punto la regolazione dei capillari della Physarum in modo tale da ottenere l'algoritmo giusto per il problema del cammino più breve". Questo tipo di ricerche ha due finalità. "La prima è comprendere i meccanismi alla base del comportamento intelligente degli organismi più semplici: senza questo primo passo non si può sperare di afferrare i medesimi meccanismi negli organismi più evoluti e complessi come gli animali o l'uomo", spiega il ricercatore. "La seconda finalità è trovare approcci alternativi e potenzialmente fruttuosi per l'ottimizzazione di reti, per esempio il progetto di una rete di connettività a basso costo, ma anche per migliorare i metodi di instradamento del traffico Internet e per provare nuovi approcci applicativi nel settore dei trasporti e delle telecomunicazioni".