Vita artificiale e algoritmi genetici

IA e Sistemi di Visione Artificiale per la Robotica

Vita artificiale e algoritmi genetici

Postby frizzer » 12 Jul 2012, 19:05

Ciao a tutti, sono frizzer, (visto il caldo di questi giorni), almeno mi consolo con il nome :D ,
sono un appassionato di intelligenza artificiale e affini, ho qualche infarinatura teorica riguardo l'argomento ma mi piacerebbe affrofondire l'argomento specie per quanto riguarda
gli algoritmi genetici e la vita artificiale.
In giro c'è tanta roba teorica a tal riguardo ma io cerco qualcosa di applicabile ad esempio ad un piccolo robot o ad un organismo artificiale.

Sto cercando documentazione in italiano o qualche esempio pratico per realizzare via software una sorta di algoritmo genetico evolutivo a partire dai cosiddetti genomi.

Qualcuno mi potrebbe aiutare?
Vi ringrazio in anticipo.
frizzer
 
Posts: 7
Joined: 12 Jul 2012, 18:41

Re: Vita artificiale e algoritmi genetici

Postby cyclone » 13 Jul 2012, 11:25

benvenuto frizzer,
anche io sono un appassionato di intelligenza artificiale e in questo periodo sto cercando di capire come funzionano le reti neurali artificiali.
sto vedendo di implementare via software un neurone artificiale con funzione di trasferimento di tipo sigmoide.

Tu hai già esperienza in questo campo? hai scritto qualcosa per emulare le reti neurali o algoritmi genetici?

Mi piacerebbe approfondire anche a me l'argomento.

ciao
User avatar
cyclone
 
Posts: 38
Joined: 27 Jan 2012, 11:49

Re: Vita artificiale e algoritmi genetici

Postby deluca » 13 Jul 2012, 17:59

Vi posso dare qualche delucidazione relativamente alle reti neurali?

Prima di iniziare a parlare di algoritmi genetici bisognerebbe trattare un pò quello che è l'approccio moderno dell'IA e cioè il connessionismo,
approccio dello studio del comportamento che è completamente opposto a quello della scienza cognitiva computazionale.
Il connessionismo nasce come un tentativo di trovare un modello della mente più plausibile dal punto di vista biologico.

Esso è all'opposto del cognitivismo poiché cerca di far poggiare il suo modello sulla struttura bio-fisica del sistema nervoso.
Non esiste più il rapporto computer-mente; il computer non è più il modello della mente ma è semplicemente uno strumento per l’emulazione della stessa.
Il connessionismo è basato su dei processi paralleli distribuiti (PPD). In genere questi sono associati ad un processore il cui funzionamento
è ispirato a quello biologico di un neurone. Il processore è a sua volta connesso ad altri processori.
L’insieme dei processori è definito rete neurale.
Ogni processore riceve segnali dagli altri processori a cui è connesso che sono filtrati attraverso i pesi delle rispettive connessioni (sinapsi).
Questi segnali costituiscono gli ingressi del processore che viene nuovamente filtrato attraverso una funzione e propagato ad altri collegamenti in
uscita con altri processori che formano nuove sinapsi.

Per cercare di chiarirvi un pò le idee vi mostro un piccolo codice che rappresenta la funzione sigmoide applicata ad un neurone avente come ingressi
una matrice di 3 elementi e come pesi una seconda matrice anch'essa di tre elementi. In uscita la funzione restituice il valore della funzione.

Code: Select all
#include <stdio.h>
#include <math.h>
// Dichiaro due matrici da 3 elementi e imposto dei valori casuali per poter testare l’algoritmo
double inputs[] = {0.1, 0.5, -0.3}, weights[] = {1.03, -0.91, 0.002};

// Ora definisco la funzione sigmoide che prende come parametri x e β
double Sigmoid(double x, double B) {
  return 1 / (1 + exp(-B * x));
}

double ComputeOutput(void) {
int i;
double somma = 0;
// Con un cliclo iterativo aggiungo il prodotto dell’input con il peso alla variabile della somma totale
for(i=0;inputs[i]!=NULL;i++) {
somma += inputs[i] * weights[i];
}
return Sigmoid(somma, 1);
}

void Test(void)
      printf("Il valore d'uscita del neurone è: %f\n", ComputeOutput());


Ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Vita artificiale e algoritmi genetici

Postby flz47655 » 14 Jul 2012, 00:53

Ciao a tutti,
Tempo fa avevo fatto qualcosina con la programmazione genetica ma non mi sono mai addentrato in reti neurali, ho letto il codice di esempio ma non ho ancora capito come risolvere dei problemi.. nell'esempio qual'è il problema che viene risolto?

Per curiosità ho una domanda: secondo voi in una FPGA da 20K LEs quanti processori-neuroni è possibile implementare (con una rapida stima, niente di dettagliato)? E più che altro quanti processori-neuroni bisogna avere per avere un qualcosa in grado di regolare con soddisfazione ad esempio la velocità di un motore al posto del classico PID?

