ARPA Publishing


di: Oscar Bettelli

ALGORITMI GENETICI

Continuiamo nelle nostre analisi sul ragionamento naturale poiché esso diviene utile fonte di analogie e parallelismi che possono essere spunto per la realizzazione di programmi di estremo interesse per le ricerche sull'intelligenza artificiale.

La capacità di apprendere dall'esperienza è un aspetto interessante per l'avanzamento nelle prestazioni degli elaboratori elettronici indipendentemente dagli algoritmi utilizzati. Recentemente sono stati sviluppati algoritmi detti "genetici" per ottenere prestazioni di apprendimento basati sulle idee di evoluzione genetica degli esseri viventi. Gli algoritmi genetici si basano sulla selezione di generazioni successive di popolazioni di codici legati ad azioni. Gli algoritmi genetici nascono dalla ricerca di procedure basate sui meccanismi di selezione naturale e di genetica naturale. Essi combinano la sopravvivenza delle stringhe migliori con l'interscambio di informazione strutturata e casuale e con alcune tipologie di ricerca tipiche dell'uomo. Vengono generate strutture di stringhe che si riproducono di generazione in generazione. Alcuni obiettivi di tale ricerca sono:
1) Ottenere una spiegazione astratta e rigorosa dei processi adattativi.
2) Disegnare sistemi artificiali che presentino tali caratteristiche.
Il tema centrale della ricerca sugli algoritmi genetici è stata la ROBUSTEZZA, l'equilibrio tra EFFICIENZA ed EFFICACIA e FLESSIBILITÀ dei sistemi biologici.

Gli algoritmi genetici si differenziano dai metodi tradizionali nei seguenti punti:
1) Gli algoritmi genetici lavorano con i codici dell'insieme dei parametri e non con i parametri stessi.
2) Gli algoritmi genetici ricercano una popolazione di punti e non un singolo punto.
3) Gli algoritmi genetici utilizzano una funzione di valutazione e non funzioni matematiche come derivate o altre conoscenze ausiliarie.
4) Gli algoritmi genetici utilizzano regole di transizione probabilistiche e non regole deterministiche.
Molte tecniche di ricerca richiedono informazioni ausiliarie per poter lavorare correttamente. Per esempio, la tecnica del gradiente necessita delle derivate, per trovare il picco, e altre procedure di ricerca locali come la tecnica dell'ottimizzazione combinatoriale richiede l'accesso a parametri tabellari; viceversa, gli algoritmi genetici non necessitano di tali informazioni ausiliarie: essi richiedono solo il valore di valutazione associato ad ogni singola stringa. Il meccanismo di un semplice algoritmo genetico è sorprendentemente semplice, e coinvolge solamente operazioni di duplicazione di stringhe e sovrapposizioni parziali di stringhe. La semplicità delle operazioni e la potenzialità degli effetti sono due delle caratteristiche più accattivanti dell'approccio algoritmi genetici.

