Prof. Raffaella Folgieri

Post on 03-Oct-2021

10 views 0 download

Transcript of Prof. Raffaella Folgieri

SISTEMI INTELLIGENTI Appunti del corso 

Prof. Raffaella Folgieri Dipartimento di Filosofia, Università Statale di Milano – Italy 

Riferimenti: ufficio: cortile della Ghiacciaia, Dip. Filosofia, secondo piano via Festa del Perdono 7 email: Raffaella.Folgieri@unimi.it 

Colloqui: previo appuntamento via email

INTRO: LA CONOSCENZA Definizione da vocabolario - Conoscenza: 1) Facoltà, atto, modo, effetto del conoscere. 2) Rapporto tra soggetto e oggetto, tra pensiero ed essere che si può configurare in vari modi (sin. gnoseologia)

gnoseologìa s. f. [dal lat. mod. gnoseologia, termine coniato dal filosofo ted. A. G. Baumgarten (1714-1762) con il gr. γνοσις -εως «conoscenza» e -λογια «-logia»]. – Termine usato (in una partizione ormai desueta della filosofia in metafisica, etica e gnoseologia) per indicare la dottrina o teoria della conoscenza umana, con riferimento soprattutto alla ricerca dei suoi fondamenti, alle sue strutture e modalità, nonché alla sua validità e verità. Anche la dottrina, la teoria del conoscere enunciata da un determinato filosofo, da una determinata corrente di pensiero: g. aristotelico-tomista, g. empiristica, g. kantiana, ecc. Nell'età moderna analizza i fondamenti e la validità della conoscenza nel rapporto tra il soggetto e l'oggetto della conoscenza. Nelle culture anglosassoni è intesa come la teoria della conoscenza.

DISCUSSIONE PRELIMINARE: LE SCIENZE COGNITIVE L’intelligenza è una proprieta' degli individui o della comunicazione (tra individui, tra individuo e ambiente). Richard W. Weyhrauch concorda con la seconda asserzione. Per esercizio, sviluppare una propria analisi/opinione su questo tema (vi interrogherò alla prossima lezione). Facciamo una panoramica introduttiva, che ci spiegherà meglio la necessità di questo corso.

Stretto legame tra conoscenza, apprendimento, ragionamento (decision making, problem solving… approfondire in Rete) Questi temi sono da sempre affrontati dalla Filosofia e dalla Psicologia (comprese le varie branche come la pedagogia o la didattica). Se volete approfondire il tema filosofico, basta cercare “conoscenza” su Wikipedia… un discreto punto di partenza per muoversi poi attraverso l’escursus filosofico cercando altro in Rete. Per ora ci interessano i vari approcci in Psicologia, che hanno attinto all’AI per sviluppare le Scienze Cognitive. Lasciamo al passato strutturalisti e funzionalisti. Oggi si seguono principalmente (semplificando, ovviamente) tre linee di pensiero: comportamentista, percettivista, cognitivista (why we are here).

COMPORTAMENTISMO: è basato sull'assunto che il comportamento esplicito è l'unica unità di analisi scientificamente studiabile della psicologia. La mente è considerata una black box, di cui non si può conoscere il funzionamento interno che, del resto, non interessa. Ciò che interessa ai cognitivisti è ottenere una comprensione empirica e sperimentale tra stimoli ambientali e risposte comportamentali. Tra gli assunti principali più ricordati del comportamentismo ricordiamo il condizionamento (Pavlov): una forma di apprendimento che dice che l’associazione ripetuta di uno stimolo ad una risposta che non gli è direttamente correlata farà in modo che, dopo un lasso di tempo, a tale stimolo segua la risposta condizionata. Dunque la conoscenza per i comportamentisti si realizza attraverso l’associazione tra ripetuti stimoli ambientali e l’azione da intraprendere. Ci torneremo, ma intanto vi invito a soffermarvi sul concetto di apprendimento con rinforzo.

PERCETTIVISMO: la percezione è vista come il processo psichico che opera la sintesi dei dati sensoriali in forme dotate di significato. Diversi assunti a seconda dei tempi storici e delle teorie. Concentriamoci sulla Gestalt (il tutto è più della somma delle singole parti) e sul concetto di insight: intuizione della struttura del problema che porta ad una sua ristrutturazione per poi giungere alla soluzione. Secondo l’approccio comportamentista i problemi (acquisizione della conoscenza) si risolvono con un criterio appreso attraverso tentativi ed errori; per la Gestalt (forma, schema, rappresentazione) il criterio di spiegazione è formato dal pensiero, dalla comprensione e dall’intuizione. Dopo una crisi, la Gestalt oggi è rivalutata da modelli di computazione di chiara ispirazione gestaltica (es, teoria FACADE). La teoria si adatta bene alle reti neurali… Per approfondire il pensiero comportamentista o percettivista è sufficiente saper cercare informazioni in Rete, noi ci soffermeremo maggiormente sull’approccio cognitivista (di nostro maggior interesse, e vedremo perché).

COGNITIVISMO: metafora mente come un calcolatore. I cognitivisti vedono il cervello come un elaboratore di informazione (simbolica).

Il cognitivismo nasce da concetti informatici che si sviluppano negli anni ’50… quindi: non vi chiedete perché siete qui a seguire questo corso, FONDAMENTALE per chi studia Scienze Cognitive.

Qui risiedono tutti i motivi per cui siete qui (ricordate?... why we are here). L’architettura di elaboratore cui il cognitivismo fa riferimento è la macchina di Von Neumann (Si veda materiale di altri miei corsi, o si cerchi in Rete. Caratteristiche – in breve: memoria, teoricamente illimitata; CPU, veloce, seriale; procedure codificate, programmi). Modello TOTE: Test-Operate-Test-Exit (verificare, eseguire, verificare, terminare), esposto nel testo Piani e struttura del comportamento di Miller, Pribram, Galanter.

Successivamente il cognitivismo entra in crisi: avvento del calcolo parallelo. L’informazione non è più simbolica o proposizionale e viene codificata nell’architettura secondo un modello di attivazioni e connessioni… reti neurali e, da lì, A.I. (Artificial Intelligence). Si sviluppa un nuovo orientamento di “Scienza Cognitiva”, in gran parte influenzato dalle nuove evoluzioni dell’Informatica.

La Scienza Cognitiva è multidisciplinare ed utilizza metodi, teorie e dati empirici da psicologia, linguistica, neuroscienze, scienze sociali, comunicazione, filosofia, biologia, matematica, fisica e, non messe in ultimo per importanza, Informatica ed Intelligenza Artificiale. Si torna dunque agli scopi del corso.

Gli stati (o processi) mentali sono l’oggetto di studio delle scienze cognitive. Il comportamento umano è il risultato di un processo cognitivo di elaborazione delle informazioni (information processing) articolato e variamente strutturato.

- Inciso: mia impostazione in linea con il pensiero di Neisser (seconda riflessione, anni ’80), influenzato da impostazione di James Jerome Gibsson. Approccio ecologico: costruzione della realtà esterna secondo un modello non perseguibile in ambito strettamente di laboratorio, ma in circostanze ambientali quotidiane (Fisica… ecosistemi… ). -

Modello di Von Neumann (semplificato):

Dunque cosa vedremo in questo corso? Tutti i concetti relativi a quanto esposto sopra e anche gli strumenti per realizzarli. Faccio mia una citazione di Piaget: “Se ascolto dimentico, se vedo ricordo, se faccio capisco”… Il progetto da presentare a fine corso comporta l’acquisizione di conoscenze informatiche (se la scelta ricade sul progetto tecnico) necessarie per poter costruire un sistema funzionante. Per ottenere le competenze obiettivo del corso è necessario dedicare tempo agli esercizi che saranno proposti durante le lezioni. L’esame non è pensato per accertare la capacità di mandare a memoria questi appunti, ma per verificare la comprensione degli argomenti e la capacità di applicarne i contenuti a specifiche situazioni.

MENTE, INTELLIGENZA, CONOSCENZA E APPRENDIMENTO Intelligenza, conoscenza e apprendimento: limiti sfumati… Spesso intelligenza umana e pensiero sono concetti associati. La discussione è ancora aperta. Come apprendono gli umani, quali sono le abilità di ragionamento alla base dei processi di apprendimento?

Discussione: Le macchine apprendono? Come? Possono definirsi intelligenti? Una macchina può pensare?

Discussione 1: L’elaboratore come mente (Definizione di Mente - Definizione di Computer)

Computer o elaboratore? Un elaboratore è una macchina. Un elaboratore è solo una macchina? In che senso un elaboratore digitale è una macchina? Cosa vuol dire elaborare?

Contributo per risposte: dalle Scienze Cognitive hanno base nella psicologia e si ispirano inizialmente al modello di elaboratore di Von Neumann, facendo poi propri interrogativi ed in parte modelli e aspirazioni dell’Intelligenza Artificiale. Ma.. l’Intelligenza Artificiale si è ispirata a modelli biologici (es. Reti Neurali). Il mutuo interscambio di concetti e avanzamenti nelle due discipline rende ormai difficile dire se le Scienze Cognitive si ispirino all’Intelligenza Artificiale o viceversa: stretta interdipendenza.

Figura 1 Modello di Von Neumann (semplificato)

Obiettivo delle Scienze Cognitive: realizzare modelli computazionali per simulare sistemi intelligenti (o essere utilizzati da questi) per comprendere e per riprodurre i meccanismi di funzionamento del cervello. Si indagano i componenti di base dei processi cognitivi per trovare pattern comuni per stesso meccanismo mentale, ricercando le relazioni tra l’apparato fisico e la cognizione. Le ricerche riguardano: acquisizione delle informazioni e meccanismi per processarle, ritenerle e richiamarle in memoria, acquisizione ed evoluzione del linguaggio, comprensione ed elaborazione di concetti, ragionamento e problem solving. L’oggetto di studio è l’intelligenza in senso ampio, intesa dall’A.I. in modo particolare come computazione ed elaborazione.

Mente umana e mente digitale si assomigliano davvero? Intelligenza e conoscenza sono concetti strettamente collegati e, dunque, quali sono le somiglianze tra esseri viventi e macchine?

Si pensi ad un neonato. Programmazione “di base”: mangiare, bere espellere gli scarti, piangere per comunicare. Input e output di base e meccanismi per il reperimento di energia che ne permetta la sopravvivenza. Una macchina esce dalla fabbrica del produttore in grado di assorbire energia e trasformarla in funzione di input e output di base. E la mente? Inizialmente ambo i sistemi, sia quello umano che quello sintetico sono “tabula rasa”: il processo di apprendimento trasformerà un bambino in adulto e una macchina in elaboratore.

Che differenze ci sono tra i due meccanismi di apprendimento?

Poche. Sia la macchina che l’essere umano possono apprendere secondo meccanismi del tutto simili, che si suole inquadrare in una tassonomia che racchiude tre macro categorie:

- apprendimento supervisionato, - non supervisionato e - con rinforzo.

In realtà quando si parla di esseri umani si parla anche di apprendimento emotivo... la difficoltà maggiore nel condurre il parallelo tra esseri umani e macchine è definire il significato dei termini istinto, conoscenza, emotività, intelligenza... La prima difficoltà nell’affrontare l’argomento è proprio dare la definizione di intelligenza: tutti ne comprendiamo il senso, ma come formalizzare il concetto, considerato l’ampio spettro e l’articolazione dei comportamenti intelligenti?

Un aiuto per individuare un comportamento intelligente: test per misurarla (organizzati su attività diverse e pensati per il confronto dei risultati ottenuti da diversi soggetti) soggetti e non individui: un sistema intelligente può essere umano, animale, non umano. elaboratore e non computer: classe di macchine (quelle odierne), non deputata al solo computo Non tutti accettano di includere i sistemi non umani tra quelli intelligenti. Qui si definiranno intelligenti anche quei sistemi non umani che esibiscano comportamenti analoghi a quelli umani, quindi giudicando l’abilità dei sistemi di eseguire compiti intellettuali, indipendentemente dal sistema fisico sotteso.

Definizione di sistema intelligente: aggregato complesso di oggetti ed entità, un sistema articolato. Elementi caratterizzanti: robustezza, fault tolerance; flessibilità; calcolo parallelo; dissipazione di poca energia; gestione di informazioni sensoriali affette da rumore. In tabella: capacità associate all’intelligenza per distinzioni tra sistemi. Organismi biologici semplici (virus) e macchine (robot).

Capacità Virus Robot Interazione efficace con ambiente SI NO* Adattamento a modifiche ambientali SI NO* Generalizzazione, inferenza SI NI Analisi NO NI Sintesi NI NI Evoluzione SI NI Interazione con altre entità (intelligenza emotiva) NO NI

Tabella 1 Capacità associate all'intelligenza: virus vs robot

* per il momento… l’efficacia è qui intesa come autonomia e corretto (in senso umano) apprendimento.

Sistemi intelligenti: caratterizzati dall’interazione tra le varie parti. Funzionamento interpretato come tutt’uno. Valutazione della dimensione temporale del funzionamento di un sistema e l’interazione funzionale e sostanziale tra le varie parti (rif. tecniche di Brain Imaging). Punti fermi sia per intelligenza biologica che non biologica:

- contrapposizione dell’intelligenza all’istinto e - adattabilità genetica contrapposta all’adattabilità cognitiva.

Prospettive distinguibili per i sistemi intelligenti:

- biologica, capacità di apprendere (es. i neuroni). - robotica: robotica antropomorfa, animatronica (Capeck, 1921;

Asimov, dal 1940): l’A.I. incontra il mondo reale. - cibernetica concerne il comportamento, il controllo e la

comunicazione tra esseri intelligenti e macchine.

Temi dell’A.I.: - algoritmi genetici/evolutivi (Darwin, 1859): ispirati da

camaleonti, zebre, falsi occhi, membrana delle dita degli uccelli; - Intelligenza Artificiale stessa, intesa come lo studio di sistemi

che pensano o agiscono come gli uomini (razionalmente); - Artificial Life, ovvero la capacità di organismi sintetici di

interagire con altri esseri (ant colony); giochi (gioco della vita – game of life, Conway, 1970); automi cellulari (modelli della computer graphic). Agli algoritmi si richiede capacità di analisi e sintesi e vicinanza al comportamento intelligente degli esseri viventi.

Il comportamento intelligente implica apprendimento: - Inizio discussioni sull’apprendimento: Cartesio (1596 – 1650) che

affronta il tema della separazione corpo-mente. La mente consiste di idee ricordate dalla ghiandola pineale (epifisi); il corpo è parte motoria e parte sensoriale (imitata dagli automi).

- Solo nel 1994 Damasio introduce lo stretto legame esistente tra l’intelligenza razionale e l’intelligenza emotiva. Di tali discussioni si parlerà ampliamente (e si sollecitano approfondimenti).

In effetti la distinzione tra ragione ed emozione si può far risalire a Platone. Tutta la filosofia e nostro modo di pensare successivi hanno implicitamente operato questa distinzione: emozioni come “disturbo”, impedimento per razionalità, per ragione. Ma… l’esperienza comune ci dice che le più grandi imprese, scoperte, innovazioni, sono state possibili non tanto per la razionalità delle idee, quanto per la passione nel sostenerle. Però tutti tendiamo a distinguere tra ragione e sentimento, considerandoli in antitesi. (la creatività è vista come un processo irrazionale). Damasio: l’emozione ha legami fortissimi con l’apprendimento, la conoscenza e la sua applicazione.

Ma le emozioni possono essere definite in modo digitale? Se sì, un elaboratore può possedere emozioni?

Restano ancora altri interrogativi… come definiamo, ad esempio, la personalità? E come la mettiamo con alcune reazioni dovute all’interazione fisica con l’ambiente e alla stessa natura degli esseri viventi (si pensi al dolore)?

Eppure tutto quanto abbiamo visto ci fa pensare che i limiti attuali siano superabili, nel tempo. Del resto quando Leonardo progettava macchine avveniristiche, ai tempi poteva essere considerato un visionario, e le sue macchine fantascienza. La domanda che dovremmo porci: “Perché interessa creare macchine intelligenti?”. Principalmente per comprendere la mente umana. E’ più semplice ricostruire un apparato che simuli fedelmente la mente umana e sperimentare (in tutti i campi) e comprendere servendosi di tale apparato.

Le Scienze Cognitive si muovono su tre livelli: - logica formale: studia l’intelligenza ed i suoi processi

astraendo dal sistema fisico o biologico; - studiare l’intelligenza umana o animale attraverso

l’osservazione del comportamento degli organismi intelligenti;

- Intelligenza Artificiale: studia gli elaboratori cercando di comprendere i principi computazionali che soggiacciono all’organizzazione e al comportamento di sistemi e programmi intelligenti.

Tutti hanno come obiettivo la comprensione dei meccanismi cognitivi e del cervello.

Il punto di vista che qui interessa è quello che possiamo ricondurre alla pubblicazione del saggio “Computing Machinery and Intelligence” (Turing, 1950) che inaugura la nascita dell’Artificial Intelligence come branca della Computer Science che studia l’intelligenza esibita dalle macchine. Turing si pose, e pose agli altri ricercatori, la domanda: “Le macchine possono pensare?” E’ la prima espressione esplicita della visione di elaboratore come mente.

Del resto il Cognitivismo nasce assumendo la metafora della mente come calcolatore. Von Neuman; modello TOTE: Test-Operate-Test-Exit (verificare, eseguire, verificare, terminare), Successivamente il cognitivismo entra in crisi, con l’avvento del calcolo parallelo - modello di attivazioni e connessioni… reti neurali e, da lì, A.I. (Artificial Intelligence). Si sviluppa un nuovo orientamento delle Scienze Cognitive, in gran parte influenzato dalle nuove evoluzioni dell’Informatica – logica sub-simbolica. L’elaboratore come mente porta a discussioni sulla conoscenza e quindi sui sistemi intelligenti, contrapponendo il punto di vista antropologico a quello robotico.

NOTE FINALI Karel Čapek (1890-1938) è l’autore di R.U.R. (Rossumovi univerzální roboti), in

italiano: "I robot universali di Rossum", dramma fantascientifico pubblicato nel 1920 in cui conia il termine “robot”, derivandolo dalla parola ceca robota (“schiavitù”).

Il gioco della vita (Game of Life) cui si fa riferimento nel testo, è un automa cellulare sviluppato dal matematico John Conway. E’ stato pubblicato nel 1970 su Scientific American, come gioco matematico avente lo scopo di mostrare l’emergere di comportamenti simili a quelli della vita a partire da regole semplici e dall’interazione di molti corpi. Si ispira all’ecobiologia e alla teoria della complessità. Ve ne sono molte versioni, con differenti regole. E’ interessante perché, dal punto di vista teorico, ha le potenzialità di una macchina di Turing universale (infatti ogni elemento può essere elaborato algoritmicamente).

Asimov, infine, scrisse molti racconti riguardanti i robot positronici. La maggior parte è raccolta nell’antologia “Tutti i miei robot”, seguita dalle

antologie “Io robot”, “Il secondo libro dei robot”, “Antologia del bicentenario” e “Tutti i miei robot”.

Il primo racconto che tratta dei robot positronici è Robbie (1940). Si suole ricordare Asimov per le tre leggi della robotica, che sono state di ispirazione per esperti di Robotica, di Intelligenza Artificiale e di Cibernetica.

Le tre leggi recitano: Prima legge: “Un robot non può recare danno a un essere umano, né può permettere che, a causa del suo mancato intervento, un essere umano riceva danno.” Seconda legge: “Un robot deve obbedire agli ordini impartiti dagli esseri umani, a meno che questi ordini non contrastino con la Prima Legge.” Terza legge: “Un robot deve salvaguardare la propria esistenza, a meno che questa autodifesa non contrasti con la Prima o la Seconda Legge.” In uno dei suoi ultimi racconti (“I robot e l’Impero”), nonché nell’ultimo capitolo della saga delle Fondazioni, Asimov introduce un legge più generale, che precede le altre, la legge zero, che recita: “Un robot non può danneggiare l'Umanità, né può permettere che, a causa del suo mancato intervento, l'Umanità riceva danno.” Conseguentemente alle tre leggi già elencate viene aggiunta la postilla: “A meno che questo non contrasti con la Legge Zero". E’ significativo, quasi a sottolineare una raggiunta capacità di ragionamento emotivo, che la Legge Zero sia postulata proprio dai robot (in particolare da R. Daniel Olivaw, uno dei più famosi personaggi-robot di Asimov). 

Concentriamoci sulla definizione di sistema intelligente. Le discussioni sulla conoscenza portano a discussioni sui sistemi intelligenti: punto di vista antropologico vs robot.

Sistema intelligente naturale: - aggregato complesso di oggetti ed entità, sistema articolato, calcolatore (sistema elettronico), cellula,

esseri viventi. - Elementi:

- Robusto e fault tolerant - Flessibile - Calcolo parallelo - Dissipa poca energia - Gestisce informazioni sensoriali affette da rumore

- Apprendimento: - Cartesio (1596 – 1650)

- Separazione corpo-mente - Mente: idee ricordate da ghiandola pineale (epifisi)

- Corpo: parte motoria, parte sensoriale (imitata da automi)… continua - Damasio (1994): intelligenza razionale ed intelligenza emotiva sono strettamente collegati