Riguardo a come risolvere i problemi nella programmazione genetica il "succo" è la funzione di fitness dove in pratica viene valutato il risultato del genoma e viene deciso se passerà o meno alla generazione successiva, nella programmazione neurale invece chi prende questa decisione? esiste un neurone "decisore"?
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Vita artificiale e algoritmi genetici

Postby deluca » 14 Jul 2012, 10:44

l'esempio che ho mostrato non risolve nessun problema, esso dimostra il funzionamento di un singolo neurone.
per far si che una rete sia funzionante e svolga un compito ben preciso abbiamo necessità di avere almeno 3 strati detti layer.
la rete innanzi tutto deve essere istruita... e non programmata e come?
di solito usiamo l'apprendimento con supervisione che risulta essere il metodo più veloce ed affidabile che dà ottimi risultati.

Dati dei segnali di ingresso alla rete S(i), e imponendo un valore d'uscita si modificano i pesi W(i) im modo tale che venga soddisfatta la funzione di traferimento per ottenere il nostro valore d'uscita.

PS. per regolare la velocità di un motore, non volendo utilizzare il PID, meglio affidarsi alla Fuzzy Logic.
Le reti neurali lasciamole per realizzare pattern recognition nell'ambito del riconoscimento visivo, vocale, e della scrittura.

Implementare un rete neurale su fpga è fattibile e noi l'abbiamo fatto.
Devi considerare che ogni neurone deve calcolare la funzione sigmoide, deve avere (n) registri per memorizzare il valore proveniente da ognuno degli ingressi (16bit) e per memorizzare il valore dei pesi (16bit). Inoltre non può mancare il registro per il settaggio del bias (punto di lavoro) anch'esso a 16bit.

Provate a fare una stima di LE per una rete a 16 ingressi a 32 bit con 8 neuroni nascosti e 4 neuroni d'uscita.

ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Vita artificiale e algoritmi genetici

Postby flz47655 » 14 Jul 2012, 11:20

Ciao Giovanni, grazie per la risposta.
Mi sembrava troppo facile, adesso le cose iniziano a complicarsi un pò con 3 layer, apprendimento con supervisione, etc.. ;)

Ok, niente PID allora, sembra interessante però un'implementazione come OCR, soprattutto su FPGA...

Devi considerare che ogni neurone deve calcolare la funzione sigmoide, deve avere (n) registri per memorizzare il valore proveniente da ognuno degli ingressi (16bit) e per memorizzare il valore dei pesi (16bit). Inoltre non può mancare il registro per il settaggio del bias (punto di lavoro) anch'esso a 16bit.

Provate a fare una stima di LE per una rete a 16 ingressi a 32 bit con 8 neuroni nascosti e 4 neuroni d'uscita.

Bit per memorizzare i valori di ingresso: 16*32=512 bit
Bit per memorizzare i valori dei pesi: 16 bit
Bit per il registro per il bias: 16 bit
In tutto sembra che ci vogliano 544 bit per neurone.. facciamo 640 per sicurezza se ci sarà bisogno di altre informazioni o per avere comunque un buon margine.