Un semplice algoritmo genetico che fornisca buoni risultati in molti problemi pratici è composto da tre operatori:
1) Riproduzione
2) Interazione
3) Mutazione
Consideriamo una popolazione di n stringhe definite su un opportuno alfabeto, in tal modo si codifica una "idea" completa o le prescrizioni per eseguire un particolare compito, in tal caso ogni stringa è una "idea" completa. Le sottostringhe di ogni stringa contengono "nozioni" che sono rilevanti per il lavoro. Visto in questi termini, la popolazione non contiene semplicemente n idee, ma piuttosto contiene una moltitudine di nozioni e riarrangiamenti di nozioni relativamente a quel particolare compito. Gli algoritmi genetici esplodono tale insieme di informazioni con:
1) Riproducendo nozioni di alta qualità in accordo con le prestazioni o il compito da svolgere.
2) Mescolando queste nozioni con molte altre nozioni di alto livello proprie di altre stringhe.
Allora le azioni di interazione con le precedenti riproduzioni si rispecchiano nelle nuove idee costruite dalle parti di alto livello nei tentativi passati. Scambiando nozioni per formare nuove idee si innesca un processo di innovazione. Un punto fondamentale è il seguente: in un processo di ricerca guidato esclusivamente da una funzione di costo quale informazione è contenuta in una popolazione di stringhe e quale nelle rispettive funzioni obiettivo per ottenere un risultato positivo? Un importante criterio consiste nel considerare le similarità esistenti tra le stringhe sulla base della funzione di costo. Analizzando tali similarità in maggior dettaglio notiamo che certi pattern di stringhe appaiono più fortemente associati a buone prestazioni. In particolare sembra perfettamente ragionevole mescolare e confrontare quelle sottostringhe che sono maggiormente correlate a risultati positivi ottenuti. In pratica: prima cerchiamo similarità tra stringhe di una determinata popolazione, quindi cerchiamo le relazioni casuali tra tali similarità relativamente alla funzione di costo. In qualche senso, non siamo interessati alle stringhe e alle stringhe solamente, poiché importanti similarità tra stringhe ci possono aiutare nella ricerca, ci chiediamo in che modo e in quale senso una stringa può essere simile a stringhe sucessive. In specifico, ci chiediamo in che modo una stringa sia rappresentativa di altre stringhe tramite la coincidenza in certe posizioni nella stringa stessa. Per far ciò si può utilizzare il concetto di schema: uno schema è un corpo di similarità che descrive un sottoinsieme di stringhe che presentano coincidenze in certe posizioni.

Gli algoritmi genetici sono un ottimo esempio di come sia possibile ricavare comportamenti intelligenti applicando le idee di selezione naturale. Gli algoritmi genetici ci svincolano dalla necessità di scrittura di programmi dettagliati per risolvere un determinato compito di tipo intelligente e mostrano l'efficacia dei criteri di selezione naturale.
Gli algoritmi genetici mostrano di essere intelligenti?
Sicuramente presentano una forma di intelligenza, eppure non siamo ancora completamente soddifatti, il concetto di intelligenza continua a sfuggire dalla nostre definizioni. Potremmo definire intelligenza un procedimento mediante il quale dispositivi meccanici sono in grado di eseguire compiti specifici che, se dovessero essere attuati da uomini, richiederebbero l'uso di azioni intelligenti. Questa definizione, seguendola alla lettera, ci porterebbe a dire che una comune calcolatrice tascabile rientra nella categoria dei dispositivi intelligenti. Un aspetto importante nella definizione di macchina intelligente consiste nel processo di comprensione del significato. Quando una macchina comprende il significato di un messaggio? Ancor prima, quando siamo certi che un essere umano ha compreso il significato di un messaggio?

Un criterio potrebbe essere il seguente: quando la risposta che otteniamo risulta conseguente al messaggio originario. Questo criterio potrebbe essere accettato dalla maggior parte dei ricercatori nel campo dell'intelligenza artificiale ma ciò nonostante non risulta essere completamente soddisfacente. In realtà ci interessano anche i processi di elaborazione, vogliamo sapere anche cosa c'è nella scatola nera e non basare il nostro giudizio solo sulle risposte che ci dà.

In che senso comprendiamo il significato di un messaggio? Il significato di un messaggio lo ritroviamo nelle molteplici associazioni mentali che il messaggio stesso produce nella nostra mente. Il significato risiederebbe dunque nelle relazioni che legano il messaggio con tutti gli altri messaggi, contesti, funzioni presenti complessivamente nella rappresentazione mentale. Per una macchina questo corrisponderebbe alle relazioni tra le varie configurazioni registrate nella memoria. Le relazioni più semplici sono le relazioni binarie, ovvero relazioni tra due termini. Tramite relazioni binarie è possibile costruire relazioni più complesse. Quando digitiamo un comando sulla tastiera di un computer inviamo un messaggio che provoca una risposta: un messaggio di risposta. Se il comando è fra quelli previsti il calcolatore lo riconosce; si potrebbe dire che lo comprende e reagisce di conseguenza di solito con una azione congruente. Considerando due sistemi in comunicazione reciproca possiamo schematizzare il colloquio che avviene come una successione di messaggi che vengono scambiati da un sistema all'altro. Se il messaggio è tra quelli previsti il sistema riconosce il messaggio ed il significato del messaggio stesso risiede nelle relazioni codificate nella macchina; per esempio se il comando è "print" allora esso viene interpretato come una richiesta di stampa, ma si può dire che una macchina comprenda realmente il comando?