(approfondimenti qui: http://www.sicap.it/merciai/psicosomatica/students/damasio-s1.htm ) - Capacità associate all’intelligenza:

- Interazione efficace con ambiente: virus – SI; robot – NO - Adattamento a modifiche ambientali: virus – SI; robor – NO - Generalizzazione, inferenza: virus – SI; robot – NI - Analisi: virus – NO; robot – NI - Sintesi: virus – NI; robot – NI - Evoluzione: virus – SI; robot – NI - Interazione con altre entità (intelligenza emotiva): virus – NO; robot - NI

Sistemi intelligenti: interazione tra le varie parti. Funzionamento come tutt’uno.

- Dimensione temporale del funzionamento di un sistema - Interazione funzionale e sostanziale tra le varie parti

Punti fermi:

- Intelligenza contrapposta a istinto - Adattabilità genetica contrapposta ad adattabilità cognitiva

Sui sistemi intelligenti si distinguono tre prospettive: biologica, robotica, cibernetica.

Biologica: - Capacità di apprendere - Neuroni (unità del sistema nervoso)

Robotica: - Robotica antropomorfa. Animatronica (Capeck, 1921; Asimov, 1944): AI incontra

il mondo reale Cibernetica:

- Comportamento, controllo e comunicazione tra esseri intelligenti e macchine Sviluppi: - Teoria del controllo: stabile, robusto, lineare, non lineare, stocastico - Connessionismo: modelli del funzionamento del sistema nervoso centrale, reti

neurali - Algoritmi genetici/evolutivi (Darwin, 1859): camaleonti, zebre, falsi occhi,

membrana dita uccelli - Intelligenza Artificiale = sistemi che pensano o agiscono come gli uomini

(razionalmente) - Artificial life: capacità di interagire con altri esseri (ant colony); giochi (gioco della

vita); automi cellulari (modelli computer graphics). Nell’uomo si studiano in scienze cognitive.

- Algoritmi: capacità di analisi e sintesi

NOTA: Non ci addentreremo direttamente nell’esplorazione della robotica, ma per chi fosse interessato allo sviluppo di un progetto in tal senso, segnalo i seguenti link utili:

- CMU: http://www.cs.cmu.edu/~coral - OpenR Web page: http://www.tekkotsu.org/openr-install.html - Urbi: (Universal Robotics Body Interface)

(https://sourceforge.net/directory/os:windows/?q=urbi): linguaggio basato su reti client/server via Wireless; comandi via Telnet o con programmi in C++ o Java.

- *** Lego Mindstorm: più semplice, anche programmazione “visuale”, più economico delle soluzioni robotiche precedenti http://mindstorms.lego.com/en-us/Default.aspx

INTELLIGENZA BIOLOGICA: CENNI STORICI Si va da Aristotele (l’intelligenza risiede nel cuore - mente associazionista):

- Modello funzionale: idee, immagini, sensazioni - Principi associazione: similarità, opposizione, unità aristotelica

tempo/spazio A Galeno: prime osservazioni neurologiche: intelligenza nel cervello (ghiandola i cui umori – ormoni – sono portati in periferia mediante i nervi) Golgi e Cajal: il sistema nervoso dell’uomo è costituito da elementi (cellule) connesse in punti particolari (sinapsi). Von Helmholts scoprì che l’attività elettrica rilevata da Galvani (bisturi sui nervi della zampa di una rana) si trasmetteva da una parte all’altra di un neurone e da neurone all’altro. Bertrard e Lagley dimostrarono che alcuni farmaci potevano inibire la trasmissione del segnale elettrico

Localizzazionismo: - Frenologia (Gall, 1825)

- Localizzazione delle funzioni mentali - Modellazione ampiezza delle aree associate con l’uso della funzione (muscolo attivato)

- Se una regione si allarga - Protrude sulle regioni più vicine creando i solchi cerebrali

- Anatomical personology

Varie versioni

Teorie alternative sono: - Teoria del campo aggregato (Flourenss, 1823):

- Tutte le aree del cervello partecipano a tutte le attività intellettive

- Una lesione affligge tutte le attività intellettive allo stesso modo

- Connessione cellulare (Wernicke e Cajal, fine 1800): - I neuroni sono connessi tra loro in gruppi funzionali - Le connessioni sono in numero definito - Gruppi funzionali diversi danno origine funzioni intellettive

diverse - Quest’ultima è la teoria moderna delle funzioni cognitive

cerebrali circuiti neurali

INTELLIGENZA ARTIFICIALE: CENNI STORICI Teoria del controllo retroazionato (Maxwell, 1868): concetto di feedback

Teoria del controllo stocastico (N. Wiener and D. Kolmogorov, 1943) “Behavior, Purpose and Technology”, Rosemblueth, Wiener, Bigelow, articolo scritto a seguito della loro collaborazione.

Tutto nacque dalla necessità di costruire un meccanismo di puntamento aereo basato sul meccanismo di feedback durante la seconda guerra mondiale. Notate le similitudini con il comportamento umano, fu interpellato Roesmblueth. Fu presentata l’idea di una scienza dei meccanismi di controllo unificata per le macchine e gli esseri viventi (battezzata cibernetica dal greco kybernetes – timoniere). Il meccanismo di controllo del timone era uno dei sistemi a retroazione all'epoca meglio sviluppati). Maggiori approfondimenti qui: http://www.murzim.net/notiziario/980406.htm

Nel tempo si arriva al Machine learning (apprendimento automatico): area fondamentale dell’AI. Algoritmi e sistemi basati su osservazioni (esempi, dati, sensori) da cui la macchina acquisisce nuova conoscenza. Torneremo sul machine learning, ma occorre prima continuare con alcune conoscenze fondamentali per chi si vuole interessare di A.I. e di scienze cognitive. Intelligenza artificiale: il termine nasce nel 1956 ad opera del matematico americano John McCarthy, durante uno storico seminario interdisciplinare. Le premesse, però, sono molto più antiche.

Occorre partire da molto lontano con la “Pascalina” di Blaise Pascal (macchina di calcolo per aiutare il padre, amministratore fiscale della Normania): addizione e sottrazione automatica, primo calcolatore ad ingranaggi. Età vittoriana: Charles Babbage e le macchine calcolatrici a rotelle (fra cui “the difference engine”). Ne inventò una programmabile con schede perforate (per problemi tecnici, tuttavia, non funzionò mai). Inciso: affascinata dalla macchina analitica di Babbage, Ada Lovelace (Augusta Ada Byron), lavora alla sua implementazione. Con il suo lavoro crea quello che è conosciuto come il promo algoritmo pensato per essere elaborato da una macchina. E’ ricordata come la prima programmatrice al mondo (la mamma del software).

Seconda metà del XX secolo: è possibile disporre di dispositivi di calcolo e linguaggi di programmazione sufficientemente potenti per sperimentazioni di intelligenza. I relè sono sistituiti da valvole o tubi elettronici. 1946: nasce ENICA, concepito da Von Neumann (elaborazione a lotti – batch – di migliaia di informazioni al minuto. Programmazione tramite schede). Anni ’60: seconda generazione basata sul concetto di time sharing. Si passa dalle valvole ai transistor. Nel decennio ’50-’60 nascono ILP, LISP, POP, linguaggi di manipolazione simbolica. Rivista Mind, 1950: Alan Turing pubblica un articolo che tratta la possibilità di far comportare un computer in modo intelligente: si comincia a parlare del test di Turing.

Il test di Turing, per cui una macchina può essere considerata intelligente, oggi è stato comunque più volte superato da programmi (chatterbot, ne parleremo…) – anche se la questione è controversa - ma comportò una vera svolta. Searle, filosofo, ne confutò la validità attraverso la “stanza cinese”. Nello stesso anno: Samuel e primo programma capace di giocare a dama, scritto in Assembly. 1956: Newell, Shaw e Simon presentano il primo dimostratore automatico di teoremi, il programma LT, alla conferenza di Dartmouth, la stessa in cui viene coniato il termine AI. Inizialmente l’AI si concentra su euristiche di ricerca basate su tentativi ed errori e investiga su tecniche di apprendimento efficaci.

Grazie a Minsky, dopo il 1962 l’AI pone l’accento non sull’apprendimento, ma sulla rappresentazione delle conoscenza e sul connesso problema del superamento del formalismo e delle costrizioni dei vecchi sistemi. "Il problema della ricerca efficace con euristiche rimane un presupposto soggiacente, ma non è più il problema a quale pensare, per quanto siamo immersi in sotto-problemi più sofisticati, ossia la rappresentazione e modifica di piani" (Minsky, 1968).

Grazie a Minsky, dopo il 1962 l’AI pone l’accento non sull’apprendimento, ma sulla rappresentazione della conoscenza e sul connesso problema del superamento del formalismo e delle costrizioni dei vecchi sistemi.

Punti cardine: “società delle menti” (Minsky, rappresentazione distribuita

della conoscenza) e rappresentazione dichiarativa della conoscenza di McCarthy

(basi teoriche dell’AI).

Non è trascurato il punto di vista psicologico. La Carnegie Mellon University ha condotto (e conduce) molte ricerche per riprodurre i meccanismi del ragionamento umano. Un campo che registra molto interesse è quello dell’elaborazione del linguaggio naturale (approfondire), soprattutto per la traduzione di testi.

All’inizio degli anni ’70 prendono piede i sistemi di produzione, programmi che organizzano conoscenze (dati) per fornire risposte a precise domande attraverso l’applicazione di regole impostate. Sono presto rimpiazzati dai sistemi esperti (le regole di produzione erano poco flessibili), pensati soprattutto per attività di decision making o risk alarm. Permane, comunque, la questione del trattamento dell’incertezza, tipica delle problematiche reali. Mycin introduce l’uso di “valori di certezza” associati ai dati. Il successo non è quello sperato, per cui l’uso di regole precostituite e di sistemi basati su questo concetto viene lentamente abbandonato. Anche gli algoritmi genetici meriteranno un capitolo a sé.

Oggi all’Intelligenza Artificiale si associano le ANN, le SOM, il Machine Learning: tutti concetti che esploreremo approfonditamente senza tralasciare passaggi intermedi chiarificatori. 2006: cinquantesimo anniversario dell’AI. Due congressi: AI@50 "Dartmouth Artificial Intelligence Conference: The Next

Fifty Years" 50 anni di Intelligenza Artificiale - Campus Multidisciplinare in

Percezione e Intelligenza 2006 (CMPI), Albacete (Spagna)

MACCHINA E TEST DI TURING. NASCITA DELLE DISCUSSIONI SULL’INTELLIGENZA DELLE MACCHINE Pensiero ed intelligenza sono concetti spesso associati. La domanda che ha dato origine a gran parte degli sviluppi dell’AI è “Le macchine sono in grado di pensare?” La difficoltà nel fornire una risposta risiede in gran parte nella difficoltà di definire cosa vuol dire “pensare” (ci torneremo). Se si conoscessero dettagliatamente tutti i meccanismi della mente e dell’intelligenza umana, si potrebbero riprodurre con una macchina?

Molti si sono cimentati nel fornire una risposta e diversi sono gli orientamenti. Per approfondire e formare un vostro pensiero, indagate non solo sulle molte ricerche, ma fate riferimento anche a scienziati-scrittori (uno per tutti: Asimov), libri e film di fantascienza che, nel tempo, hanno interpretato e declinato i vari punti di vista. Quando si pensa all’AI, a chi non viene in mente HAL? (pensate al concetto di intelligenza emotiva di Damasio)

Noi siamo macchine, o, meglio, possiamo essere descritti con gli stessi meccanismi che si adottano per descrivere e progettare le macchine?

Ad esempio le Scienze Cognitive asseriscono di sì, visto che adottano un modello informatico.

Un altro esempio è dato dalla decodifica del genoma umano (GATTACA…).

Il genoma del bacterio Haemophilus influentiae e' composto di 1.830.137 coppie di basi (le "lettere" A, G, C e T), ossia circa 3,6x106 bit (poco meno di 0,5 Mbyte) di informazione. La funzione dei suoi 1743 geni non è nota nei dettagli, ma gli addetti ai lavori hanno cominciato a utilizzare da tempo, per la loro descrizione, gli stessi diagrammi temporizzati con cui si descrivono i circuiti elettronici.

Un essere umano può essere considerato una macchina? Se la risposta è positiva, allora, per definizione, esiste almeno una macchina “in grado di pensare”… …però alcuni fanno la distinzione tra macchine proteiche e macchine elettroniche… … Altri propongono una base simbolica dell’intelligenza (sistemi di simboli e regole di riscrittura, indipendenti dalla loro successiva materializzazione)… … altri ancora presentano un’ipotesi subsimbolica (l’intelligenza umana è il risultato della manipolazione di segnali, anche multidimensionali come le immagini)…

AI “classica” (GOFAI: Good Old-Fashioned AI) si basa più o meno esplicitamente su ipotesi simbolica “nuova” AI: più orientata a subsimbolismo

A George Boole, matematico britannico (1815 – 1864) si deve l’elaborazione di una matematica algebrica (che da lui prese il nome) che consente di effettuare procedure di calcolo grazie ad operatori (AND, OR, NOT…) che esprimono le leggi della logica.

Nel 1936 Alan Turing (1919-1954. Molte informazioni su un sito dedicato, fatto molto bene: http://www.turing.org.uk/turing/) crea (a livello teorico) una “macchina” o “automa” per dimostrare formalmente la possibilità di eseguire qualsiasi algoritmo (Abu Ja'far Mohammed ibn Mûsâ al-Khowârizmî) in un numero finito di passi. La prima operazione che secondo Turing occorre fare è scomporre un’operazione in passi semplici. Turing si concentrò sulle operazioni matematiche fondamentali, definendone i passi elementari. Ispirato dalla pascalina (1642) di Blaise Pascal, Turing presenta l’idea del suo “calcolatore universale”.

IL CALCOLATORE UNIVERSALE DI TURING La macchina è immaginabile come un registratore a nastro con una testina di lettura, scrittura e cancellazione .

La testina è dotata di un indicatore che, ad ogni passaggio di calcolo, determina lo stato in cui si trova la macchina mentre legge il simbolo posto nella cella del nastro su cui è posizionata.

Una macchina di Turing è composta da: un nastro una testina uno stato interno un programma uno stato iniziale

Il nastro è infinito e suddiviso in celle. In una cella può essere contenuto un simbolo preso da un opportuno alfabeto (che è un insieme di simboli).

Una cella deve contenere un simbolo dell’alfabeto o un simbolo speciale.

La testina di lettura/scrittura legge o modifica il contenuto della cella su cui è posizionata.

La macchina ha uno stato interno (che appartiene all’insieme degli stati). La macchina segue regole della forma (A, a, B, b, direz), in cui “A” è lo stato corrente ed “a” è il simbolo letto dalla testina; “B” è lo stato in cui si troverà la macchina con l’applicazione della regola e “b” è quello che di conseguenza dovrà scrivere sul nastro la testina movendosi a destra o a sinistra nella direzione definita da “direz”. Un esempio visivo: aggiungere due X ad una sequenza già esistente di X. Sul nastro sono già presenti tre X:

x x x

Passo 1: la testina legge una X, per cui va alla cella successiva. Questo avviene tre volte. La testina mantiene il suo stato interno (2) finchè sul nastro non ci sono X da leggere.

x x x

x x x

x x x

x x x

A questo punto la testina non legge una X ma trova una casella vuota. Deve scrivere una lettera X, spostarsi a destra e passare allo stato 1

x x x x  

nello stato 1 non legge una X ma trova una casella vuota, quindi deve scrivere una lettera X, spostarsi a destra e passare allo stato 0. A questo punto l’automa si ferma.  

x x x x x  

Ci fermeremo a questo esempio semplice. Vi sono varie versioni della macchina di Turing e varie evoluzioni. In Rete è possibile trovare anche diversi simulatori e approfondire l’argomento. (approfondire: cosa c’entrano il teorema di completezza di Gödel e la tesi di Church sulla computabilità con la macchina di Turing?)

“Le macchine sono in grado di pensare?” Turing se lo chiese e nel 1950 ideò un test per verificare se una macchina fosse in grado di pensare. Il test può riassumersi come segue: tre partecipanti: un esaminatore (A), un uomo (B), una macchina (C) A è tenuto separato da B e C e deve stabilire chi è l’uomo e chi è la

macchina attraverso la risposta alle domande poste ad entrambi. Se A non distingue B e C, allora C ha superato il test e viene considerata “in

grado di pensare”

Approfondire

Come è possibile determinare se una macchina è pensante? Il test di Turing ha un approccio sperimentale e molte sono le discussioni a contorno: una macchina esegue programmi e non può originare nulla

di nuovo (però può imparare dall’esperienza – programmi scacchi, machine learning, reinforcement learning);

non è possibile replicare completamente il comportamento intelligente (e se fosse solo una questione di tempo e di progressi nelle Scienze Cognitive?);

le regole formali non possono descrivere completamente il comportamento intelligente (e la rappresentazione subsimbolica della conoscenza?);

un computer che superi il test di Turing non può comunque definirsi intelligente (manca di coscienza).

Vi sono due posizioni in AI:

quella debole vede il calcolatore come uno strumento potente per lo studio della mente umana (pensiero razionale, logica, AI);

quella forte asserisce che le macchine in grado di agire intelligentemente sono dotate di mente reale e conscia( il calcolatore è in grado di comprendere e mostrare altri stati cognitivi propri del cervello umano. Thinking humanly. Scienze Cognitive).

Turing, 1944: “Fino a quando una macchina non sarà spinta a comporre un sonetto o un concerto dai suoi stati d’animo e dalla sua conoscenza, e, non semplicemente, da una statistica sulla composizione dei simboli, non possiamo pensare che quella macchina sia uguale alla nostra mente; non potremo cioè affermare che la macchina sia uguale alla nostra mente fino a quando non potremo affermare non solo che ha scritto il componimento, ma anche che sa di averlo scritto”

Contro la posizione forte dell’AI, Searle (fu lui a “battezzare” strong AI position quella descritta), nell’articolo “Minds, Brains and Programs” apparso su Behavioral and Brain Science nel 1980 presenta l’argomentazione della Stanza Cinese.

L’esperimento mentale della stanza cinese (approfondire) è un controesempio dell’AI

forte e si basa sull’assunto che la sintassi non è equivalente alla semantica.

Un tizio in una stanza riceve in ingresso dei simboli in cinese (il tizio non conosce il cinese) e li manipola secondo regole che segue pedissequamente (senza conoscerle), fornendo le risposte.

Approfondimento: cosa c’entrano I CHAPTCHA con Turing? Cominciare cercando il significato dell’acronimo

L’omino segue la sintassi, ma non ha la minima idea di quale sia la semantica delle domande e delle risposte. Nella stanza non c’è conoscenza. Riflettere: gli uomini sono costituiti da molecole. Le molecole non hanno coscienza. L’uomo non ha coscienza? (a questo proposito approfondire la stanza di Maxwell, 1986). Cos’è il Loebner Prize? http://www.loebner.net/Prizef/loebner-prize.html  

AI, RAPPRESENTAZIONE DELLA CONOSCENZA E LOGICA Torniamo sul concetto di Rappresentazione della Conoscenza (in Inglese Knowledge Representation – KR). E’ definita come lo studio di come la conoscenza del mondo possa essere rappresentata in un sistema di elaborazione e quali tipi di ragionamento possano essere effettuati con tale conoscenza. Le sfide sono rappresentate dalla commonsense knowledge, la capacità di un sistema knowledge-based di trovare un compromesso tra la complessità computazionale richiesta per ottenere la maggiore accuratezza delle inferenze e l’abilità di rappresentare e manipolare conoscenza incerta ed informazioni. La logica proposizionale e la logica del primo ordine sono uno dei mezzi di base per l’espressione della conoscenza nell’AI.

Non tratteremo esplicitamente la logica (proposizionale e del primo ordine) perché già presenti in molti vostri corsi e trattati ampiamente. Vedremo, invece, come la logica trovi applicazione nell’AI.

Applicazione della logica all’AI Nell’AI la logica si studia per le sue implementazioni. In particolare lo studio della logica è necessario per poter accedere al LISP (LISt Processor), linguaggio di programmazione usato spesso nei progetti di intelligenza artificiale.

Il LISP fu ideato da John McCarthy (inventore del termine “intelligenza artificiale” e esperto di logica matematica in relazione all’AI) nel 1958 come linguaggio formale per lo studio di equazioni di ricorsione in un modello computazionale (infatti il LISP vede i programmi come funzioni). Il primo editor di testo per terminale (progettato negli anni ’80 da Richard Stallman) con un core LISP fu emacs. Successivamente fu portato su tutti i sistemi operativi.

Logo e mascotte del LISP:

  

Un buon manuale di LISP e qualche esempio (in Rete trovate molte altre risorse): http://www.matteolucarelli.net/lisp/lispintro.htm

Non studieremo il LISP durante il corso, ma dovreste essere già in possesso (da precedenti corsi) di tutte le necessarie basi per poterne approfondirne autonomamente la conoscenza. Lo scopo che perseguo in questo corso è mostrarvi diversi modelli cognitivi, adottati o collegabili all’AI e utilizzati-utilizzabili nelle Scienze Cognitive in generale. I sistemi esperti, di cui abbiamo già parlato, sono basati sulla conoscenza, e le sintassi della logica (o comunque i meccanismi) che abbiamo visto sono stati ampiamente utilizzati per la creazione dei primi (soprattutto) sistemi esperti. Possiamo dire che un sistema esperto sia formato da due parti: una knowledge base (base di conoscenza) e un motore inferenziale, che ha il compito di utilizzare un insieme di regole logiche che consentono di dedurre un nuovo fatto a partire dalle informazioni già a disposizione.

Spesso l’ostacolo principale è dato dal fatto che l’esperto umano non sa come rappresentare i propri processi mentali tramite un insieme di regole coerente e completo. Da qui l’importanza di comprendere a fondo la logica. Noi parleremo di un’applicazione semplice derivata dall’unione dei concetti della logica all’AI: i chat-bot.

I CHAT-BOT Chat-bot è una contrazione di “Chatter Robot” (si trova anche come chatterbot) che è un programma che simula una conversazione intelligente con uno (o più) esseri umani, vocalmente o per iscritto (domande e risposte). Lo scopo primario di questa famiglia di programmi è quello di indurre un essere umano a credere di conversare con un altro umano (Turing test…). Questa categoria di programmi è più genericamente denominata Artificial Conversational Entities, talk bots o chatterboxe.

Oggi sono molto utilizzati come assistenti (vendite, help, servizi). Alcuni utilizzano sistemi complessi basati sul processing del linguaggio natural, ma molti rispondono semplicemente in base alla corrispondenza tra parole chiave individuate nelle domande poste dall’utente e parole chiave presenti in una base di dati di risposte. Il termine “ChatterBot” fu introdotto da Mauldin (Verbot Julia) nel 1994. Qui un esempio semplice: http://www.mtcube.com/abinfav2009.asp Sulla scia della notorietà raggiunta dal test di Turing, il programma ELIZA (1966) di Wizenbaum suscitò grande interesse poiché simulava una conversazione con un umano. Qui: http://www.chayden.net/eliza/Eliza.html una riproduzione di ELIZA molto fedele all’originale

 

Tuttavia lo stesso Weizenbaum afferma, nel suo paper di presentazione, che ELIZA non è intelligente ma simula, riconoscendo alcune parole nell’input e proponendo risposte preconfezionate (con qualche accorgimento – ad esempio riformulando la domanda o, come fanno molti chatbot, introducendo risposte casuali). Con ELIZA si dimostrò che risposte generiche e a volte non molto chiare potevano indurre l’interlocutore a credere di parlare con una vera intelligenza. Un altro chatterbot molto famoso è PARRY (1973) che, scritto in LISP, simulava un paziente schizofrenico (approfondire).

Oggi i chatterbot sono molto utilizzati ed è possibile trovarne molti in Rete (provate). 

Alcuni chatbot in Rete (esplorare). Anche in Italiano: Eloisa: http://www.eloisa.it/ Tobby: http://tobbychatbot.altervista.org/

s:parole_chiavi_per_la_ricerca cercami: parole_chiavi_per_la_ricerca

e Tobby vi darà i links alle pagine dei risultati dei vari motori di ricerca.

Un chatbot, in generale, è anche in grado di svolgere operazioni semplici. Ginny: http://ginnychatbot.altervista.org/ Chatbot che addestra per colloquio di lavoro:

http://www.dialobot.com/demo_marco_chatbot.html

In Inglese: Il famoso ALICE: http://alice.pandorabots.com/ Il Capitano Kirk:

http://sheepridge.pandorabots.com/pandora/talk?botid=fef38cb4de345ab1&skin=iframe-voice

Lauren: http://lauren.vhost.pandorabots.com/pandora/talk?botid=f6d4afd83e34564d

Vari per assistenza tecnica   

  

Tra i chatterbot più recenti vanno annoverati Jabberwacky e A.L.I.C.E.  

Il primo apprende nuove risposte e, come molti chatterbot di nuova generazione, utilizza algoritmi evolutivi che migliorano nel tempo l’abilità di comunicazione (cercare anche Kyle su Rete).   

A.L.I.C.E. utilizza un markp language, l’AIML (Artificial Intelligence Markup Language, basato su strutture simili all’XML) con specifiche funzioni di conversation agent. I chatbot creati in questa modalità sono molti e vengono spesso designati come Alicebot.   

A.L.I.C.E. è basato sulla semplice pattern matching (come ELIZA) e non ha capacità di ragionamento (stiamo parlando di AI debole).   A.L.I.C.E. è stato creato da Wallace nel 1995 ed ha vinto il Loebner Prize nel 2000, 2001 e 2004. 

Vi sono due tipi differenti di chatbot: stand-alone oppure web-based.

Entrambi presentano vantaggi e svantaggi, ma, soprattutto per facilità di programmazione e sicurezza, preferiremo i web-based.

Vedremo come implementarne uno. La forma più semplice prevede una casella per immettere il testo (domanda) ed una casella per ottenere la risposta.

Vi si può associare un’animazione o un avatar (anche dotato di movimento e, per esempio, renderlo attivo in SecondLife). In Rete trovate molti esempi e molti tool per costruire chatbot. Provate ad esplorare… Con molta facilità è possibile creare un pandorabot: http://www.pandorabots.com/botmaster/en/home Si possono creare molti tipi di pandoraboot.

I pandorabot utilizzano l’AIML, dunque, prima di creare un chatbot, occorre apprendere questo linguaggio, XML-compatibile. Su Internet trovate tutto il necessario per apprendere l’AIML autonomamente. Vedremo, però, insieme, come creare un chatbot. La creazione di un chatbot come progetto d’esame comporta che si cerchi di creare qualcosa di intelligente (rif. Test di Turing) e non semplicemente un’animazione che dia le stesse informazioni che può fornire anche una semplice pagina web…)

               

COME CREARE UN CHATBOT 

      

L’AIML http://www.alicebot.org/ - A.L.I.C.E Artificial Intelligence Foundation website. Il testo che segue è una traduzione del manuale “Basic AIML User Manual”, di Anupama Seshagiri, reperibile in Rete. Ovviamente si riportano, qui, solo gli argomenti principali che ci serviranno per comprendere il funzionamento del linguaggio. L’Artificial Intelligence Markup Language è un linguaggio XML compatibile che rende davvero semplice creare un Alice bot anche ai principianti.

L’AIML prevede TAG come gli altri markup language. I più importanti sono:

<aiml>: è il tag che apre e chiude un document AIML

<category>: racchiude una “unità di conoscenza” nella base di conoscenza di un Alicebot

<pattern>: racchiude un pattern semplice che corrisponde a cosa dice o scrive un utente ad un Alicebot

<template>: racchiude la risposta ad un input utente

Tag AIML Le categorie sono specificate dall’informazione compresa tra i due tag category: <category> ...information... </category> In modo simile, si ha per i pattern: <pattern> ...information... </pattern> La risposta è invece specificata da: <template> and </template>.

Gli elementi posti tra "<" e ">" si dicono tag AIML o elementi. Ogni tag eve essere aperto e chiuso.

A volte succede che non vi sia informazione tra un tag aperto ed uno chiuso. In questo caso, invece di <some-tag></some-tag> si può scrivere direttamente <some-tag/>

tag AIML personalizzati l’AIML si può estendere creando un numero infinito di nuovi tag, ad esempio per i pronomi in lingue diverse, predicati specifici, o proprietà specifiche dell’applicazione. I "Predicate tags" hanno un metodo "set" e un "get" specifico. Pronomi quali "it" hanno predicate tag quali <set name="it"></set>. L’AIML prevede un certo numero di built-in tag per i pronomi inglesi. Usando <set name="xxxx"> e <get name="xxxx"> si possono ampliare a piacere le capacità del robot.

TAG Category Un chatbot risponde a domande. La domanda specifica può essere visualizzata come una specie di percorso, che comincia al centro della knowledge web e viene costruita attraverso una serie di link e nodi, e che termina in un Response Template. Il percorso attraverso attraverso il quale il (response) template viene chiamato, si dice Category. Considerando solo i tag <pattern> e <template>, ci sono in generale tre tipi di Categorie: atomic, default, recursive.

Atomic Le categorie Atomic sono quelle contenenti pattern specifici, indivisibili (atomici in questo senso), univoci, cioè quelli che non contengono i simboli * o _ Sono le categorie più più semplici e facili da aggiungere in AIML. Esempio: <category> <pattern>WHAT IS A CIRCLE</pattern>

<template><set_it>A circle</set_it> is the set of points equidistant from a common point called the center.

</template> </category>

nota: é sempre meglio indentare i tag per individuare eventuali errori (es. tag non chiusi)

Default La categoria Default si ha quando il suo pattern contiene i simboli * o _ La categoria Default estrema è <pattern>*</pattern>, che fornisce la risposta a qualsiasi input. La categoria Default più comune ha pattern che combinano poche parole con altri simboli. Per esempio: <category> <pattern>I NEED HELP *</pattern> <template>Can you ask for help in the form of a question?</template> </category>

Recursive La categoria Recursive è quella che “mappa” gli input su altri input, per semplificare il linguaggio o per identificare pattern sinonimi. L’AIML implementa la ricorsione con l’operatore <srai>. Molti input sinonimi possono avere la stessa risposta. Per esempio <srai> è molto utilizzato per le forme di saluti. A “GOODBYE” possono corrispondere risposte quali GOODBYE, BYE, CYA CIAO, BYE BYE, ecc. <category> <pattern>BYE BYE</pattern> <template><srai>GOODBYE</srai></template>

</category>

Può essere usato anche per la semplificazione o la riduzione di pattern di input complessi. Ad esempio, in Inglese, la domanda "What is X" può essere posta in molti modi differenti: "Do you know what X is?", "Tell me about X", "Describe X", "What can you tell me about X?", e "X is what?" sono solo alcuni esempi. Di solito si cerca di immagazzinare la conoscenza nel modo più conciso possibile, o nella forma più comune. Il tag <srai> riconduce tutte queste forme a quella base: <category> <pattern>* DO YOU KNOW WHAT * IS</pattern> <template><srai>WHAT IS <star/></srai></template>

</category>

Il tag <star/> sostituisce il valore indicato da * prima della chiamata ricorsiva a <srai>. Questa categoria trasforma “Do you know what a circle is?" in "WHAT IS A CIRCLE", e poi cerca la miglior corrispondenza per l’input trasfromato. certe forme di ramificazione possono essere realizzate con <srai>.

TAG Response Default Response Si realizza spesso quando un pattern di input non viene trovato nella kw, ma vogliamo che il robot risponda ugualmente con qualcosa di sensato.

Random Response Uno strumento molto potente ma ancora di base che fornisce la possibilità di replicare in modo casuale ad una richiesta. E’ spesso utilizzata per far sembrare il bot più intelligente e meno prevedibile. <random> <li> What is your name? </li> <li> What is your favorite movie? </li> <li> Will you buy me a drink? </li> </random> Una delle tre risposte sarà scelta in modo casuale.

TAG per esprimere Conditional Elements L’elemento condizionale istruisce l’interprete AIML a restituire un contenuto specific a seconda del risultato di una condizione espressa. NB: Ve ne sono di tre tipi differenti, distinti da un attributo xsi:type che permette la validazione da parte di un XML Schema processor, Due di questi tipi possono contenere elementi <li>. In pratica un interprete AIML può permettere l’omissione dell’attributo xsi:type e determinare, invece, euristicamente, che tipo di condizione (e di azione <li>) è in uso.

Block Condition E’ un tipo di condizione che ha un nome che specifica un predicato AIML, oltre a un valore attibuto che contiene un’espressione pattern semplice. <aiml:condition xsi:type = "blockCondition" name = aiml-predicate-name value = aiml-simple-pattern-expression > <!-- Contents: aiml-template-elements --> </aiml:condition> Se il contenuto dell’attributo valore corrisponde al valore del predicato specificato dal nome, l’interprete AIML restituirà il contenuto della condizione. In caso contrario, restituirà una stringa vuota "".

UN ESEMPIO: Single-predicate Condition Il Single Predicate Condition deve avere un nome di attributo che specifica un predicato AIML. Deve contenere almeno un element <li> che potrebbe essere di tipo valueOnlyListItem type. Zero o un <li> può essere del tipo defaultListItem. <!-- Category: aiml-template-elements --> <aiml:condition xsi:type = "singlePredicateCondition" name = aiml-predicate-name > <!-- Contents: value-only-list-item*, default-list-item{0,1} --> </aiml:condition>

L’istruzione è interpretata come segue: Gli <li> vengono letti nell’ordine 1. Se li e un valueOnlyListItem, allora il contenuto viene

confrontatato con il valore del predicato specificato 2. Se corrispondono, restituisce il contenuto di li e si

ferma 3. Se non corrispondono, continua 4. Se li è un defaultListItem, allora restituisce il

contenuti di li e si ferma

Vi sono anche: Multi-predicate Condition Condition List Items Default List Items Value-only List Items Name and Value List Items

(il meccanismo è simile, ma cambia il risultato. Sono riportati tutti nel manuale che vi ho citato all’inizio e sulle dispense)

Esempio di script aiml <aiml>   <category> 

<pattern> Dobbiamo * </pattern> <template> 

    <srai> Dovremmo <star/>     </srai> 

</template>   </category>   <category> 

  <pattern> Dovremmo * </pattern>   <template> Non sono sicuro di essere pronto per questo. </template> 

  </category> 

  <category>   <pattern> BYE </pattern> 

<template>     <random>       <li> Bye. </li>       <li> Goodbye. </li>       <li> Bye Bye. </li>       <li> Sayonara. </li>       <li> Ciao. </li>       <li> Alla prossima. </li>       <li> A più tardi <get name=”name” />.</li>     </random> 

</template>   </category> </aiml> 

Ovviamente vi sono alcuni altri TAG, ma l’importante era capire il meccanismo.

I TAG possono essere combinati tra loro.

COME CREARE UN CHATBOT? Si possono prendere in considerazione diverse opzioni

1) Verbots www.verbots.com

È una piattaforma opensource per sviluppare chatbot molto versatili utilizzando una interfaccia semplie e l’editor della knowledge base. Le opzioni sono molte e il costo si aggira sui 30$/anno per poter condividere il bot con tutti. È possibile fornirlo di voce e animazioni.

2) Personality Forge www.personalityforge.com

È una piattaforma on line per creare virtual chatterbot, dopo aver creato un proprio account. Il costo si aggira attorno ai 50$/anno

3) Pandorabots www.pandorabots.com

Permette di creare bot basati su ALICE/AIML . Non ha opzioni voce o animazione ma prevede un piano gratuito. (per informazioni su ALICE: www.alicebot.blogspot.com)

4) Program your own chatbot from scratch

È ovviamente possibile programmare da capo il proprio chatbot, utilizzando qualsiasi linguaggio… ma bisogna essere un po’ più esperti…  

CREARE UN WEB‐BASED CHATBOT ‐ PANDORABOTS 

Creare un bot con Pandorabots è piuttosto semplice e bisogna considerare che Pandorabots è anche una delle compagnie di hosting di chatbot più conosciuta. Inoltre è particolarmente adatta per i neofiti, e prevede un piano free. Vediamo passo per passo come creare un bot.

1.) Creare un account Per prima cosa si vada su http://www.pandorabots.com/botmaster/en/home, e si crei un account (“Account Sign-up”). E’ gratis e si può operare da subito.

2.) Progettare il chatbot Non mi stancherò mai di ripetere che, come in tutte le cose, ma in particolare nell’IT, la prima cosa da fare è pianificare! Una progettazione accurate determina il successo di un progetto. Nel nostro caso occorre pensare alla personalità che vogliamo dare al chatbot, in che lingua parlerà, per quale scopo lo stiamo creando, e quali interazioni realizzerà con gli altri. Occorre giusto un foglio e una penna, per schiarirsi le idee, ma, credetemi, è un’operazione assolutamente necessaria!

3.) The Work Begins: Create Your Bot Pronti? Allora fate login con l’account creato. Tra le opzioni che appiono, vedrete “create a pandorabot”. Con un click accederete alla schermata in cui specificare il nome del chatbot, una serie di opzioni ed il set AIML che vorrete (eventualmente) usare. Il mio suggerimento è di creare prima un file AIML, oppure farvi prima “un giro” ed aggiungere poi il file AIML (è possibile modificare le impostazioni anche successivamente). Inizialmente potete anche scegliere il set AIML standard (o, ad esempio, quello italiano). Se selezionate “no initial content”, il bot non avrà nulla da dire

 

4.) Personalizzazione del chatbot Ok, ora siete gli orgogliosi creatori del vostro primo chatbot…. Però non l’avete ancora pubblicato e poi bisogna lavorarci ancora un po’… Facciamo un click sul bottone “Properties”. Apparirà un form che vi permette di specificare alcuni attributi del bot, quali il compleanno, che tipo di musica gli piace, il suo sesso e l’aspetto. Compilate i campi secondo il progetto che vi siete prefigurati. Potete anche aggiungere attribute personalizzati: fissazioni, stranezze… se poi creerete un altro bot, potete anche copiare queste caratteristiche e modificarle per il nuono. Una volta finite, fate click su “Submit Changes”.

 

Chiaramente dobbiamo controllare se il bot sa, a questo punto, quando è il suo compleanno!.. fate click su “Train”.  

Nella schermata che compare, provate a chiedere al bot quanti anni ha o quando è il suo compleanno, come vedete di seguito… 

 

Alla domanda quanti anni hai il bot non ha saputo rispondere. Proviamo con quando è il tuo compleanno… anche in questo caso il bot non sa rispondere. Proviamo allora a scrivere solo “compleanno” (il bot, vi ricordo, riconosce le parole chiave). 

Anche in questo caso il bot non risponde con la data che abbiamo immesso nelle property. Dovremo dirgli noi come rispondere. Nella schermata, sotto la domanda “quando è il tuo compleanno?” fate click su “advanced alter response”: 

Comparirà la schermata che vedete di seguito: 

In cui possiamo creare la giusta categoria (sappiamo come si fa, vero?) 

Notate che ho usato uno dei tag che abbiamo visto (name) per specificare il valore di risposta ad un tag personalizzato (compleanno) che abbiamo creato… Facciamo click su “submit” e riformuliamo la domanda al bot… 

Ecco fatto! … possiamo, intanto, ripetere le operazioni per tutte le altre proprietà che abbiamo impostato e poi… vedremo come fare di più! 

5.) personalizziamo con l’AIML Se fate click su “AIML” vedrete che abbiamo creato (con la procedura precedente) un file AIML (che si chiama update.aiml):

Se facciamo un click sul nome, vedremo che contiene la trasformazione in AIML di quello che abbiamo specificato con il lavoro sulle property: 

<?xml version="1.0" encoding="UTF‐8"?> 

<aiml version="1.0"> <category>    <pattern>QUANDO È IL TUO COMPLEANNO</pattern>    <template>Il mio compleanno è <bot name="compleanno"/>.</template> </category> <category>    <pattern>QUANDO È IL TUO COMPLEANNO</pattern>    <template>Il mio compleanno è il <bot name="compleanno"/>.</template> 

</category> <category>    <pattern>QUAL È IL TUO COLORE PREFERITO</pattern>    <template>Il mio colore preferito è il <bot name="colore preferito"/>.</template> </category> <category>    <pattern>HAI QUALCHE HOBBY</pattern>    <template>Amo studiare le <bot name="hobby"/>!</template> </category> <category>    <pattern>SEI UN MASCHIO O UNA FEMMINA</pattern>    <template>Sono una <bot name="sesso"/>... non si capisce?</template> </category> 

<category>    <pattern>DI CHE SESSO SEI</pattern>    <template>solo un uomo poteva fare questa domanda!... secondo te???</template> </category> </aiml> 

Riconoscete l’AIML? Bene!.. come potete notare, è possibile intervenire sul file, modificandolo, oppure fare l’upload di un file precedentemente preparato, o ancora fare il download di questo! Proviamo ad aggiungere direttamente in questo file una nuova categoria, prima di </aiml>, per esempio, cosa farà la categoria che segue?

<category> <pattern>QUANTI ANNI HAI</pattern> <template><random> <li><bot name="eta"/></li> <li>10 anni</li> <li>non te lo dico!</li> </random> </template> </category>

(NB: ovviamente dovremo aggiungere la proprietà “età”…)

Visto che sono sicura che avete capito l’AIML e che vi sentite più sicuri di voi stessi, a questo punto potete divertirvi a scrivere un file molto più complesso (scaricando quello in parte già creato ed ampliandolo, o intervenendo sul file on line, o, meglio, creandone uno tutto vostro che implementi l’AI di cui avete deciso di dotare il chatbot). Si possono anche associare più file AIML (ad esempio uno con risposte standard, che poi si possono utilizzare anche in altri bot; uno con risposte random e così via).

Espressioni condizionali • Il tag CONDITION èseguito daname=«gender» chesignifica «crea unavariabile dal nomeGENDER»• Nella lista:<li> se il valore (VALUE) di GENDER è «male»...<li> Se è «female»...<li> Altrimenti...

