PDA

View Full Version : Qualcuno ha mai lavorato con le reti neurali?


gpc
09-04-2004, 15:45
C'è qualcuno qui che conosce queste cose?
Sto cercando di fare un lavoretto per implementare una piccola rete neurale con un PIC, ma dovrei prima capire bene come funziona l'implementazione nei vari linguaggi, in particolare mi interesserebbe il C.
E poi avrei alcuni dubbi da chiarire... mi sono letto un paio di libri sull'argomento ma ci sono alcune cose che mi sfuggono.
C'è qualcuno che ne sa qualcosa qui?

gotam
09-04-2004, 15:49
Ho fatto l'esame un bel pò di tempo fa e nn è che mi ricordi granchè onestamente, cmq dimmi che mi serve, vedo se posso esserti utile.

gpc
09-04-2004, 16:22
Voglio fare un aggeggio che impari a muoversi su quattro zampe senza andare a sbattere.
Avevo pensato di organizzarlo con una fila di neuroni collegati ai sensori, una fila nascosta dove risiederebbero gli "istinti", e un'ultima di output collegata ai servomotori.
Dovrei avere un feedback dai motori perchè l'insetto in questione ha l'istinto di muoversi (in seguito si può pensare di dotarlo di qualche altro sensore, di luce o di suono o di calore per esempio, perchè capisca dove vuole andare), oppure dovrei trovare un modo perchè capisca che si è mosso effettivamente e che non sta solo zampettando a vuoto.
Quando sbatte, dei sensori, che ho pensato possano essere antenne collegate a microinterruttori, mandano un impulto che viene recepito come "male".
In tutto questo dovrebbe apprendere autonomamente a muoversi (quindi coordinare i movimenti dei motori per generare uno spostamento effettivo -un primo sistema di apprendimento, IMHO il più difficile) e a non sbattere (impulto del sensore-fermo e prova un'altra strada).
Qualche idea?

Athlon64-FX53
09-04-2004, 16:23
Mi pare che in edicola in questo periodo ci sia proprio un robottino con tali caratteristiche... chiaramente da montare settimana dopo settimana.

Boh vedi tu se può esserti d'aiuto.

gpc
09-04-2004, 16:24
Originariamente inviato da Athlon64-FX53
Mi pare che in edicola in questo periodo ci sia proprio un robottino con tali caratteristiche... chiaramente da montare settimana dopo settimana.

Boh vedi tu se può esserti d'aiuto.

Guarda, una volta ho provato a prendere una di quelle riviste, ma le evito come la peste: non finiscono mai, generalmente il livello è bassino e spendi una fortuna...

Athlon64-FX53
09-04-2004, 16:43
Originariamente inviato da gpc
Guarda, una volta ho provato a prendere una di quelle riviste, ma le evito come la peste: non finiscono mai, generalmente il livello è bassino e spendi una fortuna...

Mi farò dire il titolo... un mio amico la stava facendo ed era soddisfatto... poi boh... in edicola si trovano cose carine, ma anche tante fregature

Dr. Death
09-04-2004, 17:01
Uhm quanto paghi per qualcosa del progetto eliza? :fagiano:

Bilancino
09-04-2004, 17:30
Vuoi fare il ragnetto.......interessante in questo caso per la massima precisione servirebbero 4 motori passo passo e ovviamente programmare il pic......Servono però almeno due sensori anteriori per far prendere le distanze dagli oggetti........o ultrasuoni o a baffo quando sbatte........

Il mio non è il ragnetto però fa tutto........

http://www.sicurezzainrete.com/monty.jpg

Solo che la programmazione è in assembler anche se esistono dei programmi in cui scrivi in C

Ciao

gpc
09-04-2004, 17:32
Originariamente inviato da Dr. Death
Uhm quanto paghi per qualcosa del progetto eliza? :fagiano:

Eliza chi è? Una bella figa? :D

gpc
09-04-2004, 17:36
Originariamente inviato da Bilancino
Vuoi fare il ragnetto.......interessante in questo caso per la massima precisione servirebbero 4 motori passo passo e ovviamente programmare il pic......Servono però almeno due sensori anteriori per far prendere le distanze dagli oggetti........o ultrasuoni o a baffo quando sbatte........

Il mio non è il ragnetto però fa tutto........

http://www.sicurezzainrete.com/monty.jpg

Solo che la programmazione è in assembler anche se esistono dei programmi in cui scrivi in C

Ciao

Per i motori uso i servomotori che si usano nel modellismo, la posizione è univoca con il segnale PWM. Volevo farlo a zampe, non a ruote.
I sensori per lo "sbattimento" :D erano come prima prova delle antenne con dei microinterruttori, che quando sbattono chiudono il contatto, e poi mi era venuta l'idea che si potevano mettere due fotoresistenze alla fine delle antenne così quando si avvicinava ad una parete poteva accorgersi dalla luce che calava che stava andando verso un muro, e se sbatteva poi restava sempre la soluzione precedente...

Il fatto del C è per """comodità""" e perchè c'è un profe che vuole un progetto col PIC in C, per cui tanto vale che mi abitui... :muro:
E' più comodo per fare operazioni complesse, ma IMHO è una complicazione inutile per gestire le uscite.

gpc
09-04-2004, 17:36
Appena ho tempo faccio uno schemino di quello che volevo fare, così ve lo faccio vedere e ci capiamo meglio.

/\/\@®¢Ø
09-04-2004, 17:41
Originariamente inviato da gpc
Voglio fare un aggeggio che impari a muoversi su quattro zampe senza andare a sbattere.
Avevo pensato di organizzarlo con una fila di neuroni collegati ai sensori, una fila nascosta dove risiederebbero gli "istinti", e un'ultima di output collegata ai servomotori.
Dovrei avere un feedback dai motori perchè l'insetto in questione ha l'istinto di muoversi (in seguito si può pensare di dotarlo di qualche altro sensore, di luce o di suono o di calore per esempio, perchè capisca dove vuole andare), oppure dovrei trovare un modo perchè capisca che si è mosso effettivamente e che non sta solo zampettando a vuoto.
Quando sbatte, dei sensori, che ho pensato possano essere antenne collegate a microinterruttori, mandano un impulto che viene recepito come "male".
In tutto questo dovrebbe apprendere autonomamente a muoversi (quindi coordinare i movimenti dei motori per generare uno spostamento effettivo -un primo sistema di apprendimento, IMHO il più difficile) e a non sbattere (impulto del sensore-fermo e prova un'altra strada).
Qualche idea?
Per prima cosa dubito che riuscira a farlo funzionare bene, ma visto che la fortuna aiuta i testardi, provo a dare il mio contributo :D.
Le reti neurali (multistrato, come nel tuo caso), ben si prestano ad una rappresentazione vettoriale, con un vettore per ogni strato ed una matrice per i pesi.
Per prima cosa devi decidere come mappare i "dati ambientali" in un vettore di ingresso appartenente a [0,1]^n. Ad esempio la velocita' lungo un'asse dell'aggeggio, o anche di ogni singola zampa. L'importante e' riuscire a trovare gli input "giusti". Per individuare collisioni ad esempio, potrebbe essere piu' produttivo fornire (assieme o in alternativa) la differenza di velocita' tra quella voluta e quella effettiva (chiaro indizio di collisione). Similmente per l'output, devi decidere dei valori in [0,1] che rappresentino le azioni da effettuare. In entrambi i casi, piu' riesci a stare ad alto livello meglio e' (riduci la complessita' e le variabili in gioco) Ad esempio, piuttosto che far insegnare gli spostamenti lungo un asse delle singole zampe sarebbe meglio considerare lo spostamento dell'intero mezzo lungo una certa direzione, o la rotazione.
Dal punto di vista matematico e' relativamente semplice, visto che si tratta di nulla piu' di moltiplicazioni matrici-vettori e di applicazioni di funzioni. Per l'implementazione in C basta che ti procuri una libreria per operazioni su matrici e ti risparmi un sacco di fatica.
Per l'addestramento, se decidi per la classica backpropagation dubito che sia praticabile uno di tipo supervisionato, dovrai "inventarti" una funzione di valutazione che abbia buon senso (l'altra maggiore difficolta').
In bocca al lupo :D


P.S.: Se riesco a rovistare tra le carte magari ti pesco fuori un paio di riferimenti bibliografici interessanti.

majin mixxi
09-04-2004, 17:43
Originariamente inviato da gpc
Appena ho tempo faccio uno schemino di quello che volevo fare, così ve lo faccio vedere e ci capiamo meglio.

ma se non riesci a far volare un elicotterino?
:D

Dr. Death
09-04-2004, 17:55
Originariamente inviato da gpc
Eliza chi è? Una bella figa? :D


fai qualche ricerchina ;)

wolf64
09-04-2004, 17:58
Per Gpc,
prova a vedere se in questa guida (http://www.lulli.net//WEB/hack/xximparare-c//oz-index.html) sul C sotto Linux, nella sezione Reti Neurali, trovi qualcosa di interessante.

spinbird
09-04-2004, 18:32
qualcuno mi spiega cos'è una rete neurale ?

cos'ha di diverso rispetto a una rete logica ad esempio ?:wtf:

Second Reality
09-04-2004, 18:35
"Qualcuno ha mai lavorato con le reti neurali?"

La mia.... Spero tutti i giorni! :D

Vedo se ho via qualche lezione del poli..

majin mixxi
09-04-2004, 18:49
Originariamente inviato da wolf64
Per Gpc,
prova a vedere se in questa guida (http://www.lulli.net//WEB/hack/xximparare-c//oz-index.html) sul C sotto Linux, nella sezione Reti Neurali, trovi qualcosa di interessante.


ogni tanto compari :D

/\/\@®¢Ø
09-04-2004, 18:58
Originariamente inviato da Dr. Death
Uhm quanto paghi per qualcosa del progetto eliza? :fagiano:
MA eliza sta alle reti neurali come Alvaro Vitali al cinema d'autore... :D

jappilas
09-04-2004, 18:58
Originariamente inviato da spinbird
qualcuno mi spiega cos'è una rete neurale ?

cos'ha di diverso rispetto a una rete logica ad esempio ?:wtf:

è *molto* diverso... :O
http://www.dattero.dist.unige.it/Paolucci/didattica/Savona/Seminari2001/RetiNeurali.ppt

/\/\@®¢Ø
09-04-2004, 19:21
Originariamente inviato da spinbird
qualcuno mi spiega cos'è una rete neurale ?

Una rete neurale artificiale e' una schematizzazione di una rete neurale biologica (quella del tuo cervello tanto per intendersi). L'elemento base e' il neurone che, in generale, e' una "scatola nera" che riceve segnali dagli altri neuroni, li elabora, ed emette a sua volta un segnale ( che potra' essere l'input per gli altri neuroni ).Non tutti i neuroni sono collegati tra di loro. In particolare poi ci sono dei neuroni di "ingresso" che ricevono segnali dall'ambinente circostante e dei neuroni di "uscita" che restituiscono il loro output all'ambiente.
Ogni neurone influenza gli altri in modo differente, a seconda di quanto "forte" sia il legame. Puoi quindi considerare la rete neurale come un grafo diretto dove sui nodi ci sono i neuroni, e sugli archi il "peso" della connessione da un nodo all'altro. Il segnale effettivo che un neurone riceve e' quindi una somma pesata dei segnali emessi dagli altri.

La cosa interessante e' che queste reti si possono "addestrare".
Ad esempio, in alcuni casi puoi considerare l'insieme degli valori che ricevono i neuroni di ingresso come un vettore (e lo stesso per quelli di uscita), e cosi' la rete ti rappresenta una funzione tra spazi vettoriali. Al variare dei pesi della rete otterrai funzioni differenti, ed esistono degli algoritmi che permettono di valutare questi pesi in modo che approssimino in modo opportuno una certa funzione (in generale sconosciuta).

gpc
09-04-2004, 19:36
Originariamente inviato da majin mixxi
ma se non riesci a far volare un elicotterino?
:D

Infatti il bello di 'sto coso è che dovrebbe andare da solo :O

(in ogni caso, :fuck: )

gpc
09-04-2004, 19:38
Originariamente inviato da /\/\@®¢Ø
Per prima cosa dubito che riuscira a farlo funzionare bene, ma visto che la fortuna aiuta i testardi, provo a dare il mio contributo :D.
[...]
senso (l'altra maggiore difficolta').
In bocca al lupo :D


P.S.: Se riesco a rovistare tra le carte magari ti pesco fuori un paio di riferimenti bibliografici interessanti.

Grazie per le info (e per la fiducia :D ).
Vedi, il problema di 'ste trattazioni è che sono puramente teoriche, e già faccio fatica ad applicarle "concretamente" ad un software, faccio ancora più fatica a tradurle in un qualcosa di tangibile per un hardware.
Non è che c'è qualcosa che ti dica "vuoi raggiungere questo? allora fai COSI'"?

/\/\@®¢Ø
09-04-2004, 20:38
Originariamente inviato da gpc
Grazie per le info (e per la fiducia :D ).
Vedi, il problema di 'ste trattazioni è che sono puramente teoriche, e già faccio fatica ad applicarle "concretamente" ad un software, faccio ancora più fatica a tradurle in un qualcosa di tangibile per un hardware.
Non è che c'è qualcosa che ti dica "vuoi raggiungere questo? allora fai COSI'"?
Si', ma il "questo" e il "fai cosi'" lo devi dire nel linguaggio delle reti neurali.
Come dicevo sopra una rete neurale come quella che ti appresti ad usare non e' altro che una funzione R^n -> R^m. Tu puoi dire "quando ricevi questo vettore di input voglio che mi dai questo vettore output" , poi in base al valore che effettivamente ti restituisce la rete valuti l'errore e correggi i pesi con una qualche tecnica (ad esempio con la discesa di gradiente). Va da se' che se sai esattamente come deve essere l'output per ogni input la rete neurale non ti serve, la funzione da approssimare ce l'hai gia' ;). Il problema e' che se non hai la funzione gli esempi li devi creare in qualche modo, e nel tuo caso potrebbe essere abbastanza tedioso: e' difficile insegnare un movimento corretto semplicemente dicendogli "hai sbagliato" quando il robot sbatte sul muro.
. Un'altra alternativa e' quella di stimare localmente l'errore (o meglio il suo andamento) ed usare questo per la discesa di gradiente (ad esempio assegnando un errore minore alle alternative "vicine" che si allontanano dal muro).
Dal punto di vista matematico la tua rete e' strutturata cosi':

per ogni strato che non sia quello di input i valori in uscita v_i+1 sono dati dalla formula

v_i+1 = f( W_i * v_i )

dove f e' una funzione di attivazione R -> [0,1] o R -> [-1,+1] (es: f(x) = 1/( 1+e^(-x)) )
W_i la matrice dei pesi tra lo strato i-esimo e l'i+1-esimo
v_i vettore con i valori di output dei neuroni dello strato i-esimo

Nel tuo caso di rete con uno strato nascosto si traduce in

v_2 = f( W_1 * f( W_0 * v_0 ) )

In generale v_2 sara' diverso dal valore o_2 che ti aspettavi (o una sua stima). La fase di addestramento (che puo' anche essere contemporanea all'utilizzo) consiste nel cercare di minimizzare questo errore. Un metodo classico e' quello della backpropagation, ovvero di propagare l'errore all'output "indietro" sui pesi della rete.
La formula e' abbastanza semplice, ma evito di scriverla visto che vado a memoria e non vorrei commettere errori e comunque sul forum sarebbe un tantino illeggibile (perlomeno finche' il Corsini non mi mette il tag [latex] con relativo motore di rendering :D). Si tratta comunque di formule analoghe alla precedente, solo con ulteriori coefficienti, la trasposta di W_i e la derivata di f.
Come ho gia' detto, il codice e' la parte meno complicata della faccenda. Molto piu' difficile e' trovare una rappresentazione vettoriale opportuna per gli input e per gli output.
Inoltre questo presume che ad ogni passo sia sufficiente lo stato corrente a definire la scelta da effettuare, mentre in generale non e' cosi': ad esempio insegnare che non e' il caso di lanciarsi velocemetne verso il muro non e' possibile, perche' devi "correggere" scelte precedenti. In questo caso devi poter "tornare indietro nel tempo" durante l'apprendimento, ad esempio usanto reti neurali ricorrenti, ma e' gia' un affare piu' complesso.

Sul "Machine Learning" di Tom M. Mitchell c'e' una parte introduttiva alle reti neurali che non e' fatta affatto male, ed e' probabile che si trovi nella biblioteca della tua facolta'.

DvL^Nemo
09-04-2004, 21:05
Da me stanno progettando qualcosa sulle reti neurali applicati a modelli per studi ambientali, il programma che utilizzano si chiama neuro solution, ma non ti posso dire niente di piu' perche' non ne capisco niente.. :p
Ciao !

Dr. Death
09-04-2004, 21:13
Originariamente inviato da /\/\@®¢Ø
MA eliza sta alle reti neurali come Alvaro Vitali al cinema d'autore... :D


non mi sembra che lui si senta in grado di realizzare già un cyborg :mbe:

/\/\@®¢Ø
09-04-2004, 21:22
Originariamente inviato da Dr. Death
non mi sembra che lui si senta in grado di realizzare già un cyborg :mbe:
Perche' eliza non e' altro che uno scriptino di pattern matching:

;;; -*- Mode: Lisp; Syntax: Common-Lisp; -*-
;;; Code from Paradigms of Artificial Intelligence Programming
;;; Copyright (c) 1991 Peter Norvig

;;;; File eliza.lisp: Advanced version of Eliza.
;;; Has more rules, and accepts input without parens.

(requires "eliza1")

;;; ==============================

(defun read-line-no-punct ()
"Read an input line, ignoring punctuation."
(read-from-string
(concatenate 'string "(" (substitute-if #\space #'punctuation-p
(read-line))
")")))

(defun punctuation-p (char) (find char ".,;:`!?#-()\\\""))

;;; ==============================

(defun eliza ()
"Respond to user input using pattern matching rules."
(loop
(print 'eliza>)
(let* ((input (read-line-no-punct))
(response (flatten (use-eliza-rules input))))
(print-with-spaces response)
(if (equal response '(good bye)) (RETURN)))))

(defun print-with-spaces (list)
(mapc #'(lambda (x) (prin1 x) (princ " ")) list))

(defun print-with-spaces (list)
(format t "~{~a ~}" list))

;;; ==============================

(defun mappend (fn &rest lists)
"Apply fn to each element of lists and append the results."
(apply #'append (apply #'mapcar fn lists)))

;;; ==============================

(defparameter *eliza-rules*
'((((?* ?x) hello (?* ?y))
(How do you do. Please state your problem.))
(((?* ?x) computer (?* ?y))
(Do computers worry you?) (What do you think about machines?)
(Why do you mention computers?)
(What do you think machines have to do with your problem?))
(((?* ?x) name (?* ?y))
(I am not interested in names))
(((?* ?x) sorry (?* ?y))
(Please don't apologize) (Apologies are not necessary)
(What feelings do you have when you apologize))
(((?* ?x) I remember (?* ?y))
(Do you often think of ?y)
(Does thinking of ?y bring anything else to mind?)
(What else do you remember) (Why do you recall ?y right now?)
(What in the present situation reminds you of ?y)
(What is the connection between me and ?y))
(((?* ?x) do you remember (?* ?y))
(Did you think I would forget ?y ?)
(Why do you think I should recall ?y now)
(What about ?y) (You mentioned ?y))
(((?* ?x) if (?* ?y))
(Do you really think its likely that ?y) (Do you wish that ?y)
(What do you think about ?y) (Really-- if ?y))

(((?* ?x) I dreamt (?* ?y))
(Really-- ?y) (Have you ever fantasized ?y while you were awake?)
(Have you dreamt ?y before?))
(((?* ?x) dream about (?* ?y))
(How do you feel about ?y in reality?))
(((?* ?x) dream (?* ?y))
(What does this dream suggest to you?) (Do you dream often?)
(What persons appear in your dreams?)
(Don't you believe that dream has to do with your problem?))
(((?* ?x) my mother (?* ?y))
(Who else in your family ?y) (Tell me more about your family))
(((?* ?x) my father (?* ?y))
(Your father) (Does he influence you strongly?)
(What else comes to mind when you think of your father?))

(((?* ?x) I want (?* ?y))
(What would it mean if you got ?y)
(Why do you want ?y) (Suppose you got ?y soon))
(((?* ?x) I am glad (?* ?y))
(How have I helped you to be ?y) (What makes you happy just now)
(Can you explain why you are suddenly ?y))
(((?* ?x) I am sad (?* ?y))
(I am sorry to hear you are depressed)
(I'm sure its not pleasant to be sad))
(((?* ?x) are like (?* ?y))
(What resemblance do you see between ?x and ?y))
(((?* ?x) is like (?* ?y))
(In what way is it that ?x is like ?y)
(What resemblance do you see?)
(Could there really be some connection?) (How?))
(((?* ?x) alike (?* ?y))
(In what way?) (What similarities are there?))
(((?* ?x) same (?* ?y))
(What other connections do you see?))

(((?* ?x) I was (?* ?y))
(Were you really?) (Perhaps I already knew you were ?y)
(Why do you tell me you were ?y now?))
(((?* ?x) was I (?* ?y))
(What if you were ?y ?) (Do you thin you were ?y)
(What would it mean if you were ?y))
(((?* ?x) I am (?* ?y))
(In what way are you ?y) (Do you want to be ?y ?))
(((?* ?x) am I (?* ?y))
(Do you believe you are ?y) (Would you want to be ?y)
(You wish I would tell you you are ?y)
(What would it mean if you were ?y))
(((?* ?x) am (?* ?y))
(Why do you say "AM?") (I don't understand that))
(((?* ?x) are you (?* ?y))
(Why are you interested in whether I am ?y or not?)
(Would you prefer if I weren't ?y)
(Perhaps I am ?y in your fantasies))
(((?* ?x) you are (?* ?y))
(What makes you think I am ?y ?))

(((?* ?x) because (?* ?y))
(Is that the real reason?) (What other reasons might there be?)
(Does that reason seem to explain anything else?))
(((?* ?x) were you (?* ?y))
(Perhaps I was ?y) (What do you think?) (What if I had been ?y))
(((?* ?x) I can't (?* ?y))
(Maybe you could ?y now) (What if you could ?y ?))
(((?* ?x) I feel (?* ?y))
(Do you often feel ?y ?))
(((?* ?x) I felt (?* ?y))
(What other feelings do you have?))
(((?* ?x) I (?* ?y) you (?* ?z))
(Perhaps in your fantasy we ?y each other))
(((?* ?x) why don't you (?* ?y))
(Should you ?y yourself?)
(Do you believe I don't ?y) (Perhaps I will ?y in good time))
(((?* ?x) yes (?* ?y))
(You seem quite positive) (You are sure) (I understand))
(((?* ?x) no (?* ?y))
(Why not?) (You are being a bit negative)
(Are you saying "NO" just to be negative?))

(((?* ?x) someone (?* ?y))
(Can you be more specific?))
(((?* ?x) everyone (?* ?y))
(surely not everyone) (Can you think of anyone in particular?)
(Who for example?) (You are thinking of a special person))
(((?* ?x) always (?* ?y))
(Can you think of a specific example) (When?)
(What incident are you thinking of?) (Really-- always))
(((?* ?x) what (?* ?y))
(Why do you ask?) (Does that question interest you?)
(What is it you really want to know?) (What do you think?)
(What comes to your mind when you ask that?))
(((?* ?x) perhaps (?* ?y))
(You do not seem quite certain))
(((?* ?x) are (?* ?y))
(Did you think they might not be ?y)
(Possibly they are ?y))
(((?* ?x))
(Very interesting) (I am not sure I understand you fully)
(What does that suggest to you?) (Please continue) (Go on)
(Do you feel strongly about discussing such things?))))

;;; ==============================

Il programma in se e' interessante, ma non ha nulla da spartire con l'argomento del thread.

Dr. Death
09-04-2004, 21:26
Ma conosci gli sviluppi di eliza? :fagiano:

gpc
09-04-2004, 23:03
Azzo /\/\@®¢Ø, ma ne sai a pacchi! :D
Senti, questa sera se ho voglia -non credo- o domani se ho tempo -già più probabile- vedo di buttare giù un disegnino dove spiego bene come ho pensato la cosa, compresi i collegamenti con i pic.

C'è una cosa però, che non so se non sia chiara perchè non mi spiego io o perchè non hai capito bene cosa intendo fare...

L'apprendimento della rete voglio che sia automatico, ovvero che stabilisca da solo se lo scopo che vuole raggiungere (quello che ho chiamato "istinto") è stato effettivamente raggiunto o meno. Nel caso specifico, vorrei partire con due cose ben definite: primo, non andare a sbattere -la velocità non è una variabile in gioco, questo zampetta, mica corre- e secondo, muoversi.
Premesso che l'organizzazione della rete che ho pensato è su tre livelli, uno sensoriale, uno boh, come chiamarlo, istintivo, e uno di output, che muove i motori, il feedback che corregge l'urto contro un oggetto è relativamente semplice: se tocca arriva un impulso classificato come "male" e deve capire da solo che l'unico modo per eliminarlo è girarsi.
L'altro feedback relativo all'altra azione, quella di muoversi, è a mio avviso il più complesso (e quello che mi acchiappa di più).
Io non voglio dargli degli esempi per dire come deve muovere le zampe, altrimenti farei il programmino già pronto e mi limiterei alla rete (che rete poi? basterebbe un programmino altrettanto semplice) per evitare che sbatta, voglio che impari da solo. Per cui, ammettendo di programmare delle azioni base, per esempio solleva_una_gamba e abbassa_una_gamba, lui dovrà coordinarsi per capire come muoverle per spostarsi effettivamente.
Devo ancora pensare come faccia a capire che si è spostato, ma una volta deciso i passi a mio avviso dovrebbero essere due: primo, se si è mosso arriva un impulso che segnala il movimento avvenuto, e secondo di conseguenza vengono rafforzati i pesi che hanno portato a questo tipo di azione.
L'addestramento dovrebbe quindi essere automatico al 100%, lo molli lì e, visto che fermo non può stare perchè "sta male" a non muoversi, inizierà a tentare di spostarsi finchè non impara, dopo di che quando sbatte dovrà risolvere l'altro problema.
Il problema a livello "hardware" io lo vedo completamente risolto, in linea di principio, il problema per me è capire come creare il neurone via software nel PIC.
Anche perchè non avrebbe senso usare un PIC per neurone, per cui ho pensato, per limitazioni di memoria, di farcene stare tre o quattro... avremmo dei "cluster di neuroni", per così dire, collegati tra loro con le linee di uscita dei PIC.
I pesi dovrebbero rappresentare la durata del segnale, per motivi pratici, e la funzione di decisione (la sigmoide ho visto che si chiama) dovrebbe essere basata proprio su questa durata invece che sul valore del segnale -andando in digitale, mi sembra la soluzione migliore per risparmiare linee.

Ora, io non so se da tutto questo polpettone tu ci abbia capito qualcosa :D (ma vorrei far notare la totale assenza di formule, cosa di cui vado orgoglioso in quanto rifuto al 100% l'approccio pseudo-ingegneristico-matematico che viene dato all'università indica IMHO del non saper far niente in pratica :rolleyes: :D ), ma se tu riuscissi a tradurmi le mie idee in qualcosa su cui lavorare te ne sarei eternamente grato :D

gpc
09-04-2004, 23:05
Aggiungo una cosa: faccio anche casino perchè tutti i discorsi di matrici, vettori, etc, vanno bene quando si implementa un neurone con un software, ma se non ho capito male perdono completamente significato (classica cosa da ufficio complicazione cose semplici :D ) quando si tratta di implementarlo via hardware, in quanto hai fisicamente il collegamento e vai cambiare quel valore... non so se mi spiego... o se ho capito... :wtf:

/\/\@®¢Ø
09-04-2004, 23:41
Originariamente inviato da Dr. Death
Ma conosci gli sviluppi di eliza? :fagiano:
Purtroppo molto poco, ma quel che ho letto non era molto incoraggiante.

/\/\@®¢Ø
09-04-2004, 23:42
Originariamente inviato da gpc
Aggiungo una cosa: faccio anche casino perchè tutti i discorsi di matrici, vettori, etc, vanno bene quando si implementa un neurone con un software, ma se non ho capito male perdono completamente significato (classica cosa da ufficio complicazione cose semplici :D ) quando si tratta di implementarlo via hardware, in quanto hai fisicamente il collegamento e vai cambiare quel valore... non so se mi spiego... o se ho capito... :wtf:
Deformazione professionale mia :D, ma rende piu' semplice trovarsi fuori le formule che poi devi applicare in pratica (ovvero come modificare il suddetto valore)

gpc
09-04-2004, 23:45
Originariamente inviato da /\/\@®¢Ø
Deformazione professionale mia :D, ma rende piu' semplice trovarsi fuori le formule che poi devi applicare in pratica (ovvero come modificare il suddetto valore)

Sì però dalle formule non ci capisco niente su come metterle in pratica :fagiano:
E riguardo al papirone non mi dici niente? :O

misterx
09-04-2004, 23:54
Originariamente inviato da /\/\@®¢Ø
Una rete neurale artificiale e' una schematizzazione di una rete neurale biologica (quella del tuo cervello tanto per intendersi). L'elemento base e' il neurone che, in generale, e' una "scatola nera" che riceve segnali dagli altri neuroni, li elabora, ed emette a sua volta un segnale ( che potra' essere l'input per gli altri neuroni ).Non tutti i neuroni sono collegati tra di loro. In particolare poi ci sono dei neuroni di "ingresso" che ricevono segnali dall'ambinente circostante e dei neuroni di "uscita" che restituiscono il loro output all'ambiente.
Ogni neurone influenza gli altri in modo differente, a seconda di quanto "forte" sia il legame. Puoi quindi considerare la rete neurale come un grafo diretto dove sui nodi ci sono i neuroni, e sugli archi il "peso" della connessione da un nodo all'altro. Il segnale effettivo che un neurone riceve e' quindi una somma pesata dei segnali emessi dagli altri.

La cosa interessante e' che queste reti si possono "addestrare".
Ad esempio, in alcuni casi puoi considerare l'insieme degli valori che ricevono i neuroni di ingresso come un vettore (e lo stesso per quelli di uscita), e cosi' la rete ti rappresenta una funzione tra spazi vettoriali. Al variare dei pesi della rete otterrai funzioni differenti, ed esistono degli algoritmi che permettono di valutare questi pesi in modo che approssimino in modo opportuno una certa funzione (in generale sconosciuta).


c'è un legame con gli automi ?

gpc
10-04-2004, 00:05
Originariamente inviato da misterx
c'è un legame con gli automi ?

NO!
Torna a studiare i flip flop :nonsifa:

:D :asd:

/\/\@®¢Ø
10-04-2004, 00:21
Premetto che non sono ingegnere :sofico: e quindi le mie competenze sono limitate dal punto di vista hardware
Originariamente inviato da gpc
L'apprendimento della rete voglio che sia automatico, ovvero che stabilisca da solo se lo scopo che vuole raggiungere (quello che ho chiamato "istinto") è stato effettivamente raggiunto o meno. Nel caso specifico, vorrei partire con due cose ben definite: primo, non andare a sbattere -la velocità non è una variabile in gioco, questo zampetta, mica corre- e secondo, muoversi.

Per prima cosa va detto che tanto piu' generale cerchi di fare il modello, tanto piu' difficile sara' ottenere un buon risultato; se riesci a dare al robottino qualche informazione "acquisita a priori" tanto meglio.


Io non voglio dargli degli esempi per dire come deve muovere le zampe, altrimenti farei il programmino già pronto e mi limiterei alla rete (che rete poi? basterebbe un programmino altrettanto semplice) per evitare che sbatta, voglio che impari da solo. Per cui, ammettendo di programmare delle azioni base, per esempio solleva_una_gamba e abbassa_una_gamba, lui dovrà coordinarsi per capire come muoverle per spostarsi effettivamente.
Devo ancora pensare come faccia a capire che si è spostato, ma una volta deciso i passi a mio avviso dovrebbero essere due: primo, se si è mosso arriva un impulso che segnala il movimento avvenuto, e secondo di conseguenza vengono rafforzati i pesi che hanno portato a questo tipo di azione.

L'importante e' che trovi un modo per capirlo tu (mmmh, a naso direi che devi individuare una combinazione successiva di movimenti, ad esempio che muove due gambe opposte in una direzione e poi le alte due nell'altra). In linea di massima dovrebbe essere sufficiente cambiare i pesi, il robot si "accorgera'" di essersi mosso con questi. Attento pero' che non e' sufficiente rafforzare i pesi; in generale i pesi potrebbero essere negativi ("segnali inibitori"), alcuni andranno aumentati, altri diminuiti in funzione del contributo (anche indiretto, nel caso dei pesi tra strato di ingresso e quello intermedio).


L'addestramento dovrebbe quindi essere automatico al 100%, lo molli lì e, visto che fermo non può stare perchè "sta male" a non muoversi, inizierà a tentare di spostarsi finchè non impara, dopo di che quando sbatte dovrà risolvere l'altro problema.
Il problema a livello "hardware" io lo vedo completamente risolto, in linea di principio, il problema per me è capire come creare il neurone via software nel PIC.

Ehm, non chiederlo a me, sei tu l'ingegnere :D


Anche perchè non avrebbe senso usare un PIC per neurone, per cui ho pensato, per limitazioni di memoria, di farcene stare tre o quattro... avremmo dei "cluster di neuroni", per così dire, collegati tra loro con le linee di uscita dei PIC.
I pesi dovrebbero rappresentare la durata del segnale, per motivi pratici, e la funzione di decisione (la sigmoide ho visto che si chiama) dovrebbe essere basata proprio su questa durata invece che sul valore del segnale -andando in digitale, mi sembra la soluzione migliore per risparmiare linee.

Attento pero' che faresti bene ad implementare anche segnali "negativi", praticamente indispensabile se vuoi ottenere un discreto grado di flessibilita' dalla rete.


Ora, io non so se da tutto questo polpettone tu ci abbia capito qualcosa :D (ma vorrei far notare la totale assenza di formule, cosa di cui vado orgoglioso in quanto rifuto al 100% l'approccio pseudo-ingegneristico-matematico che viene dato all'università indica IMHO del non saper far niente in pratica :rolleyes: :D ), ma se tu riuscissi a tradurmi le mie idee in qualcosa su cui lavorare te ne sarei eternamente grato :D
Da buon matematico devo insistere sul fatto che se vuoi ottenere qualcosa di funzionante almeno un paio di formulette le devi inserire :D, ma si tratta di roba da Analisi 1.
Direi che devi verificare come puoi rappresentare gli input e gli output appropriatamente. In alcuni casi e' facile (ad esempio un valore di uscita rappresenta l'"alzare la prima gamba", valori prossimi allo 0 vuol dire "no" valori alti indicano "si".); in altri non e' immediato e dipende da l'implementazione (ad esempio vuoi usare un modello temporale discreto o continuo ?). Su quale sia la migliore per il tuo ambito purtroppo non posso aiutarti (visto che non e' il mio), ma dovresti riuscire a trovare un sacco di esempi sulla rete.
Una cosa che potrebbe comunque funzionare e' quella di "implementare" un certo risultato di piu' alto livello a sua volta come il risultato di un'altra rete che dipenda dagli output (e non dagli input), in questo modo trovando "quanto hanno sbagliato gli output" e da li trovare come correggere i pesi.
Ad esempio supponimo che per avere movimento sia sufficiente che due output siano positivi e altri due negativi, puoi quindi considerare un ulteriore strato che abbia come input questi valori e come pesi dei valori tali che si abbia in uscita il valore 1 quando c'e' spostamento e zero altrimenti. "Forzando" l'uscita a 1 puoi correggere l'errore e quindi ottenere un apprendimento.

/\/\@®¢Ø
10-04-2004, 00:32
Originariamente inviato da misterx
c'è un legame con gli automi ?
Se parli di automi a stati finiti o a pila, in un certo senso si', visto che con una rete neurale puoi implementare ad esempio un automa a stati finiti.
Infatti puoi vedere un automa (a s.f.) come una funzione da LxS -> S, dove L e' l'alfabeto e S l'insieme degli stati.
Ora, i valori di input/output di una rete neurale sono in generale reali, ma e' immediato forzarli ai valori 0 e 1 (basta usare una funzione scalino come attivazione). Avere quindi N ingressi equivale ad avere un ingresso discreto di N bit. Si puo' mostrare che (con una rete sufficientemente grande) sono in grado di rappresentare ogni funzione da {0,1}^N a {0,1}^M, ed essendo sia L che S finiti, li posso rappresentare con un numero finito di bit (diciamo 'l' e 's') e quindi quando M=l+s e N=l posso rappresentare il mio automa.
Questo non vuol dire che sono in grado di addestrare la rete neurale per rappresentare un automa... quello e' tutto un altro paio di maniche.

/\/\@®¢Ø
10-04-2004, 00:33
Originariamente inviato da gpc
NO!
Torna a studiare i flip flop :nonsifa:

:D :asd:
Bella la sign, sono parenti tuoi ? :D

gpc
10-04-2004, 01:01
Originariamente inviato da /\/\@®¢Ø
Bella la sign, sono parenti tuoi ? :D

Sì, tutti amici :D

Piuttosto, grazie per le informazioni eh... ;)
Io avevo pensato già a quello che tu dici quando parli di una rete che prenda in ingresso gli output della rete neurale per modificare i pesi...
In effetti l'organizzazione del mio progetto era abbastanza "biologica": cioè l'idea era di avere dei neuroni "sensoriali", che formano una piccola rete tra di loro, un'altra piccola rete di neuroni "motori", e queste due collegate ad un'altra rete nascosta, cioè non accessibile direttamente dall'esterno, dove dovrebbero risiedere gli "istinti" del mio aggeggio.
Praticamente, è vero che i pesi verrebbero modificati in tutte le tre "sottoreti", ma nella rete centrale (inteso come posizione nello schema) risiederebbe il "critico", come viene chiamato, che comanda il tutto. Hmmm mi sa che non l'ho mica spiegata bene...
Facciamo un esempio: l'aggeggio deve muoversi (mi piace "l'aggeggio", credo che se lo costruisco lo chiamo così :D ). Dal suo cervellino scemo parte l'impulso che dice "se mi muovo sto bene", e questo arriva ai neuroni motori.
Questi neuroni motori sono ignoranti come dei sassi all'inizio, e suppongo che tutto inizierà a muoversi a casaccio, ricevendo da un al-momento-non-ben-identificato sensore una informazione sullo spostamento effettuato. Questa informazione va a finire sia ai neuroni motori, perchè capiscano quando hanno compiuto un movimento sensato, sia al cervelletto, che è contento quando l'aggeggio s'è mosso.
Dall'altra parte, ci sono le antenne.
Se muovendosi l'aggeggio sbatte, arriva il segnale del dolore ai neuroni sensoriali, che lo trasmettono al cervellino... hmmm... certo che se i sensori sono solo le due antenne non è che serva molto una rete neurale lì. Beh, diciamo che al principio la rete sarà molto "lineare" :D . Perchè poi se funziona mi piacerebbe aggiungerci un po' di sensi... ma andiamo per passi.
Ora, il segnale arriva al cervello, che sente "dolore", e inizialmente agirà un po' a caso inviando segnali alle zampe -che nel frattempo avranno imparato a camminare, sennò come ci andava a sbattere?-, finchè non imparerà che se indietreggia o gira il male sparisce, dopo di che l'istinto di muoversi temo realisticamente che lo porterà a sbattere di nuovo nello stesso punto :D ma insomma, staremo a vedere... ;)

Capito un po' di più il principio?

Ma per curiosità tu di che ti occupi visto che dici che non sei ingegnere però mi sembri ferrato in materia? ;)

misterx
10-04-2004, 14:06
Originariamente inviato da gpc

Ma per curiosità tu di che ti occupi visto che dici che non sei ingegnere però mi sembri ferrato in materia? ;)


Marco è speciale e va oltre l'ingegneria, lui appartiene ad una nuova categoria di PseudoStudentInsegnantiScienziati ancora in fase sperimentale ;)

:O hai visto che ci ho preso Gian Paolo C......???? ???:D:D:D:sofico:

gpc
10-04-2004, 14:46
Originariamente inviato da misterx
:O hai visto che ci ho preso Gian Paolo C......???? ???:D:D:D:sofico:

Ma doveeeee? Ma quandoooooo? :rolleyes: :D :D :D

/\/\@®¢Ø
11-04-2004, 22:42
Doh, pensavo di avere gia' risposto, ma evidentemente non e' cosi' :confused: :D

Originariamente inviato da gpc
Praticamente, è vero che i pesi verrebbero modificati in tutte le tre "sottoreti", ma nella rete centrale (inteso come posizione nello schema) risiederebbe il "critico", come viene chiamato, che comanda il tutto. Hmmm mi sa che non l'ho mica spiegata bene...

E' necessario operare su tutti i pesi perche' in realta' non sai come e' strutturata la "rete centrale", nel senso che non hai idea di quali neuroni andranno ad occuparsi di un determinato compito, potrebbe essere uno qualsias, o piu', o anche tutti. Per questo devi creare, con l'addestramento, i giusti legami tra tutte le componenti della rete.



Facciamo un esempio: l'aggeggio deve muoversi (mi piace "l'aggeggio", credo che se lo costruisco lo chiamo così :D ). Dal suo cervellino scemo parte l'impulso che dice "se mi muovo sto bene", e questo arriva ai neuroni motori.

Capito, pero' devi decidere un modo in cui implementare questo "sto bene". Ad esempio potresti decidere che sia l'uscita di un particolare neurone e dire "piu' alto e' il segnale e piu' sto bene". Di conseguenza l'apprendimento dovrebbe basarsi sulla massimizzazione di questa uscita. Attento pero' che lo "spostamento" non e' una variabile che tu controlli, tu controlli i neuroni che muovono i "nervi", quindi questa massimizzazione alla fine la devi fare sugli output dei neuroni (e di conseguenza sull'intera rete). Dare semplicemente in pasto lo spostamento alla rete avra' il solo risultato che la tua rete sparera' i pesi a palla per ottenere un "benessere fasullo". Una soluzione (non necessariamente la migliore) puo' essere quella di scrivere la funzione che si calcola lo spostamento come una rete neurale collegata piu' o meno nel seguente modo:
input --> strato nascosto -> output --> calcolatore di spostamento --> cervelletto.
i collegamenti tra output e cervelletto saranno fissi (perche' rappresentano la funzione di calcolo spostamento, quella e' e quella resta). Pero' cercando di massimizzare il risultato finale potrai calcolare le correzioni opportune ai pesi che stanno _prima_.
Spero di essermi spiegato.




Dall'altra parte, ci sono le antenne.
Se muovendosi l'aggeggio sbatte, arriva il segnale del dolore ai neuroni sensoriali, che lo trasmettono al cervellino... hmmm... certo che se i sensori sono solo le due antenne non è che serva molto una rete neurale lì. Beh, diciamo che al principio la rete sarà molto "lineare" :D . Perchè poi se funziona mi piacerebbe aggiungerci un po' di sensi... ma andiamo per passi.
Ora, il segnale arriva al cervello, che sente "dolore", e inizialmente agirà un po' a caso inviando segnali alle zampe -che nel frattempo avranno imparato a camminare, sennò come ci andava a sbattere?-, finchè non imparerà che se indietreggia o gira il male sparisce, dopo di che l'istinto di muoversi temo realisticamente che lo porterà a sbattere di nuovo nello stesso punto :D ma insomma, staremo a vedere... ;)

Allora secondo me potresti metterla cosi': il "dolore" non e' altro che uno dei tanti segnali che ti arrivano dal mondo esterno (in particolare da due neuroni il cui segnale e' tanto piu' forte tanto piu' intenso e' il dolore). Im robottino potrebbe (sottolineamo il condizionale :D) imparare inizialmente che se muove le zampe in un certo modo si sposta, ed e' quindi contento. Quando comincia a sbattere su una parete vedra' che non si muove piu' ma anche che riceve un certo stimolo (la "botta"). Quindi con un po' di fortuna (eufemismo per dire "se va bene" :D), il robottino potrebbe imparare che quel segnale vuol dire "inverti la rotta". Attento pero' che tu dovresti trovare un modo di gratificarlo se ad esempio lui non si sposta ma ruota per girarsi via dal muro.


Ma per curiosità tu di che ti occupi visto che dici che non sei ingegnere però mi sembri ferrato in materia? ;)
[/quote]
ehm... diciamo che in questo periodo mi occupo di cazzeggio, visto che sono in fase di cambiamento lavoro :D. In un paio di settimane dovrei sistemare la faccenda, speriamo solo si tratti di una cosa migliore della precedente. Mal che vada me ne vado a fare il cuoco all'estero :D.

/\/\@®¢Ø
11-04-2004, 22:44
Originariamente inviato da misterx
Marco è speciale e va oltre l'ingegneria, lui appartiene ad una nuova categoria di PseudoStudentInsegnantiScienziati ancora in fase sperimentale ;)

Una volta ci chiamavano matematici, non pensavo che la riforma universitaria fosse arrivata a tanto :D (o forse e' opera della Moratti?:confused: :D)

gpc
12-04-2004, 00:49
Originariamente inviato da /\/\@®¢Ø
Doh, pensavo di avere gia' risposto, ma evidentemente non e' cosi' :confused: :D


E' possibile anche che sia io che non recepisco :D


E' necessario operare su tutti i pesi perche' in realta' non sai come e' strutturata la "rete centrale", nel senso che non hai idea di quali neuroni andranno ad occuparsi di un determinato compito, potrebbe essere uno qualsias, o piu', o anche tutti. Per questo devi creare, con l'addestramento, i giusti legami tra tutte le componenti della rete.


Ecco, questa è una cosa interessante a cui in effetti non avevo pensato.
Come posso fare concretamente per fare in modo che ogni neurone assegni un peso diverso a parità di stimolo ricevuto?
Volevo fare un esempio ma al momento sono troppo stanco :D


Capito, pero' devi decidere un modo in cui implementare questo "sto bene". Ad esempio potresti decidere che sia l'uscita di un particolare neurone e dire "piu' alto e' il segnale e piu' sto bene". Di conseguenza l'apprendimento dovrebbe basarsi sulla massimizzazione di questa uscita.


Ok, questo è quello che pensavo di fare infatti.


Attento pero' che lo "spostamento" non e' una variabile che tu controlli, tu controlli i neuroni che muovono i "nervi", quindi questa massimizzazione
alla fine la devi fare sugli output dei neuroni (e di conseguenza sull'intera rete). Dare semplicemente in pasto lo spostamento alla rete avra' il solo risultato che la tua rete sparera' i pesi a palla per ottenere un "benessere fasullo". Una soluzione (non necessariamente la migliore) puo' essere quella di scrivere la funzione che si calcola lo spostamento come una rete neurale collegata piu' o meno nel seguente modo:
input --> strato nascosto -> output --> calcolatore di spostamento --> cervelletto.
i collegamenti tra output e cervelletto saranno fissi (perche' rappresentano la funzione di calcolo spostamento, quella e' e quella resta). Pero' cercando di massimizzare il risultato finale potrai calcolare le correzioni opportune ai pesi che stanno _prima_.
Spero di essermi spiegato.


E' meglio che me la riguardi domani mattina :p ma credo di aver capito.
Io pensavo infatti a questo proposito che i neuroni che danno l'impulso di muoversi devono ricevere in ingresso gli stimoli delle antenne, del sensore che determinerà il movimento e anche un "feedback" dai neuroni motori, che in un qualche modo indichino il movimento fatto.

Se non sto capendo male, io devo trattare ogni azione da eseguire come il risultato di un segnale su un singolo collegamentro tra neuroni. Di conseguenza, più collegamenti, più azioni possibili.
Se io ho un neurone motore dotato di 4 ingressi, avrò che ad un segnale su un certo ingresso moltiplicato per il suo peso corrisponderà un'azione, per esempio di muovere una zampa verso l'alto. Su l'altro ingresso, verso il basso, tanto per dire.
Quando il valore dell'ingresso supera una soglia, allora l'azione viene eseguita. Se l'azione porta a successo, il peso assegnato viene aumentato, altrimenti diminuito.
E' così?



Allora secondo me potresti metterla cosi': il "dolore" non e' altro che uno dei tanti segnali che ti arrivano dal mondo esterno (in particolare da due neuroni il cui segnale e' tanto piu' forte tanto piu' intenso e' il dolore). Im robottino potrebbe (sottolineamo il condizionale :D) imparare inizialmente che se muove le zampe in un certo modo si sposta, ed e' quindi contento. Quando comincia a sbattere su una parete vedra' che non si muove piu' ma anche che riceve un certo stimolo (la "botta"). Quindi con un po' di fortuna (eufemismo per dire "se va bene" :D), il robottino potrebbe imparare che quel segnale vuol dire "inverti la rotta". Attento pero' che tu dovresti trovare un modo di gratificarlo se ad esempio lui non si sposta ma ruota per girarsi via dal muro.


Direi che hai sintetizzato le mie sperande :D
Pensa che ieri in un attacco di follia stavo già pensando a come implementargli in sonno e la fame :asd:
La gratificazione dovrebbe essere automatica, comunque tornando a noi, nel momento in cui le antenne non sbattono più contro il muro.

Ma sto pensando a quello che ho scritto prima: devo quindi pensare ad un collegamento per ogni azione possibile che deve fare??


ehm... diciamo che in questo periodo mi occupo di cazzeggio, visto che sono in fase di cambiamento lavoro :D. In un paio di settimane dovrei sistemare la faccenda, speriamo solo si tratti di una cosa migliore della precedente. Mal che vada me ne vado a fare il cuoco all'estero :D.

Sì ma sei davvero matematico?
No perchè nel caso mi lascieresti a bocca aperta...

gpc
12-04-2004, 00:50
Comunque, oggi non ho avuto tempo di buttar giù niente... spero domani di riuscire a iniziare a fare uno schemino.
Però nel frattempo ho fatto l'ordine di sample alla microchip, visto che c'erano anche altre cose che mi servivano, e ho ordinato un po' di PIC di vari tipi con ingressi con convertitori A/D e controllori PWM...

/\/\@®¢Ø
12-04-2004, 02:42
Originariamente inviato da gpc
E' possibile anche che sia io che non recepisco :D

No, non era una frecciatina a te, non preoccuparti :D
Intendevo proprio dire che pensavo di avere risposto un'altra volta, ma non il messaggio non compare nel thread :confused:

/\/\@®¢Ø
14-04-2004, 10:50
Sì ma sei davvero matematico?
No perchè nel caso mi lascieresti a bocca aperta...

Beh, ma non ci sono solo i matematici-matematici.
Ci sono pure i matematici-analisti, i matematici-geometri, i fisico-matematici, i numerici...
io ad esempio sono un matematico-informatico :D
Oltretutto a PD la facolta' di Scienze MM.FF.NN. non aveva la laurea in Informatica (c'e' ad ingegneria, ma e' un'altra cosa) e quindi l'indirizzo informatico da noi aveva un certo peso.

Tornando IT, avevi in mente qualcosa del genere ? :D



http://www.dottocomu.com/b/archives/images/banryuhrsq11.gif


http://pc.watch.impress.co.jp/docs/2004/0405/sanyo_5.gif

http://www.dottocomu.com/b/archives/001250.html
http://pc.watch.impress.co.jp/docs/2004/0405/sanyo.htm

gpc
14-04-2004, 11:34
Circa, però esteticamente molto più bello visto che quelli sembrano giocattoli made in china :D

non ho ancora avuto tempo per buttar giù uno schemino :muro:

khri81
14-04-2004, 12:08
scusate se mi intrometto, ma una curiosità ma dove trovi le reti neuronali? cos'è le vendono di già?

gpc
14-04-2004, 12:11
Originariamente inviato da khri81
scusate se mi intrometto, ma una curiosità ma dove trovi le reti neuronali? cos'è le vendono di già?

Ho visto che ci sono degli integrati che le implementano già, ma non ho idea concretamente che cosa siano. Se sono solo unità elementari oppure cose più complesse...
Da quel che mi hanno spiegato la via "hardware" è stata parecchio abbandonata, e si predilige la via "software" (scelta che non condivido per nulla).

gpc
14-04-2004, 12:13
Marco, una cosa a cui non mi hai risposto ma che mi interessa molto: praticamente devo avere un collegamento tra neuroni per ogni azione che voglio fare? Cioè, se mi arriva un impulso sul collegamento 1 muovo una gamba a destra, se mi arriva un impulso sul collegamento 2 la muovo a sinistra, e sistemo i pesi per capire quando devo farlo e quando no? E' così?

/\/\@®¢Ø
15-04-2004, 02:04
Originariamente inviato da gpc
Da quel che mi hanno spiegato la via "hardware" è stata parecchio abbandonata, e si predilige la via "software" (scelta che non condivido per nulla).
Ne parlo da profano, ma penso che il problema sia che se si vuole fare una cosa evoluta (ad esempio percezione con telecamera) si devono usare anche tecniche, e allora integrare tutto in software diventa molto piu' semplice e pratico (ed economico, con un singolo chip e un po' di porcheria di corredo fai tutto).

Comunque se ti impegni sarai in grado di partecipare a questa :p :sofico:
http://www.darpa.mil/grandchallenge/

dai una occhiata ai filmati ;)

/\/\@®¢Ø
15-04-2004, 02:23
Originariamente inviato da gpc
Marco, una cosa a cui non mi hai risposto ma che mi interessa molto: praticamente devo avere un collegamento tra neuroni per ogni azione che voglio fare? Cioè, se mi arriva un impulso sul collegamento 1 muovo una gamba a destra, se mi arriva un impulso sul collegamento 2 la muovo a sinistra, e sistemo i pesi per capire quando devo farlo e quando no? E' così?
Si', e' una possibile soluzione (non garantisco che sia la migliore, anzi :p), visto che dicevi che vuoi fare imparare "tutto" al robottino.
Piu' in dettaglio: una cosa che riesce bene con le reti neurali e' quella di "imparare" un output binario. Ad esempio se devo scegliere tra quattro alternative e' piu' semplice utilizzare quattro neuroni di uscita in modo binario (scegliendo l'azione relativa al segnale piu' forte ad esempio) che non cercando di associare quattro segnali diversi all'uscita dello stesso neurone, da qui il mio suggerimento. Poi sta a te scegliere le alternative opportune, sia a livello di "complessita'" (da un semplice "alza la zampetta" ad un piu' complesso "spostati indietro"), che a livello di implementazione vera e propria. Se hai deciso un modello discreto per la rete (a proposito... hai deciso ?:confused: :D) sara' un "alza la zampetta di tot", se invece e' un modello continuo potrebbe essere "finche' c'e' il segnale muovi quel componente".

gpc
15-04-2004, 11:00
Originariamente inviato da /\/\@®¢Ø
Ne parlo da profano, ma penso che il problema sia che se si vuole fare una cosa evoluta (ad esempio percezione con telecamera) si devono usare anche tecniche, e allora integrare tutto in software diventa molto piu' semplice e pratico (ed economico, con un singolo chip e un po' di porcheria di corredo fai tutto).


Ti spiego il perchè non la condivido, è un discorso più ampio...
Quello che noto in tutti gli ambiti è che c'è un aumento della complessità al quale non segue purtroppo un aumento dell'affidabilità. Il mio AppleIIE funziona ancora dopo 25 anni mentre gli ultimi quattro PC li ho cambiati perchè si rompevano e non perchè erano vecchi.
Un vantaggio fondamentale delle reti neurali è che sono in grado di sostenere guasti alle singole unità senza perdere le loro funzionalità in maniera sostanziale, proprio perchè si adattano, e da questo punto di vista le vedo come una soluzione per parecchie applicazioni dove è richiesta una affidabilità totale ma non particolari risorse di calcolo (per le quali si può comunque operare con la ridondanza).
E' da tempo tra l'altro che penso ad un sistema hardware riprogrammabile formato da sole unità elementari che possono essere sfruttate in varie configurazioni per risolvere guasti o implementare nuove funzioni... ma questo poi è un altro discorso.

Insomma, fatto sta che implementando reti neurali su PC perdi un buon 50% dei lati positivi. Certo, implementarle via hardware è più difficile, ma da quello che mi dicevano la ricerca per creare neuroni hardware si è praticamente fermata per mancanza di interesse.


Comunque se ti impegni sarai in grado di partecipare a questa :p :sofico:
http://www.darpa.mil/grandchallenge/

dai una occhiata ai filmati ;)

Dopo guardo ;)

gpc
15-04-2004, 11:08
Originariamente inviato da /\/\@®¢Ø
Si', e' una possibile soluzione (non garantisco che sia la migliore, anzi :p), visto che dicevi che vuoi fare imparare "tutto" al robottino.
Piu' in dettaglio: una cosa che riesce bene con le reti neurali e' quella di "imparare" un output binario. Ad esempio se devo scegliere tra quattro alternative e' piu' semplice utilizzare quattro neuroni di uscita in modo binario (scegliendo l'azione relativa al segnale piu' forte ad esempio) che non cercando di associare quattro segnali diversi all'uscita dello stesso neurone, da qui il mio suggerimento. Poi sta a te scegliere le alternative opportune, sia a livello di "complessita'" (da un semplice "alza la zampetta" ad un piu' complesso "spostati indietro"), che a livello di implementazione vera e propria.


Esatto, era quello che pensavo io.
Praticamente finchè ho pochi collegamenti conviene avere un funzionamento azione-nodo, mentre quando le cose si fanno più complesse e avresti matasse di piste da sbrogliare un azione-segnale diventa più conveniente anche se più difficile da implementare, da quel che capisco io.

Il fatto di implementare i movimenti era una cosa che mi ero già chiesta.
Perchè ho varie strade: praticamente considerare il controllore del motore come un semplice muscolo, per cui riceverebbe un segnale PWM (e in questo caso l'azione verrebbe trasmessa dal segnale e non dal collegamento, per il discorso che si faceva prima) e quindi l'assegnazione dei pesi (il duty cycle) sarebbe delegata a chi invia l'impulso, oppure implementare delle semplici funzioni come "muovi a destra" "muovi a sinistra" tanto per dire che verrebbero attivate da vari impulsi su collegamenti diversi (ma qui si renderebbe necessario un feedback aggiuntivo dal motore al cervello perchè un passo singolo sarebbe il risultato di diverse operazioni elementari, per cui io dovrei eseguire una serie di operazioni come 1) muovo la gamba 2) ho finito di muovere 3) muovi ancora l'altra gamba ... etc fino a creare un percorso neurale che renda efficace il movimento), oppure ancora, strada più semplice, implementare già un movimento coordinato delle zampe e farglielo eseguire tutto in una volta (ma perderei buona parte del divertimento :D ).


Se hai deciso un modello discreto per la rete (a proposito... hai deciso ?:confused: :D)


Devo essere sincero... sto aspettando il corso di Automazione Industrale di domani che è pallosissimo per fare qualcosa mentre il tipo spiega... :D :D :asd:


sara' un "alza la zampetta di tot", se invece e' un modello continuo potrebbe essere "finche' c'e' il segnale muovi quel componente".

Allora, se intendi questo tipo di modello credo che sceglierò il modello discreto... o comunque una cosa mista.
Per il movimento mi pare più efficace un modello discreto, per i sensori di "sbattimento" :D uno continuo mi sembra più logico...

gpc
15-04-2004, 21:13
Originariamente inviato da /\/\@®¢Ø
Comunque se ti impegni sarai in grado di partecipare a questa :p :sofico:
http://www.darpa.mil/grandchallenge/


Marco, non mi apre l'indirizzo... sei sicuro che sia corretto? :confused:

/\/\@®¢Ø
15-04-2004, 21:39
Originariamente inviato da gpc
Marco, non mi apre l'indirizzo... sei sicuro che sia corretto? :confused:
A me funziona :confused:

TheGuren
15-04-2004, 21:54
..occhio che da mia esperienza (modesta) per lavorare in real time una rete deve essere il + possibile semplice.
Ricordati inoltre che le reti neurali sono dei sistemi cosiddetti "a scatola nera" ovvero gli dai un ingresso e un uscita desiderata come "training Set" sulle quali si "addestrano" a modellizzare per tentativi (epoche) il sistema che dall'ingresso fornisce l'uscita così che quando in ingresso si ha un certo comportamento la rete neurale simula il sistema e fornisce un determinato comportamento in uscita. Quello che fa la rete è andare a creare , secondo un sistema lineare o non lineare (a seconda delle funzioni di traferimento usate per ogni strato di neuroni che possono essere sigmoidi tangenziali o logaritmiche oppure semplici trasformazioni lineari) un modello del sistema che minimizzi l'errore per tentativi. Questo metodo è detto "fitting" da cui over-fitting quando un set di addestramento è troppo poco variabile (copre poche casistiche) oppure quando le epoche di addestramento sono troppe e quindi la rete tende ad adattare l'ingresso all'uscita senza effettivamente "capire" come fare la cosa...ci si accorge di eventuali over-fitting utilizzando in ingresso un cosiddetto "rumore bianco" (segnale casuale a media nulla) se la rete è in over-fitting si dovrebbe avere in uscita dei segnali utili (cosa impossibile visto che in ingresso hai dato un "rumore").

Comunque per quello che ne so io...(non prendere come oro colato quello che scrivo...prenditi una bella guida sulle Reti Neurali)...ti conviene procurarti Matlab R13 con il Neural Network Toolbox...ti assicuro che è semplice e ottimo per capire le reti e il loro funzionamento.

Se poi scopri qualcosa di interessante passamelo anche a me...^_^

Ciau!

gpc
16-04-2004, 00:15
Originariamente inviato da /\/\@®¢Ø
A me funziona :confused:

A me invece continua a dare Cannot Find Server... :wtf:

X TheGuren:
Quella che dici tu è un tipo di rete neurale da addestrare, invece quella che ho intenzione di fare io è una senza addestramento. Sono proprio due tipologie diverse e vengono impiegate in ambiti diversi... Praticamente in questa seconda tipologia c'è un "critico", così viene chiamato, che stabilisce autonomamente se l'obiettivo è stato più o meno raggiunto e di conseguenza regola i pesi dei vari collegamenti.
Buono il suggerimento del matlab, credo che ci darò un'occhiata anche se simulazioni al computer ne ho già viste e sinceramente non mi dicono molto... anche perchè volevo stare il più lontano possibile dai simulatori :D

khri81
16-04-2004, 00:28
scusate l'ignoranza, ma sono neuroni biologici??? oppure sono artificiali? e se sono artificiali, come vengono implementati???? sta cosa mi incuriosisce parecchio!!!

gpc
16-04-2004, 01:41
Originariamente inviato da khri81
scusate l'ignoranza, ma sono neuroni biologici??? oppure sono artificiali? e se sono artificiali, come vengono implementati???? sta cosa mi incuriosisce parecchio!!!

Beh i neuroni sono chiaramente artificiali, non è che sto costruendo Frankestein :D
Un po' come vengono implementati è stato spiegato nel thread... però non sono la persona più opportuna per spiegartelo perchè non l'ho capito bene nemmeno io :muro: :D
Cerca della documentazione in rete, si trova moltissimo. O dei libri, ancora meglio...

ChristinaAemiliana
16-04-2004, 01:47
Originariamente inviato da gpc
A me invece continua a dare Cannot Find Server... :wtf:



Non sapevo come aiutarti e così ti ho controllato il link: non funziona nemmeno a me!!! :sofico:

/\/\@®¢Ø
16-04-2004, 02:29
Originariamente inviato da ChristinaAemiliana
Non sapevo come aiutarti e così ti ho controllato il link: non funziona nemmeno a me!!! :sofico:
:confused:
Provato anche con un altro browser (niente cache quindi) e va... prova a passare per l'home page del DARPA (non e' che sia un sitino qualunque tra l'altro :D), il link al "grand challenge" lo trovi li'...

ChristinaAemiliana
16-04-2004, 02:46
Originariamente inviato da /\/\@®¢Ø
:confused:
Provato anche con un altro browser (niente cache quindi) e va... prova a passare per l'home page del DARPA (non e' che sia un sitino qualunque tra l'altro :D), il link al "grand challenge" lo trovi li'...


Ho provato anche così...è tutto il sito che non va...:boh:

E non mi funziona nemmeno il sito dell'NRL...:confused:

gpc
16-04-2004, 10:22
Siamo tagliati fuori Chri!!! :muro: :cry:


...o forse abbiamo appena scoperto che Marco non è un utente come tutti gli altri... lui ha accesso a server che per il mondo non esistono... :O :D

Oggi è il gran giorno, tre ore di inutile lezione in cui spero di aver tempo per buttar giù uno schemino! :sofico:

ChristinaAemiliana
16-04-2004, 11:05
Originariamente inviato da gpc
Siamo tagliati fuori Chri!!! :muro: :cry:




Saranno stati gli ambientalisti? :eek: :D

/\/\@®¢Ø
16-04-2004, 13:18
Originariamente inviato da gpc
Siamo tagliati fuori Chri!!! :muro: :cry:


...o forse abbiamo appena scoperto che Marco non è un utente come tutti gli altri... lui ha accesso a server che per il mondo non esistono... :O :D

Oggi è il gran giorno, tre ore di inutile lezione in cui spero di aver tempo per buttar giù uno schemino! :sofico:

Prova a pernderlo da qua... sono sicuro che almeno questo sito funziona :sofico: :D

http://marcorighele.dyndns.org/videos/grandchallenge-high.wmv

gpc
16-04-2004, 13:22
Originariamente inviato da /\/\@®¢Ø
Prova a pernderlo da qua... sono sicuro che almeno questo sito funziona :sofico: :D

http://marcorighele.dyndns.org/videos/grandchallenge-high.wmv

Mi va a 5Kb/sec :muro:
Era meglio quello che non funzionava :D

/\/\@®¢Ø
16-04-2004, 14:59
devi dividere la banda in upload con emule, porta pazienza :D
Se vuoi abbasso un po' il rate in up, cosi' magari scarichi a 15-20.

gpc
16-04-2004, 18:58
Originariamente inviato da /\/\@®¢Ø
devi dividere la banda in upload con emule, porta pazienza :D
Se vuoi abbasso un po' il rate in up, cosi' magari scarichi a 15-20.

Ooohhh fenomenale, adesso va ad 8... :D :muro: :p

Allora, oggi nella produttiva lezione ho pensato ad un po' di cose...
Dunque, un primo problema che non so come risolvere è questo: per ogni neurone io avrò una matrice di n righe (dove n sono gli ingressi) per m colonne (dove m sono le uscite) contente i pesi.
Quando arriva un impulso nel 2 ingresso, per esempio, vengono inviati impulsi nelle uscite secondo i pesi della seconda riga. E' così?
Se sì, un controllore analizzarà il risultato dell'operazione tramite un segnale di feedback, che gli farà capire se l'azione ha avuto successo o meno.
Ora, i problemi sono 2: primo, come faccio a cambiare i valori dei singoli pesi? Perchè ad esempio per il movimento, io ho un solo segnale di feedback che mi dice se mi sono mosso o meno, e su che base per esempio aumenterò il quarto peso e abbasserò gli altri?
Secondo problema: su che neurone agirà questo feedback? Quando ho, tanto per dire, tre livelli di neuroni, quale di questi dovrà essere influenzato?
Anche perchè, per il ragionamento che ho fatto io, dovrei avere un feedback per ogni uscita del neurone. Ma visto che solo gli ultimi neuroni sono materialmente collegati a qualcosa che genera il feedback, per gli altri su che base genero questo segnale?

In ogni caso mi sono fatto uno schemino, ma anche qui ho dei dubbi.
Praticamente ho pensato di utilizzare un integrato per ricevere i segnali dai vari sensori e trasformarli in digitale, e quindi in questo blocco avrò semplicemente un neurone per ingresso e amen. Fin qui tutto ok.
Questi neuroni sono collegati ad un altro integrato, il cervello vero e proprio, e qui iniziano i casini. Avrò, mettiamo, quattro ingressi dal blocco precedente e qualche ingresso per i vari feedback. Cosa faccio? Creo un unico neuronazzo che prende tutto? E poi? Oppure creo tre o quattro neuroni e li interconnetto tra di loro?
Perchè poi volevo comunque crearne altri all'interno di questo secondo integrato che comunicavano con l'esterno e inviavano i segnali al terzo ed ultimo integrato che conteneva i neuroni che comandavano i motori.
Ma quello che non capisco è come collegare il tutto. Perchè temo sempre di cadere nell'errore di progettare il circuito a priori stabilendo già come deve funzionare, togliendo quindi in principio il compito della rete neurale.
Non so se hai capito i miei dubbi...

Poi l'implementazione dei singoli neuroni inizio a vederla e non mi pare molto complessa, ma quello viene comunque dopo.

Ah c'è un'altra cosa che mi preoccupa.
Il movimento non è il risultato di una singola azione, ma di più azioni coordinate. Da quel che ho capito io la rete funziona in maniera istantanea: azione --> reazione.
Come posso fare a progettarla in maniera tale che, per esempio, muova prima una gamba, poi l'altra, e via così? Perchè il feedback come l'ho pensato io dovrebbe essere generale, e basarsi solo sul risultato e non sulle singole azioni.
Se volessi farlo sulle singole azioni dovrei già stabilire a priori quali sono le azioni da compiere, e quindi cambiare un po' l'idea da cui ero partito di apprendimento "totale". Cioè praticamente dovrei creare due azioni base, come muovi la zampa indietro e muovila avanti, e aggiustare semplicemente i pesi in maniera tale che se vuole muoverla avanti e invece va indietro gli vengono calati e viceversa. No?

Inizia ad essere complicata la faccenda :D

/\/\@®¢Ø
16-04-2004, 22:48
Originariamente inviato da gpc
Ooohhh fenomenale, adesso va ad 8... :D :muro: :p

:mbe: io non ho ancora toccato niente .... :D.
Ho ridotto la biada per il mulo proprio ora, riprova, sarai piu' fortunato :D.


Allora, oggi nella produttiva lezione ho pensato ad un po' di cose...
Dunque, un primo problema che non so come risolvere è questo: per ogni neurone io avrò una matrice di n righe (dove n sono gli ingressi) per m colonne (dove m sono le uscite) contente i pesi.

Quasi. In realta' di solito ad ogni neurone si associa solamente un vettore di pesi, quelli relativi alle connessioni di ingresso. D'altra parte ogni uscita e' a sua volta l'ingresso di un altro neurone e quindi un valore al peso glielo si puo' dare.


Quando arriva un impulso nel 2 ingresso, per esempio, vengono inviati impulsi nelle uscite secondo i pesi della seconda riga. E' così?
.
Si' e no, nel senso che se lavori al "rovescio" di quello che si fa di solito potrebbe pure funzionare cosi'. Forse e' piu' semplice se pensi ad un peso associato alla connessione tra un neurone ed un altro (un arco del grafo della rete) che non ad uno dei due neuroni. Nel modo tradizionale i neuroni di ingresso sono "passivi" nel senso che in realta' non elaborano niente ma passano il segnale allo strato successivo.
Se ti limiti ad una topologia "classica" multistrato, ovvero puoi suddividere i neuroni in strati connessi (solamente) tra di loro, avrai una matrice W con W(i,j) che indica il peso tra l'i-esimo neurone di uno strato precedente (o i valori di ingresso) e il j-esimo neurone dello strato successivo.
Esempio stupido da manuale :D : Hai una rete con la seguente topologia
http://marcorighele.dyndns.org/images/hwupgrade/network.png
I neuroni ai sono in realta' i segnali di ingresso. Avrai tre matrici U,V,W di pesi tra gli strati ai,bi,ci,di, di dimensione rispettivamente 3x5, 5x2, 2x2. All'output di alcuni dei neuroni (tipicamente quelli dell'ultima fila) assocerai l'azione da compiere


Se sì, un controllore analizzarà il risultato dell'operazione tramite un segnale di feedback, che gli farà capire se l'azione ha avuto successo o meno.
Ora, i problemi sono 2: primo, come faccio a cambiare i valori dei singoli pesi? Perchè ad esempio per il movimento, io ho un solo segnale di feedback che mi dice se mi sono mosso o meno, e su che base per esempio aumenterò il quarto peso e abbasserò gli altri?

Beh, qua sta tutta la difficolta' delle reti neurali :D.


Secondo problema: su che neurone agirà questo feedback? Quando ho, tanto per dire, tre livelli di neuroni, quale di questi dovrà essere influenzato?

In generale tutti... distribuirai le correzioni tra tutti i pesi che contribuiscono ad un cert output.

Anche perchè, per il ragionamento che ho fatto io, dovrei avere un feedback per ogni uscita del neurone. Ma visto che solo gli ultimi neuroni sono materialmente collegati a qualcosa che genera il feedback, per gli altri su che base genero questo segnale?

Allora, se il feedback lo implementi come una sorta di errore da correggere (ad esempio cercare d iaumentare la soddisfazione), implementando una sorta di apprendimento supervisionato, puoi fare cosi': ad ogni neurone di uscita per il quale hai un valore che vorresti fargli ottenere puoi associare un errore. Questo errore sara' dovuto ai contributi dei neuroni che gli mandano segnali, in misura dipendende dalla funzione di attivazione utilizzata e dai pesi che li collegano. Lo stesso neurone puo' portare contributi a diverse uscite e quindiu l'errore si sommera' (algebricamente).
LA correzione da apportare dipende nel concreto dall'algoritmo. In generale non vogliamo eliminare del tutto l'errore visto che non ci interessa risolvere il caso specifico ma sistemare la rete in modo che "vada bene". Le possibilita' sono diverse, una classica con cui iniziare puo' essere quella di cercare di ridurre l'errore scendendo lungo il suo gradiente. Su un buon manuale troverai le formule relative. Non e' certo l'unica alternativa, ma almeno e' ben conosciuta, e piu' "testata" di altre.


In ogni caso mi sono fatto uno schemino, ma anche qui ho dei dubbi.
Praticamente ho pensato di utilizzare un integrato per ricevere i segnali dai vari sensori e trasformarli in digitale, e quindi in questo blocco avrò semplicemente un neurone per ingresso e amen. Fin qui tutto ok.
Questi neuroni sono collegati ad un altro integrato, il cervello vero e proprio, e qui iniziano i casini. Avrò, mettiamo, quattro ingressi dal blocco precedente e qualche ingresso per i vari feedback. Cosa faccio? Creo un unico neuronazzo che prende tutto? E poi? Oppure creo tre o quattro neuroni e li interconnetto tra di loro?
Perchè poi volevo comunque crearne altri all'interno di questo secondo integrato che comunicavano con l'esterno e inviavano i segnali al terzo ed ultimo integrato che conteneva i neuroni che comandavano i motori.

Se tu l'ingegnere, per me e' arabo :D

Ma quello che non capisco è come collegare il tutto. Perchè temo sempre di cadere nell'errore di progettare il circuito a priori stabilendo già come deve funzionare, togliendo quindi in principio il compito della rete neurale.
Non so se hai capito i miei dubbi...

Attento pero' a non farla troppo generale... se ad esempio fai si che capisca che si e' mossa, difficilmente riuscirai a farle fare qualcosa di piu' evoluto... la dimensione della rete dovra' crescere, questa sara' in grado di rappresentare dinamiche sempre piu' complesse e caotiche, e probabilmente comincera' a perdersi nei dettagli.


Ah c'è un'altra cosa che mi preoccupa.
Il movimento non è il risultato di una singola azione, ma di più azioni coordinate. Da quel che ho capito io la rete funziona in maniera istantanea: azione --> reazione.
Come posso fare a progettarla in maniera tale che, per esempio, muova prima una gamba, poi l'altra, e via così? Perchè il feedback come l'ho pensato io dovrebbe essere generale, e basarsi solo sul risultato e non sulle singole azioni.

Colleghi le uscite agli ingressi, sincronizzando il segnale con quello che arriva dall'esterno. In tal modo una azione in un'istante influenzera' quelle dell'istante successibo. Dovrai tenerne conto anche in fase di correzione dei pesi (un peso avra' influenza anche nel "futuro"). Questo complica un po' le cose, ma dal punto di vista logico si tratta di una estensione di quanto visto sopra.