Il problema posto è legato ai possibili contesti in cui il termine può essere interpretato, di solito una macchina risponde solamente quando tutti i parametri che determinano il contesto e l'azione da effettuare sono chiaramente specificati. In effetti la connessione tra lo stimolo e la risposta è rigidamente codificata tanto da risultare assolutamente determinata. Tuttavia non vi è nulla di definitivo in tutto ciò, in linea di principio è possibile congetturare contesti complessi e relazioni complesse tra gli stimoli e le risposte; dove risiede il diverso livello di comprensione, o di attribuzione del significato, osservabile in un essere umano; una prima risposta consiste nella complessità ma questa complessità non sembra essere qualitativa: essa potrebbe essere semplicemente quantitativa. Tuttavia quando un calcolatore interpreta un comando non troviamo nulla o nessuno che interpreti il comando stesso, il processo consiste in una ricerca automatica tra i comandi possibili, esso consiste in un meccanismo senza un nucleo individuale che sovraintenda alla comprensione come invece abbiamo l'impressione esista in noi stessi quando interpretiamo un messaggio, nel calcolatore sono semplici meccanismi automatici che si combinano per fornire risposte complesse. L'intelligenza della macchina si presenta come una caratteristica complessiva che emerge dal funzionamento di tutte le parti interagenti e che non possiede un aspetto unitario o privilegiato individuabile in qualche parte della macchina stessa. La macchina comprende un comando in relazione ad un programma opportunamente predisposto per il riconoscimento e l'interpretazione del comando stesso, la complessità del comando interpretato va di pari passo con la complessità del programma che lo interpreta. Apprendere un nuovo comando significa pertanto aggiungere un programma che lo interpreti. Vediamo come potrebbe realizzarsi l'apprendimento di un nuovo comando sulla base delle funzioni già presenti. L'apprendimento implica in prima approssimazione il verificarsi di una esperienza e coinvolge la memoria. In particolare l'apprendimento di un nuovo comando avviene sulla base del riconoscimento di relazioni simili ad un certo livello di rappresentazione delle informazioni memorizzate nel calcolatore e corrisponde ad una variazione nella memoria: il comando appreso viene in seguito riconosciuto. Il valore semantico del comando viene costruito sulla base dei nessi logici con altri comandi precedentemente memorizzati. Da tutto ciò ne consegue che occorre un certo livello di complessità iniziale per poter apprendere automaticamente comandi complessi: ogni comando appreso è in realtà una combinazione più o meno complessa di comandi precedenti. Diviene particolarmente importante il concetto di simiglianza che consente la costruzione di categorie astratte in grado di catalogare e quindi interpretare nuovi comandi. A partire da una base di conoscenza iniziale il calcolatore è in grado di costruire nuovi raggruppamenti di dati a cui attribuire nuovi significati ricavati dalla manipolazione dei dati originari e legati alle funzionalità primitive della macchina stessa.

Oscar Bettelli


Pag.successiva|Torna al sommario


© 1997 Oscar Bettelli - © 1998 ARPA Publishing. Tutti i diritti riservati. Riproduzione vietata.
La violazione del copyright e/o la copia illecita del materiale riprodotto in queste pagine, la diffusione non autorizzata dello stesso in qualunque forma contravviene alle normative vigenti sui diritti d'autore e sul copyright.
Per inserire i tuoi testi nel sito ARPANet, clicca qui!