Uso di SET e GET • Dico all’AIML che sel’utente mi dice il nome(*) deve metterlo (SET)nella variabile che sichiama NAME (uso lasintassi <setname=«name»)

• Poi, in risposta adeterminati pattern(nell’esempio l’utentechiede al BOT di ripetergliil nome), uso <getname=«name»> perscrivere il valorecontenuto nella variabilename.

Posso anche usarlo in risposta a saluti finali...

Uso di THINK • Se metto <think>davanti al tag SET,immagazzinerò ilvalore nellavariabile, ma senzaripeterlo all’utente• Il chatbot ricorderàil valore(conservato nellavariabile «name»,nell’esempio) perun uso futuro

Tag IMAGE e VIDEO• Servono per includere nella risposta un video o un’immagine(URL). Esempio:

<category><pattern>posso vedere una tua foto</pattern><template><image>https://www.insidemarketing.eu/cd

n/wp‐content/uploads/2018/01/Chatbot.png</image></template></category>• La stessa cosa con <video>URL</video>

6.) Rendiamo pubblico il bot Ora che avete dotato il vostro bot di una personalità e gli avete dato le informazioni necessarie per iniziare è tempo di mostrare la vostra creazione! Andate alla lista dei vostri bot (“My Pandorabots”), selezionate quello che vi interessa e scegliete “publish”. La pagina successive vi fornirà l’URL sul quale è stato pubblicato il vostro bot. A questo punto potete anche aggiungere un’interfaccia Flash, un avatar Oddcast vHost avatar, oppure personalizzare la pagina. Potrete vedere anche i log di conversazione e alcune statistiche. Se modificate, nel tempo, il vostro bot, dovrete pubblicarlo nuovamente. That’s all, Folks! … ma… c’é sempre qualche trucco!

COME RENDERE “PIÙ CONVINCENTE” UN CHATBOT 

Uso dei proverbi I proverbi possono rispondere a molte domande… Pensate a: “non ci sono più le mezze stagioni”, “ tanto va la gatta al lardo…”, “tra il dire e il fare c’è di mezzo il mare…” ecc. ecc., magari introdotti da un “Come ben sai: …”

Aggiungere “intelligenza” al chatbot L’intelligenza del chatbot dipenderà da due fattori: una buona logica (torna il fatto che deve essere progettato bene) e un gran numero di record (i casi delle risposte e delle domande). Si può pensare di programmare qualcosa che apprenda dalle conversazioni che il chatbot tiene con gli utenti. In pandorabots esiste questa possibilità: tramite i log, si può accedere ad una conversazione ed utilizzare le domande per addestrare (in modalità “train”) ulteriormente il bot. Più Avanti, quando saprete crearle, potrete anche pensare ad un meccanismo basato su algoritmi di apprendimento più evoluti.

Chiamare l’utente per nome in modo casuale Se ogni tanto, nelle risposte, il bot chiamerà l’utente per nome, la conversazione sembrerà più naturale. Per realizzare questa opzione, ricordate l’uso di get e set.

Inoltre… qui trovate alcuni tutorial: http://www.chatterbotcollection.com/category_contents.php?id_cat=20

REPETITA IUVANT! So che i chatbot sembrano semplici e entusiasmano tutti, ma meglio ripetere PERCHE’ SCONSIGLIO DI CREARE UN CHATBOT COME PROGETTO DI FINE CORSO: Il chatbot è nato per superare il test di Turing, quindi la progettazione deve essere così accurata che un utente deve credere che dietro al chatbot vi sia una persona! Occorre una grande padronanza della logica (che va progettata perfettamente), tanto tempo e soprattutto una progettazione accuratissima!

IL SEMANTIC WEB E’ il momento di introdurre un altro sistema intelligente.

Abbiamo visto come funzionano i chatbot, che possiamo considerare modelli semplici di intelligenza simulata.