I neuroni sarebbero 12 quindi servirebbero 7680 bit di memoria.. neanche tantissima, su una Cyclone II EP2C5 ci starebbero in abbondanza solo con la Embedded Memory (117 kbit, volendo c'è anche la M4K RAM da 26 * 4kbit).

Però ho visto che come operazione matematica c'è l'esponenziale, moltiplicazioni tra numero con la virgola, etc.. mi sa che le cose si complicano e non avendo esperienza con queste funzionalità su FPGA per il momento mi trovo in difficoltà a fare una stima di LEs..

Ciao e grazie

PS: Ho trovato un link molto interessante che implementa su un micro AVR il riconoscimento dei caratteri:
http://it.emcelettronica.com/rete-neurale-riconoscimento-dei-caratteri
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2012/shw46_jec324/shw46_jec324/index.html
Dovrò trovare il tempo per leggerlo ma fino al 20 mi sa che non ce la faccio, sembra comunque che spieghi tante cose..
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Vita artificiale e algoritmi genetici

Postby frizzer » 14 Jul 2012, 22:12

grazie a tutti per i replay ricevuti,

ho visto l'articolo postato da flz ma non riesco a capire se il riconoscimento della scrittura viene fatto tutto con atmega644 o i dati vengono passati a matlab che li elabora per poi rispedirli al micro che li visualizza sul display.

uhm!

certo il fatto di implementare la rete su fpga piacerebbe anche a me, ma in rete ho trovato veramente poco e non saprei da dove cominciare.
frizzer
 
Posts: 7
Joined: 12 Jul 2012, 18:41

Re: Vita artificiale e algoritmi genetici

Postby legacy » 15 Jul 2012, 14:55

L'articolo http://it.emcelettronica.com/rete-neurale-riconoscimento-dei-caratteri
e' un "mah ... " con tanti punti di sospensione perche' c'e' un grosso errore di fondo e cioe' che hanno usato l'approccio piu' complesso ed inefficiente che si potesse applicare al riconoscimento della scrittura !

Le reti neurali vengono usate dai software OCR da almeno 20 anni, non c'e' niente di innovativo in quella tesi.

La cosa innovativa era invece usare un algoritmo della stessa tipologia di quanto e' implementato nelle librerie usate da Palm e Nintendo per il riconoscimento della scrittura e cioe' approcci che usano un algoritmo geometrico (o vettoriale) per rilevare i punti notevoli dei caratteri disegnati, basandosi sulla sequenza temporale dei tratti disegnati (in gergo chiamata strokes), invece cosi' come e' presentata quela tesi sta suggerendo di perdere informazioni vettoriali per trattare il touch panel come fosse un scanner, ed e' uno spreco assurdo di risorse. Va bene per fare una tesi di laurea, ma se prenti un "coso" cosi' al lavoro ti licenziano il giorno dopo (prima per punizione ti fanno soffrire facendotelo implementare debuggare e committare).
Last edited by legacy on 15 Jul 2012, 15:20, edited 7 times in total.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Vita artificiale e algoritmi genetici

Postby legacy » 15 Jul 2012, 15:00

deluca wrote:
Esso è all'opposto del cognitivismo poiché cerca di far poggiare il suo modello sulla struttura bio-fisica del sistema nervoso.
Non esiste più il rapporto computer-mente; il computer non è più il modello della mente ma è semplicemente uno strumento per l’emulazione della stessa.


Tempo fa, ridendo e scherzando, in modo del tutto informale avevo detto ad alcuni amici, appassionati di IA, che forse sarebbe meglio non parlare piu' di "intelligenza artificiale" ma di "brain emulation".

Scoglie parecchi crucci pensarla in termi di BR piuttosto che di AI.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Vita artificiale e algoritmi genetici

Postby frizzer » 18 Jul 2012, 13:55

ancora a proposito di algoritmi genetici,
so a priori che la richiesta che sto per fare è abbastanza azzardata.

c'è qualcuno tra di voi che ha già sviluppato con successo un algoritmo genetico per la risoluzione del classico traveling salesman problem?
o qualcosa del genere relativa alla risoluzione di problemi relativi alla navigazione autonoma dei robot?
e se si, si potrebbe avere qualche delucidazione in merito?

dovrei utilizzare algoritmi genetici (inizialmente su PC) per controllare la navigazione di un piccolo robot che dovrebbe muoversi all'interno di una struttura con tante stanze.
Il robot dovrebbe andare in giro per tutte le stanze nel più breve tempo possibile senza ritornare nelle stanze visitate.

Inizialmente dovrei simulare il tutto via software per poi passare su microC.

grazie tante
frizzer
 
Posts: 7
Joined: 12 Jul 2012, 18:41

Re: Vita artificiale e algoritmi genetici

Postby deluca » 18 Jul 2012, 17:17

visto che hai chiesto se qualcuno avesse lavorato alla risoluzione del Traveling Salesman Problem ti mostro un video che dimostra l'evolversi dell'algoritmo genetico che risolve tale problema.
L'algoritmo, che abbiamo sviluppato ed ottimizzato lo scorso anno, è scritto in C++ ed è stato utilizzato per ottimizzare la navigazione autonoma del robot VENUS che abbiamo realizzato presso i ns laboratori di robotica. Tempo permettendo cercheremo di sintetizzarlo in hardware su FPGA per stimare i vantaggi in termini di tempo di risoluzione.

Se vuoi saperne di più .... siamo pronti ad intervenire.

Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Vita artificiale e algoritmi genetici

Postby cyclone » 18 Jul 2012, 19:03

fantastico deluca! complimenti funziona proprio bene il GA :)
è proprio quello che cercavo, lo avevo visto su altri siti non italiani e su youtube.

potrei sapere fino a quanti punti (città) riuscite a risolvere e con che tempi?
avete provato a usare il codice nativo (C++ windows) per metterlo su un piccolo micro a 32bit magari tipo cortex-m4?

ciao
User avatar
cyclone
 
Posts: 38
Joined: 27 Jan 2012, 11:49

Re: Vita artificiale e algoritmi genetici

Postby frizzer » 21 Jul 2012, 09:56

ciao
potreste indicarmi un link in italiano che spiega bene le reti neurali e gli algoritmi genetici con tanto di esempi e codice scritti in C?
googlando ho trovato molto di teorico o di storico ma di codici ed esempi applicativi ... nisba, oppure troppo poveri di contenuto.
Mi accontento anche del titolo di un buon libro che acquisterei istantaneamente.

qualche aiuto?
frizzer
 
Posts: 7
Joined: 12 Jul 2012, 18:41


Return to Intelligenza & Visione Artificiale

Who is online

Users browsing this forum: No registered users and 1 guest

cron