Una branca particolarmente importante dell'Intelligenza Artificiale (IA) è quella denominata pattern recognition (o riconoscimento di pattern), dove per pattern si intende una struttura esaminabile tramite algoritmi che possano essere formalizzati e calcolati, tipicamente per mezzo di un computer.
Un esempio classico ampiamente sviluppato è quello del riconoscimento visivo di forme dai dati inviati da un trasduttore ottico/elettrico elaborato digitalmente, come una video o fotocamera:
|
riconoscimento automatico di un viso in un'immagine digitale |
In questo contesto il matematico russo Mikhail Bongard propose in appendice al suo classico testo del 1967 una serie di 100 problemi di riconoscimento di forme, conosciuti come Problemi di Bongard (PB), concepiti come test per un programma IA di riconoscimento automatico, qui denominato riconoscitore-IA, ma che si presentano come problematici anche per il riconoscimento cognitivo umano di Intelligenza Naturale (IN), qui denominato riconoscitore-IN (noi) ed - eventualmente - validi anche per un'intelligenza extraterrestre.
I problemi di Bongard consistono in dodici figure a forma di quadrato, detti
riquadri, sei a sinistra, che formano la
Classe I, e sei a destra, che formano la
Classe II. Il problema è:
In cosa i riquadri della Classe I differiscono dai riquadri della Classe II?
In linea generale i primi 30 problemi si possono considerare "facili", i seguenti 30 di "media" difficoltà e gli ultimi "difficili". Definire in cosa consista la "difficoltà" dei problemi è essa stessa una difficoltà e un punto centrale per il riconoscimento, sia in IA che in IN. Una caratteristica fondamentale dei PB è che ammettono, se la hanno, un'
unica soluzione. Dalla formulazione del problema si ricava che, in generale, il procedimento di soluzione deve trovare un fattore comune per ognuna delle due classi e descrivere quale sia la differenza tra i due.
Ad esempio il PB #1:
|
Problema di Bongard #1 |
ha come soluzione: immagini vuote/immagini non vuote, il PB #3:
|
Problema di Bongard #3 |
ha come soluzione: figure con solo contorno/figure solide (outline/solid figures), il PB #51:
|
Problema di Bongard #51 |
ha come soluzione: due cerchi vicino l'uno all'altro/non due cerchi vicino l'uno all'altro.
Come fatto notare da Bongard i termini utilizzati per esprimere la soluzione dei problemi (ad esempio triangolo, angolo, parte, all'interno, linea, concavo etc.) possono assumere significati diversi in diversi problemi e questo comporta una seria difficoltà nel design di un programma ricoscitore-IA. Il programma deve essere molto flessibile per potersi adattare alle numerose situazioni che i problemi richiedono per individuare la soluzione.
Ad esempio i PB #6 e
#96:
|
Problema di Bongard #6 |
|
Problema di Bongard #96 |
hanno la stessa soluzione, ma i termini chiave utilizzati per descriverla,
triangoli e
quadrangoli, sono evidentemente diversi nei due casi, anche se "
simili".
La soluzione, e il procedimento per trovarla, pongono problemi non solo per un riconoscitore-IA ma anche per un riconoscitore-IN: per molti problemi è relativamente "facile" trovare la soluzione, ma la difficoltà è tradurla in termini descrittivi verbali sintetici (le soluzioni proposte da Bongard arrivano al massimo ad una ventina di termini, la maggior parte ne richiede da uno a dieci) e ancor più descrivere
come si è trovata la soluzione. Spesso
sappiamo la soluzione ma non sappiamo come
esprimerla in termini semplici. Nei problemi più "facili" si ritiene che la soluzione, sia in IA che in IN, possa essere trovata con una minima elaborazione dei dati grezzi ("i disegni"). Nel caso di IA occorrono pochi livelli/strati di routines di elaborazione per riconoscere linee, segmenti, triangoli, cerchi etc. e contarli, e questo è sufficiente per trovare la soluzione comparando i fattori comuni dei due riquadri, come ad esempio nel
PB #6. Allo stesso modo in un riconoscitore-IN si ritiene che già l'elaborazione visiva fornita dall'occhio sia sufficiente per trovare la soluzione, il cervello in se stesso deve solo "dargli un nome". E' questa una proprietà fondamentale descritta nel 1959 da un classico lavoro di neurofisiologia in ambito cibernetico, dimostrato sperimentalmente sulla rana ma estendibile, a maggior ragione, anche all'uomo:
What the Frog's Eye Tells the Frog's Brain
Lettvin, J.Y.; Maturana, H.R.; Mcculloch, W.S.; Pitts, W.H.;
Res. Lab. of Electronics and Dept. of Biology, Mass. Inst. Tech., Cambridge, Mass.
Abstract
In this paper, we analyze the activity of single fibers in the optic nerve of a frog. Our method is to find what sort of stimulus causes the largest activity in one nerve fiber and then what is the exciting aspect of that stimulus such that variations in everything else cause little change in the response. It has been known for the past 20 years that each fiber is connected not to a few rods and cones in the retina but to very many over a fair area. Our results show that for the most part within that area, it is not the light intensity itself but rather the pattern of local variation of intensity that is the exciting factor. There are four types of fibers, each type concerned with a different sort of pattern. Each type is uniformly distributed over the whole retina of the frog. Thus, there are four distinct parallel distributed channels whereby the frog's eye informs his brain about the visual image in terms of local pattern independent of average illumination. We describe the patterns and show the functional and anatomical separation of the channels. This work has been done on the frog, and our interpretation applies only to the frog.
Proceedings of the IRE, Nov. 1959
In questo senso si conferma il fatto che l'
occhio, negli animali come nell'uomo, non è un "semplice" organo di senso che "semplicemente" trasduce e trasmette informazioni che vengono poi elaborate dalle regioni del cervello, ma una
vera e propria parte del cervello.
Per problemi più "difficili" sia in IA che in IN gli strati di elaborazione diventano maggiori e più "astratti" e flessibili e, nel caso di IN,
inconsci. E' questa la "vera" difficoltà nel delineare una procedura
euristica generale di riconoscimento nell'unico modo possibile: prima trovarla in IN per poi tentare di implementarla in IA. Troviamo la soluzione, sappiamo descriverla ma il
modo in cui l'abbiamo trovata è spesso in larga parte inconscio, e quindi
non-esprimibile. In questo senso i Problemi di Bongard toccano direttamente i
principi fondamentali della Cognizione.
Douglas Hofstadter nel suo libro si è occupato dei problemi di Bongard e descritto le linee guida per il design di un riconoscitore-IA generale dei problemi, che ha profonde influenze anche su un riconoscitore-IN:
La pre-elaborazione seleziona un minivocabolario
Supponiamo di avere un PB che vogliamo risolvere. Il problema viene presentato ad una videocamera che legge i dati grezzi. Quindi i dati grezzi vengono pre-elaborati: questo significa che vengono riconosciute alcune caratteristiche salienti. I nomi di queste caratteristiche definiscono un "mini-vocabolario" per il problema. Alcuni termini tipici possono essere:
segmento, curva, orizzontale, verticale, nero, bianco, grande, piccolo, appuntito, smussato ...
a un secondo stadio di pre-elaborazione viene usata la conoscenza di forme elementari, con termini come:
triangolo, cerchio, quadrato, tacca, protuberanza, angolo retto, vertice, cuspide, freccia ...
Hofstadter rileva che questo è il punto in cui, negli esseri umani con riconoscitore-IN, grosso modo si incontrano conscio ed inconscio.
Descrittori ad alto livello
Ora che in qualche misura si è "compreso" il disegno si può tentare di dare una descrizione più precisa per uno o più dei dodici riquadri utilizzando dei descrittori semplici come:
sopra, sotto, a destra di, a sinistra di, dentro, fuori di, vicino a, lontano da, parallelo a, perpendicolare a, in una riga, diffuso, distanziato in modo regolare, distanziato in modo irregolare ...
e anche descrittori numerici definiti e indefiniti:
1, 2, 3, 4, ... molti, pochi, ...
si possono anche costruire descrittori più complicati come:
ancora più a destra di, meno vicino a, quasi parallelo a, ...
Quindi un riquadro tipico, ad esempio quello in basso a destra dell'ultima riga della Classe I del PB #47:
|
Problema di Bongard #47 |
potrebbe essere descritto in molti modi, ad esempio: tre forme o tre forme bianche o un cerchio a destra o due triangoli e un cerchio o due triangoli puntati verso l'alto o una forma grande e due forme piccole o una forma curva e due forme rettilineari o un cerchio con due forme dello stesso tipo all'interno e all'esterno.
Ciascuna di queste descrizioni vede il riquadro attraverso "un filtro" e ognuna potrebbe, fuori dal contesto, essere una descrizione utile per trovare la soluzione, mentre nel contesto specifico la caratteristica essenziale del riquadro è: un cerchio che contiene un triangolo.
Hofstadter fà notare che se qualcuno ascoltasse una descrizione del genere non sarebbe in grado di ricostruire il disegno originale, ma sarebbe in grado di riconoscere disegni che hanno questa proprietà.
Consideriamo ora il PB #91:
|
Problema di Bongard #91 |
e osserviamo il riquadro a destra nella riga di mezzo della Classe I. Una descrizione sovraccarica di informazione ma "corretta" nel contesto del problema è: un cerchio con tre tacche regolari.
Nel cercare la descrizione "utile" nel contesto dello specifico problema vi è molto "gioco". Molta informazione è stata eliminata e, a priori, non si può sapere cosa è utile eliminare e cosa conservare. Un tentativo di procedura generale può essere:
- fare tentativi di descrizioni provvisorie per ciascun riquadro
- metterle a confronto con le descrizioni provvisorie degli altri riquadri per ciascuna classe
- ristrutturare le descrizioni
- aggiungendo informazione
- eliminando informazione
- vedendo la stessa informazione da un'altra angolazione
- ripetere il procedimento finché non si trovi che cosa differenzia le due classi
Profili e riconoscitori di identità
Una buona strategia sarebbe di rendere le descrizioni, per quanto possibile, strutturalmente simili l'una all'altra. Ogni struttura che avessero in comune faciliterebbe il compito di confrontarle. Due elementi di questa strategia sono l'idea degli "schemi di descrizione" o profili e l'altro è l'idea di Rico, un "riconoscitore di identità".
Rico è un agente speciale che opera a tutti i livelli del programma, il suo compito è di andare continuamente alla ricerca all'interno delle singole descrizioni e all'interno di descrizioni differenti di descrittori o di altri elementi che si presentino identici più di una volta. Quando rileva qualche identità può innescare varie operazioni di ristrutturazione a livello di singole o multiple descrizioni.
I profili sono la prima cosa che avviene dopo la pre-elaborazione, ovvero il tentativo di costruire schemi di descrizione di formato uniforme per descrivere tutti i riquadri di un problema, utilizzando sotto-descrizioni, sotto-sotto-descrizioni etc.
Un esempio di profilatura del PB #49:
|
Problema di Bongard #49
|
può iniziare considerando che la pre-elaborazione fornisce l'informazione che tutti i riquadri contengono varie piccole o e una grande curva chiusa. Questa è un'informazione utile e merita di essere inclusa nel profilo come primo passo:
grande curva chiusa : -
piccole o : -
Il profilo descrittivo ha due terminali espliciti - nei quali devono essere inserite le sotto-descrizioni.
Uno dei moduli più importanti per un programma di riconoscitore-IA è un tipo di rete semantica, la rete di concetti, nella quale tutti i sostantivi, gli aggettivi etc. noti al vocabolario del programma sono collegati in modi che indicano le loro relazioni reciproche.
|
Una piccola parte di una rete di concetti di un programma per risolvere i Problemi di Bongard. I "nodi" sono collegati da "archi" i quali possono essere collegati a loro volta. |
Per esempio "curva chiusa" è fortemente collegata con i termini "interno" ed "esterno".
Nel caso del PB #49
il profilo viene provvisoriamente ristrutturato come:
grande curva chiusa : -
piccole o all'interno: -
piccole o all'esterno: -
poi si procede a cercare sotto-descrizioni dei termini "interno" ed "esterno", ed esaminando il riquadro a sinistra della prima riga della Classe A si ha:
grande curva chiusa : cerchio
piccole o all'interno: tre
piccole o all'esterno: tre
mentre per l'analogo riquadro della Classe II si ha:
grande curva chiusa : sigaro
piccole o all'interno: tre
piccole o all'esterno: tre
Ora Rico riconosce che il concetto "tre" si ripete in tutti i terminali che riguardano le o, per cui innesca una seconda ristrutturazione del profilo. Si noti che la prima ristrutturazione è stata innescata dalla rete di concetti, la seconda da Rico. Il profilo diventa:
grande curva chiusa : -
tre piccole o all'interno: -
tre piccole o all'esterno: -
Ora "tre" è stato portato ad un livello di generalità più alto, cioè è arrivato a far parte del profilo.
La rete di concetti
Quanto mostrato finora illustra la mutua interazione fra le descrizioni dei singoli riquadri, i profili, il riconoscitore d'identità Rico e la rete di concetti. I dettagli su come è fatta e funziona la rete di concetti, osservando la figura che ne mostra una parte, codifica le seguenti idee:
"alto" e "basso" sono opposti
"su" e "giù" sono opposti
"alto" e "su" sono simili
"basso" e "giù" sono simili
"destra" e "sinistra" sono opposti
la distinzione "destra-sinistra" è simile alla distinzione "alto-basso"
"opposto" e "simile" sono opposti
Un'altra parte delle rete codifica idee quali:
un quadrato è un poligono
un triangolo è un poligono
un poligono è una curva chiusa
la differenza tra un triangolo e un quadrato è che uno ha tre lati mentre l'altro ne ha quattro
4 è simile a 3
un cerchio è una curva chiusa
una curva chiusa ha un'interno e un'esterno
"interno" ed "esterno" sono opposti
La rete di concetti è necessariamente molto vasta ed indica al programma in che modo elaborare la comprensione dei disegni contenuti nei riquadri e permette di modificare leggermente le idee sbagliate iniziali per farle scivolare verso varianti che possono risultare quelle giuste. Per esempio alcune congetture iniziali possono risultare sbagliate e tuttavia avere in sé il germe della risposta giusta. Ad esempio per il PB #33:
|
Problema di Bongard #33 |
si potrebbe in un primo momento buttarsi sull'idea che i riquadri della Classe I contengono forme "appuntite" e quelli della Classe II forme "smussate". Ad un'indagine più attenta l'idea risulta però sbagliata, tuttavia se partendo da "appuntito" si procede verso il concetto di "acuto" si arriva alla caratteristica distintiva della Classe I che porta alla soluzione del problema.
Slittamento e tentatività
La nozione di slittamento tra termini in stretto rapporto fra loro è collegata alla tendenza a vedere un dato oggetto come una variante di un'altro oggetto. Un esempio è il precedente "cerchio con tre tacche", dove non vi è affatto nessun cerchio. Come indicato da Bongard il programma deve utilizzare i concetti in modo elastico senza nessuna rigidità. Ciò che conta è sapere quando e in che modo conviene scivolare da un concetto a un altro.
Un esempio estremamente interessante nel quale il punto cruciale per la soluzione sta nello scivolare da una descrizione ad un'altra è dato dai problemi PB #85-
87:
|
Problema di Bongard #85 |
|
Problema di Bongard #86 |
|
Problema di Bongard #87 |
Il problema #85 è abbastanza banale: in pre-elaborazione il programma identifica il profilo "segmenti" e a questo punto è relativamente facile contare i segmenti ed arrivare alla differenza tra Classe I e Classe II.
Un'euristica generale che è conveniente utilizzare nel programma è: provare a sfruttare idee che hanno già funzionato. Così anche per il PB #86 si possono utilizzare le idee "segmenti" e "contare" insieme: "contare i segmenti". Ma poi risulta che l'accorgimento che porta alla soluzione è contare grappoli di segmenti anziché segmenti, dove "grappolo di segmenti" indica un insieme di (uno o più) segmenti con gli estremi che si toccano.
Anche il PB #87 si gioca sulla nozione di "segmenti", con la domanda "quando un segmento è tre segmenti?" (si veda il riquadro a sinistra della prima riga della Classe II). Il programma deve essere sufficientemente flessibile da riuscire a muoversi avanti e indietro nelle rappresentazioni diverse di una data parte di un disegno e immagazzinare le vecchie rappresentazioni anziché buttarle via, dato che non vi è nessuna garanzia che una rappresentazione più nuova sia migliore di una più vecchia.
Metadescrizioni
Un'altra parte vitale del processo di riconoscimento sono i livelli di astrazione e le metadescrizioni ad ogni livello. Ad esempio considerando di nuovo il PB #91 si ha una tale quantità di possibilità per costruire un profilo che è difficile capire da dove cominciare. L'idea allora è di costruire descrizioni di descrizioni, cioè metadescrizioni e procedere a cercare caratteristiche comuni a questo livello per formulare un profilo per le metadescrizioni.
Il profilo per le metadescrizioni potrebbe avere, tra gli altri, terminali come:
concetti usati: -
concetti ricorrenti: -
nomi dei terminali: -
filtri usati: -
Ad esempio per il PB #91 una metadescrizione di tutti i riquadri della Classe I porterebbe scritto "tre copie di ..." per cui il riconoscitore d'identità prenderebbe il tre come caratteristica saliente dei riquadri della Classe I e analogamente il quattro come segno distintivo per la Classe II.
Messa a fuoco e filtraggio
Il problema di come eliminare informazione superflua è connessa a due nozioni collegate: "messa a fuoco" e "filtraggio".
La messa a fuoco richiede che venga fatta una descrizione focalizzata su qualche parte del disegno del riquadro escludendo tutto il resto. Il filtraggio richiede che venga fatta una descrizione che si concentri su qualche modo particolare di guardare al contenuto del riquadro e ignori deliberatamente ogni altro aspetto. Essi sono in qualche modo complementari: la messa a fuoco ha a che fare con oggetti (grosso modo con sostantivi), il filtraggio con concetti (grosso modo con aggettivi).
Un esempio per la messa a fuoco è il PB #55:
|
Problema di Bongard #55 |
dove si mette a fuoco la piccola tacca e il piccolo cerchio vicino ad essa, escludendo ogni altra cosa del riquadro.
Il PB #22 presenta un esempio di filtraggio:
|
Problema di Bongard #22 |
per risolverlo è necessario filtrar via ogni concetto tranne quello delle dimensioni.
Per risolvere il PB #58:
|
Problema di Bongard #58 |
occorre sia mettere a fuoco sia filtrare.
Uno dei modi per capire che cosa conviene mettere a fuoco o filtrare è di ricorrere ad un tipo particolare di "messa a fuoco": guardare un singolo riquadro particolarmente semplice, per esempio quello che contiene il minor numero possibile di oggetti. Il PB #61 è un esempio nel quale tale tecnica può condurre rapidamente alla soluzione:
|
Problema di Bongard #61 |
La scienza e il mondo dei problemi di Bongard
Si può pensare al mondo dei problemi di Bongard come a un ambiente minimo dove si fà "scienza", cioè nel quale si ha lo scopo di discernere le forme. Per raggiungere questo scopo si fanno, disfanno e rifanno profili, si spostano terminali da un livello di generalità all'altro, si mette a fuoco, si filtra etc. Si fanno scoperte a tutti i livelli di complessità. La teoria kuhniana secondo cui certi rari eventi chiamati "mutamenti di paradigma", che segnano la distinzione tra "scienza normale" e "rivoluzioni concettuali", qui sembra non funzionare perché, come possiamo vedere, mutamenti di paradigma avvengono continuamente in tutto il sistema. Naturalmente alcune scoperte sono più "rivoluzionarie" di altre, perché hanno effetti più vasti, ad esempio la scoperta che i PB #70 e PB #71 sono "lo stesso problema" quando sono esaminati ad un livello sufficientemente alto e astratto.
|
Problema di Bongard #70 |
|
Problema di Bongard #71 |
L'osservazione chiave è che in entrambi si trova la contrapposizione fra una nidificazione semplice ed una doppia. Questo è un nuovo livello di scoperta possibile riguardo ai problemi di Bongard. Vi è un livello ancora più alto che riguarda l'intera raccolta dei problemi, ovvero che problema di Bongard sia l'intera raccolta dei problemi.
Bongard nel suo testo originario propose una collezione di 100 problemi.
|
Problema di Bongard #100 |
altri autori, tra cui Hofstadter, hanno portato il numero fino a 280:
|
Problema di Bongard #101. Designer: D. R. Hofstadter |
|
Problema di Bongard #156. Designer: D. R. Hofstadter |
|
Problema di Bongard #280. Designer: Gaspar Merse |
Naturalmente chiunque può formulare un nuovo problema di Bongard, all'interno di caratteristiche già note oppure con nuove proprietà, operando per prima cosa la distinzione di cosa sia un PB e cosa non lo sia.
Altri autori hanno formulato problemi di Bongard in forma artistica:
|
"Two Circles" - 2000-2007, Jean Constant |
|
"Small figures" - 2000-2007, Jean Constant |
|
"A circle - no circle" - 2000-2007, Jean Constant |
|
"Sharp projection" - 2000-2007, Jean Constant |
-
-