Un argomento che sta diventando sempre più importante è rappresentato dal web semantico. Argomento strettamente collegato sono le ontologie (provate a “giocare” con protegè http://protege.stanford.edu/).

Guardate prima questo video introduttivo, semplice ed interessante: http://www.youtube.com/watch?v=rhgUDGtT2EM&feature=related

Completate la visione a casa… Non tratteremo il semantic web per motivi di tempo, ma vi consiglio di approfondire l’argomento.

“Facilità” è la parola chiave, che ci porta subito all’idea che sarebbe bello poter interagire (effettuare ricerche) con un linguaggio naturale (vicino all’uomo) comprensibile correttamente (sintatticamente e semanticamente) dalla macchina. Per garantire da subito un certo grado di interazione, il WWW (non confondiamo www con Internet) è poggiato su protocolli che ne definiscono i meccanismi:

• il meccanismo degli Uniform Resource Identifier (URI)• il protocollo Hypertext Transfer Protocol (HTTP)• il linguaggio HyperText Markup Language (HTML)• il linguaggio eXtensible Markup Language (XML)

Alcuni sono noti a tutti o ai più (http, HTML, XML), altri (URI) non sono così ben conosciuti…

Inizialmente il WWW era costituito da una collezione di testi e indici ipertestuali. Con l’avvento dei motori di ricerca, c’è stata la possibilità di accedere direttamente ai contenuti dei testi presenti in Rete. Le strutture dei siti sono diventate sempre più articolate e la crescita del WWW è avvenuta in modo esponenziale. La quantità di informazioni presenti su Rete ha generato un vero e proprio caos nella ricerca di informazioni ed è sempre più difficile trovare proprio quella che ci interessa. Per trovare un documento o un’informazione oggi si devono seguire i link – surfare - (molto tempo e difficoltà iniziali) oppure servirsi di un motore di ricerca (più semplice ma si hanno molti falsi positivi). Un altro limite del web è rappresentato dalla scarsa integrazione delle informazioni.

IL WEB SEMANTICO: MOTIVAZIONI La motivazione più forte per l’implementazione del web semantico è la possibilità di integrazione delle informazioni.

Interoperabilità: due applicazioni sono considerate interoperabili se possono scambiare dati e servizi in modo consistente ed efficiente, permettendo la comunicazione tra hardware e software eterogenei.

Facciamo un esempio: “come posso arrivare a Roma il 3 Agosto, partendo da Milano il 2 e fermandomi a Firenze per visitare gli Uffizi?”… è semplice da capire per gli umani, ma non lo è per una macchina.

“Nella seconda parte del sogno, le collaborazioni si estendono ai computer. Le macchine diventano capaci di analizzare tutti i dati sul Web – il contenuto, i link e le transazioni tra le persone ed i computer. Un “Web Semantico”, che dovrebbe rendere questo possibile, deve ancora emergere, ma quando lo farà, i meccanismi quotidiani del commercio, della burocrazia, e delle nostre vite quotidiane saranno gestiti da macchine che interagiscono con macchine, lasciando agli umani il compito di fornire l’ispirazione e l’intuizione. Compariranno quegli “agenti intelligenti” sui quali la gente ha fantasticato per anni. Questo Web in grado di essere compreso dalle macchine nascerà dall’implementazione di una serie di progressi tecnici e accordi sociali che stanno cominciando già a manifestarsi” Tim Berners – Lee, Weaving the Web

I PRINCIPI DEL SEMANTIC WEB È inteso come un’estensione del WWW come lo conosciamo e intende essere una piattaforma universale di dati condivisi e utilizzabili sia da esseri umani che da applicazioni automatiche.

Alle informazioni è associata una semantica che permette una migliore interazione tra macchine e persone.

Per introdurre il web semantico possiamo porre un parallelo tra questo e il WWW attuale.

WEB SEMANTIC WEB Informazioni prive di struttura semantica

Alle risorse è associata una struttura semantica

La semantica è comprensibile dagli esseri umani

Risorse e relazioni hanno specifici significati

Le applicazioni possono comprendere solo la sintassi

La semantica è comprensibile anche dalle applicazioni

Schematicamente: Schematicamente:

Ovviamente non solo la semantica deve essere chiara, ma anche la sintassi deve essere condivisa!

Quindi occorre adottare degli standard per rappresentare formalmente i metadati che descrivono le informazioni e stabilire come strutturare i meccanismi di “ragionamento” sui dati.

Certamente questa concezione va adottata a monte, e cioè nel momento dell’archiviazione dei dati.

Rispetto al WEB di prima generazione, nel WEB semantico il markup language adottato sarà

l’XML (contro l’attuale HTML); i documenti sono strutturati e con un significato non

implicito ma espresso esplicitamente attraverso i metadati;

i documenti diventano dinamici e sarà agevolata la decomposizione e la ricomposizione delle informazioni, attraverso l’aggregazione e l’adattamento dei contenuti (syndacation).

In tal modo il controllo di produzione delle informazioni sarà decentralizzato (peer-to-peer) e i dati saranno fruibili sia per gli uomini che per le macchine e per le applicazioni (web service). Gli obiettivi del gruppo di ricerca del W3C sul Semantic Web sono quelli di creare una piattaforma efficiente per condividere e riutilizzare la conoscenza (W3C http://www.w3.org/2001/sw/ ) permettendo l’integrazione di contenuti provenienti da fonti diverse e rendendo l’informazione accessibile e comprensibile anche da parte di agenti software.

Ci sono molte applicazioni che trarrebbero indubbio beneficio da questo approccio: pensiamo ad esempio all’e-commerce, al knowledge Management, a tutte le applicazioni di information retrieval…

LA SEMANTIC LAYER CAKE L’esigenza di descrivere le informazioni mediante metadati (dati che descrivono i dati – meccanismo di implementazione della semantica), introduce la necessità di creare classi e schemi di riferimento. In questo senso, distinguiamo:

- le ontologie: i metadati sono strutturati in base ad un dato ordine logico. Vengono espresse le relazioni tra i metadati

- i metadati: descrivono i dati riportandoli ai concetti dello schema

- i dati: le informazioni distribuite nel Web

Se colleghiamo quanto scritto al fatto che occorrono dei protocolli, degli standard, condivisi per la realizzazione del Web Semantico, è facilmente comprensibile come il Semantic Web sia concepito a strati sovrapposti di linguaggi, in cui ogni strato usa o estende i precedenti.

Analizziamo  i  componenti  della  “Semantic  Web  Layer Cake” disegnata da Barners‐Lee nel 2003… 

Universal resource identifier: URI Tutte le risorse presenti sul Web posseggono un URI, ovvero un identificatore universale.

Quello più conosciuto è l’URL (Universal Resource Locator).

URI è un acronimo più generico, rispetto ad URL e rappresenta una stringa che identifica univocamente una risorsa, rendendola disponibile attraverso vari protocolli (http, ftp, ecc.).

Gli URI si dividono in URL o URN: - URL: un URI che, oltre a identificare la risorsa, fornisce il

modo per accedere alla sua ubicazione (es. http://www.mtcube.com è ottenibile via http da un host in Rete il cui nome è www.mtcube.com)

- URN (Uniform Resource Name): un URI che identifica la risorsa mediante un nome in uno specifico dominio di nomi, non fornendone l’ubicazione (es. gli isbn)

Gli URI assoluti si scrivono secondo la seguente sintassi <scheme>:<scheme-specific-part>, che contiene il nome dello schema usato (<scheme>) seguito dai due punti (":") e quindi da una stringa (<scheme-specific-part>) la cui interpretazione dipende dallo schema.

Esempi di URI (da Wikipedia) ftp://ftp.is.co.za/rfc/rfc1808.txt -- schema per servizi FTP http://www.math.uio.no/faq/compression-faq/part1.html --

schema per servizi HTTP mailto:mduerst@ifi.unizh.ch -- schema per indirizzi di posta

elettronica news:comp.infosystems.www.servers.unix -- schema per

newsgroup e articoli Usenet telnet://melvyl.ucop.edu/ -- schema per servizi interattivi

telnet irc://irc.freenode.net/wikipedia-it -- schema per IRC

I metadati e l’XML Per rappresentare i metadati si utilizza l’XML (eXtensible Markup Language) un metalinguaggio che utilizza i tag, come l’HTML e l’AIML che abbiamo visto, poiché deriva da SGML (Standard Generalized Markup Language).

I tag non sono definiti, ma ogni utente può definire quelli più adatti alle proprie esigenze, ed è indipendente dalla piattaforma di utilizzo.

Ecco un esempio: <Frase> <Persona homepage=http://www.mtcube.com/#RaffaellaFolgieri>Io </Persona> ha appena acquistato un <Animale>criceto</Animale> </Frase> “Frase”, “Persona”, “Animale” sono utilizzati come nomi dei tag per associare significato agli elementi. Il significato c’è, però, solo per chi riconosce e condivide i termini. Non vi è semantica.

Se, invece, scrivessimo: <dmm> <nge homepage=” http://www.mtcube.com/#RaffaellaFolgieri”>Io</nge> ho appena acquistato un <hyp>criceto</hyp> </dmm> un computer riconoscerebbe la stessa struttura della frase scritta precedentemente che, tuttavia, cambierebbe il significato per le persone che non condividerebbero i termini dmm, nge, hyp. Dunque la grammatica è semplice ma non vi è ancora semantica o interoperabilità. XML aggiunge la struttura sintattica ai documenti, ma non ne fornisce la semantica. Qui: http://xml.webmasterpoint.org/guida-xml-base-pratica/ potete trovare una guida su XML che comincia dalle basi (per i principianti) e poi espande gli argomenti fino a livelli più avanzati.

ONTOLOGIE Tralasciando gli altri strati della Web Semantic Cake, troviamo le ONTOLOGIE.

La parola “ontologia” ha vari significati. In Filosofia è una branca della metafisica.

In AI indica la specificazione di una concettualizzazione cioè una descrizione formale di un insieme di concetti e delle relazioni che intercorrono tra questi.

Le componenti di un dominio sono, cioè, classificate tassonomicamente mediante un’ontologia, in classi e sottoclassi. “Un’ontologia e’ una collezione di frasi che definiscono le relazioni tra concetti e specificano le regole logiche” [Tim Berners-Lee, 99]

Si possono distinguere diversi tipi di ontologie (approfondire): - Top level ontology - Domain ontology - Task ontology - Application ontology

Un’ontologia è un documento che definisce in modo formale le relazioni tra i termini di un dominio di conoscenza.

Ad esempio l’ontologia del dominio “Università” conterrà la definizione di professore, ricercatore, studente, esame, e via dicendo.

L’ontologia è una tassonomia accompagnata da regole di inferenza per esprimerne la conoscenza.

I linguaggi utilizzati per esprimere le ontologie nel Semantic Web sono vari; tra questi è utile ricordare:

- RDFS (Resource Description Framework Schema), costituito da un vocabolario che permette di definire le classi delle risorse, le relazioni di sottoclasse, e di specificare eventuali restrizioni sulle classi.

- OIL (Ontology Inference Layer), presenta un approccio multilivello, basato su gerarchia stratificata. Pur presentando il vantaggio di verificare la consistenza di tutte le definizioni ontologiche per scoprire i legami fra le sottoclassi, tuttavia ha un numero limitato e immutabile di proprietà e non supporta domini concreti (come interi e stringhe). (continua)

- DAML (Darpa Agent Markup Language), promosso dall’agenzia Darpa (USA), combina varie caratteristiche. Costruito su RDF, lo integra con elementi di logica descrittiva e permette l’espressione e l’interpretazione della classificazione, delle asserzioni e delle proprietà dei metadati rappresentati da RDF e RDFS.

- OWL (Ontology Web Language), che vedremo nel dettaglio.

Gli elementi delle ontologie sono: - classi, in genere organizzate in tassonomie (relazioni di

specializzazione e generalizzazione), vengono utilizzate per descrivere i concetti che si vogliono rappresentare

- proprietà e attributi, che rappresentano le relazioni esistenti tra le classi

- assiomi: utilizzati per dichiarare esplicitamente espressioni vere sempre

- individui (detti anche istanze): sono i singoli oggetti contenuti in una classe

esempi: classi: madre, padre attributi: le madri sono (is_a) genitori (is_a) definisce una gerarchia tra concetti: un concetto

specifico eredita le proprietà del concetto più generale che lo sussume. È anche possibile definire altre proprietà più complesse (es. ha_figli), specificando attributi che ne vincolano l'applicazione: (1,n) può indicare una restrizione di cardinalità.

assioma: una relazione disjoint tra PADRE e MADRE indica che un elemento della classe PADRE non potrà in nessun caso essere elemento anche della classe MADRE

istanze: Maria, Grazia, Paolo…

Per creare un’ontologia non esiste una “ricetta” univoca, ma è possibile adottare un approccio top-down (dalla definizione dei concetti generali alla loro specializzazione) o bottom-up (si creano le classi più specifiche e poi le si raggruppa).

In generale occorrerà sempre procedere ordinatamente determinando, innazitutto il dominio e lo scopo dell’ontologia; poi considerare la possibilità di riutilizzare ontologie esistenti; elencare i termini principali dell’ontologia; definire classi e gerarchie; definire le proprietà delle classi; definire vincoli sulle proprietà; creare le istanze.

Come detto per i bot, la cosa importante è soffermarsi a progettare accuratamente! Se volete cimentarvi nella creazione di un’ontologia e - perché no? – di un’applicazione basata su Web Semantico, ecco riferimenti utili:

Come costruire un’ontologia: http://protege.stanford.edu/publications/ontology_development/ontology101.html

Manuale di utilizzo di Protégé (OWL-compatible): http://protege.stanford.edu/doc/users_guide/index.html

Download Protégé (versione 3.0): http://protege.stanford.edu/

Non lo vedremo durante il corso, perché ci concentreremo, come ho detto più volte, sull'AI sub-simbolica e in particolare sul Machine Learning, di cui vedremo le RETI NEURALI

Alcuni consigli per creare una buona ontologia: - limitate lo scopo. Non tutte le possibili informazioni su un

dominio devono essere contenute nell’ontologia. È sufficiente limitarsi ai concetti richiesti dall’applicazione e specificare, per ogni classe, le proprietà salienti richieste dall’applicazione.

- Numero delle classi: se una classe ha solo una sottoclasse, forse avete un problema di modellazione. Probabilmente l’ontologia non è completa. Idem se una classe ha più di una dozzina di figli: magari potete creare raggruppamenti.

- Distinguete tra classe e proprietà. Se una distinzione ha importanza nel dominio, allora conviene creare una nuova classe.

- Garantite una corretta gerarchia delle classi. Una sottoclasse deve esprimere il concetto che sia un “possibile tipo” di una

superclasse. Le relazioni gerarchiche sono transitive.

“Ho un sogno per il Web … ed esso è diviso in due parti. Nella prima parte, il Web diventa un mezzo molto più potente per la collaborazione tra le persone. Ho sempre immaginato lo spazio delle informazioni come qualcosa cui chiunque potesse avere accesso immediato ed intuitivo, e non solo di consultarlo, ma di crearlo. […]

Inoltre, il sogno della comunicazione tra le persone, attraverso la condivisione della conoscenza, deve essere possibile per gruppi di ogni dimensione, interagenti elettronicamente con la facilità con la quale essi comunicano di persona”.

Tim Berners – Lee, Weaving the Web

Discussione 2: Uno per tutti, tutti per uno?

“La gente esagera il valore delle cose che non ha: tutti venerano la verità e l'altruismo perché non ne hanno alcuna esperienza.” (Bernard Shaw)

"Può la selezione naturale averci fatto automaticamente cooperativi e non egoisti o invece l'apparente altruismo non è altro che una versione artificiosamente camuffata dell'ognuno per sé?”(Lewontin, sull’altruismo)

L’imperativo “condividi” (share) dei social network e di Internet in generale ci ha resi più altruisti? Le nuove tecnologie, che ci permettono di condividere, hanno reso gli esseri umani prosociali? Vi sono esempi evidenti di altruismo dettato/favorito dalla tecnologia?

Cosa si intende per altruismo? Senza entrare in discussioni etiche o morali, e senza addentrarsi nella filosofia, comune accezione: altruismo è comportamento generoso, collaborativo e disinteressato che uno o più individui attuano nei confronti degli altri.

La parola “altruista” derivazione di “altrui” su modello del francese “altruisme” (A. Comte, 1830)

Pensiero di Comte (padre della corrente positivistica): l’altruismo è un istinto umano al pari dell’egoismo (l’uno è fondamentale per la conservazione della specie, l’altro è espressione dell’istinto di conservazione del singolo). Comte teorizzò che l’altruismo abbia giocato un ruolo rilevante nel mantenimento e nello sviluppo sociale del genere umano.

L’aspetto sociologico e quello biologico esprimono i rapporti tra individui, tra macchine, e tra macchine e individui. Specie animali molti comportamenti collaborativi/altruistici: apparentemente in contrasto con la teoria evolutiva (Darwin), basata sulla competizione (egoismo) per la sopravvivenza dell’individuo che ha più capacità di adattamento. Moderna biologia evolutiva: ha mutuato i modelli della teoria dei giochi1, sviluppando concetti (quali le strategie evolutivamente stabili), che hanno evidenziato come i comportamenti apparentemente altruistici siano sempre riconducibili a motivi di convenienza per il miglioramento genetico dell’individuo.

1 La teoria dei giochi è una scienza matematica che studia i modelli sottesi alle situazioni di conflitto, cercandone soluzioni competitive e cooperative. Consiste, dunque, nell’analisi delle decisioni degli individui nell’interazione con altri soggetti rivali, in modo da stabilire se le decisioni di uno possano influire sui risultati raggiungibili dall’altro/i realizzando un meccanismo di retroazione, il cui obiettivo è il massimo guadagno dell’individuo.

Molti sociologi ritengono che non esiste una forma di altruismo totalmente priva di interesse fra gli esseri umani:

è sempre possibile individuare un beneficio di ritorno per l’azione altruistica, anche se di natura intangibile

(ad esempio appagamento, autorealizzazione).

Se questo avviene per le intelligenze naturali, cioè nei sistemi biologici, cosa avviene nel caso delle intelligenze e dei sistemi sociali artificiali?

Una branca dell’AI studia i sistemi di vita artificiale collettiva (artificial life – ne parleremo), per riprodurre (e analizzare) i meccanismi del comportamento sociale umano e animale, ma soprattutto per verificare similitudini sotto analoghe condizioni. Molti studi sui sistemi collettivi artificiali, mostrano che l’ottimizzazione delle prestazioni dei sistemi richiede, spesso, altruismo, nonostante gli agenti incorrono in un costo maggiore, non conveniente per il sistema. Alcuni esperimenti di artificial life propongono lo studio di individui artificiali ispirati a strategie biologiche. Gli agenti apprendono la strategia cooperativa più adatta ad ambienti diversi per mezzo di un algoritmo di apprendimento per rinforzo. I risultati della simulazione mostrano come il sistema multi-agente apprende comportamenti altruistici stabili, ottenendo prestazioni ottimali (o prossime alle) in ambienti sconosciuti e mutevoli.

Sembrerebbe che la vita artificiale sia più altruistica di quella biologica… Tuttavia, la chiusura degli agenti altruisti nei confronti di quelli egoisti non denota un certo non so che di egoismo?

Se si accetta la tesi che l’essere umano non fa nulla di altruistico se non ne ha tornaconto (tangibile o meno), allora perché così tante persone al mondo condividono pensieri, conoscenza, emozioni su Internet?

Sarebbe bello pensare che i social network ed il concetto di intelligenza collettiva ci abbiano reso altruistici ma… le motivazioni che hanno portato alla creazione dei social network (si pensi al più famoso) risiedono nel voler creare un “album di fotografie” on line, anzi, un palco da cui le persone possano presentarsi ed essere votate, accrescendo (o meno) e misurando la propria popolarità.

Nel caso dei social network, uno dei motivi più forti che spingono a condividere ha sfondo, tutto sommato, narcisistico: i “15 minuti di popolarità”2 alla portata di tutti, e praticamente inestinguibili.

2 Andy Warhol, 1968

E il web? O ancora il web semantico? E l’enciclopedia collettiva più ampia del mondo?

Molti contributi sono frutto del desiderio di raccontarsi o di raccontare le proprie competenze, non senza un tornaconto di gloria o economico.

Un merito che potremmo attribuire a queste due espressioni di libero pensiero e libera parola è forse quello di rendere ciascuno più sicuro di sé: tutti hanno qualcosa da dire e qualunque cosa, anche se apparentemente insignificante, può contribuire a conservare la traccia lasciata da una civiltà. Non più “cogito, ergo sum”, ma “comunico, ergo sum”.

Pubblicare qualcosa aumenta la reputazione di un individuo, e la reputazione, in una collettività, è importante3. Gli individui ricevono sostegno in base alla reputazione posseduta.

3 A tal proposito è interessante il risultato dello studio di Daniel J. Rankin e Franziska Eggimann, pubblicato sui «Proceedings of the Royal Society B»

Rankin ed Eggiman hanno condotto una simulazione coinvolgendo 250 soggetti, annotando il comportamento del gruppo verso chi agiva generosamente (aiutava qualcuno), chi si guadagnava cattiva fama, e gli effetti di questo sulla collettività. Risultati: le azioni deprecabili restano più a lungo nella memoria, rispetto a quelle edificanti. Di contro, una buona reputazione non dura a lungo, ma basta una sola azione egoistica per cancellare il ricordo di molte altre altruiste. Chi aiuta è aiutato sempre di più, mentre chi pensa solo a se stesso viene emarginato rapidamente (visto che non aiutare chi ha una cattiva reputazione, non danneggia la propria). Secondo i due ricercatori, questo sistema stimola la cooperazione e migliora la società.

Nonostante ciò, non si può affermare che alla base vi sia un comportamento altruistico, bensì una molla egoistica (la reputazione), che spinge verso una cooperazione di convenienza per il gruppo.

Si può concludere che i social network e la condivisione della conoscenza producono un effetto benefico per la Società, facendo leva sul nostro egoismo e sul nostro desiderio di conquistare una reputazione, tuttavia senza renderci altruistici.

Tralasciando (per non addentrarsi nella filosofia della religione) alcune delle religioni maggiori (Cristianesimo, Buddismo, Taoismo), che hanno fatto dell’altruismo uno dei pensieri fondanti, vi sono altre comunità il cui scopo è dettato dal desiderio di aiutare gli altri disinteressatamente?

Prendiamo l’esempio del mondo accademico… Gli accademici non possono, sovente, permettersi l’altruismo. Forse occorrerebbe modificare i meccanismi di carriera, o forse (chissà) indurre chi fa ricerca a cambiare mentalità (o Paese?). L’autostima del genere umano, riguardo l’altruismo, è sempre stata molto bassa. La scienza non ha contribuito a renderci più confidenti nella capacità di dimostrarci altruisti. Si pensi alla metafora di Dawkins (Il gene egoista). La nostra società (lo sanno bene gli economisti) è basata sul do ut des. Anche in una famiglia vale questo principio.

Charles Darwin, ne L’origine dell’uomo (1871), era consapevole del ruolo della cooperazione nella storia dell’evoluzione umana: “L’insufficienza di forza e di velocità dell’uomo, la sua carenza di armi naturali e così via sono più che controbilanciate dalle sue… qualità sociali, che lo portano a dare e ricevere l’aiuto dai suoi consimili”. Molti sostenitori della teoria darwiniana sottolinearono gli aspetti più egoistici della selezione naturale. Per contraddirli, il biologo russo Peter Kropotkin scrisse il libro “Mutual Aid. A factor of Evolution.” (1902), considerato dal Times come “il libro probabilmente più importante dell’anno”. Tuttavia, se anche un considerevole numero di studi mostri come le antiche e moderne società, gli animali, e perfino le cellule, esibiscano comportamenti cooperativi, il rovescio della medaglia risulta il pericolo che la cooperazione sia minacciata dallo sfruttamento.

L’antropologo Robert L. Trivers, della Rutgers University (New Brunswick, New Jersey), mutuando dalla teoria dei giochi la metafora nota come “Dilemma del prigioniero”, dimostra che vi è notevole differenza tra ciò che è bene dal punto di vista individuale e ciò che lo è dal punto di vista collettivo, differenza che mina il successo di quasi tutte le forme di cooperazione, inclusi il commercio e l’aiuto reciproco. Altri autori hanno condotto importanti studi sull’altruismo. Alcuni suggeriscono di distinguere tra altruismo biologico (fitness – successo riproduttivo) e altruismo reale (intenzione consapevole di aiutare il prossimo).

Le nuove tecnologie che ci permettono di condividere ci hanno reso prosociali, ma, tuttavia, facendo leva sull’egoismo individuale e sul desiderio di notorietà.

Abbiamo evidenziato che alcuni sistemi artificiali si dimostrano più altruisti di quanto non siano i sistemi biologici. Un esempio sono i mini-robot sviluppati all’Università di Losanna, che hanno sviluppato un sistema di avvertimento del pericolo a beneficio gli uni degli altri.

Resta un’ultima domanda cui rispondere, tra quelle poste all’inizio: vi sono esempi evidenti di altruismo dettato/favorito dalla tecnologia?

SI’: il software open source. A parte Stallman4, che non tutti conoscono, e Linux Torvalds (il creatore di Linux), non si può dire che il software libero dia notorietà a chi lo crea. Certamente è fonte di guadagno, ma gli obiettivi primari sono il libero studio e la possibilità di apportare modifiche ad un software. Trae vantaggio dall’intelligenza collettiva.

All’open source si è ispirato l’open content (contenuti aperti, Wikipedia), che ha l’obiettivo di mettere a disposizione contenuti editoriali (testi, immagini, video, musica).

4 portabandiera del software libero e fondatore, nel 1985 della Free Software Foundation (FSF), organizzazione senza fini di lucro per lo sviluppo e la distribuzione di software libero

Ci si deve domandare: “uno per tutti, tutti per uno od ognuno per sé?”.

La conclusione cui si è giunti è che le tecnologie ci aiutano ad essere altruisti, o quantomeno cooperativi, o almeno producono effetti che fanno leva sul nostro egoismo per ottenere beneficio altrui, collettivo.

Inoltre le tecnologie sono costruite dall’uomo (che evidentemente vuole riscattare la sua natura egoistica) secondo modelli altruistici, facendo ben sperare per l’evoluzione futura dell’umanità.

Dal canto loro, i sistemi artificiali hanno già superato la prova, dimostrando di poter sviluppare autonomamente meccanismi altruistici e cooperativi per il bene della collettività (sintetica).

Cosa accadrà se e quando (si pensi ai robot che già oggi operano come infermieri in Giappone) i sistemi artificiali e quelli biologici conviveranno in un unico sistema sociale? https://www.youtube.com/watch?v=70Ov_JXDLkg

NOTE FINALI

«In futuro ciascuno avrà 15 minuti di fama». Lo profetizzò Andy Warhol nel 1968. Alcuni ritengono che lo slogan sia un adattamento dalla teoria di Marshal McLuhan sulle differenze tra la televisione e gli altri media (al lettore l’approfondimento del caso).

Richard Dawkins, nel descrivere i geni come egoisti, non intende affermare che siano guidati da motivi o volontà, ma che i loro effetti possono essere descritti come se lo fossero. Vengono, cioè, trasmessi solo i geni le cui conseguenze servono per i loro stessi interessi (continuare ad essere replicati).

Il “Dilemma del prigioniero” risale ai primi anni ’50. Vi sono due prigionieri e a ciascuno viene chiesto se l’altro abbia commesso un crimine. La pena dipende dal fatto che uno dei due, entrambi o nessuno dichiari la colpevolezza dell’altro. In pratica, i due prigionieri devono solo scegliere se vogliono o non vogliono cooperare l’uno con l’altro. Più punti ottengono, minore sarà la pena. Se entrambi i prigionieri decidono di cooperare ottengono tre punti ciascuno. Se entrambi non cooperano, ottengono solo un punto. Se un prigioniero non coopera e l’altro sì, chi non coopera riceve 5 punti, mentre chi coopera non riceve alcun punto. I due prigionieri non possono accordarsi tra loro. Non fidandosi l’uno dell’altro, entrambi decideranno di non cooperare e riceveranno solo un punto ciascuno. La ricompensa per la reciproca cooperazione è maggiore della punizione per la reciproca defezione (se non cooperano), ma una defezione unilaterale è più remunerativa della ricompensa e fa fare al cooperante sfruttato la figura dello sciocco (peggio di una punizione). La mossa migliore è, quindi, sempre non cooperare e, dunque, la logica porta sempre alla reciproca non cooperazione.

LE ARTIFICIAL NEURAL NETWORK (ANN) Se nella prima parte del corso ci siamo occupati puramente di logica e di rappresentazione non biologica della conoscenza, ora ci addentreremo in un tipo di rappresentazione e di AI più strettamente legata all’intelligenza biologica da cui trae spunto: le reti neurali.

Ogni trattazione sulle reti neurali inizia con un’immagine del neurone biologico, che ha ispirato i modelli di neurone artificiale.

Un neurone (cellula nervosa) è l’unità fondamentale del sistema nervoso (tutto, cervello incluso). In un neurone si distinguono:

- Il corpo cellulare (soma) che contiene il nucleo cellulare.

- Dal corpo cellulare si ramifica un gran numero di fibre (i dendriti) ed una singola fibra lunga (l’assone).

- I dendriti si ramificano in una rete attorno alla cellula (simile ad un cespuglio) e l’assone si allunga in genere di circa un centimetro (ma in casi estremi moto di più).

- Verso la sua estremità l’assone si suddivide in ramificazioni che si connettono ai dendriti ed ai corpi cellulari di altri neuroni, attraverso una giunzione (collegamento) che prende il nome di sinapsi. Ogni neurone forma sinapsi con altri neuroni (da una dozzina ad un centinaio di migliaia).

I neuroni trasmettono un segnale elettrico lungo gli assoni.

Tra il terminale di un assone e la cellula che riceverà il segnale sussiste uno spazio (fessura sinaptica), che viene superato dai segnali grazie a sostanze chimiche dette neurotrasmettitori.

Quando un segnale elettrico arriva in prossimità, le sinapsi rilasciano i neurotrasmettitori.

Semplificando, possiamo dire che la quantità di neurotrasmettitore rilasciato determina la conduttività della sinapsi (cioè quanto attenui o esalti il segnale elettrico proveniente dall’assone).

Il neurone a valle della fessura sinaptica è dotato di recettori in grado di intercettare il neuromodulatore: si generano correnti locali nei pressi della sinapsi che possono sommarsi nello spazio e nel tempo in prossimità dei dendriti e del neurone.

Quando la somma delle correnti che arriva alla base dell’assone si rivela superiore ad una data soglia, viene generato un impulso (spike) di corrente di breve durata (da 2 a 5 millisecondi).

Lo spike si propaga attraverso l’assone verso le sinapsi e, quando le raggiunge, queste rilasciano i neurotrasmettitori, dando il via alla ripetizione dell’intero processo per i neuroni collegati a valle.

In una rete neurale artificiale i neuroni sono unità che elaborano in modo semplice i segnali ricevuti in ingresso da altri neuroni.

Le sinapsi sono connessioni tra le unità ed il segnale elettrico è un numero (solitamente compreso nell’intervallo [0,1]).

La conduttività delle sinapsi è data dal peso della connessione (solitamente indicato con w), un numero il cui effetto sul segnale si ottiene moltiplicando il segnale per il peso stesso, prima che sia raggiunta l’unità successiva.

Per portare un esempio semplice, se x è il segnale che si muove lungo la connessione tra due neuroni e w è il peso della connessione, il segnale "pesato" sarà dato da w*x. Le unità dunque calcolano il potenziale di attivazione e si attivano.

Il calcolo del potenziale di attivazione è dato dalla somma dei segnali pesati che arrivano dagli altri neuroni.

Vediamo il processo in un modo più formale. Abbiamo n canali di ingresso x1, …, xn ad ognuno dei quali è associato un peso wi, ovvero un numero reale che riproduce la sinapsi. Se wi > 0, il canale è eccitatorio, se wi < 0, il canale si dice inibitorio.

Il valore assoluto di di un peso rappresenta la forza della connessione.

L’output, cioè il segnale con cui il neurone trasmette la sua attività all’esterno, è calcolata applicando una funzione di attivazione alla somma pesata degli ingressi.

Indicando con

n

iii xwa

1 la somma pesata degli ingressi, si ha

n

iii xwfafy

1

)()(

La somma pesata degli input in letteratura è spesso indicata con la parola net.

Il calcolo del segnale da inviare alle altre unità sulla base del segnale di attivazione è effettuato mediante funzioni matematiche dette funzioni di trasferimento.

La soglia di fatto abbassa il valore di ingresso della funzione di attivazione, quindi può essere vista come un peso associato ad un ulteriore canale di ingresso x0, che ha un valore costante pari a -1.

La formula allora diventa

n

iii xwfafy

0)()(

in cui w0= cui corrisponde il modello illustrato nella figura che segue:

A volte non si considera la soglia ma il suo opposto (bias) che può essere visto come il peso di un canale di input con valore costante pari a 1. In questo caso, indicando il bias con la lettera

b, la formula diventa

n

iii xwfafy

0)()(

in cui x0=1 e w0 = b

È possibile adottare diversi tipi di funzioni di trasferimento, che caratterizzano il tipo di unità che ne fa uso. Vedremo le più utilizzate.

Le funzioni di attivazione 

Ricordiamo che abbiamo definito con a il livello di attivazione e quindi con f(a) la funzione di attivazione che entra in gioco a seconda del valore del livello.

a può essere un numero reale che può anche apparterene ad un dato intervallo (per esempio [0,1]) oppure può essere un numero appartenente ad un insieme discreto (di solito {0,1} oppure {-1,+1}).

Funzione binaria a soglia L’uscita (y) assume i valori:

0001

asease

y

Il grafico corrispondente è:

Se vogliamo evidenziare il contributo x0, scorporandolo dal livello di attivazione, il grafico diventa:

e, corrispondentemente, la formula sarà:

ase

xwseyn

iii

0

11

Funzione lineare

f(a) = a

Funzione lineare a tratti

5.015.05.05.0

5.00

aseasea

asey

Funzione sigmoidale La funzione ha la seguente equazione:

e è il numero di Nepero (vale circa 2,718281828) che gode di una serie di proprietà che potete approfondire facilmente in Rete. Il grafico della funzione è una versione senza discontinuità della funzione binaria: 

p

p

ee

a 11

11

1

Funzione segno Le funzioni di attivazione viste, eccezion fatta per la funzione lineare, assumono valori compresi tra 0 e +1. È tuttavia possibile ridefinire la funzione a soglia in modo che possa assumere valori compresi tra–1 e +1. La funzione a soglia viene ridefinita così:

010001

aseasease

y

ANN: cenni storici Abbiamo visto, per ora, i principi generali che occorrono per poter comprendere le ANN. La bellezza delle reti neurali risiede nella semplicità del meccanismo. Ma come si è arrivati a queste implementazioni in AI?

Abbiamo visto che la rete neurale artificiale è un tentativo di riprodurre la struttura di base di un rete neurale del cervello umano. A differenza dei modelli dell’AI classica, si assiste ad un vero e proprio modello che simula i meccanismi del cervello umano.

Nel modello di AI classica si ha un motore centrale (è l’analogia con il cervello) che analizza le diverse strategie possibili e decide quale sia la migliore; in una rete neurale non vi è un decisore centrale, ma la decisione è il risultato di un lavoro cooperativo e distribuito tra tutte le unità di base (i neuroni).

Questo modello è chiaramente applicabile non solo alle decisioni, ma anche a tutti i tipi di rappresentazione della conoscenza.

Dopo un iniziale periodo di entusiasmo, la ricerca in questo campo ha attraversato un periodo di difficoltà, durante il quale il supporto professionale ed economico fu minimo, ed i progressi più importanti furono realizzati da una relativamente ristretta cerchia di ricercatori.

Agli inizi degli anni ’40, il neurofisiologo Warren McCulloch ed il logico Walter Pitts elaborano un modello formale dell’attività dei neuroni e ne riproducono, per la prima volta, uno artificiale: un dispositivo binario semplice con soglie elettriche fissate che, per lo scarso livello tecnologico del tempo, producevano risultati che non andavano oltre semplici funzioni logiche quali "a o b" piuttosto che "a e b".

McCullogh & Pitts in un loro paper, presentano il modello semplificato di neurone a soglia, asserendo che la semplificazione è efficiente perché può riprodurre il meccanismo generale di funzionamento del neurone umano e, quindi, del cervello. M&P dimostrano anche che si può costruire una rete di neuroni in grado di svolgere tutte le operazioni del calcolatore universale di Turing. Inizialmente, dunque, non c’è novità rispetto all’AI classica: il neurone di M&P è un calcolatore universale.

Nel 1949 lo psicologo Donald Hebb introduce il principio del rinforzo delle sinapsi nel tempo, determinato dal loro utilizzo. (apprendimento non supervisionato)

Nel 1954 Belmont Farley e Wesley Clark, del MIT, si concentrarono su modelli computerizzati di simulazione del neurone, coinvolgendo anche alcuni neurologi, dando il via ad una tendenza alla multidisciplinarità ancora molto forte in AI.

Nel 1958 l’informatico Frank Rosenblatt sviluppa il perceptrone (apprendimento supervisionato), una rete a tre strati (layer), input, strato associativo, output, in grado di imparare a connettere o ad associare un input ad un output casuale.

Il perceptrone è ispirato agli studi sulla visione del cervello (campo in cui si hanno le conoscenze più approfondite).

Il funzionamento del perceptrone di Rosenblatt si basa sul concetto che lo strato di neuroni di input (di stato 0 o 1) dipenda dai segnali che vi giungono.

Rosenblatt ipotizza che esistano dei feature detector (simili ai neuroni center-surround, che rispondono a determinati stimoli), ognuno collegato a pochi recettori o sensori. Dunque ogni feature detector è collegato in modo casuale ad un numero di neuroni di input, con connessioni dai valori assolutamente casuali.

Tutti i feature detector sono collegati ad un neurone di output con connessioni non casuali.

L’output di questo neurone è calcolato sommando gli input moltiplicati per i rispettivi pesi: se il risultato è superiore alla soglia tale neurone “spara”, se è inferiore alla soglia, no.

La grande innovazione di Rosenblatt è che ha definito una procedura per modificare i pesi in base all’esperienza: la perceptron learning procedure.

Cosa faccio? Prendo un input e lo utilizzo per fissare il valore di tutti neuroni di input.

A questo punto calcolo l’output di tutti gli altri neuroni del sistema e lo confronto con il risultato che avrei voluto (immaginate che tra gli input dati – es. lettere dell’alfabeto -, mi aspetti in uscita una specifica lettera dell’alfabeto).

In pratica se in uscita ottengo quello che desidero, lascio i pesi così come sono, altrimenti li vario leggermente (W piccolo), finché non ottengo l’output che desidero.

In altre parole se l’output è on quando doveva essere off, riduco la forza delle connessioni verso i feature detector che sono on, quindi la prossima volta questi saranno meno importanti, viceversa se l’output è off quando doveva essere on, aumento la forza delle connessioni verso i feature detector che sono on.

Tutti questi aumenti sono W molto piccoli.

Posso dare ad un perceptrone compiti auto-associativi (fornisco in input un’immagine e deve generare in output la stessa immagine), oppure etero-associati o ancora di categorizzazione.

Il Perceptrone ha comunque, oltre alla semplificazione eccessiva, altri limiti già noti anche a McCollough, Pitts e Rosenblat, quale quello della separabilità lineare, che approfondiremo in seguito.

Intanto, nel 1960, Bernard Widrow e Marcian Hoff (Stanford University) sviluppano la rete ADALINE (ADAptive Linear Element), che adotta una nuova regola di apprendimento: la Least-Mean-Squares (LMS).

Nel 1969 Marvin Minsky e Seymour Paper criticano aspramente le ricerche di Rosenblatt, dimostrando che le capacità del perceptrone sono molto limitate perché non in grado di risolvere nemmeno problemi semplici come lo XOR (O esclusivo). Le conseguenze sono l’abbandono generale degli studi sulle reti neurali.

Vediamo velocemente in cosa consiste il problema della separabilità lineare attraverso il caso dello XOR. Il perceptrone di Rosenblatt apprende funzioni calcolabili, cioè linearmente separabili. Vediamo tre funzioni semplici: AND: vero (pallino rosso) se si ha x=1 e y=1; falso (pallino verde) in tutti gli altri casi. OR: vero (pallino rosso) se si ha x=1 oppure y=1; falso (pallino verde) in caso contrario. XOR: falso (pallino verde) solo se x=y=1 oppure se x=y=0; vero (pallino rosso) negli altri casi.

Fate riferimento alla figura che segue:

il neurone deve decidere se “sparare” o no in base al fatto che il risultato si trovi sopra o sotto la soglia, quindi (nel nostro caso in cui i valori sono due, cioè l’1 o lo 0), i risultati (vero=1 e falso=0) devono poter essere separati in due classi, divise dall’opportuna soglia.

Graficamente, devo poter dividere in due lo spazio con una linea (è la funzione della soglia) in modo che i pallini rossi si trovino tutti da una parte e i pallini verdi in un’altra parte.

La conseguenza di quello che abbiamo visto è che non esiste alcuna soglia che possa essere fissata per dividere lo spazio in due e la funzione XOR non è tra quelle apprendibili da un perceptrone.

Il caso dello XOR è il più semplice, utilizzato per farvi comprendere il problema e utilizzato da Minsky e Papert per criticare il perceptrone.

La realtà è che un numero molto elevato di funzioni matematiche risultano non separabili e quindi non possono essere calcolate dal perceptrone. Cade la tesi del calcolatore universale.

Non è la sola critica di Minsky e Papert, che adducono altri casi critici per il perceptrone, quali il “problema della parità” e del “credit assignement” (approfondire). L’interesse per le reti neurali resta sopito fino agli anni ’80, quando Grossberg e Carpenter svilupparono Art (Adptive Resonance Theory) basata su modelli biologici. Nel fattempo erano state condotte altre ricerche, tra cui va ricordato sicuramente Klopf, che lavora all’apprendimento atrificiale ispirandosi ai neuroni biologici (eterostasi) e precedentemente Werbos, nel 1974, che inizia a studiare i metodi di apprendimento back-propagation, ovvero un perceptrone a più layer, con migliori funzioni e regole di apprendimento. Ricordiamo ancora gli studi di Shun-Ichi Aari sul metodo error-correction, apprendimento basato su classificazione tramite esempi adattabili, e la rete Neocognitron, di Kunihiko (1975), che permette di interpretare caratteri scritti a mano.

Dunque negli anni ’80 si assiste ad un ritorno di interesse per le reti neurali, principalmente per due fattori: nuovi risultati teorici che consentono di superare le limitazioni del Perceptrone; elevata potenza di calcolo dei nuovi sistemi di elaborazione.

Nel 1982 Hopfield analizza le reti costituite da unità binarie e connessioni simmetriche. È possibile introdurre una funzione energia che determina lo stato della rete (che tende a minimizzare la sua energia). Questo modello dinamico porta una rivoluzione nello sviluppo delle reti neurali. Nel 1986 viene proposto l’algoritmo di backpropagation, che è una generalizzazione dell’algoritmo di apprendimento del perceptrone alle reti multi-strato (multi-layer) e consente di superare i problemi individuati da Minsky e Papert.

L’introduzione di livelli intermedi permette alla rete di creare una rappresentazione interna dell’ambiente esterno, quindi la rete acquisisce la capacità di interpretare e generalizzare. Oggi la backpropagation è l’algoritmo più utilizzato.

Un altro modello da ricordare è il competitive learning di Rumelhart e Zipster: ogni unità apprende come rispondere ad una configurazione di ingresso specifica, entrando in competizione con altre unità attraverso mutue inibizioni.

Kohonen propone un algortmo di competitive learning che mette in relazione la densità spaziale dei cluster alla distribuzione di probabilità delle possibili configurazioni di ingresso.

Oggi le reti neurali sono ampiamente ed efficacemente utilizzate ed i modelli, dinamici e multi-strato, sono in continua evoluzione.

Approfondire: chi era Herbert Alexander Simon?

I diversi modelli di reti neurali si differenziano a seconda di alcune caratteristiche: tipo di utilizzo

- architettura dei collegamenti - modalità di apprendimento - algoritmo di apprendimento

Parleremo di tutto nel seguito, ma innanzitutto distinguiamo le reti per tipo di utilizzo, per cui si distinguono tre categorie principali: - memorie associative. Possono apprendere associazioni tra pattern,

ovvero insiemi complessi di dati, quali ad esempio i pixel di un’immagine, in modo che la presentazione di un pattern specifico fornisca come output un pattern obiettivo anche se il primo risulta impreciso o parziale (resistenza al rumore). Una memoria associativa può essere anche utilizzata per fornire in output il pattern completo in risposta ad un pattern parziale in input.

- Simulatori di funzioni matematiche. Comprendono la funzione che lega l’input all’output in basse ad esempi forniti in fase di training. Dopo l’addestramento la rete è in grado di fornire output anche in risposta ad input diversi da quelli usati negli esempi di addestramento. La rete dunque interpola ed estrapola dai dai dati del training set. Tali capacità sono verificabili addestrando una rete con una sequenza di dati input/output proveniente da una funzione nota. La rete si comporta come una black box, poiché la funzione di trasferimento interna non è svelata completamente. La rete a retropropagazione dell’errore (error back propagation) fa parte di questa categoria.

- Classificatori. Si tratta di reti costruite con lo scopo di classificare i dati in categorie in base a caratteristiche di similitudine. Possono essere sia di tipo supervisionato che auto-organizzante, quindi senza categorie predefinite.

Classificazione delle modalità di apprendimento 

Abbiamo detto che Rosenblatt introdusse il concetto di apprendimento nelle reti neurali e, incidentalmente, abbiamo nominato, ad esempio, il termine “apprendimento supervisionato”.

Prima di proseguire, sarà bene chiarire pochi semplici concetti su tale argomento.

L’apprendimento si può classificare adottando criteri diversi a seconda che sia ‐ Basato sull’informazione a disposizione, ovvero:

- Supervisionato - Con rinforzo - Non supervisionato

‐ Basato sul ruolo del sistema che apprende, e cioè - Apprendimento passivo - Apprendimento attivo

Nell’apprendimento supervisionato si ha a disposizione un insieme di esempi classificati x:<v1, v2, …,vn, o>, in cui vi rappresenta i valori delle variabili di ingresso ed o è l’uscita.

L’apprendimento supervisionato implica necessariamente l’esistenza di un istruttore che conosce la risposta corretta attesa.

In questo caso si vuole apprendere una data funzione obiettivo f: V1 x V2 x V3 … → O

Un possibile algoritmo consiste nello scegliere, all’interno delle classi di ipotesi H, quella che rende minimo l’errore di approssimazione della funzione obiettivo sugli esempi a disposizione.

L’apprendimento supervisionato avviene secondo meccanismi induttivi, a partire cioè da esempi. Consiste dunque nella descrizione di una funzione a partire da un insieme di coppie ingresso/uscita dette esempi.

In generale possono esservi molte ipotesi alle quali è possibile assegnare un grado di preferenza, detto inclinazione, al di là del semplice criterio di consistenza con gli esempi.

Ogni ipotesi tale da approssimare il comportamento della funzione obiettivo su un numero sufficientemente grande di esempi lo approssimerà anche sui campioni non osservati (dalla teoria statistica del campionamento e dalla computational learning theory)

Nell’apprendimento per rinforzo, l’apprendista interagisce con l’ambiente e riceve una ricompensa (numerica) positiva o negativa a seconda del risultato delle azioni conseguenza dell’apprendimento.

Si apprende così una strategia di comportamento, ovvero un “piano” o sequenza di azioni. In questo caso la misura della prestazione consiste nel rendere massima “a lungo termine” la ricompensa complessiva ricevuta dal sistema.

L’apprendimento non supervisionato prevede che l’esperienza di apprendimento sia rappresentata da dati non classificati (ad esempio cartelle cliniche, pagine web). “Apprendere” in questo caso significa rilevare ridondanze o correlazioni statistiche dei dati.

Occorre un ultimo inciso sulle modalità di apprendimento dal punto di vista del learner. Nell’apprendimento passivo il sistema che apprende può imparare solo dai dati che vengono messi a disposizione (esempi). Nell’apprendimento attivo, invece, il learner può fare domande e condurre esperimenti. In questo caso sorge, però, la necessità di limitare l’intrusività del learner, stabilendo un modo ottimale di indagine autonoma. Tra i modelli supervisionati occorre ricordare i MultiLayer Perceptron (vedremo meglio questi ultimi), i Neurofuzzy Models.

Tra quelli non supervisionati (unsupervised) i più utilizzati sono le SOM (Self-Organizing Map).

Nel seguito, quando parleremo dei modelli e delle architetture, approfondiremo i meccanismi di addestramento supervisionato e gli algoritmi adottabili.

Modelli e architetture di rete neurale Vi sono diversi modelli e diverse architetture adottabili per l’implementazione di una rete neurale.

La scelta ovviamente dipende dal tipo di problema che si vuole trattare.

Per completare l’introduzione alle ANN che stiamo conducendo, ne presenteremo due, ma potete facilmente approfondire l’argomento in Rete.

Reti completamente connesse (senza strati) In una rete completamente connessa ogni neurone è connesso bidirezionalmente con ognuno degli altri. Le connessioni sono rappresentate da una matrice quadrata W, di dimensione pari al numero di neuroni. Il generico elemento wij della matrice rappresenta il peso della connessione tra il neurone i ed il neurone j.

Reti stratificate

Le reti stratificate sono caratterizzate dalla presenza di neuroni ciascuno connesso con tutti quelli dello strato successivo, senza che esistano connessioni tra neuroni del medesimo strato o tra strati non adiacenti.

Nello strato di input non avviene alcuna computazione (i neuroni di ingresso passano semplicemente i segnali ricevuti allo strato successivo), per cui una rete come quella presentata in figura A viene considerata come una rete con un solo strato.

Figura A:  Figura B: 

In questo tipo di rete i segnali viaggiano dallo strato di ingresso verso lo strato di uscita e si dice che la rete è feedforward. In figura B è invece mostrata una rete stratificata feedforward con uno strato nascosto, ovvero uno strato i cui neuroni non comunicano in modo diretto con l’esterno.

Possono essere presenti uno o più strati nascosti, che permettono alla rete di costruire opportune rappresentazioni interne degli stimoli in ingresso, in modo da facilitare e organizzare il compito della rete. Le connessioni tra i neuroni di una rete a strati sono rappresentate tramite tante matrici quante le coppie di strati adiacenti. Ciascuna matrice contiene i pesi delle connessioni tra le coppie di neuroni di strati adiacenti.

Per i tipi di problemi che più comunemente potrete incontrare nelle vostre attività, e per semplicità di trattazione, noi ci occuperemo principalmente di reti supervisionate, pur accennando, per completezza, anche agli altri approcci. In particolare vedremo nel dettaglio come si progetta e sviluppa una ANN multilayer perceptron.

Possiamo dire che l’architettura generale di una rete neurale sia quella mostrata nella figura accanto, costituita da

- unità di ingresso (input unit), che ricevono i segnali dall’ambiente esterno;

- unità nascoste (hidden units), opzionali. Partecipano alle comunicazioni all’interno della rete;

- unità di uscita (output unit), che forniscono la risposta della rete.

Abbiamo già parlato del perceptrone elementare (senza strati nascosti) e del fatto che non può classificare pattern che non siano linearmente separabili .

Il problema è però risolvibile con l’introduzione di uno strato nascosto. Se nel perceptrone elementare, ad esempio, introduco uno strato nascosto con due neuroni (modello McCulloch-Pitts) posso risolvere il problema dello XOR.

Ma come si codificano le informazioni in ingresso alla rete?

Se scegliamo la modalità locale, in cui ogni unità di ingresso corrisponde ad un oggetto, abbiamo la necessità di un numero troppo elevato di neuroni di input, non avremmo flessibilità nella gestione di nuovi oggetti ed inoltre avremmo scarsa resistenza al rumore.

Se invece scegliamo la modalità distribuita, cioè quella in cui la rappresentazione di ogni oggetto utilizza più nodi di ingresso (ognuno relativo ad una caratteristica specifica), superiamo i problemi precedenti.

La scelta di come rappresentare i pattern in ingresso alla rete neurale è determinante.

Inoltre potrebbe essere necessario effettuare una normalizzazione dei dati, ad esempio nel caso in cui provengano da “sorgenti” diverse.

Una delle formule più utilizzate per la normalizzazione consiste nel dividere ogni componente xi per la norma del vettore, secondo la formula:

n

ii

ii

x

xx

1

2

Abbiamo detto che per determinare preventivamente i valori sinaptici delle connessioni fra i noi è necessaria una fase di addestramento, che consiste nella modifica graduale dei valori assunti inizialmente dalle sinapsi, sulla base dei pattern scelti (per l’addestramento).

I valori iniziali delle connessioni sinaptiche sono assegnati in modo casuale, per esempio all’interno di un intervallo, oppure sono posti tutti allo stesso valore.

Come abbiamo detto, l’addestramento può essere condotto: - in modo supervisionato,

utilizzando coppie di pattern <vettore di ingresso, risposta desiderata> l’aggiornamento dei pesi avviene in conseguenza della misura di errore tra la risposta data dalla rete e quella desiderata

- apprendimento in auto-organizzazione non viene specificata la risposta attesa dagli esempi forniti per l’addestramento, ma si definiscono regole attraverso le quali la rete possa organizzarsi

La modifica dei pesi può avvenire secondo una modalità on-line, ovvero in modo che l’aggiornamento avvenga per ogni pattern in ingresso, oppure per epoche, cioè effettuata dopo la presentazione di tutti i pattern in ingresso.

Le modifiche calcolate vengono sommate ai valori già presenti.

Il procedimento avviene più volte, in modo che la rete non “dimentichi” quanto ha appreso fino a quel momento.

Un altro aspetto importante è stabilire il numero di esempi da utilizzare per la fase di training. Non esiste, tuttavia, una regola ma si possono adottare delle stime. Generalmente per un multilayer perceptron in genere si sceglie un numero di record pari a 2 volte il numero totale delle connessioni. Per calcolare il numero delle connessioni occorre conoscere il numero delle unità nascoste che in questo caso si stimano uguali alla radice quadrata del numero di ingressi moltiplicato il numero di uscite. Raggiunto il valore minimo di errore della rete, si può fermare l’addestramento. Tale valore dipende da vari fattori, quali la precisione che si intende ottenere dalla rete, o il tipo di funzione di attivazione, il numero di uscite della rete, e così via. Una volta conclusa la fase di addestramento, si può procedere con la fase di test, che permette di osservare il comportamento della rete senza modificare i pesi sinaptici trovati durante il training.

Riassumendo: - fase di training: alla rete viene fornito un sottoinsieme di

coppie input-output. La rete adatta il proprio stato interno per classificarle correttamente.

- Fase di test: viene fornito alla rete un sottoinsieme del dataset diverso dal precedente (di cui si conosce l’output). L’accuratezza della rete è misurata in termini di risposte corrette date dalla rete.

Per suddividere il dataset evitando di introdurre bias, in genere si adotta, in alternativa, uno dei due metodi:

- Random sampling (campionamento casuale). E’ il più semplice, ma quello che segue fornisce maggiori garanzie.

- K-fold cross validation: il dataset è suddiviso in k sottoinsiemi. La rete è addestrata su k-1 sottoinsiemi e testata sul sottoinsieme restante. Il procedimento si itera k volte (con selezioni diverse) e si prende, infine, la media dei risultati. Ovviamente questo metodo è conveniente se si dispone di un numero sufficientemente grande di record nel dataset.

Per evitare l’overfitting (la rete non generalizza), in cui si può incorrere se si adatta troppo il modello ai dati o se si sceglie un modello troppo complesso, è preferibile spesso suddividere ulteriormente il training set, prendendone una parte come validation set. Si userà quest’ultimo sottoinsieme per testare periodicamente l’accuratezza della rete durante l’addestramento: se l’errore aumenta, si arresta il training.

Se poi si deve scegliere tra più modelli o algoritmi di apprendimento, si utilizza il training set suddiviso in k sottoinsiemi di cross-validation, per confrontare le varie alternative. Si allena il modello scelto sul training set, controllandone periodicamente l’accuratezza sul validation set e si arresta il training quando inizia l’overfitting.

L’accuratezza finale si valuta, in questo caso, sul test set.

Come abbiamo detto, non ci sono regole generali, ma la pratica suggerisce che per le reti neurali l’approccio migliore consiste nell’adottare la seguente strategia: - ovviamente:

- far corrispondere il numero di nodi in ingresso al numero di feature

- far corrispondere il numero di nodi in uscita al numero di classi - Suddividere il dataset in tre sottoinsiemi: training set, validation

set, test set. - Per stabilire il corretto numero di hidden layer e di nodi per livello

generalmente si va per tentativi successivi. Adottare la k-fold cross validation sul training set può aiutare a trovare il giusto equilibrio

- Allenare la rete su tutto il training set, limitando l’overfitting con il validation set - Valutare l’accuratezza finale sul test set

Vi sono poi un paio di regole euristiche che possono aiutare:

- In genere un hidden layer è sufficiente per la maggior parte dei problemi. Inoltre in questo caso l’allenamento è più rapido)

- Conviene sempre cominciare con un numero di nodi interni basso e poi crescere finchè non si noti un miglioramento.

L’algoritmo di back propagation Vi sono vari algoritmi adottabili nell’approccio supervisionato per la modifica dei pesi.

Tra tutti, il back propagation è l’algoritmo più usato per modificare i valori sinaptici e si può utilizzare indipendentemente dall’architettura adottata e dal numero di strati intermedi.

Il principio dell’algoritmo è la modifica dei pesi delle connessioni condotta in modo da minimizzare una certa funzione errore E, che dipende dal vettore oi restituito dalla rete per l’ingresso xi, e dal vettore di output yi che desideriamo ottenere (e che fa parte del training set). Il training set è l’insieme di n coppie di vettori (xi,yi), con i=1, …, n.

Considerato k l’indice che rappresenta il valore corrispondente al k-simo neurone di output, la funzione errore da minimizzare sarà:

i k

ik

ik yowE 2)(

21)(

E(w) dipende dai pesi, che variano nel tempo, e per minimizzarla si può utilizzare l’algoritmo della discesa del gradiente (gradient-descent). Il gradient-descent parte da un punto generico x0 e calcola il gradiente f(x0), che fornisce la direzione verso la quale muoversi e lungo la quale si ha il massimo incremento (decremento se si considera -). Una volta definita la direzione, ci si muove di una distanza predefinita, trovando un nuovo punto x1 su cui viene calcolato di nuovo il gradiente.

Si continua così, finché il gradiente risulta nullo.

Di fatto, l’algoritmo di back propagation è diviso in due passi: - forward pass: l’input fornito alla rete viene propagato ai livelli

successivi (il flusso va in avanti – forward). Si calcola l’errore commesso E(w)

- backward pass: l’errore E(w) è propagato all’indietro (backward) ed i pesi vengono aggiornati opportunamente.

Vediamo quali sono i passi da compiere per addestrare la rete utilizzando l’approccio supervisionato:

- creare l’insieme di input pattern ed il corrispondente output pattern desiderato

- inizializzare i pesi della rete a valori casuali piccoli e a norma nulla (valore assoluto della radice quadrata della somma dei quadrati dei componenti dei vettori)

- iniziare il ciclo di apprendimento (che terminerà solo quando l’errore risulta minore della soglia che si è prefissata o dopo un numero di iterazioni deciso a priori)

- feedforward (da input a output) - si estrae (ad esempio a caso) un input pattern tra quelli

selezionati. Si ricordi che per ottenere un buon addestramento, l'insieme dei pattern di input deve essere completo. (continua) Dunque, scelto un pattern di input, nell’estrazione di quello nuovo, il precedente non deve partecipare alla scelta. In questo modo si considereranno solo gli input non ancora estratti, per poi ripescare dall’insieme completo quando tutti sono stati estratti almeno una volta. Si procede in modo simile anche se si sceglie di adottare un meccanismo k-fold.

- si calcola il valore di tutti i neuroni successivi (con la sommatoria di produttorie che conosciamo, ormai, bene)

- si detrae dal risultato il valore di soglia di attivazione del neurone (in alternativa, come abbiamo visto, è possibile simulare la soglia con l’aggiunta di un neurone ad ingresso fisso di valore pari a 1)

- si filtra l’uscita del neurone e si riadatta il ciclo facendo diventare tale valore l’input del neurone successivo

- si confronta il risultato ottenuto dalla rete con l’output pattern corrispondente all’input appena utilizzato e si ricava l’errore attuale della rete

- back propagation (da output a input) - si calcola la correzione da apportare ai pesi secondo la

regola scelta - si applica la correzione ai pesi dello strato

Link utile per approfondire ulteriormente l’argomento reti neurali:

http://stor.altervista.org/informatica/nn/nn.htm (ANN affrontate in modo pratico)

alcuni esempi di reti neurali in vari linguaggi:http://www.iet.unipi.it/m.cimino/index_files/publications/reteNeurale.pdf

http://www.orebla.it/file/reti.pdf

ne trovate tanti altri in rete...

ùùù

Come creare una rete neurale Per creare una rete neurale è possibile utilizzare

- sw di simulazione di ANN già pronti (vedremo nel seminario sulle ANN). Vi sono sia realizzazioni a pagamento, non economiche ma almeno con buoni manuali, sia sw più economici o a volte gratuiti ma con il difetto di non essere corredati da help o da un buon manuale. Alcuni esempi (e link) potrete trovarli qui: http://www.msandri.it/complex/neural/softwa~1.htm

- linguaggi di programmazione. Per i più esperti (in linguaggi di programmazione, intendo) è possibile programmare ex novo una rete neurale utilizzando il linguaggio preferito (C++, Java, ecc.). La rete neurale in sé non comporta molte righe di codice ma, ovviamente, occorre conoscere il linguaggio di programmazione.

- Nuove implementazioni sviluppate in ambienti statistici. Tra i più conosciuti Matlab (che però non è free) e R (opensource e free). Contengono package (librerie) che permettono di sviluppare facilmente una rete neurale. Nell’intento di farvi cosa gradita (visto che è utile per molte applicazioni) vedremo R e come sviluppare una rete semplice in questo ambiente. Anche Mathematica è un ambiente semplice da utilizzare.

Creare una rete neurale con R R è un software opensource, free, molto potente nato per implementazioni statistiche ma contenente molti package (librerie) per applicazioni diverse. Le librerie sono insiemi di procedure e funzioni accessibili da un comando (sintassi) diretto per realizzare un’applicazione. Qui: http://www.cran.r-project.org/ trovate un elenco completo di tutte le librerie presenti in R. È possibile scaricare R da questo sito http://www.r-project.org/ in cui sono presenti anche manuali, documentazione e link al wiki per chi intende ampliare le proprie conoscenze. I manuali di R presenti sul sito sono fatti molto bene, ma sono in Inglese. Per chi preferisse l’Italiano, ottimi manuali di introduzione ad R in Rete possono essere reperiti qui: http://torinor.net/download/EnnioDispense.pdf http://cran.r-project.org/doc/contrib/Mineo-dispensaR.pdf Noi vedremo le basi di R, giusto per poter capire come si utilizza l’ambiente e come sviluppare una rete neurale semplice di cui faremo l’esempio nel seguito. Per gli approfondimenti, si rimanda ai link sopra riportati.

Primi passi in R (tratto da http://math.illinoisstate.edu/dhkim/rstuff/rtutor.html )

Una volta scaricata e installata la versione di R adatta al proprio sistema operativo, basta avviare R dall’icona sul desktop oppure dal menu di avvio per visualizzare la schermata della console: Come uscire da R? Basta scrivere q() al prompt (>) e premere invio. Apparirà una dialog box che richiede se si desidera salvare ciò che si è creato in R per vederlo

apparire nuovamente alla prossima sessione di R.

I comandi scritti sulla console possono essere sempre facilmente richiamati e modificati agendo sulle frecce posizionate sulla tastiera.

Vediamo subito due comandi utili: > objects() # list the names of all objects > rm(data1) #remove the object named data1 from the current environment

Operazioni di base Ovviamente in R è possibile innanzitutto compiere tutte le operazioni di base, quali, ad esempio: > 2 + 3 * 5 # Note the order of operations. > log (10) # Natural logarithm with base e=2.718282 > 4^2 # 4 raised to the second power > 3/2 # Division > sqrt (16) # Square root > abs (3-7) # Absolute value of 3-7 > pi # The mysterious number > exp(2) # exponential function > 15 %/% 4 # This is the integer divide operation > # This is a comment line

Vi sono poi gli operatori di assegnazione (<-) che immagazzinano il valore (object), o il risultato dell’espressione, posto sulla parte destra di <- alla variabile posta a sinistra. Una volta effettuata l’assegnazione, la variabile può essere utilizzata come il valore stesso. Attenzione: R è case sensitive. Prima di assegnare un nome, assicuratevi che non sia già utilizzato da R nei molti pacchetti che mette a disposizione. E’ sufficiente scrivere il nome scelto e dare invio: se R ritorna un errore, vuol dire che il nome che avete scelto non è in uso. Vediamo alcuni esempi di assegnazione: > x<- log(2.843432) *pi > x [1] 3.283001 > sqrt(x) [1] 1.811905 > floor(x) # largest integer less than or equal to x (Gauss number) [1] 3

> ceiling(x) # smallest integer greater than or equal to x [1] 4 R può anche gestire numeri complessi: > x<-3+2i > Re(x) # Real part of the complex number x [1] 3 > Im(x) # Imaginary part of x [1] 2 > y<- -1+1i > x+y [1] 2+3i > x*y [1] -5+1i

Vettori  R gestisce gli oggetti vettore in modo semplice ed intuitivo: > x<-c(1,3,2,10,5) #create a vector x with 5 components > x [1] 1 3 2 10 5 > y<-1:5 #create a vector of consecutive integers > y [1] 1 2 3 4 5 > y+2 #scalar addition [1] 3 4 5 6 7 > 2*y #scalar multiplication [1] 2 4 6 8 10 > y^2 #raise each component to the second power

[1] 1 4 9 16 25 > 2^y #raise 2 to the first through fifth power [1] 2 4 8 16 32 > y #y itself has not been unchanged [1] 1 2 3 4 5 > y<-y*2 > y #it is now changed [1] 2 4 6 8 10

Alcuni esempi di operazioni sui vettori: > x<-c(1,3,2,10,5); y<-1:5 #two or more statements are separated by semicolons > x+y [1] 2 5 5 14 10 > x*y [1] 1 6 6 40 25 > x/y [1] 1.0000000 1.5000000 0.6666667 2.5000000 1.0000000 > x^y [1] 1 9 8 10000 3125 > sum(x) #sum of elements in x [1] 21 > cumsum(x) #cumulative sum vector [1] 1 4 6 16 21

> diff(x) # first difference [1] 2 -1 8 -5 > diff(x,2) #second difference [1] 1 7 3 > max(x) #maximum [1] 10 > min(x) #minimum [1] 1 L’ordinamento dei dati può essere effettuato utilizzando il commando sort(): > x [1] 1 3 2 10 5 > sort(x) # increasing order [1] 1 2 3 5 10 > sort(x, decreasing=T) # decreasing order [1] 10 5 3 2 1

Inoltre estrarre i componenti di un vettore per effettuare operazioni è estremamente semplice: > x [1] 1 3 2 10 5 > length(x) # number of elements in x [1] 5 > x[3] # the third element of x [1] 2 > x[3:5] # the third to fifth element of x, inclusive [1] 2 10 5 > x[-2] # all except the second element [1] 1 2 10 5 > x[x>3] # list of elements in x greater than 3 [1] 10 5

Si possono anche avere vettori logici: > x>3 [1] FALSE FALSE FALSE TRUE TRUE > as.numeric(x>3) # as.numeric() function coerces logical components to numeric [1] 0 0 0 1 1 > sum(x>3) # number of elements in x greater than 3 [1] 2 > (1:length(x))[x<=2] # indices of x whose components are less than or equal to 2 [1] 1 3 > z<-as.logical(c(1,0,0,1)) # numeric to logical vector conversion > z [1] TRUE FALSE FALSE TRUE

Vettori di caratteri: > colors<-c("green", "blue", "orange", "yellow", "red") > colors [1] "green" "blue" "orange" "yellow" "red" Inoltre è possibile assegnare nomi a component individuali e poi riferirsi ad esse tramite il nome, come negli esempi che seguono. > names(x) # check if any names are attached to x NULL > names(x)<-colors # assign the names using the character vector colors > names(x) [1] "green" "blue" "orange" "yellow" "red" > x green blue orange yellow red 1 3 2 10 5

> x["green"] # component reference by its name green 1 > names(x)<-NULL # names can be removed by assigning NULL > x [1] 1 3 2 10 5 seq() and rep() provide convenient ways to a construct vectors with a certain pattern. > seq(10) [1] 1 2 3 4 5 6 7 8 9 10 > seq(0,1,length=10) [1] 0.0000000 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667 [8] 0.7777778 0.8888889 1.0000000

> seq(0,1,by=0.1) [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 > rep(1,3) [1] 1 1 1 > c(rep(1,3),rep(2,2),rep(-1,4)) [1] 1 1 1 2 2 -1 -1 -1 -1 > rep("Small",3) [1] "Small" "Small" "Small" > c(rep("Small",3),rep("Medium",4)) [1] "Small" "Small" "Small" "Medium" "Medium" "Medium" "Medium" > rep(c("Low","High"),3) [1] "Low" "High" "Low" "High" "Low" "High"

Matrici  Come sapete, una matrice è un array di righe e colonne. Uno dei modi più facili di creare una matrice consiste nel combinare vettori di uguale lunghezza utilizzando il comando cbind(), che sta per "column bind": > x [1] 1 3 2 10 5 > y [1] 1 2 3 4 5 > m1<-cbind(x,y);m1 x y [1,] 1 1 [2,] 3 2 [3,] 2 3 [4,] 10 4 [5,] 5 5

> t(m1) # transpose of m1 [,1] [,2] [,3] [,4] [,5] x 1 3 2 10 5 y 1 2 3 4 5 > m1<-t(cbind(x,y)) # Or you can combine them and assign in one step > dim(m1) # 2 by 5 matrix [1] 2 5 > m1<-rbind(x,y) # rbind() is for row bind and equivalent to t(cbind()).

Naturalmente gli elementi della matrice si possono elencare in modo diretto: > m2<-matrix(c(1,3,2,5,-1,2,2,3,9),nrow=3);m2 [,1] [,2] [,3] [1,] 1 5 2 [2,] 3 -1 3 [3,] 2 2 9 Si noti che gli elementi sono utilizzati per “riempire” la prima Colonna, quindi la sseconda colonna e così via. Per riempire la matrice per righe, è sufficiente utilizzare l’opzione byrow=T: > m2<-matrix(c(1,3,2,5,-1,2,2,3,9),ncol=3,byrow=T);m2 [,1] [,2] [,3] [1,] 1 3 2 [2,] 5 -1 2 [3,] 2 3 9

Per estrarre le componenti da una matrice è necessario specificare uno o più indici: > m2 [,1] [,2] [,3] [1,] 1 3 2 [2,] 5 -1 2 [3,] 2 3 9 > m2[2,3] #element of m2 at the second row, third column [1] 2 > m2[2,] #second row [1] 5 -1 2 > m2[,3] #third column [1] 2 2 9

> m2[-1,] #submatrix of m2 without the first row [,1] [,2] [,3] [1,] 5 -1 2 [2,] 2 3 9 > m2[,-1] #ditto, sans the first column [,1] [,2] [1,] 3 2 [2,] -1 2 [3,] 3 9 > m2[-1,-1] #submatrix of m2 with the first row and column removed [,1] [,2] [1,] -1 2 [2,] 3 9

Inoltre è possibile effettuare operazioni componente per componente: > m1<-matrix(1:4, ncol=2); m2<-matrix(c(10,20,30,40),ncol=2) > 2*m1 # scalar multiplication [,1] [,2] [1,] 2 6 [2,] 4 8 > m1+m2 # matrix addition [,1] [,2] [1,] 11 33 [2,] 22 44 > m1*m2 # component-wise multiplication [,1] [,2] [1,] 10 90 [2,] 40 160

Si noti che m1*m2 non è la moltiplicazione usuale, per la quale, invece, si utilizza l’operatore %*% > m1 %*% m2 [,1] [,2] [1,] 70 150 [2,] 100 220 > solve(m1) #inverse matrix of m1 [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 > solve(m1)%*%m1 #check if it is so [,1] [,2] [1,] 1 0 [2,] 0 1 > diag(3) #diag() is used to construct a k by

k identity matrix [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > diag(c(2,3,3)) #as well as other diagonal matrices [,1] [,2] [,3] [1,] 2 0 0 [2,] 0 3 0 [3,] 0 0 3

Per altre operazioni più complesse, si rimanda alla documentazione presente sul sito di R.

I Data frame  I Data frame sono array di dati le cui colonne possono contenere valori di tipo diverso (numeri, caratteri, ecc.) Data frame di piccole dimensioni possono essere creati con la funzione data.frame(). Ecco un data frame di dati di automobili: Make Model Cylinder Weight Mileage Type Honda Civic V4 2170 33 Sporty Chevrolet Beretta V4 2655 26 CompactFord Escort V4 2345 33 Small Eagle Summit V4 2560 33 Small Volkswagen Jetta V4 2330 26 Small Buick Le Sabre V6 3325 23 Large Mitsubishi Galant V4 2745 25 CompactDodge Grand Caravan V6 3735 18 Van Chrysler New Yorker V6 3450 22 MediumAcura Legend V6 3265 20 Medium

Vediamo come creare il dataframe:

> Make<-c("Honda","Chevrolet","Ford","Eagle","Volkswagen","Buick","Mitsbusihi", + "Dodge","Chrysler","Acura") > Model<-c("Civic","Beretta","Escort","Summit","Jetta","Le Sabre","Galant", + "Grand Caravan","New Yorker","Legend")

Il segno + presente nelle righe sopra, viene inserito automaticamente da R quando viene dto l’invio senza aver completato la lista. Inoltre il commando rep() serve per far ripetere più volte il comando a R. Ad esempio, rep("V4",5) dice ad R di ripetere V4 per cinque volte.

> Cylinder<-c(rep("V4",5),"V6","V4",rep("V6",3)) > Cylinder [1] "V4" "V4" "V4" "V4" "V4" "V6" "V4" "V6" "V6" "V6" > Weight<-c(2170,2655,2345,2560,2330,3325,2745,3735,3450,3265) > Mileage<-c(33,26,33,33,26,23,25,18,22,20) > Type<-c("Sporty","Compact",rep("Small",3),"Large","Compact","Van",rep("Medium",2))

La funzione data.frame() combina i sei vettori in un singolo data frame > Car<-data.frame(Make,Model,Cylinder,Weight,Mileage,Type) > Car Make Model Cylinder Weight Mileage Type 1 Honda Civic V4 2170 33 Sporty 2 Chevrolet Beretta V4 2655 26 Compact 3 Ford Escort V4 2345 33 Small 4 Eagle Summit V4 2560 33 Small 5 Volkswagen Jetta V4 2330 26 Small 6 Buick Le Sabre V6 3325 23 Large 7 Mitsbusihi Galant V4 2745 25 Compact 8 Dodge Grand Caravan V6 3735 18 Van

9 Chrysler New Yorker V6 3450 22 Medium 10 Acura Legend V6 3265 20 Medium > names(Car) [1] "Make" "Model" "Cylinder" "Weight" "Mileage" "Type"

Esattamente come negli oggetti matrice, le informazioni parziali possono essere facilmente estratte dai data frame:

> Car[1,] Make Model Cylinder Weight Mileage Type 1 Honda Civic V4 2170 33 Sporty

Inoltre, single colonne possono essere richiamate attraverso le loro etichette: > Car$Mileage [1] 33 26 33 33 26 23 25 18 22 20 > Car[,5] #equivalent expression, less informative > mean(Car$Mileage) #average mileage of the 10 vehicles [1] 25.9 > min(Car$Weight) [1] 2170

Il comando table() fornisce una tabella di frequenza: > table(Car$Type) Compact Large Medium Small Sporty Van 2 1 2 3 1 1

Se si desidera ordinare I dati secondo il peso del veicolo, occorre usare il commando order( > i<-order(Car$Weight);i [1] 1 5 3 4 2 7 10 6 9 8 > Car[i,] Make Model Cylinder Weight Mileage Type 1 Honda Civic V4 2170 33 Sporty 5 Volkswagen Jetta V4 2330 26 Small 3 Ford Escort V4 2345 33 Small 4 Eagle Summit V4 2560 33 Small 2 Chevrolet Beretta V4 2655 26 Compact 7 Mitsbusihi Galant V4 2745 25 Compact 10 Acura Legend V6 3265 20 Medium 6 Buick Le Sabre V6 3325 23 Large 9 Chrysler New Yorker V6 3450 22 Medium 8 Dodge Grand Caravan V6 3735 18 Van

Come modificare i data objects  > y [1] 1 2 3 4 5 Se si desidera modificare I data object, è necessario utilizzare la funzione edit() e assengarla ad un oggetto. Ad esempio il commando che segue apre notepad per modificare l’oggetto- > y<-edit(y) Se invece si preferisce inserire i dati di un data frame un stile spreadsheet, occorre utilizzare la sintassi che segue. > data1<-edit(data.frame()) In questo caso apparirà una schermata come in figura:

E’ possibile anche cambiare il nome della variabile facendo click una volta sulla cella che la contiene, aprendo così una dialog box come la seguente:

Una volta finito, basta un click su per tornare alla finestra Data Editor. Chiudendo il Data Editor si torna alla finestra di comando R (R Console). Per verificare che i cambiamenti siano avvenuti, basta scrivere: > data1

R mette a disposizione molti tipi di grafici (nelle dispense trovate tutte le indicazioni)

Anche per l’analisi statistica R mette a disposizione molte funzioni e troverete degli esempi sempre nelle dispense presenti sul sito.

Nelle dispense sono presenti, inoltre vari altri comandi, compresi quelli che consentono l’import e l’esport di dati. 

Consultare l’help  Per default, R mette a disposizione, al suo interno, alcuni manuali in pdf fatti molto bene. Per accedere al manual, si faccia click su Help | Manuals. Per usare invece l’help per avere informazioni su una specifica funzione o comando, si usi il comando help() > help(read.table)

Esempio di rete neurale in R In questo esempio viene sviluppata una rete neurale (Multilayer perceptron) in grado prendere un numero e calcolare la radice quadrata con la maggior precisione possibile. Per addestrare e costruire la rete neurale sarà utilizzata la libreria R “neuralnet”.

La rete prodotta con questo esempio è quella mostrata nell’immagine.

Prende un singolo input (il numero di cui si desidera la radice quadrata) e produce un singolo output (la radice quadrata dell’input).

Nel mezzo dell’immagine vedete 10 hidden neuron che saranno addestrati.

L’output risulterà così:

Input Output Atteso Neural Net Output 1 1 0.9623402772 4 2 2.0083461217 9 3 2.9958221776 16 4 4.0009548085 25 5 5.0028838579 36 6 5.9975810435 49 7 6.9968278722 64 8 8.0070028670 81 9 9.0019220736 100 10 9.9222007864

Come si può vedere, la rete neurale svolge abbastanza bene il compito perché l’errore più grande è nel calcolo della radice quadrata di 1 e si aggira intorno al 4%

Si dia uno sguardo al codice (sono 20 righe!!!):

install.packages('neuralnet') library("neuralnet")

#Going to create a neural network to perform sqare rooting #Type ?neuralnet for more information on the neuralnet library #Generate 50 random numbers uniformly distributed between 0 and 100 #And store them as a dataframe

traininginput <- as.data.frame(runif(50, min=0, max=100)) trainingoutput <- sqrt(traininginput)

#Column bind the data into one variable trainingdata <- cbind(traininginput,trainingoutput) colnames(trainingdata) <- c("Input","Output")

#Train the neural network #Going to have 10 hidden layers #Threshold is a numeric value specifying the threshold for the partial #derivatives of the error function as stopping criteria.

net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=10, threshold=0.01) print(net.sqrt)

#Plot the neural network plot(net.sqrt)

#Test the neural network on some training data testdata <- as.data.frame((1:10)^2) #Generate some squared numbers net.results <- compute(net.sqrt, testdata) #Run them through the neural network

#Lets see what properties net.sqrt has ls(net.results)

#Lets see the results print(net.results$net.result)

#Lets display a better version of the results cleanoutput <- cbind(testdata,sqrt(testdata), as.data.frame(net.results$net.result)) colnames(cleanoutput) <- c("Input","Expected Output","Neural Net Output") print(cleanoutput)

Import dati in un data structure

• Create un CSV file (in excel, per esempio) è il formato di scambiodati

• Per importare un file di dati occorre conoscerne innanzitutto il path(percorso file) – trucco: drag&drop su R... Darà errore ma avrete ilpath già scritto in console da copiare facilmente

• Ora scrivete l’istruzione:

• DATI<-read.table(‘‘nomepercorsodati’’, header=TRUE, sep=‘,’)

• Ora date INVIO sulla tastiera

Quello che copierete dalla riga sopra

Se il file ha una riga di intestazione – i nomi delle colonne

Per essere sicuri che il carattere separatore sia la virgola, aprite il file con notepad

Diamo uno sguardo...

• Ora al prompt scrivete:str(nomedellastrutturadati)

• Cioé: str(DATI)• Corrisponde?• Se scrivete: summary(DATI)• Otterrete anche un riepilogo sul contenuto della struttura dati• E se scriviamo: fix(DATI) cosa otteniamo?• Possiamo esplorare la struttura, modificarla e, ovviamente, utilizzarla nelcodice

• PS: se avete un file diverso dal formato CSV,

Aggiunte...

• Al posto dell’istruzione read.table, con un file CSV avremmo anche potutoscrivere:

DATI<-read.csv(‘‘nomepercorsodati’’, header=TRUE)• In questo caso non occorre specificare il separatore (la virgola)• Se aveste avuto un file diverso dal formato CSV, per esempio con unaseparazione effettuata tramite spazio, avreste dovuto scrivere:

• DATI<-read.table(‘‘nomepercorsodati’’, header=TRUE, sep=‘‘’’)• Se i dati nel file fossero stati separati da tabulazione, allora avreste dovutoscrivere:

• DATI<-read.table(‘‘nomepercorsodati’’, header=TRUE, sep=‘‘\t’’)• (è slash, non back‐slash)

Risorse su R Altri tutorial per approfondire: Engineering Department Cambridge University http://mi.eng.cam.ac.uk/~mjfg/local/I10/i10_hand4.pdf Youtube: http://www.youtube.com/watch?v=ZoPJGmpYJzw

L’ambiente R. Buoni manuali: per principianti: http://rante.org/2011/05/30/un‐altro‐manuale‐per‐r/  

tutorial: http://www.ssis.it/modelli/modelli_stat/costruire_modelli_stat_eng/doc/costruire_modelli_stat‐44.htm un altro manuale: http://cran.r-project.org/doc/contrib/Mineo-dispensaR.pdf esempi e applicazioni: http://cran.r-project.org/doc/contrib/nozioniR.pdf

pagina principale di R: http://cran.r-project.org/ (molti package, tra cui ANN)

altri sw: http://digilander.libero.it/vvillas/reti_neurali/software_per_reti_neurali.htm

free tool per ANN: http://www.justnn.com/ http://www.bcp.psych.ualberta.ca/~mike/Software/

su Wikipedia altre info: http://en.wikipedia.org/wiki/Neural_network_software

Classificazione e addestramento: SOM, SVM  

MACHINE LEARNING

In realtà le ANN vanno ricomprese nel più ampio argomento del Machine Learning.  

Il machine learning è una branca dell’Intelligenza artificiale che si occupa della progettazione e dello sviluppo di algoritmi che permettono alle macchine di evolvere le proprie attitudini basandosi su dati empirici, quali quelli provenienti da sensori o da basi di dati.  

Un learner (qui si preferirà adottare direttamente il termine inglese) può avvantaggiarsi di esempi (data) per catturare le caratteristiche di interesse di distribuzioni di probabilità sconosciute.  

I dati possono essere esempi che illustrano le relazioni tra le variabili osservate.   

Un importante obiettivo della ricerca sul machine learning è apprendere automaticamente a riconoscere pattern complessi  e prendere decisioni intelligenti basati sui dati; la difficoltà risiede nel fatto che il set di tutte la possibili attitudini dati tutti i possibili input è troppo grande per essere rappresentato dall’insieme degli esempi osservati (training data).   

Dunque il learner deve generalizzare dagli esempi dati e deve essere in grado di produrre output utili nei nuovi casi. 

   

Secondo Tom M. Mitchell   

“A computer program is said to learn from experience E         with respect to some class of tasks T             and performance measure P,                  if its performance at tasks in T, as measured by P, improves with experience E.”  

Generalizzazione La generalizzazione è l’abilità di un algoritmo di machine learning di funzionare accuratamente su nuovi, mai visti prima, esempi dopo il training su un data set finito.   L’obiettivo principale di un learner è generalizzare dalla sua esperienza.   Gli esempi di training provengono da alcune non conosciute probabilità di distribuzione e il learner deve estrarre da questi qualcosa di più generale, qualcosa circa la distribuzione, che gli permetta di produrre risposte utili in casi nuovi.  

Machine learning e data mining Generalmente c’é confusion tra questi termini poiché spesso adottano gli stessi metodi e vanno in sovrapposizione. Ad ogni modo, per distinguerli, basta considerare che: ‐ Il machine learning ha il focus sulla predizione, basata su proprietà conosciute apprese dai dati di training 

‐ Il data mining (che è la fase di analisi del knowledge discovery in un database) ha il focus sulla scoperta di (preventivamente) sconosciute proprietà dei dati 

Ad ogni modo, le due aree hanno parecchie sovrapposizioni: il data mining usa molti metodi di machine learning, ma spesso con differenti obiettivi.   

Interazione dell’uomo Alcuni sistemi di machine learning tendono ad eliminare il bisogno dell’intuizione umana nell’analisi dei dati, mentre altri adottano un approccio collaborativo tra uomo e macchina.   L’intuizione umana non può, comunque, essere interamente eliminata, poiché i progettisti dei sistemi devono comunque  specificare come i dati devono essere rappresentati e quali meccanismi saranno usati per ricercare la caratterizzazione dei dati.  

Tipi di algoritmi Gli algoritmi di machine learning possono essere organizzati in una tassonomia basata sul risultato desiderato: ‐ Apprendimento supervisionato (supervised learning): genera una funzione che “mappa” gli input agli output desiderati (chiamati anche etichette, perché spesso sono definite da esperti umani che etichettano gli esempi di training. Ad esempio in un problema di classificazione, il learner approssima una funzione che mappa un vettore in classi secondo alcuni esempi di input‐output della funzione. 

‐ Apprendimento non supervisionato (unsupervised learning): modella un insieme di input, quali il clustering. 

‐ Apprendimento semi‐supervisionato (semi‐supervised learning): combina sia esempi etichettati che non etichettati per generare una appropriata funzione o classificatore 

‐ Apprendimento con rinforzo (reinforcement learning): apprende come agire data un’osservazione del mondo, Ogni azione ha qualche impatto sull’ambiente, e l’ambiente restituisce dei feedback che guidano l’algoritmo di apprendimento. 

‐ Inferenza trasduttiva (Transduction o trasductive inference): cerca di predire nuovi output sucasi specifici e fissati (test) da casi osservati e specifici (training) 

‐ Imparare ad apprendere (learning to learn): apprende il suo bias induttivo sulla base di precedenti esperienze 

 

Teoria L’analisi computazionale degli algoritmi di machine learning e la loro performance è una branca della theoretical computer science conosciuta come computational learning theory.   

Dato che i training set sono finiti e il futuro è incerto, la learning theory di solito non garantisce la performance degli algoritmi.   

Invece, i confini probabilistici delle performance sono piuttosto comuni.   

In aggiunta ai confini della performance, i teorici del computational learning studiano la complessità temporale e la fattibilità di apprendimento.   

Nella teoria del computational learning, una computazione è considerata fattibile se può essere compiuta in un tempo polinomiale.   

Vi sono due tipi di risultati di complessità temporale:  1) i risultati positivi mostrano che una certa classe di funzioni può essere appresa in un tempo polinomiale;  2) i risultati negativi mostrano che certe classi on possono essere apprese in un tempo polinomiale.  Vi sono molte similarità tra la teoria del machine learning e la statistica, così spesso i due termini sono utilizzati quasi come sinonimi.  

Approcci del machine learning Decision tree. Viene utilizzato un decision tree come modello predittivo che “mappa” le osservazioni circa un’istanza con le conclusioni sul valore target dell’istanza stessa.

Association rule. E’ un metodo per scoprire relazioni tra variabili in database di grandi dimensioni.

Artificial neural network. Le computazioni sono strutturate in termini di gruppi interconnessi di neuroni artificiali, che processano informazioni utilizzando un approccio connessionista alla computazione. Le reti neurali moderne sono strumenti di modellazione dei dati statistiche, non lineari. Utilizzate per modellare relazioni complesse tra input e output, per cercare pattern nei dati, o per catturare la struttura statistica di un distribuzione di probabilità congiunta tra variabili osservate.  

Programmazione genetica. E’ una metologia basata su algoritmi evolutivi ispirati dall’evoluzione biologica per trovare programmi che compiano un task definito. E’ una tecnica di machine learning utilizzata per ottimizzare una popolazione di programmi in accordo con uno scenario determinato dall’abilità del programma di compiere un determinato task computazionale.

Programmazione logica induttiva (inductive logic programming). E’ un approccio alle regole di apprendimento utilizzando la programmazione logica come rappresentazione uniforme degli esempi, della conoscenza di background e delle ipotesi. Data una codifica della conoscenza di base ed un set di esempi rappresentati come un database logico di fatti, il sistema deriva un programma logico di ipotesi che si addestra con tutti gli esempi positivi e nessuno dei negativi.

Support Vector Machine (SVM). E’ un insieme di metodi di apprendimento supervisionato (ma oggi ve ne sono anche esempi non supervisionati) utilizzati per classificazione e regressione.

Dato un set di esempi di training, ognuno marcato come appartenente ad una delle due (o più) categorie, un algoritmo di training dell’SVM costruisce un modello che predice se uno dei nuovi esempi cade in una categoria o nell’altra.

Clustering. La cluster analysis è l’assegnazione di un insieme di osservazioni in sottoinsiemi (chiamati cluster) composti in modo che le osservazioni in uno stesso cluster sono simili in qualche maniera, mentre le osservazioni in cluster differenti sono dissimili. La varietà di tecniche di clustering dipende da diffferenti assunzioni sulla struttura dei dati, spesso definita da qualche metrica di similitudine e valutata per esepio dalla internal compactness (similitudine tra membri dello stesso cluster) e separation tra cluster differenti. Altri metodi sono bassati sulla estimated density e sulla graph connectivity. Il clustering è un metodo di apprendimento non supervisionato e una comune tecnica per l’analisi statistica dei dati.

Reti Bayesiane (Bayesian networks). E’ un modello grafico probabilistico che rappresenta un insieme di variabili random e le loro indipendenze condizionali tramite un grafo aciclico diretto (DAG).

Per esempio, una rete bayesiana può rappresentare la relazione probabilistica tra malattia e sintomi. Dati i sintomi, la rete può essere usata per calcolare la probabilità della presenza di varie malattie. Esistono algoritmi efficienti che compiono inferenza e apprendimento.

Apprendimento con rinforzo (reinforcement learning). Tratta come un agente deve intraprendere azioni in un ambiente per massimizzare alcune nozioni di ricompensa a lungo termine. Gli algoritmi di apprendimento con rinforzo cercano di trovare una policy che “mappi” gli stati del mondo sulle azioni che gli agenti devono intraprendere in tali stati. Differisce dall’apprendimento supervisionato perché le coppie input/output corretti non sono mai presentati né azioni subottimali vengono esplicitamente corrette.

Apprendimento per rappresentazione (representation learning). Molti algoritmi di apprendimento, per la maggior parte di apprendimento non supervisionato, tendono a scoprire le migliori rappresentazioni degli input forniti durante il training. Esempi classici includono la principal component analysis e la cluster analusis. Gli algoritmi di apprendimento per rappresentazione spesso cercano di preservare le informazioni negli input ma le trasformano in un modo che le rende utili, spesso durante una fase di pre-processing prima di operare la classificazione o la predizione, permettendo di ricostruire gli input provenienti dai dati generati da una distribuzione sconosciuta. Vi sono tre principali tipi di algoritmi: i manifold learning, gli spars coding, i deep learning algorithms (approfondire, se interessa).  

Sparse Dictionary Learning.  Nell’apprendimento Sparse Dictionary un dato è rappresentato come una combinazione lineare di funzioni di base ed i coefficienti sono assunti sparsi.  (approfondire, se interessa)   

Applicazioni Attualmente il machine learning viene applicato a molti campi: machine perception              computer vision     natural language processing syntactic     pattern recognition search engines                medical diagnosis bioinformatics                 brain‐machine interfaces cheminformatics                Detecting credit card fraud stock market analysis             Classifying DNA sequences Sequence mining                speech and handwriting recognition game playing                  software engineering  object recognition in computer vision    adaptive websites robot locomotion               computational finance   structural health monitoring          affective computing   Sentiment Analysis (Opinion Mining)    Recommender systems  

Software Vi sono vari tipi di software che contengono un’ampia varietà di metodi di machine learning.   Tra questi ne ricordiamo alcuni: RapidMiner, LIONsolver, KNIME, Weka, ODM, Shogun toolbox, Orange, Apache Mahout, scikit‐learn, mlpy. 

Chi era John Henry Holland? Approfondire Chi era David B. Fogel? Approfondire  

Discussione 3: Sapere, Saper fare, dover fare. La deontologia della conoscenza Stiamo attraversando un’epoca che ha indotto profonde mutazioni - nell’atteggiamento sociale (globalizzazione di idee, scopi, utopie e

distopie), - nella psiche e nel pensiero (le nuove generazioni sono telepatiche -

nel senso di τηλε (tele)=”lontano, a distanza” e πάθεια (pateia)=”emozione, sentimento” - visto che comunicano le proprie emozioni tramite la tecnologia? Siamo sempre più isolati, depressi, richiusi in noi stessi o siamo più altruisti, rispettivamente a causa delle – o grazie alle - tecnologie “social”?),

- nella stessa biologia umana (con le protesi, siamo più o meno umani di un tempo? Che distanza c’è tra noi e le macchine?).

Occorre riflettere su: - potente leva che l’Informatica rappresenta, - quanto le metodologie di apprendimento, di insegnamento e di condivisione del sapere siano state modificate e siano oggetto di continua discussione e adeguamento. Occorrerebbe non seguire il progresso, ma anticiparlo! Il pericolo di perdere anche la conoscenza attuale delle tecnologie è più grande di quanto si pensi. La vera generazione di esperti è, in linea di massima, tagliata fuori dal processo di trasmissione della conoscenza, per vari motivi. La generazione X (“X”, perché “cassata” dai meccanismi di trasmissione delle competenze) non ha avuto la possibilità di accedere a posizioni che permettessero di trasmettere le proprie conoscenze (infatti è la generazione di precari fino alla pensione), perché lo spazio era già occupato da precedenti generazioni che, però, tali competenze non le hanno acquisite (e quindi non hanno potuto trasmetterle).

Risultato: i giovani, che pure hanno e avranno difficoltà di inserimento lavorativo, non hanno neanche ricevuto le nozioni necessarie a continuare il progresso delle tecnologie e, troppo spesso, ne sono solo utilizzatori, sovente anche in modo semplicistico e passivo.

Chi, allora, in futuro, padroneggerà le tecnologie? Pochi eletti che hanno avuto modo (o la fortuna, o la possibilità economica di poterlo fare) di approfondire taluni aspetti della conoscenza? Grandi aziende internazionali che si accaparrano questi soggetti o sviluppano al loro interno team di esperti con competenze specifiche (ma non così ampie da poter rappresentare un pericolo per lo status quo), come profetizzato da molti film di fantascienza? A chi andrà il potere (che evidentemente è costituito in gran parte dal possesso e dalla capacità di analizzare e manipolare le informazioni, soprattutto digitali) in futuro? Ma soprattutto: chi sono i responsabili di tutto ciò?

I responsabili sono soprattutto i giovani, che non sono abbastanza autocritici da rendersi conto di non avere acquisito le necessarie competenze (forse per un’intenzione voluta dall’alto) e che non si danno da fare per acquisirle anche autonomamente, a costo di fatica personale, sfruttando (invece di usarli solo per scopi di divertimento) i potenti mezzi di informazione a disposizione quali Internet. Si vuole qui ricordare la Montessori, il cui motto era “Insegnami a fare da solo”. “metodo della ricerca”

Quale paradigma di insegnamento (e di apprendimento) occorrerebbe, allora, adottare? Quale strategia potrebbe risultare vincente? Si consideri la tecnologia, anzi, in una accezione più ampia, l’Informatica: alla luce di quanto scritto precedentemente, qual è il futuro di questa disciplina? E, per tornare ad un quesito già esposto: come sarà l’informatica nel futuro?

Crisi intellettuale, dalla quale devono nascere o rinascere nuovi spunti. Il problema è che, nel tempo, si è dato poco risalto al generale, al trasversale e ci si è concentrati sul particolare. Troppo. L’Informatico, nella mente comune, è diventato il tecnologo, il programmatore, definizioni ben lontane dal vero ruolo che svolge. Occorre sicuramente ritornare al generale. Recuperare la capacità di astrazione.

Si consideri il mondo del business. I business più redditizi oggi, a livello mondiale, sono basati su un modello informatico per gestire contenuti (esempi: ebay, google, youtube, wikipedia…). Le aziende più fiorenti sono quelle che si basano su modelli informatici più delle altre (sia aziende ICT – es. IBM, Apple, Microsoft – sia aziende finance – on line banking – sia aziende di altro tipo che utilizzano la tecnologia ICT per differenziarsi – settori automotive, energia, industrie, TV, entertainment, 3D…). La conclusione è che oggi l’Informatica non fornisce più supporto al business, ma CREA i business. Si estenda il concetto…. gli informatici sono passati da interpreti di modelli matematici a interpreti e solutori dei bisogni ed ora a registi, creatori, modellatori di mondi (si guardi ai mutamenti indotti dall’Informatica nella Società).

Cosa succederà quando in Internet arriveranno nuove culture? (orientale, Terzo Mondo)

Jimmy Wales (Wikipedia) alleanza con OLPC5, Negroponte6, piattaforma XO7 per portare i primi contenuti aperti dell’enciclopedia collaborativa in territori in cui non vi sono strumenti per raccogliere conoscenza, cultura e memoria dei gruppi e delle popolazioni. Nei prossimi 10 anni saremo esposti in modo completo a culture e idee diverse, che troveranno per la prima volta l’opportunità di mettersi in rete ed evolvere.

                                                            5 One Laptop Per Child (OLPC) è un'organizzazione no‐profit creata per sovraintendere al progetto del computer da 100 dollari, $100 laptop. 6 Nicholas Negroponte è un informatico statunitense, celebre per i suoi studi innovativi nel campo delle interfacce tra uomo e macchina. 7 Insieme a Sugar, XO è un portatile/tablet creato da OLPC. 

L’open source8 è nato perché competenze “sparpagliate” in giro per il mondo hanno potuto incontrarsi. Inoltre la Rete ha cambiato il concetto di diritto d’autore, di privacy, di bene, e, perciò, ha modificato il valore rispetto agli acquisti tradizionali, tant’è che si parla di coda lunga, e cioè del fatto che ora le nicchie contano di più che i mass-market.

                                                            8  termine inglese che  significa “codice  sorgente aperto”.  In informatica,  indica un software i  cui  autori  (più  precisamente  i  detentori  dei  diritti)  ne  permettono  e favoriscono  il  libero  studio  e  l'apporto  di  modifiche  da  parte  di altri programmatori indipendenti.   

Se questo è nato dalla cultura occidentale, cosa succederà quando in Rete arriverà la cultura orientale, con valori, bisogni, idee, fantasie differenti? Anche più banalmente: visti i limiti (economici, politici, geografici) come si diffonderà in termini di massa, la tecnologia in quei mercati? Che forma assumerà? Quale modello sarà più adeguato?

Si consideri l’esempio della Cina, per cui informatizzare vuol dire aprirsi ad un nuovo mercato che è totalmente di dominio degli occidentali, soprattutto degli USA. La Cina pensa al Giappone, che, aiutato dalla barriera naturale della lingua e dalla spinta autarchica dell’Industria sempre coordinata con lo Stato, avanza tecnologicamente. Due grandi mercati interni che riescono a sostenere l’economia tecnologica locale, che cresce senza disperdersi con le importazioni. In più, la tecnologia informatica è una risorsa strategica per un Paese che non condivide le idee politiche dell’Occidente. Allora cosa fa la Cina?

Costruisce una propria via all’Informatica: copia e innova i prodotti occidentali e crea un mondo informatico autoctono. Si pensi al computer “Sogno del Dragone”, Longmeng, basato sul processore Loongson, “Figlio del dio”, realizzato interamente in Cina, a partire da un processore MIPS su cui sono state portate varie distribuzioni di Linux…siamo alla terza generazione…basso consumo e basso prezzo di produzione (è venduto a circa 100$), sistema aperto che può essere “verificato” ed eventualmente “chiuso”… Ci sarà una via della seta per la tecnologia?...

Lo sviluppo dei sistemi cognitivi avrà un forte impulso, intendendo con questi sia l’applicazione di modelli tradizionali, sia il ripensamento degli stessi e l’applicazione o l’integrazione con l’AI. Avrà sempre più sviluppo il campo della rappresentazione dell’informazione in tutti i suoi aspetti, l’analisi degli aspetti umani per colmare il gap tra macchina e umanità. Tecnologicamente siamo anche alle porte dell’ingresso di macchine pensanti nella vita quotidiana: l’umanità è sempre più incapace e insicura nel quotidiano. Invecchiamo e diminuiamo numericamente (almeno noi occidentali) e dunque le autovetture devono essere intelligenti, la tecnologia semplice, le macchine devono servirci (robot), i supporti devono aiutarci a salvare il mondo (no carta, ad esempio), tutto deve essere ubiquo e sotto controllo (le autostrade dell’informazione).

Per disegnare nuovi mondi, nuovi modelli, nuovi sistemi, robot, nuove macchine e nuovi modi di interagire, le competenze degli informatici devono essere più solide in termini di capacità di astrazione e al contempo devono essere più trasversali, per poter ridisegnare questa nuova era.

In questo scenario, come deve cambiare l’apprendimento e, conseguentemente, l’insegnamento?

La crisi (di apprendimento e insegnamento) non riguarda, tuttavia, solo l’Informatica, ma tante altre discipline. Si potrebbe anche affermare che le riguardi tutte, poiché, crescendo la mole di informazioni da ritenere per ciascuna disciplina, diminuendo le ore di lezione da dedicare a ciascuna materia (visto il numero non indifferente di materie scolastiche del sistema italiano9), le nozioni che è possibile trasmettere sono necessariamente inferiori al passato (poiché non si può approfondire) se parliamo di quelle legate ai confini geografici e alla cultura locale, e necessariamente meno approfondite a causa della globalizzazione (che ha fatto sorgere la necessità di ampliare gli orizzonti territoriali di una materia).                                                             9 Nel sistema scolastico italiano vi sono molte materie obbligatorie, mentre all’estero (prendiamo ad esempio, in UK i key stage) vi sono alcune materie obbligatorie (in misura molto minore) e altre facoltative, per creare un percorso di studi personalizzabile. 

Quale atteggiamento di apprendimento e di insegnamento è, quindi, deontologicamente corretto?

Il mio pensiero: smettere di insegnare il superfluo! Abbandonare l’idea della specializzazione. Si insegni ad usare bene gli strumenti tecnologici, le metodologie di indagine, i principi generali, in modo che poi tutti siano completamente autonomi nell’applicarli!

L’applicazione di metodi innovativi e la disponibilità di strumenti tecnologici permetterebbero un approccio “finalizzato” ai problemi di apprendimento, la personalizzazione del percorso di studio di ciascuno con il potenziamento di specifiche caratteristiche personali, l’utilizzo di strumenti di rinforzo cognitivo e della creatività basato su metodi scientificamente provati (musica, arte), il potenziamento della didattica delle lingue, e così via. In molti corsi di laurea non scientifici, l’Informatica è vista come materia complementare ed è insegnata in modo rudimentale e sommario!

In conclusione, tornando al confronto tra intelligenza umana e intelligenza artificiale, si noti come le macchine attualmente apprendano secondo un principio simile a quello esposto: sono impartiti loro i concetti di base (i programmi in grado di assimilare la conoscenza che acquisiranno dopo) e poi l’apprendimento automatico fa evolvere il sistema. Il processo è veloce, mirato e funzionale. Si pensi agli algoritmi di Machine Learning, applicabili a tutte le discipline di studio. Questi apprendono e si evolvono a seconda delle informazioni all’occorrenza passate alla macchina. L’algoritmo, cioè, è sempre lo stesso, ma cambiano le informazioni fornite successivamente. Questo approccio è adottabile anche per l’intelligenza umana.

Vi sono molte analogie tra l’apprendimento naturale e quello delle macchine, tant’è che molte delle tecniche utilizzate per le macchine sono nate proprio dall’intenzione di studiare i meccanismi umani attraverso modelli di calcolo. In modo semplice, possiamo dire che una macchina apprende ogni volta che cambia la propria struttura, i propri programmi, o i dati (sulla base di input ricevuti o di informazione esterna), in modo da migliorare le prestazioni future attese. Ad esempio, quando le prestazioni di una macchina di riconoscimento vocale migliora, una volta ascoltati diversi campioni di testo parlato da un individuo, possiamo, a ragione, affermare che la macchina ha appreso.

Ma perché le macchine dovrebbero imparare?

Vi sono diversi motivi per cui l’apprendimento automatico è importante. Come si è già accennato, in primis per studiare i meccanismi di apprendimento delle intelligenze naturali. Inoltre, alcune funzioni non possono essere definite se non tramite un esempio, cioè in alcuni casi siamo in grado di specificare coppie “input/output” ma non un rapporto tra gli input e gli output desiderati. In questo caso è auspicabile predisporre una macchina in grado di adeguare la sua struttura interna per produrre autonomamente uscite (risultati) corrette per un gran numero di ingressi campione (ad esempio tramite una funzione di uscita che approssimi la relazione implicita tra gli esempi forniti). E’ anche possibile che in enormi moli di dati siano racchiuse importanti relazioni e correlazioni. I metodi di apprendimento automatico sono spesso utilizzati per estrarre tali rapporti.

Dunque l’apprendimento di principi generali e la successiva applicazione specifica a partire da determinati approfondimenti (chiamiamoli dati, esempi, informazioni, dettagli, a seconda del caso) rappresenta una strategia valida sia per l’intelligenza naturale che per quella artificiale.

In conclusione: le macchine hanno comportato la diffusione della conoscenza o il suo impoverimento?

NOTE FINALI

“digital divide”: il divario esistente tra chi ha accesso alle tecnologie dell’informazione (in modo parziale o totale) e chi ne è escluso per vari motivi: per la mancanza o la scarsa qualità delle infrastrutture, per le condizioni economiche, per il livello di istruzione o per l’età, il sesso, la provenienza geografica, per differenze generazionali. "One Laptop Per Child" è stata fondata da varie organizzazioni sponsor (tra queste: Google, Red Hat, AMD…) Anche il MIT Media Lab è stato coinvolto nel progetto. L’iniziativa ha l’obiettivo di produrre e fornire un laptop da 100$ ad ogni bambino del modo, in special modo a quelli nei Paesi in via di sviluppo, per facilitare l’accesso alla conoscenza e alle moderne forme educative. Alcune consegne sono già state effettuate in Argentina, Brasile, Libia, Nigeria, Ruanda, Thilandia e Uruguay.

Il progetto è in ritardo e tante sono le polemiche e, ormai, sono disponibili tanti dispositivi a basso costo.

Nicholas Negroponte è un informatico statunitense, celebre per i suoi studi innovativi nel campo delle interfacce tra uomo e macchina. Famoso, tra le altre cose, per gli studi sul CAD (computer Aided Design). Ha fondato la celebre rivista di tecnologia Wired assieme a Luigi Rossetto. E’ uno dei promotori del progetto OLPC. Qui un bel TED in cui Negroponte illustra il progetto One Laptop Per Child: http://www.ted.com/talks/nicholas_negroponte_on_one_laptop_per_child.html  

Tera è un prefisso SI (Sistema Internazionale di misura) che esprime il fattore 1012, ovvero 10004, ovvero 1 000 000 000 000, ovvero mille miliardi. La stessa parola in informatica è intesa come l’abbreviazione di Terabyte (TB), in cui “byte” viene sottinteso, che vale 1.099.511.627.776 byte (2^40). Si ricordi che 1 byte corrisponde ad una sequenza di bit (1 bit vale 0 oppure 1), il cui numero dipende dalla macchina che si sta considerando. Un byte corrisponde al numero di bit utilizzati per codificare un singolo carattere di testo (lettera, numero o punteggiatura) in un elaboratore. Generalmente 1 byte si intende formato da 8 bit. Facendo le opportune conversioni, si calcoli quante lettere dell’alfabeto si possono immagazzinare in un Hard-disk di capacità 1 Tera.

PROGRAMMAZIONE EVOLUTIVA

E’ anch'essa ispirata all'evoluzione naturale ma non alla genetica. Tale metodologia differisce dagli algoritmi genetici in quanto non utilizza l'operazione genetica di crossover, che invece per questi risulta imprescindibile.  

PROGRAMMAZIONE GENETICA

Elaborata fondamentalmente ad opera di John R. Koza, è un metodo per la generazione automatica di programmi, a partire da una descrizione ad alto livello del task da svolgere, e basato sul principio darwiniano della selezione naturale allo scopo di sviluppare una popolazione di programmi migliorativi nell'arco delle successive generazioni. Si avvale di operazioni capaci di alterare l'architettura di detti programmi e di prendere decisioni sull'uso delle subroutine, dei loop, della ricorsione e della memoria.

Da ciò si nota che la programmazione genetica costituisce in sostanza un'estensione degli algoritmi genetici al caso di popolazioni costituite da programmi di dimensione variabile; la programmazione genetica sostituisce in altri termini alla stringa di lunghezza costante, codificata in vario modo, un programma con struttura ad albero, il cui corpo (radice, nodi intermedi) è costituito da funzioni aritmetiche o logiche, mentre i nodi terminali rappresentano variabili o costanti numeriche. Pertanto la popolazione risulta ora composta da un numero opportuno di programmi, i quali mediante le operazioni genetiche di riproduzione (non è prevista alcuna mutazione) producono, in un certo numero di generazioni, il programma che risolve al meglio un problema assegnato, in forma topologica parametrizzata.  

NEUROEVOLUZIONE

Indica l’utilizzo degli algoritmi genetici, o di altri metodi e tecniche evolutive, nella messa a punto delle reti neurali artificiali, per quanto riguarda sia l'architettura della rete (cioè la sua struttura intesa come numero di nodi e numero di connessioni tra i nodi stessi), sia i parametri relativi (ossia i pesi delle connessioni tra i nodi). Un metodo neuroevolutivo degno di nota è quello proposto recentemente da K. Stanley, denominato NEAT (NeuroEvolution of Augmenting Topologies), e basato su un processo di graduale incremento della complessità strutturale delle reti che si propongono di risolvere un problema assegnato (tipicamente un problema di reinforcement learning).

A partire da reti estremamente semplici (completamente prive di neuroni intermedi) la procedura sembra avere maggiori possibilità di determinare soluzioni efficaci e robuste rispetto a metodi analoghi, che partono da topologie predeterminate o casuali. Tre princìpi fondamentali su cui si basa il NEAT: 1. il primo principio è l'omologia: il NEAT codifica ciascun nodo e ciascuna

connessione della rete attraverso un gene. Ogni volta che una mutazione strutturale sfocia nella creazione di un nuovo gene, quel gene riceve un contrassegno numerico che lo rende permanentemente rintracciabile. Tale marcatura storica è utilizzata in seguito per verificare la conciliabilità di geni omologhi durante l'operazione di crossover, e per definire un operatore di compatibilità;

2. il secondo principio è la protezione dell'innovazione. L'operatore di compatibilità definito in precedenza è adoperato per dividere la popolazione, composta da reti neurali, in specie differenti, allo scopo di proteggere le soluzioni innovative da un'eliminazione prematura, e di prevenire l'incrocio di materiale genetico incompatibile. Tali innovazioni strutturali presentano una significativa possibilità di raggiungere il loro pieno potenziale, in quanto protette dal resto della popolazione attraverso la suddivisione in specie, cioè la creazione di nicchie o spazi riservati;

3. infine, il principio secondo cui la ricerca di una soluzione dovrebbe avvenire nel più piccolo spazio possibile (inteso come numero di dimensioni), da espandere poi in maniera graduale. Cominciando il processo evolutivo da una popolazione di elementi a struttura minima, le successive mutazioni topologiche comportano l'aggiunta di nuovi nodi e connessioni alle reti, conducendo pertanto ad una crescita incrementale della popolazione stessa. Dal momento che solo le modifiche strutturali vantaggiose tendono a sopravvivere nel lungo termine, le topologie che vengono raffinate tendono ad essere le minime necessarie alla soluzione del problema assegnato.

ALGORITMI GENETICI

Sono una famiglia di modelli computazionali ispirati alle teorie darwiniane dell’evoluzione. Sono uilizzati da programmi su altri programmi, quindi non è coinvolto nessun essere vivente e non hanno legami con l’ingegneria genetica. Rappresentano tecnica per trovare soluzioni a particolari problemi che, usando altri algoritmi più tradizionali, risulterebbero di difficile soluzione. Hanno applicazione nell’AI.

Si prenda l’esempio di un algoritmo che permette di scoprire la strada più breve tra un punto A e un punto B (si pensi a Google Map o a un navigatore). In questo caso, l’algoritmo di ricerca registra il punto di partenza, il punto di arrivo e “prova” le varie strade che congiungono i due punti, fino a trovae la strada ottimale. Allo stesso modo, un algoritmo può risolvere problemi di altra natura, tentando varie soluzioni fino a che non ha trovato quella migliore. Un algoritmo genetico cerca di ottimizzare e migliorare questa ricerca, utilizzando una soluzione ispirata alla biologia e all’evoluzione.

Come in natura sopravvivono e si moltiplicano gli esemplari più adatti al loro ambiente, così in un algoritmo genetico sono le soluzioni più adatte a essere portate avanti, fino a che non si arriva alla soluzione ottimale per il problema.

Di fronte a un problema, un algoritmo genetico produce una prima “generazione” di possibili soluzioni, composte in maniera puramente casuale. Dopo averle prodotte, le valuta sulla base del risultato a cui si deve giungere: chi ci è andato più vicino, avrà maggiori probabilità di sopravvivere e riprodursi, tramandando alla prossima generazione il proprio patrimonio genetico. Di generazione in generazione, dunque, la popolazione dovrebbe arrivare sempre più vicina alla soluzione ottimale del problema, fino a trovare la risposta.

Un algoritmo genetico produce dunque una popolazione virtuale, il cui scopo nella vita è trovare la soluzione a un problema. Grazie al meccanismo di selezione dei migliori, ogni generazione ottiene risultati migliori rispetto alla precedente, fino ad arrivare a un punto dove non è più possibile migliorarsi: quella sarà la soluzione ottimale. Entriamo più nello specifico. Il problema iniziale è scomposto in una serie di piccoli elementi, ognuno dei quali rappresenta un possibile frammento della soluzione: questi elementi sono chiamati geni.

Una sequenza di geni rappresenta una possibile soluzione ed è chiamata genoma.

Ogni genoma è contenuto in un cromosoma, che è un “individuo” della popolazione.

Un algoritmo genetico crea dunque una popolazione di cromosomi, combinando in modo casuale i geni di cui dispone.

Dopo averli creati, esamina il genoma dei vari cromosomi e guarda quanto questo genoma sia vicino alla soluzione che deve trovare: più il genoma è vicino e più alte saranno le probabilità che quel cromosoma si possa riprodurre. La riproduzione consiste nel selezionare due cromosomi, prelevare da ognuno una parte del suo genoma e unirlo, per creare un nuovo cromosoma, che sarà composto in parti più o meno uguali dal genoma dei due genitori.

Di tanto in tanto, a questa fase può essere applicata una mutazione, che consiste spesso nell’invertire la posizione di due geni all’interno del genoma: un processo che vuole imitare quanto accade in natura e che serve a introdurre una novità, per evitare che a ripetersi siano sempre gli stessi modelli.

Dopo aver prodotto in questo modo una nuova generazione di cromosomi, si riparte col processo di valutazione e riproduzione.

Tutto ciò può sembrare molto dispendioso e lungo, ma in realtà un algoritmo genetico di solito ottiene risultati in tempi molto più brevi di un algoritmo di altro tipo.

Un esempio classico di applicazione degli algoritmi genetici è il problema del commesso viaggiatore (in inglese Traveling Salesman Problem, abbreviato in TSP).

Il problema è il seguente: un commesso viaggiatore deve visitare un certo numero di città, una dopo l’altra, e deve farlo seguendo la strada più breve, senza ripassare mai per la stessa città.

Vediamo come si risolve con un algoritmo genetico…

Ogni città corrisponde a un gene. Il genoma di ogni cromosoma sarà dunque formato da una sequenza diversa delle città da attraversare: un possibile itinerario, insomma, cioè una possibile soluzione. Per valutare un cromosoma, si guarderà la lunghezza totale del percorso che rappresenta, ossia la distanza che c’è tra ogni città, seguendo l’ordine in cui sono disposte nel suo genoma. Lo scopo è quello di trovare il percorso più breve, quindi i cromosomi con una distanza complessiva più bassa saranno i migliori, mentre quelli con una distanza complessiva più alta saranno i peggiori.

I cromosomi che rappresentano un percorso più breve avranno maggiori probabilità di produrre i cromosomi della prossima generazione: in questo modo, a ogni generazione ci si dovrebbe avvicinare sempre più al traguardo ideale, ossia un cromosoma che possieda tutte le città, disposte in modo da ridurre al minimo la distanza da percorrere.

La fase di riproduzione consisterà nell’unire i genomi di due cromosomi, per produrre un cromosoma che sia la sintesi dei loro percorsi, mentre la mutazione consisterà nello scambiare di posizione due città, all’interno del percorso.

Dettagli di funzionamento

La soluzione del problema viene codificata in una struttura, di solito una stringa, detta "gene".

Inizialmente viene creato un certo numero di geni in maniera casuale e si definisce una funzione che restituisca la "bontà" di un gene come soluzione del problema, detta funzione di fitness.

L'algoritmo consiste nell'applicazione di operazioni, che tendono a modificare la popolazione dei geni, nel tentativo di migliorarli in modo da ottenere una soluzione sempre migliore.

L'evoluzione procede quindi in passi, per ognuno di questi viene per prima cosa eseguito un ordinamento sui cromosomi sulla base del risultato della funzione di fitness. Vengono poi eseguite le operazioni su un numero di cromosomi stabilito dai parametri dell'algoritmo, che in generale determinano quanti di questi cromosomi devono subire crossover e mutazioni, e in quale misura.

L'algoritmo evolve quindi attraverso i seguenti punti: generazione, in maniera casuale, di una popolazione iniziale; creazione di una sequenza di nuove popolazioni, o generazioni. In ciascuna

iterazione, gli individui della popolazione corrente sono usati per creare la generazione successiva, e a questo scopo si compiono degli ulteriori passi: ciascun membro della popolazione corrente è valutato calcolandone il

rispettivo valore di fitness (idoneità); si determina un opportuno ordinamento di tali individui sulla base dei valori

di fitness; gli individui più promettenti sono selezionati come genitori; a partire da tali individui si genera un pari numero di individui della

generazione successiva, e ciò può avvenire secondo due modalità distinte, vale a dire effettuando cambiamenti casuali su un singolo genitore (mutazione) oppure combinando opportunamente le caratteristiche di una coppia di genitori (incrocio);

gli individui così generati insieme ai genitori (la progenie) vengono selezionati,in base al loro valore nella funzione di fitness, per formare la generazione successiva;

infine, l'algoritmo s'interrompe quando uno dei criteri d'arresto è soddisfatto.

Crossover In base a un coefficiente stabilito inizialmente, alcune parti dei geni risultati migliori vengono scambiate, nell'ipotesi che questo possa migliorare il risultato della funzione di fitness nel successivo "passo evolutivo".

Single point crossing over

Varie tecniche di crossing over. Una delle più semplice è la "single point crossing over" che consiste nel prendere due individui e tagliare le loro stringhe di codifica in un punto a caso. Si creano così due teste e due code. A questo punto si scambiano le teste e le code, ottenendo due nuovi geni.

Il crossing over non è applicato sempre, ma con una probabilità . Nel caso in cui non viene applicato i figli sono semplicemente le copie dei genitori. Sperimentalmente si può vedere che il miglioramento diventa apprezzabile solo dopo un certo numero di passi. Questo a meno di casi fortunati, ovviamente.  

Mutazione La mutazione consiste nella modifica casuale di alcune parti dei geni con valore di fitness più basso, in base a coefficienti definiti inizialmente. Queste modifiche puntano a migliorare il valore della funzione per il gene in questione. In realtà non è corretto pensare di mutare solo i cromosomi con fitness più bassa; al fine di garantire una maggiore capacità esplorativa dell'algoritmo (e non finire in "buche" di ottimo locale) sono ritenute utili anche le mutazioni di cromosomi con valore di fitness alto.

In definitiva le mutazioni servono soprattutto a esplorare lo spazio di ricerca, e non hanno quindi scopo migliorativo, anche perché vengono effettuate in modo probabilistico e non deterministico e quindi ogni cromosoma potrebbe essere mutato in modo diverso. Quindi, riassumendo… Si è detto che ogni individuo della popolazione, (o ogni soluzione) è codificato sotto forma di stringa, detta Cromosoma. Il sistema di codifica più utilizzato è il sistema binario.

Ogni soluzione è quindi rappresentata (codificata) come una stringa di 0 ed 1. Ad esempio, una soluzione di un problema a 2 variabili può essere rappresentata come: 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 0 1 0 1 Dove le prime 10 cifre codificano la prima variabile e le seconde 10 codificano la seconda. Ogni soluzione, possiede una Fitness, ovvero una misura di quanto la soluzione è in grado di rispondere al problema posto.

Cosi come nella natura solamente gli individui che meglio si adattano all’ambiente sono in grado di sopravvivere e di riprodursi, anche negli algoritmi genetici le soluzioni migliori sono quelle che hanno la maggiore probabilità di trasmettere i propri geni alle generazioni future.

Individui con fitness elevata (rispetto alla fitness media della popolazione) probabilmente verranno selezionati come genitori per la futura generazione di soluzioni.

Dopo aver selezionato un numero n di individui, l’algoritmo genetico emula la riproduzione sessuata che avviene in natura e ri-combina il materiale genetico dei genitori, dando vita ai figli, ovvero alla futura generazione di soluzioni.

La ri-combinazione avviene tramite gli operatori genetici di Cross Over e Mutazione Puntuale. La nuova generazione di soluzioni prende il posto della generazione precedente, dalla quale è nata per ri-combinazione. Il processo viene reiterato per un numero x di volte fino a quando o si raggiunge un’approssimazione accettabile della soluzione al problema o si raggiunge il numero massimo di iterazioni prefissato.

Schematizzando, gli elementi costitutivi di un algoritmo genetico sono: Popolazione: costituita da un numero n di individui. Ogni individuo

rappresenta una possibile soluzione al problema. (continua) Funzione Fitness: la funzione di Fitness è una funzione in grado di

valutare quanto una soluzione è adatta a risolvere il problema dato. Ad ogni soluzione corrisponde quindi un valore di fitness.

Principio di selezione: Il principio di selezione ha il compito di selezionare gli individui della popolazione (le soluzioni) che meglio rispondono al problema da risolvere. La selezione si basa sulla fitness degli individui; le soluzioni con fitness maggiore (rispetto alla media della popolazione) avranno maggiori possibilità di partecipare alla riproduzione e quindi di trasmettere alle future generazioni i propri geni. (continua)

Operatori genetici: prendendo spunto dalla biologia, gli operatori genetici combinano i geni delle diverse soluzioni al fine di esplorare nuove soluzioni. Una volta che un gruppo di soluzioni viene individuato come idoneo alla riproduzione, l’operatore genetico di cross over, emulando la riproduzione sessuata degli esseri viventi, combina i geni dei genitori e formula una nuova generazione di soluzioni. Un altro operatore genetico largamente utilizzato è la Mutazione puntuale. La mutazione puntuale agisce direttamente sui figli, andando a modificare un gene a caso.

 

Un esempio famoso di algoritmo genetico: game of life (Conwell) Prima apparizione nel 1970 sullo Scientific American, nella rubrica «Giochi matematici». Dal punto di vista teorico è interessante perché ha le potenzialità di una macchina di Turing universale: in altre parole ogni cosa che può essere elaborata algoritmicamente può essere elaborata nel contesto del Game of Life. Dal momento della sua pubblicazione ha ottenuto molto interesse a causa dei sorprendenti modi in cui le diverse configurazioni evolvono. Il gioco è un esempio di sviluppo e auto-organizzazione.

È interessante per scienziati, matematici, economisti e altri osservare il modo in cui schemi complessi possono emergere dall'implementazione di regole assai semplici. Il gioco della vita ha una grande quantità di modelli conosciuti che emergono da particolari configurazioni iniziali. Poco tempo dopo la pubblicazione furono scoperti i modelli dell'R-pentamino e dell'aliante, che incrementarono l'interesse verso il gioco.

La sua popolarità fu aiutata dal fatto che una nuova generazione di minicomputer venne rilasciata sul mercato, permettendo così di lasciare il gioco in esecuzione per ore su queste macchine che sarebbero state altrimenti inutilizzate durante la notte. Per molti affezionati Life era semplicemente una sfida di programmazione, un modo divertente per non sprecare i cicli delle CPU. Per molti altri, invece, Life aveva più connotati filosofici. Si sviluppò addirittura un culto durante gli anni settanta e nella metà degli anni ottanta.

Si tratta in realtà di un gioco senza giocatori. Infatti la sua evoluzione è determinata dal suo stato iniziale, senza necessità di alcun input da parte di giocatori umani. Si svolge su una griglia di caselle quadrate (celle) che si estende all'infinito in tutte le direzioni; questa griglia è detta mondo. Ogni cella ha 8 vicini, che sono le celle ad essa adiacenti, includendo quelle in senso diagonale. Ogni cella può trovarsi in due stati: viva o morta (o accesa e spenta, on e off). Lo stato della griglia evolve in intervalli di tempo discreti.

Gli stati di tutte le celle in un dato istante sono usati per calcolare lo stato delle celle all'istante successivo. Tutte le celle del mondo vengono quindi aggiornate simultaneamente nel passaggio da un istante a quello successivo: passa così una generazione. Le transizioni di stato dipendono unicamente dal numero di vicini vivi: Una cella morta con esattamente 3 vicini vivi nasce, diventando

viva. Una cella viva con 2 o 3 vicini vivi sopravvive; altrimenti muore

(per isolamento o sovraffollamento)  

Esempi di configurazioni Nel gioco della vita compaiono configurazioni di tipi diversi, tra cui configurazioni statiche, configurazioni periodiche (oscillatori - un soprainsieme delle configurazioni statiche), e configurazioni che trasportano se stesse in giro per il mondo (navicelle spaziali). Gli esempi più semplici di queste tre classi sono raffigurati sotto, con le celle vive in nero, e le celle morte in bianco.

Blocco  Barca  Lampeggiatore Rospo Aliante (Glider)Astronave leggera (LWSS) 

Il blocco e la barca sono oggetti stabili, il lampeggiatore e il rospo sono oscillatori, l'aliante e l'astronave leggera sono navicelle spaziali che si spostano per il mondo intanto che il tempo scorre. Le configurazioni chiamate methuselah possono evolversi per lungo tempo prima di ripetersi. Il diehard (duro a morire) è uno schema che alla fine scompare, dopo 130 generazioni. Ve ne sono molte altre. Per approfondimenti si rimanda a Internet.

Qui si trova un’implementazione del gioco: http://www.bitstorm.org/gameoflife/ Qui un semplice programma per creare vita artificiale: http://sodaplay.com/ Artificial life e algoritmi genetici (possibilità progetto) Domanda: possiamo utilizzare i linguaggi che abbiamo appreso (AIML, R) per creare un esempio di vita cellulare? Cosa sono gli algoritmi della famiglia delle Ant Colony? Approfondire      

Altri modi di rappresentare la conoscenza Vi sono infiniti modi di rappresentare la conoscenza in Informatica. Visto che è molto legato alle scienze cognitive, ci soffermeremo su un particolare campo del trattamento delle immagini, ovvero i neuroimagin funzionale e da lì ci collegheremo al trattamento dei segnali, attraverso l’argomento EEG e BCI (Brain Computer Interface).

Per finire, vedremo come la realtà virtuale può essere un ulteriore rappresentazione (della realtà) utile in esperimenti di neuroscienze e scienze cognitive (filosofia, psicologia…).

NEUROIMAGING FUNZIONALE Con il termine neuroimaging funzionale (Functional Neuroimaging) si intendono le tecnologie in grado di visualizzare, analizzare e studiare le relazioni tra aree del cervello e funzioni cerebrali. Ovviamente tali tecnologie rivestono primaria importanza nelle neuroscienze cognitive e nella neuropsicologia. Infatti consentono applicazioni sperimentali di ricerca sui processi neurocognitivi, oltre a contribuire al progresso nelle applicazioni cliniche e nella diagnostica.  

Tecniche e metodi Ve ne sono parecchi. Noi ci soffermeremo su: PET fMRI MEG EEG

Neuro/bio-feedback

 

PET (Tomografia ad emissione di positroni). Misura i cambiamenti nel flusso ematico locale (legato all’aumento di attività neuronale) definiti come regioni di attivazione. Infatti le aree del cervello si attivano in corrispondenza di un compito specifico. Una delle aree maggiormente evidenti ed ossservate per prima è quella riguardante la percezione visiva. La tecnica si basa sull’utilizzo di isotopi radioattivi, sebbene a basso numero atomico, per investigare i processi funzionali in atto all'interno dell'encefalo. Contrariamente a quanto accade per la fMRI, che si basa sulle variazioni dei flussi d'ossigeno, la PET esamina invece i processi di attivazione

neuro-funzionali in base alle variazioni del glucosio nelle diverse aree corticali. Per farlo viene somministrato al soggetto una dose di glucosio radioattivo che funge da contrasto, e permette la registrazione delle variazioni di tale sostanza durante il compito assegnato. Questa tecnica vanta una grande precisione nella registrazione di variazioni glicoliche anche di dimensioni notevolmente limitate, sebbene necessiti irrimediabilmente dell'impiego di sostanze radioattive. Questo aspetto, dato l'oneroso costo d'impiego, pesa sull'adozione della tecnica e si somma, inoltre, ad una scarsa prestazione della stessa sia dal punto di vista della precisione spaziale che della rapidità di risposta del mezzo, determinandone una limitata possibilità d'utilizzo.

fMRI (Risonanza magnetica funzionale). Tra le metodologie maggiormente utilizzate e ritenute affidabili nel campo neuroscientifico, consiste nell'utilizzo delle comuni modalità di risonanza magnetica per mappare i cambiamenti metabolici nelle aree cerebrali attraverso tecniche di tracciamento delle variazioni dei livelli di ossigeno nel sangue (BOLD: Blood oxygen level dependent) correlati all'attività neuronale in atto. Permette di identificare con precisione quali aree dell'encefalo si stiano attivando grazie alle variazioni emo-dinamiche in corrispondenza dei determinati stimoli sottoposti.

Questa tecnica presenta diversi vantaggi: primo tra questi la possibilità di ottenere una mappatura delle attività neurali in maniera assolutamente non invasiva e senza l'utilizzo di radiazioni (impiegate invece dalla PET).

Un altro importante punto a favore è, poi, la precisione della risoluzione spaziale, che si calcola abbia un margine d'errore stimato tra i 3 e i 6 millimetri. Sebbene presenti molti vantaggi, questa tecnica non è del tutto immune da forti critiche che riguardano principalmente la difficoltà nella rapida analisi e la mancanza di certezza delle causalità che danno origine alle variazioni ematiche.

 

MEG (Magnetoencefalografia). E’ utilizzata per valutare le fluttuazioni del campo magnetico che l'organismo produce. Studia la funzionalità cerebrale tramite la misura di tale campo magnetico generato dall'attività elettrica cerebrale. E’ una tecnica a immagini elaborate dalla misura dei campi magnetici prodotti dall'attività elettrica del cervello per mezzo di dispositivi altamente sensibili come i superconducting quantum interference devices (SQUIDs). Queste immagini vengono usate comunemente sia in ambito clinico che di ricerca.

EEG (Elettroencefalogramma). E’ una tecnica grazie alla quale è possibile rilevare l'attività elettrica prodotta dall'encefalo durante l'attivazione, tramite una serie di elettrodi posti a contatto con lo scalpo. Tale tecnica non è esattamente una metodologia ascrivibile in modo classico alla categoria brain-imaging, poiché non fornisce una mappatura grafico-morfologica delle attività neurali, tuttavia, per la risoluzione temporale e per le notevoli potenzialità, viene solitamente indicata tra le altre e contrapposta ad fMRI e PET.

I segnali elettrici registrati vengono amplificati e digitalizzati per poi essere analizzati a posteriori. Esistono diverse strumentazioni che permettono di registrare l'attività magnetica originata dall'encefalo e si distinguono a seconda dei parametri utilizzati, dalla dimensione alla praticità di utilizzo data dalla connessione cablata o wireless, fino alla tipologia di elettrodi impiegati (Wet nel caso di elettrodi a gel conduttore o Dry in caso contrario). L'EEG, infatti, tra le metodologie analizzate, è certamente quella che presenta la maggiore flessibilità d'utilizzo a fronte di un basso costo e di una risoluzione temporale eccellente, rilevandosi dunque adatta ai casi in cui l’analisi coinvolge la variabile tempo.

L’EEG presenta, infatti, diversi vantaggi, quali, appunto, l'economicità, la facilità d'utilizzo, la non invasività e l'altissima risoluzione temporale che permette di registrare i segnali in tempo reale. L'unica carenza di questa modalità analitica è invece legata alla risoluzione spaziale limitata che non consente di indagare aree troppo specifiche o troppo ristrette.

Neuro/Biofeedback anche questa tecnica, come l'elettroencefalografia è inclusa tra quelle di brain-imaging, pur non essendo nata per l’analisi e l’individuazione di aree cerebrali specifiche. Le strumentazioni utilizzate per analizzare i biofeedback permettono, infatti, di rilevare diverse attivazioni fisiologiche riconducibili a dinamiche inconsce del soggetto, la cui registrazione rappresenta un ulteriore sostegno analitico alle reazioni provocate dagli stimoli.

Tra queste, il biofeedback ci permette di osservare variazioni nella temperatura corporea, nella conduttanza cutanea (GSR Galvanic Skin Resistence, misurazione della resistenza elettrica della cute), riguardanti la frequenza cardiaca e respiratoria e l'elettromiografia (EMG, osservazione funzionale del sistema nervoso periferico). Ciò avviene tramite alcuni rilevatori ed elettrodi connessi ad un dispositivo portatile non invasivo. Questo aspetto ne fa, insieme al basso costo, uno degli strumenti più diffusi per la ricerca in campo neuroscientifico.

La grande flessibilità di questo strumento, inoltre, fa sì che venga impiegato a supporto fisso di molte tecniche fin qui analizzate, al punto che diverse case hanno ormai messo in produzione hardware che integrano diverse tipologie di analisi. Nel nostro caso, ad esempio, ogni qual volta ci riferiremo all'utilizzo di apparecchiature per la rilevazione EEG senza specificarne altre caratteristiche, ci riferiremo in realtà a tecnologie ibride che integrano spesso anche queste metodologie.  

  

Consultate questa pagina per maggiori informazioni, confronti e simulazioni sulle tecnologie viste: http://faculty.washington.edu/chudler/image.html A questo link, invece, potete trovare una curiosità: una recente scoperta di cui si è molto parlato: http://newscenter.berkeley.edu/2011/09/22/brain-movies/

EEG E RAPPRESENTAZIONE INFORMATICA DELLA CONOSCENZA Tradizionali studi di “attivazione” determinano una serie di aree di attività associate al compito specifico. Si è, quindi, in grado di comprendere meglio la funzione delle diverse strutture cerebrali, e soprattutto la loro interazione. A livello di ricerca, l’obiettivo principale dello studio delle funzioni cerebrali è la comprensione delle funzioni delle diverse aree e i collegamenti reciproci in un sistema integrato di reti neuronali. A livello clinico, lo studio funzionale è utile per la rilevazione, comprensione ed esecuzione di diagnosi differenziali in vari quadri patologici.

A livello riabilitativo, inoltre, lo studio funzionale potrebbe permettere di riattivare (o creare nuove connessioni) aree cerebrali danneggiate.

Il neuroimaging funzionale si basa su molte altre discipline oltre alle neuroscienze cognitive, comprese le scienze biologiche (come la neuroanatomia e la neurofisiologia), e campi come l'ingegneria del segnale, la fisica e la matematica, per sviluppare ulteriormente le tecnologie e le tecniche di analisi.

Noi qui ci occuperemo di EEG, perché è largamente utilizzato per scopi di ricerca comuni all’Informatica e alle Scienze Cognitive.

In particolare lo faremo attraverso le BCI (Brain Computer Interface), una tecnologia informatica di ultima generazione che utilizza l’EEG come strumento di interazione con le macchine e che viene utilizzato anche per molti scopi di ricerca, dato il basso costo, la semplicità d’uso, la risoluzione temporale e la non invasività.

Definizione e storia Un dispositivo BCI (Brain-Computer Interface) è un sistema hardware/software che legge segnali elettrici cerebrali o altre manifestazioni dell'attività cerebrale e li trasforma in forme digitali che un elaboratore può comprendere, processare e convertire in azioni ed eventi. Un device di questo tipo offre, in altre parole, una via di comunicazione diretta tra il cervello e un dispositivo esterno, quale un computer, basandosi sulla lettura di segnali elettroencefalografici. Esistono principalmente tre categorie di BCI: ‐ BCI invasivo ‐ BCI non invasivo ‐ BCI semi-invasivo

BCI invasivo questo tipo di BCI è principalmente usato nel campo della neurochirurgia, allo scopo di porre rimedio a situazioni di danneggiamento grave di alcune funzionalità cognitive o per dare nuove funzionalità a persone con disabilità fisiche non recuperabili. I BCI di questo tipo ricevono l’input dei segnali cerebrali da elettrodi impiantati chirurgicamente direttamente nella materia grigia del soggetto e hanno il vantaggio di produrre segnali precisi e di elevatissima qualità.

Di contro, lo svantaggio evidente e non indifferente è rappresentato dall’inserimento di un elemento estraneo all'interno del corpo del soggetto, che può andare incontro a reazioni di rigetto, oltre al fatto che nei pressi del dispositivo impiantato si crea tessuto cicatriziale che causa un progressivo indebolimento del segnale in uscita, fino alla perdita totale dello stesso.

Sono dunque tecniche utilizzate in casi estremi.

Ampiamente sperimentati in laboratorio sui primati, attualmente la maggiore applicazione sugli esseri umani è riservata ai casi gravi di morbo di Parkinson.

Questa patologia trae, infatti, grande beneficio dall’utilizzo di BCI invasive: i pazienti, impiantati gli elettrodi, sono in grado, attraverso comandi elettronici, di inibire completamente i movimenti involontari causati dalla malattia e recuperare, così, la qualità di vita persa a causa della progressione della patologia.

BCI parzialmente invasive sono impiantate nel teschio ma fuori dalla materia grigia.

Producono segnali migliori delle BCI non invasive e peggiori di quelle invasive, ma hanno il vantaggio di non produrre tessuto cicatriziale, evitando così il progressivo indebolimento del segnale.

Anche in questo caso sono utilizzate solo in casi gravi e con molta cautela.

BCI non invasive: questo tipo di BCI consiste in sensori che vengono “indossati”, eliminando in questo modo l'invasività dovuta all’intervento chirurgico.

Il segnale prodotto è molto meno preciso e qualitativamente inferiore, se confrontato con i BCI invasivi e parzialmente invasivi, perché la scatola cranica smorza il segnale, disperdendo le onde elettromagnetiche create dai neuroni.

Con questo tipo di tecnologia è più difficile determinare con precisione l'area specifica (quella profonda) del cervello che ha prodotto un certo tipo di onde elettromagnetiche o l'azione individuale dei neuroni, tuttavia, grazie alla conoscenza acquisita grazie alle tecniche invasive, si è in grado di leggere e interpretare in vario modo anche i segnali corticali e dunque le applicazioni sono molteplici e promettenti. Fondamentalmente i BCI non invasivi possono essere suddivisi in BCI non invasivi ad elettrodi attivi (in cui un gel conduttivo deve essere applicato fra il sensore e il cranio) e BCI non invasivi ad elettrodi passivi (senza il gel). Entrambi i tipi di BCI richiedono un collegamento (via radio o fisico) con l'elaboratore.

Il funzionamento del device è relativamente semplice: sono posti gli elettrodi nelle posizioni volute, in modo che ciascun elettrodo vada a misurare il valore delle onde elettromagnetiche prodotte dalle varie zone del cervello. Il segnale, così trasformato, è inviato all’elaboratore che interpreta il segnale ed esegue l’azione o il comando impartito. Le tecnologie descritte sono utilizzate principalmente in campo medico e nella riabilitazione di persone con disabilità fisiche o mentali, nel tentativo di creare scenari mirati alla soluzione della problematica presentata, per aiutare il soggetto a esercitare il controllo su alcune funzionalità mentali e/o fisiche perse a seguito di traumi o di malattia.

Negli ultimi tempi, grazie all'abbattimento dei costi dei componenti elettronici necessari alla costruzione di tali dispositivi, possedere un BCI è alla portata di tutti e di conseguenza si assiste allo sviluppo di un gran numero di scenari di utilizzo che si allontano dal puro campo medico per avvicinarsi al settore dell'entertainment e dell'educazione.  

 

Funzionamento di un dispositivo bci La storia delle BCI comincia con Hans Berger, lo studioso tedesco che nel 1924 registrò per primo un elettroencefalogramma (da qui in poi EEG) umano e, grazie alle sue analisi, scoprì differenti onde o ritmi presenti nel cervello, quali, ad esempio, le onde di Berger (oggi conosciute come onde Alfa, 8-12 Hz). L'EEG registra le attività cerebrali tramite elettrodi posti sulla superficie del cranio, permettendo così di misurare le piccole differenze di potenziale elettrico (dell’ordine dei microVolt) che s’instaurano tra i vari punti del cuoio capelluto.

La carica elettrica del cervello è mantenuta da miliardi di neuroni e sarebbe impossibile registrare il potenziale elettrico di un singolo neurone, quindi l'EEG rileva l’attività sincrona di centinaia o milioni di neuroni che hanno un orientamento spaziale simile, permettendo così l'individuazione di varie zone d’interesse che sono oggetto di misura. Più precisamente, i potenziali che sono misurati sulla superficie dello scalpo sono il risultato dell'attivazione dei neuroni corticali piramidali disposti in corrispondenza dell'area corticale sottostante l'elettrodo. Quando compiamo un movimento, si attivano diversi neuroni del nostro cervello e quindi, attraverso l'EEG, abbiamo la possibilità di registrare le zone del cervello coinvolte.

E' importante rilevare che non solo un'azione provoca l’attivazione dei neuroni, ma anche la mera intenzione di compiere un’azione ha lo stesso effetto, fatto fondamentale nei lavori di ricerca. Di seguito è riportato un elenco (non completo, ma relativo ai soli BCI. Approfondire) delle onde che possono essere rilevate dagli attuali dispositivi BCI, chiaramente in corrispondenza con i ritmi encefalografici osservati nello studio delle attività cerebrali nelle neuroscienze: ‐ onde Alfa ‐ onde Beta ‐ onde Delta ‐ onde Gamma ‐ onde Theta ‐ onde Mu ‐ onde Lambda ‐ onde Vertex ‐ segnali P300

 

Un esempio di EEG  

Comparazione dei dispositivi bci disponibili Ad oggi sul Mercato sono disponibili diversi prodotti pensati per ricerca, per le applicazioni ludiche e per l’istruzione. Pur non fornendo le prestazioni delle apparecchiatue mediche, sicuramente molto più costose e complesse, offrono un livello di controllo e un’affidabilità tali da consentire a chiunque lo desideri di cimentarsi nello sviluppo di software dedicato per creare auonomamene soluzioni alle problematiche più disparate. Il costo dei BCI commerciali è relativamente contenuto (si va dai 70 ai 1500 dollari). Vi sono poi progetti opensource (per chi volesse cimentarsi o semplicemente saperne di più, info qui: http://openeeg.sourceforge.net/doc/) e progetti nati appositamente per la ricerca (Graz University, qui: http://bci.tugraz.at/). I tre attuali produttori di dispositivi BCI sulla scena internazionale sono OCZ, Emotiv e Neurosky.  

Il Neural impulse Actuator (NIA) della OCZ è in vendita a circa 70 euro ed è composto da una fascetta con tre elettrodi che consentono di rilevare le attività muscolari, le onde alfa e beta e i movimenti oculari. Il 

dispositivo viene venduto come controller per videogiochi ed è fuori produzione dal maggio del 2011. Purtroppo il NIA non viene fornito di un SDK, ed è quindi necessario affidarsi, non senza difficoltà dovute alla scarsa e frammentaria documentazione, ai vari progetti open source nati 

per compensare questa carenza.  

 

 

L’azienda Neurosky produce un dispositivo di fascia intermedia chiamato MindWave (evoluzione del precedente MindSet), dotato di un ricevitore bluethoot, acquistabile al prezzo di cica 100 euro. Il prodotto rileva due stati mentali, attenzione e 

meditazione, etichettati dalla casa come “e‐sense meters” e cinque tipi di ritmi cerebrali (alfa, beta, delta, gamma e teta). Il dispositivo rileva, inoltre, il battito delle palpebre.       

 L’headset Epoc è invece il BCI prodotto dalla Emotiv. L’Epoc, di fascia medio‐alta, è commercializzato in versione Epoc NeuroHeadset a partire da 299 dollari fino ad arrivare ai 1500 dollari della research edition. I costi sono notevolmente più 

elevati, tuttavia il prodotto della Emotiv rileva quattro stati mentali (basandosi sui ritmi cerebrali), più onde alfa, beta, delta, gamma e teta ed inoltre battito degli occhi, movimenti oculari, espressioni facciali e movimenti della testa (mediante due giroscopi). In questo caso l’headset dispone di 14 sensori wet, che vanno cioè inumiditi con soluzione fisiologica.  

Generalmente gli utenti preferiscono, per la sua indossabilità, l’headset della neurosky. In generale anche in ricerca, quando possibile, si preferisce quest’ultimo, in base a molti fattori: ‐ Le onde rilevate sono sufficienti per scopi di ricerca (e sono le stesse rilevate dall’Epoc, di cui molte caratteristiche rimarrebbero inutilizzate) 

‐ L’SDK (il tool di sviluppo) è messo a disposizione senza ulteriori esborsi economici 

‐ La portabilità e la flessibilità del device lo rendono più confortevole per l’utente. Il MindWave è semplice e veloce da indossare e, al contrario dell’epoc, non richiede l’addestramento iniziale dell’elaboratore (apprendimento delle onde cerebrali dell’utente) e dell’utente (nel comprendere come separare mentalmente i vari comandi quali il fisoscopio, le espressioni facciali, l’intenzione di movimento). 

 

Rilevazione dei dati attraverso bci ‐ contesto Molti studi condotti in campo neurologico hanno dimostrato che neuroni con lo stesso orientamento spaziale sono responsabili di un determinato stimolo e/o stato emotivo e si stanno comunque conducendo molti esperimenti per approfondire aspetti specifici.   I dispositivi BCi misurano le variazioni di potenziale elettrico tra zone in cui i neuroni corticali hanno lo stesso orientamento con l’obiettivo, dunque, di interpretare specifici stati emotivi ed intenzioni di movimento e tramutarli in comandi event‐related da impartire a dispositivi elettronici e, in primis, ad un elaboratore.  

Alcuni dei prodotti commerciali pressi in considerazione, come ad esempio il MindWave, sono venduti in bundle con programmi mirati ad aiutare i bambini nel migliorare il proprio livello di attenzione, proponendo alcuni semplici giochi in cui l’utente ottiene dei risultati solo se la sua soglia di attenzione supera un certo livello. Ne risulta evidente che i modi più semplici per stimolare dall’esterno il cervello consistono nell’utilizzare stimoli auditivi e visivi, in quanto parte preponderante dell’esperienza di ogni individuo. Associando quindi a tali stimoli un particolare stato mentale, con una certa dose di allenamento sarà possibile raggiungere un determinato stato mentale e controllare con una certa affidabilità le propre onde cerebrali con una buona dose di concentrazione. 

  

Le peculiarità dei nostri meccanismi cerebrali vengono sfruttate anche in ambito medico, con la tecnica del neurofeedback, tecnica non invasiva che si propone di intervenire a livello neurocognitivo per l’identificazione e la terapia di patologie quali l’emicrania o l’ADHD (Attention Deficit Hyperactivity Disorder), aiutando il soggetto a migliorare il proprio autocontrollo.   La terapia basata sul neurofeedback si avvale di un metodo semplice ma efficace: con un dispositivo BCI si ricavano le informazioni derivanti dall’EEG e, quando il paziente riesce a modulare i propri segnali elettroneurofisiologici, in modo da eseguire il compito richiesto da un software o da un terapeuta, gli viene inviato un feedback positivo, quale ad esempio un suono o un’immagine piacevole. 

 Un esempio di terapia con neurofeedback 

 

 

L’attuale maggiore disponibilità e accessibilità di queste tecnologie, di più semplice utilizzo e più economiche rispetto al passato, porterà probabilmente un significativo miglioramento delle condizioni di vita di persone con difficoltà neurocognitive.  Il crescente interesse nei contronti dei BCI e delle potenzialità di tali dispositivi ha fatto sì che la comunità scientifica si interessasse sempre di più all’interpretazione automatica dei segnali elettroencefalografici e dunque, come sarà di seguito evidenziato, attualmente si è in grado di associare ad ogni onda o ritmo uno specifico risvolto neurologico.   

Rilevazione delle onde alfa Le onde alfa sono associate allo stato di relax di un soggetto e hanno una frequenza compresa ta gli 8 e i 12 Hz. Queste onde sono soprattutto prodotte nelle zone corticali site tra gli elettrodi occipitali e quelli parietali e sono le onde predominanti quando corpo e mente sono in condizioni di rilassamento . Sono significativamente maggiori negli individui con indole creativa ed in persone molto tranquille.  Se un soggetto chiude gli occhi, ad esempio, l’attività delle onde alfa incrementerà in modo significativo, lasciando il posto alle onde beta quando gli occhi vengono riaperti. Le onde alfa sono il pattern dominante degli individui nella prima infanzia o nell’adolescenza e possono essere suddivise in alfa lente (8‐9 Hz) , alfa intermedie (9‐11.5 Hz) e alfa rapide (11.5‐12 Hz) 

 

Comparazione tra ritmi beta e alfa  

Le persone il cui EEG presenta un livello medio più alto di onde alfa sono, stando ad alcuni studi condotti, aperte ed estroverse ed infatti si sentono più in generale a proprio agio nei rapporti sociali e interpersonali.  Durante la fase di crescita e di sviluppo l’attività ritmica cerebrale si sposta da alfa a beta. 

 

Rilevazione delle onde beta Le onde beta sono considerate le più “veloci” del cervello, documentate nell’intervallo di frequenza tra i 12 e i 38 Hz e con un’ampiezza media di 40‐50 microVolt.  Sono tipicamente prodotte dall’emisfero sinistro, che si ritiene (ma attualmente molti studi stanno confutando questa visione) la parte logica della nostra mente.  Tali ritmi possono essere divisi in onde beta lente (12‐18 Hz) e onde beta rapide (18.5‐38 Hz).  Ogni volta che un soggetto è impegnato nella risoluzione di un problema di matematica un problema di logica o legge un libro, le onde beta aumentano di intensità.  Le persone con spiccata attitudine logica tendono ad avere un attività maggiore di onde beta e, in generale, gli adulti tendono ad avere più onde beta rispetto ai bambini e agli adolescenti, con intensità crescente negli anni. 

La presenza di molti picchi nella registrazione delle onde beta denota stato di nervosismo, eccitazione o ansietà, fasi in cui si è portati a pensare più rapidamente e raggiungere in modo più agevole la soluzione ai problemi logici.   Molti studi affermano che in presenza di molte onde beta il soggetto è in uno stato ideale per rispondere a situazioni in cui è necessaria una forte componente logica del pensiero, come ad esempio leggere e comprendere un libro, o risolvere i già citati problemi di matematica e logica.  

Rilevazione delle onde gamma Le onde gamma sono caratterizzate da una frequenza che oscilla tra i 40 e i 70 Hz e sono le meno ampie, se confrontate con gli altri quattro tipi di ritmi.  Le onde gamma sono considerate le onde che permettono di effettuare collegamenti e processare informazioni provenienti da tutte le aree del cervello.  La registrazione di un alto livello di attività di onde gamma può essere associata, a detta di molti studi scientifici, ad un elevato livello di intelligenza, ad un forte autocontrollo e ad uno stato di soddisfazione, oltre ad essere collegate alla memoria e alla percezione della realtà.  Solitamente le persone con ritardo mentale tendono ad avere una minore attività di onde gamma rispetto a quelle registrate in persone non affette da disturbi neurologici. 

 

Rilevazione delle onde theta Le onde theta sono collegate ad una frequenza che oscilla tra i 4 e i 7 Hz e sono state associate a lungo con le prime fasi del sonno e con il processo dei sogni.   Queste onde hanno un’ampiezza alta e solitamente aumentano quando si sogna.   Sono state, inoltre, associate a stati di maggiore creatività, a stati di comprensione superiore e a stati di profondo rilassamento.   

A detta di alcuni studi, le onde theta possono essere più frequenti anche quando si ha una “esperienza spirituale” o si è in un momento di forte creatività.   Inoltre molti lavori scientifici hanno evidenziato che le persone che presentano una componente dominante di tali onde non riescono a concentrarsi.   In particolar modo si è notato che questo riguarda i ssoggetti affetti da ADHD, mentre le persone non affette da nessuna patologia sono in grado di aumentare l’intensità dei vari tipi di onde, ovvero di attivare le aree corticali corrispondenti, quando è richiesto dalla situazione.  

Rilevazione delle onde delta Le onde delta sono le onde a minore frequenza di tutto il cervello (1‐4 Hz) e si presentano in stati di sonno profondo o coma.   Pertanto, sono associate agli stadi 3 e 4 del sonno, ovvero gli stadi che precedono la fase REM. Le onde delta sono, inoltre quelle che presentano l’ampiezza più significativa, con una media di circa 150 microVolt.   Disfunzioni nell’attività di tali onde potrebbero essere associate a patologie gravi come demenza e schizofrenia, come documentato da molti lavori scientifici incentrati sullo studio dell’associazione delle onde delta a queste patologie.  

Aggiunte e schemi riassuntivi Due parole sul P300:  Avvengono in risposta ad eventi significaivi ma con bassa probabilità  300 millisecondi dopo lo stimolo target  Trovati nel 1965 da Sutton et al., 1965; Walter, 1965  focus specifico  Farwell e Donchin, 1988  95% accuratezza per 1 carattere per 26s  Esempio:  http://www.intendix.com/  C’è anche VEP (Visual Evoked Potential), simile a P300, rileva cambiamenti in corteccia visiva 

   

 

  

elettrodi applicati sullo scalpo secondo posizionamento standard "sistema internazionale 10‐20".  

  10% o 20% con rif a 100% distanza tra due punti cranici "inion" (prominenza alla base dell'osso occipitale) e "nasion" (attaccatura superiore del naso), distanza di solito da 30 a 36 cm. (variabilità interpersonale). 

19 elettrodi, lungo cinque linee:  P1: longitudinale esterna  P2: long. interna destra  Centrale  P1: longitudinale esterna  P2: long. interna di sinistra  linea trasversa T4‐C4‐Cz‐C3‐T3 denominata montaggio P3, sempre con regola del 10‐20%. 

elettrodi fronto‐polari sopra le sopracciglia  frontali su stessa linea dei fronto‐polari ma più su del 20%  centrali (+ 20%)  parietali (+ 20%)  occipitali (+ 20%)  Totale del 90% della distanza nasion‐inion, a distanza del 10% dall'inion 

  

  

  

 

  

   

  

   

  

Apprendere da EEG e BCI; applicazione di BCI a ricerca/esperimenti (possibilità progetto)  

Strumenti per sperimentazione EEG/BCI: Openvibe

Vedremo ora come impostare un esperimento basato su EEG interpretati tramite BCI e quindi come vengono trattate e rappresentate le informazioni provenienti da questo dispositivo su un elaboratore. Uno degli strumenti più semplici da utilizzare per impostare un esperimento (utilizzabile anche da neofiti, perché la programmazione è di tipo visuale) è OpenVibe.  

OpenVibe

È un tool di authoring dedicato alla creazione e all’esecuzione di scenari creati con lo sstesso OpenVibe. E’ free, ed è scaricabile alla pagina http://openvibe.inria.fr/  Si basa su una interfaccia grafica che fornisce molti strumenti per poter fare signal processsing in un modo intuitivo, senza che siano richieste competenze in programmazione.  Tutto si basa sul concetto di box, che ssono moduli di programma, contenenti algoritmi che svolgono determinati compiti e che l’utente può combinare a seconda di quello che ci occorre fare.  

OpenVibe nette già a disposizione alcuni box con cui è possibile creare praticamente ogni scenario (programma) che occorre per condurre un esperimento.   Sono già presenti, inoltre, alcuni scenari che possono essere utilizzati per imparare ad usare lo strumento, oppure possono essere personalizzati a piacere.  Per poter condurre un esperimento, sarà necessario creare uno scenario. Gli scenari vengono composti nel modulo DESIGNER.  

Il modulo DESIGNER di OpenVibe Vediamo innanzitutto come è composta l’area di lavoro. All’apertura appaiono: ‐ La top level menu bar ‐ La toolbar, che permette di avere accesso immediato alle azioni più comuni 

‐ La vista ad albero delle box disponibili ‐ La status bar, che fornisce informazioni circa lo stato corrente di uno scenario in esecuzione 

‐ La console, che riporta informazioni, warning o messaggi di errore 

‐ La finestra editor dello scenario, dove le box possono essere collocate e collegate tra loro 

Designer interface in Windows7.

Menubar  La barra dei menu contiene I comandi che normalmente possono essere compiuti in un’applicazione, Gli scenari sono salvati in formato XML e se ne possono aprire più di uno contemporaneamente (per spostarsi da uno all’altro basterà utilizzare i tab).   

Quella che segue è una lista di opzioni e di shortcut a disposizione: 

File New – Ctrl+n Open – Ctrl+o Save – Ctrl+s Save As Close ‐ Ctrl+w Quit – Alt+F4 

Edit Undo – Ctrl+z Redo – Ctrl+y Cut – Ctrl+x Copy – Ctrl+c Paste – Ctrl+v Delete – Del Preferences 

 

Toolbar La prima sezione della toolbar fornisce accesso diretto alla gestione degli opzioni di scenario.  Nella seconda sezione vi sono due toolbutton:  Il primo permette di mostrare o nascondee il window manager 

   Window manager popup dialog for a scenario with 4 visualisation boxes, before and after making changes. 

 

Il secondo toolbutton mostra la dialog che permette di configurare quali messaggi di log dovranno essere mostrati nella console (in tutto i livelli sono 8) 

 

 

Log levels dialog.  

E’ poi presente un bottone che consente di aggiungere commenti (che non avranno influenza sul programma) sullo scenario. Con un doppio click si può modificare il testo di un commento. Un bottone analogo permette di associare allo scenario informazioni su autore, data, descrizione, ecc. La sezione successiva della toolbar contiene i bottoni dedicati alla fase di play dello scenario.  Stop – F5  go back to scenario edition mode  Step – F6  play scenario one step of simulation at a time  Play/Pause – F7   Fast Forward – F8  play scenario as fast as possible Mentre lo scenario è in esecuzione, non è ovviamente possibile modificarlo. Infine, la toolbar contiene un contatore (timer) che mostra il tempo di durata dello scenario (in fase di play). 

 

Box algorithms tree view La parte destra di Designer contiene una lista di algoritmi‐box preesistenti che costituiscono i building block di uno scenario OpenVibe.   Sono organizzati ad albero e forniscono la possibilità di eseguire diverse operazioni.   Per default vengono mostrati solo i box stabili, ma se si vuole visualizzare anche quelli più vecchi “deprecated”, è sufficiente impostare l’opzione di configurazione Designer_ShowDeprecated a true.  

Se si vogliono utilizzare i box “unstable” occorrerà impostare a vero l’opzione Designer_ShowUnstable.  Ad ogni box è associata una descrizione ed ognuno ha uno o più input ed uno o più output.   Per utilizzare i box, bisogna “trascinarli” nell’area dell scenario (edition area) e collegarli opportunamente tra loro.   Edition Area E’ l’area in cui I box vengono aggregate per comporre uno scenario.  

Box Per posizionarli nello scenario è sufficiente selezionarli e trascinarli nella edition area.  Appaiono come rettangoli arrotondati che recano il nome all’interno, gli input (se ce ne sono) sulla parte alta e gli output (se ce ne sono) nella parte bassa.   I connettori di input e output sono evidenziati da triangoli di diversi colori, a seconda del tipo, che aiutano ad effettuare i collegamenti corretti. 

  

Inoltre ogni box è personalizzabile. Con un doppio click ssulla box si accede alla dialog che permette di impostarne le caratteristiche (ad esempio su quale file si desidera l’output dei risultati). 

 Settings of a ‘GDF file reader’ box : filename text entry and number of samples to be stored per buffer.  

Comprendere a cosa serve ogni box è davvero immediato, per cui non faremo un elenco degli algoritmi a disposizione, ma se ne vedrà il funzionamento attraverso la descrizione di alcuni scenari di esempio.  

Box editing  Tutti I box possono essere configurati in modo personale nel Designer.   Alcuni offrono le stesse opzioni di configurazione.   Qui ne vedremo le principali, ma sul sito di OpenVibe, tra i tutorial, potete trovare altre informazioni.  Una volta spostato un box nell’area di editing, si accede alle opzioni di configurazione con il doppio click, come abbiamo visto sopra, e ad altre con il click con il tasto destro del mouse.  

Comparirà un menu che, in basso, mostrerà le opzioni possibili.   ‘Rename box (F2)’ permette di attribuire un nome diverso alla box. 

  ‘Delete box (Del)’ rimuove la box dallo scenario. Per questa operazioni è sufficiente anche selezionare la box e premere il tasto “delete” sulla tastiera. 

   ‘About box’ mostra una dialog contenente I dettagli della box. 

 

Scenario editing  Designer mette a disposizione i comandi standard cut/copy/paste. Inoltre si ha a disposizione anche Ctrl+a che seleziona tutto nello scenario. 

TUTORIAL: come creare uno scenario Proveremo ora a costruire uno scenario semplice, per vedere quali sono I passsi da seguire. Step 1: creare un nuovo scenario Avviare Designer per far apparire la finestra principale che conterrà uno scenario vuoto.  

  

Step 2: aggiungere una box Sul lato destro della finestra, espandendo le box messe a disposizione, possiamo scegliere quella che ci occorre e porla (drag and drop) a sinistra, nello scenario. Ci serviranno dei dati da analizzare.  Possiamo utilizzare la box “Sinus Oscillator” che genera in modo random alcuni segnali. Selezioniamo la box e trasciniamola nello scenario. 

 

  

Step 3: connettere le box La box Sinus Oscillator genera, in modo casuale, un segnale sinuosoidale su un numero variabile di canali. Vogliamo mostrarli utilizzando una box di visualizzazione. Un modo semplice è aggiungere una box Signal Display. Posizioniamola nello scenario (si trova sotto “Visualisation” nella sottocategoria “Basic”). Ora connettiamo input e output. Basta muovere il cursore del mouse sui connettori delle box (triangoli).  Quando saremo sopra un connettore ne apparirà il nome, per aiutarci a non commettere errori.  Una volta indentificato il connettore, basterà premere il tasto sinistro del mouse e, tenendolo premuto, muoversi sul connettore della seconda box, rilasciando poi il pulsante del mouse. Ora le due box saranno connesse tra loro. 

 

Linking box algorithms using their input and output connectors  

Step 4: Saving a scenario  Prima di avviare lo scenario, è sempre meglio salvarlo.  Questo si può fare in due modi:  Aprendo il menu file e scegliendo l’opzione ‘Save As’  Fare click sull’icona ‘Save As’ che si trova nella toolbar   

Step 5 : Playing a scenario Siamo pronti per eseguire lo scenario. Basterà premere il bottone ‘Play’ sulla toolbar.  Apparirà una finestra popup che mosstra il segnale sinuosoidale casuale. 

  

Per fermare lo scenario sarà sufficiente premere il bottone di ‘stop’ sella toolbar.   

OpenVibe e BCI  OpenVibe legge sia dati provenienti da BCI Neurosky che Emotiv. Vediamo, per passi, innanzitutto come connettere il MindWave della Neurosky con OpenVibe (la stessa cosa vale, comunque, per l’Emotiv).  Inserire il dongle nella porta usb e avviare il neurosky  Avviare openVibe Acquisition Server 

  

Selezionare dal menu a tendina il neurosky 

      

Selezionare Driver Properties e impostare le proprietà come in figura 

  Fare click su Applica 

Poi fare click su connetti 

  

Poi click su riproduci 

  

A questo punto avviare openVibe designer che si aprirà con lo scenario dell’esperimento che precedentemente avremo creato. 

Un setup sperimentale per BCI realizzato con OpenVibe A titolo di esempio, viene di seguito mostrato un setup sperimentale creato per rilevare le onde cerebrali di un soggetto che indossa il BCI MindWave Neurosky mentre è sottoposto a stimoli (mostrati attraverso una presentazione PowerPoint) Nota: prima di avviare (play) lo scenario, ricordarsi che deve essere avviato l’Acquisition Server di OpenVibe, per poter acquisire i dati dal Mindwave (rif. paragrafo precedente). Ovviamente dovremo anche aver creato la presentazione PowerPoint e dobbiamo specificarne il path (percorso) nelle opzioni (doppio click) della box “Show Video”.  

scenario dell’esperimento 

  

Ogni volta PERSONALIZZARE i nomi dei file che vengono scritti per salvare i dati, nelle box “CSV File Writer” e “GDF file writer”.   In questo modo ai file si potrà attribuire, per esempio, il nome del soggetto sottopossto all’esperimento e data/orario.  Una volta fatto questo, fare click su play e spostare le finestre dove è più comodo  Quando si è pronti con l’esperimento, click sul tasto “a” della tastiera per far partire il ppt insieme alla registrazione dei dati (serve per sincronizzare la registrazione con lo stimolo dato dal PowerPoint) 

 

Quando l’esperimento è finito, fare click sul pulsante di stop Alla fine chiudere openVibe designer, click su FERMA in OpenVibe Acquisition Server, click su DISCONNETTI e chiudere anche OpenVibe Acquisition Server.  

Risorse su OpenVibe Ulteriori risorse, per chi volesse scegliere di creare un progetto con OpenVibe, possono essere reperite qui: http://openvibe.inria.fr/documentation‐index/    

Discussione 4: i luoghi (comuni?) della creatività Un non vedente è seduto sul gradino di un marciapiede con un cappello ai suoi piedi e un pezzo di cartone su cui è scritto: "Sono cieco, aiutatemi per favore". Un pubblicitario passa di lì, si ferma e nota che vi erano solo alcuni centesimi nel cappello. Allora si china, mette una banconota nel cappello e poi, senza chiedere il permesso al cieco, prende il cartone, lo gira e vi scrive qualcosa. Al pomeriggio, il pubblicitario ripassa davanti al cieco e nota che il cappello è pieno di monete e di banconote. Il non vedente riconosce il passo dell'uomo e gli domanda se era stato lui a scrivere sul suo pezzo di cartone e soprattutto che cosa vi avesse scritto. Il pubblicitario: "Nulla che non sia vero, ho solamente riscritto la sua frase in un altro modo: 'Oggi è primavera e io non posso vederla'.” La morale è che quando le cose non vanno come sperato, occorre cambiare strategia, ma soprattutto l’aneddoto aiuta ad introdurre l’argomento: la creatività. Molti, infatti, sono i campi che beneficiano di un atteggiamento creativo…

Difficile definire la creatività… nulla è escluso, natura compresa.

Soffermiamoci sull’aspetto cognitivo del processo creativo, in particolare sulle tecnologie cognitive, sui dispositivi tecnologici che aiutano ad analizzare il processo ed inoltre analizzare la creatività dal punto di vista delle intelligenze artificiali.

Se si volesse semplificare il processo sotteso alla creatività, si potrebbe dire che alla base c’è sempre la ricerca di una soluzione diversa (innovativa) ad un problema. In questo senso non c’è nulla di più creativo di quello che è successo negli ultimi decenni, ovvero del progresso tecnologico, delle macchine e dell’Informatica

Si pensi ora alla prima cosa che viene in mente quando si nomina il termine creatività: l’Arte. Le espressioni artistiche sono universalmente riconosciute come attività creative.

La creatività è innata o si può acquisire? E’ possibile potenziarla, stimolarla? Esiste un’area del cervello in cui risiede? E’ prerogativa dei sistemi intelligenti naturali o anche i sistemi artificiali possono esibire un comportamento creativo?

Nelle Scienze Cognitive, e in particolare tramite la Neuropsicologia, la creatività è studiata indagando funzioni cerebrali quali la memoria, il linguaggio, l’attenzione, le capacità neuro-motorie, in modo strettamente legato alla valutazione cognitiva degli stimoli esterni che giungono al cervello. Tale valutazione cognitiva è, ovviamente, soggettiva, in quanto influenzata anche da fattori sociali e contesto culturale in cui ogni individuo è immerso (Vygotskij, 1925, 1930). Già Piaget (1970) aveva sottolineato come l’interazione tra soggetto e oggetti stimoli la formazione di processi psichici superiori. Vygotskij esprime un punto di vista interessante, che riporta alle considerazioni sui legami tra la creatività ed i mezzi (anche tecnologici) a disposizione, ovvero sottolinea quanto l’ontogenesi10 umana sia determinata anche dal contributo degli strumenti culturali a disposizione nel contesto storico e sociale.                                                             10  Con ontogenesi si intende l’insieme dei processi tramite i quali si compie lo sviluppo biologico di un organismo vivente. 

Tre sono i collegamenti possibili tra Arte e Tecnologia che riconducono alla creatività e allo studio dei suoi meccanismi:

- le opportunità offerte dalla tecnologia per la conservazione del patrimonio artistico;

- le potenzialità fornite dai nuovi strumenti per l’espressione artistica;

- le possibilità di studiare i legami tra Arte, cervello e tecnologia e, congiuntamente, i processi creativi, consentiti dai progressi dell’AI, del Brain Imaging e dei dispositivi tecnologici.

Le nuove tecnologie, ed in particolare quelle pensate per il trattamento avanzato di dati audio, video e testuali, consentono la creazione di mondi virtuali immersivi che rappresentano una grande opportunità sia per la conservazione del patrimonio artistico, sia per avvicinare gli spettatori alle opere. Si pensi anche solo a YouTube, alle rappresentazioni 3D e alla Realtà Virtuale, all’Augmented Reality. Walkthrough… Cappella Sistina (1575-1481, Michelangelo Buonarroti, http://vatican.va/various/cappelle/sistina_vr/index.html ), Google Art (http://www.googleartproject.com )

Le maggiori potenzialità di espressione artistica (il secondo punto dell’elenco precedente) riguardano, invece, la crescente commistione tra Arte e Tecnologia. Ugo Foscolo: “L’arte non consiste nel rappresentare cose nuove, bensì nel rappresentare con novità”

Esempi: - 1950 Ben Laposky e Manfred Frank realizzarono un

“oscillogramma” che, tramite apposite formule matematiche, effettuava distorsioni artistiche di proiezioni grafiche.

- l’Arte ASCII: produzione di immagini composte con la codifica dei caratteri, a sette bit, utilizzata negli elaboratori.

- il movimento E.A.T. (Experiment in Art and Technology, Rauschenberg e Kuver).

- artisti che hanno fatto della tecnologia il principale mezzo espressivo: Stelarc, esponente della Posthuman Art, e le sue modificazioni del proprio corpo, le installazioni robotiche e le performance estreme; Kac (Transgenic Art) ed il suo coniglio Alba, che, se irradiato da una data frequenza elettromagnetica, diviene luminescente; gli italiani Coltro (pioniere del quadro elettronico) e Nicola Evangelisti (Light Art); tanti altri artisti, anche nel campo della musica (musica elettronica), della danza, e così via, che hanno dato vita ad opere e performance innovative, sfruttando appieno i nuovi mezzi tecnologici e facendone oggetto e mezzo di espressione artistica.

Ultimo punto: l’indagine scientifica possibile grazie ai nuovi dispositivi tecnologici, al Brain Imaging e all’AI, apre uno scenario incredibilmente vasto sulle opportunità di esplorare i legami tra Arte, tecnologia e cervello, e, quindi, creatività. E’ dimostrato da diverse ricerche che sussiste un collegamento tra la corteccia prefrontale e l’esperienza estetica, sia nella visione di opere d’arte che nella loro creazione (Cela et Al., 2004). Inoltre, gli studi di Kawabata, Hideaki e Semir Zeki (2004) hanno rivelato che l’area orbito-frontale della corteccia è coinvolta anche nell’esprimere il giudizio sulla bellezza di un dipinto. Lo stesso tipo di attività cerebrale è stata riscontrata anche quando si contestualizza l’opera, ad esempio mediante descrizioni testuali o multimediali.

Le tecniche di Brain Imaging hanno permesso notevoli avanzamenti nell’analisi del cervello “in azione”, ovvero nello studio delle reazioni e dei meccanismi cerebrali degli individui coinvolti in attività motorie, cognitive o percettive. Grazie a dispositivi e metodi più o meno invasivi, quali l’fMRI (Risonanza magnetica funzionale), la MEG (Magnetoencefalografia), la PET (Tomografia ad emissione di positroni), l’EEG (Elettroencefalogramma), è possibile, infatti, verificare in tempo reale la risposta di un individuo a stimoli specifici. Per la poca invasività e per l’alta risoluzione temporale, l’EEG è tra le tecniche più utilizzate per condurre indagini atte a comprendere meccanismi quali la creatività.

dispositivi (headset) B.C.I. (Brain Computer Interface): semplificazioni dell’apparecchiatura medica per EEG (Allison, 2007), permettono la registrazione dei ritmi cerebrali e l’utilizzo degli stessi per l’interazione con gli elaboratori. Nati per l’entertainment (per i giochi), sono ampiamente usati come supporto per l’interazione con l’ambiente da chi è affetto da malattie inabilitanti (quali, ad esempio, la sclerosi multipla) ma anche per scopi di ricerca, dato che i ritmi cerebrali registrati sono del tutto comparabili a quelli rilevati con l’EEG medico. vantaggi dei BCI: basso costo, portabilità, soggetto a proprio agio. Variazione di potenziale (fino a 100 microvolt, misurata sullo scalpo), sensori sensori wet o dry (da 1 a 20) Alcuni BCI rilevano anche movimenti miografici e battito delle palpebre.

BCI particolarmente adatto per indagare i meccanismi della creatività sia dal punto di vista dell’artista, mentre crea un’opera, sia dal punto di vista degli spettatori che osservano il risultato finale. Non solo intuitivamente, ma anche sperimentalmente, è possibile affermare che l’arte è concepita dagli artisti e dagli osservatori grazie alle attività neurali del cervello, che creano l’esperienza estetica. Lo studio di questi meccanismi è alla base della disciplina sperimentale della Neuroestetica, nata ufficialmente nel 2001, che studia le basi neurali che sottendono alla contemplazione o alla creazione di un’opera d’arte. Fondatore e pioniere della neuroestetica è Semir Zeki, noto neurobiologo che, attorno agli anni ’90, ha cominciato ad interessarsi dei legami che sussistono tra arte e cervello, utilizzando test psicofisici ed elettroencefalografia.

Dispositivi BCI particolarmente utili in ambito di ricerca: - per registrare la risposta a stimoli visivi musicali e la capacità di

distinguere la valenza delle emozioni musicali (Folgieri e Zichella, 2012),

- per rivelare i meccanismi della creatività visiva (progetto BrainArt, Folgieri e Granato, 2013).

- per valutare le risposte emotive e cognitive a stimoli visivo-percettivi (Banzi e Folgieri, 2012) basati sul concetto di priming (Wiggs, 1998)

- per indagare i meccanismi di risposta ai colori (Folgieri et Al., 2013), a stereoscopia e monoscopia (Calore, Folgieri et Al., 2012)

Obiettivo delle ricerche, passate ed in fieri, è quello di valutare la risposta emotiva e cognitiva a stimoli sonori/musicali e visivi di base e complessi, onde comprendere quali siano i meccanismi che scatenano la creatività o che caratterizzano il processo creativo (l’insight, l’ispirazione).

I risultati ottenuti fino ad ora hanno mostrato delle interessanti corrispondenze tra alcuni ritmi cerebrali (in particolare gamma, theta e beta) e l’attività creativa. Al momento la ricerca è ancora rivolta alla comprensione dei meccanismi cognitivi di base della creatività, dell’intelligenza emotiva e dell’espressione, ma già da queste prime applicazioni è evidente l’enorme potenzialità degli strumenti tecnologici a disposizione oggi, che danno, inoltre, la possibilità di verificare, riprendendo il concetto espresso da Vygotskij, quanto l’ontogenesi umana sia fortemente influenzata dagli strumenti culturali (nella nostra epoca, tecnologici) a disposizione nel contesto storico e sociale.

Si torni alla creatività in senso più generale, a cosa significa oggi il termine stesso, ai modi di esprimerla attraverso la tecnologia. Ogni atto creativo ha, generalmente, inizio proprio col trovare una risposta nuova, creativa, a problemi quotidiani: pensare “fuori dagli schemi” (out of the box) problem solving e possibilità di esplorarne i meccanismi: la creatività è strettamente legata al problem solving

In The Act of Creation, 1964, Arthur Koestler spiega la creatività attraverso il meccanismo della bi-sociazione, “mezzo per unire informazioni in conflitto o non correlate in un modo nuovo”. Infatti, se nel quotidiano ciascuno di noi tende ad associare elementi appartenenti allo stesso “sistema di riferimento” (cucina - cibo, libro-foglio, ecc…), nella creazione artistica, umoristica o scientifica si realizza una connessione tra sistemi di riferimento eterogenei, solitamente considerati incompatibili. Si pensi quante invenzioni e scoperte sono evidentemente frutto di tale cross-fertilization, ovvero dell’innesto di idee o mezzi nuovi in contesti differenti. Con problem solving (“risoluzione di un problema”) si intende l’attività che un organismo vivente o un dispositivo di intelligenza artificiale innesca per giungere ad uno stato desiderato a partire da una o più condizioni date.

E’ evidente, pertanto, che è possibile misurare, anche quantitativamente, il livello di attivazione cerebrale, mediante l’analisi del segnale elettrico prodotto dal cervello. A questo proposito ci si pone una domanda: se è possibile misurare il livello di creatività di un individuo non solo valutando il risultato del processo creativo qualitativamente (gusto, estetica, successo del risultato) ma anche quantitativamente (intensità del segnale elettrico corrispondente ai ritmi cerebrali registrati), è possibile misurare anche la presenza o meno (e la sua intensità) di un processo creativo o, più in generale, cognitivo (decision making, problem solving) messo in atto da una intelligenza artificiale?

Un elaboratore può essere creativo?

luglio 2012: Lamus, super computer che compone musica classica, progettato e realizzato all’Università di Malaga, da un Gruppo di Ricerca in Computational Intelligence (coordinato dall’Ing. Francisco J. Vico), coadiuvato dal pianista Gustavo Diaz-Jeres . L’obiettivo era mettere alla prova il test di Turing, e, infatti, il primo concerto dell’elaboratore (dal titolo “Can machine be creative?”), trasmesso in streaming il 2 luglio 2012, è stato dedicato proprio a Turing. 2010, a Udine, il poeta matematico Hans Magnus Enzensberger ha creato una macchina che scrive poesie automatiche, in modo totalmente autonomo.

mini-robot, sviluppati all’Università di Losanna, che, dotati di cervello artificiale basato su reti neurali (immaginate quelle di un insetto), sfruttano un meccanismo di “riproduzione elettronica”, evolvendosi seguendo le leggi della selezione naturale: i robot migliori hanno la possibilità di riprodursi, quindi di combinare il proprio “genoma digitale” (ovvero i pesi della rete neurale del cervello artificiale) con quello di un altro esemplare (in modo casuale). Nel giro di poche generazioni, i robot hanno mostrato un incremento di intelligenza, riuscendo a trovare autonomamente cibo e ad evitare “veleno”. Inoltre i robot hanno appreso come comunicare ai propri simili la presenza del cibo mediante emettitori luminosi di cui sono provvisti, sviluppando una sorta di linguaggio.

2012, nei laboratori del Massachusetts Institute of Technology: alcuni ricercatori hanno sviluppato un prototipo di robot in grado di modificare la propria forma. Il progetto è denominato Milli-Motein ed i robot hanno potenzialità straordinarie. Si pensi, ad esempio, a potenzialità domestiche: una lampada che può trasformarsi in tazza, ecc.

sistema SyNAPSE (Systems of Neuromorphic Adaptive Plastic Scalable Electronics) di cui Ibm annunciò l’idea nel 2009, ovvero un sistema che emula le capacità cerebrali collegate a sensazioni, percezioni, azioni, interazioni e cognizione. L’obiettivo di Ibm è costruire un chip per il calcolo cognitivo e infatti, assieme ad un team di ricercatori del Lawrence Berkeley National Lab e della Stanford University – l’azienda ha costruito un simulatore che risulta particolarmente innovativo per i meccanismi di calcolo, di memoria e di comunicazione, ma anche per i dettagli biologici ispirati dalla neurofisiologia e dalla neuroanatomia.

Quanto visto sfata molti luoghi comuni e stereotipi sulla creatività, quali il fatto che sia innata, umana, istintiva e non attiene alla razionalità. Anche nel caso della creatività, le distanze tra intelligenza umana e intelligenza artificiale vanno evidentemente riducendosi. Inoltre, sembra altrettanto evidente che la creatività abbia a che fare con la razionalità (quantomeno la razionalità emotiva), piuttosto che con l’irrazionalità.

Chi ha qualche dubbio che le macchine possano divenire (forse, un giorno) pensanti, può divertirsi a guardare questo simpatico cortometraggio di Alessio Fava:

http://www.youtube.com/watch?v=LEO7rIL41W4 Il primo pezzo composto da Lamus: http://www.youtube.com/watch?v=bD7l4Kg1Rt8   I robot di Losanna (puntata di SuperQuark): http://www.rai.tv/dl/RaiTV/programmi/media/ContentItem‐446dbf19‐e344‐401b‐b7fe‐67698c4daad5.html?p=0   I Milli‐Motein robots: http://web.mit.edu/newsoffice/2012/reconfigurable‐robots‐turn‐into‐anything‐1130.html  

RAPPRESENTENTAZIONE DELLA REALTÀ: LA REALTÀ VIRTUALE E’ importante ricordare che anche la realtà viene rappresentata su elaboratore, attraverso la Realtà Virtuale. Informazioni dettagliate e approfondimenti possono essere trovate su Internet oppure leggendo il materiale del mio corso di Realtà Virtuali.  Non potremo soffermarci sulla Realtà Virtuale e sui suoi strumenti, visto il numero di ore a disposizione, ma spero di riuscire ad organizzare un laboratorio (vorrei introdurre anche gli ABMS per la simulazione virtuale di situazioni reali).