22 febbraio 2008
Le reti di Jordan, queste sconosciute
Aspettando che le varie simulazioni che ho lanciato terminino la loro esecuzione e mi restituiscano i tanto agognati risultati, mi sono messo a studiacchiare un pochino. Il motivo è presto detto. Mi piacerebbe vedere come si comporterebbero i miei aeroplanini nel caso in cui fossero dotati di memoria. In sostanza, nel caso in cui la loro rete neurale non ricevesse in input soltanto la percezione corrente, ma anche qualcosa relativo al passato (uno o più stati precedenti). Il che, a mio avviso, li aiuterebbe non tanto nel compito di navigazione (la capacità di obstacle-avoidance che sviluppano, anche se migliorabile, mi sembra al momento più che sufficiente), quanto piuttosto nel raggiungere in maniera maggiormente efficace un target in fuga. E’ vero anche che il target che sto usando non ha una direzione di marcia precisa ed in ogni time step può muoversi in una qualsiasi posizione a lui adiacente, ma magari qualche informazione (perlomeno relativa al fatto che il target si stia muovendo) può rivelarsi utile ai MAVs.
Non me ne voglia il buon Hopfield, ma in genere, quando si intende aggiungere memoria ad una rete neurale, il primo pensiero lo si rivolge doverosamente a Jeffrey L. Elman, l’inventore dell’omonima architettura di rete. Un ottimo esempio, chiaro e conciso, di cosa sia una rete di Elman lo si può trovare a questo link, dal quale è tratta anche la figura che segue.

L’idea di fondo, per farla molto semplice, è quella di prendere il pattern di attivazione delle unità intermedie della rete in un certo momento (ipotizziamo una rete feed-forward con un solo hidden layer, come quella che utilizzo per i miei aeroplanini) e reintrodurlo quindi in input al time-step seguente. Per fare ciò, come si vede nella figura di cui sopra, occorre replicare l’hidden layer, creando un cluster aggiuntivo contenente un ugual numero di neuroni, e quindi connettero (in modalità fully-connected) allo strato intermedio “vero”. Talvolta, a questa sorta di registro viene anche aggiunta una ricorrenza: i neuroni del registro vengono cioè collegati a loro stessi.
Ho voluto provare a giocarci un po’. Ed ho approfittato del mio eee PC, sul quale ho caricato tLearn, storico (intendo proprio per via dell’età) software per giochicchiare con le reti neurali. Accanto a lui, il capitolo 8 di Exercises in Rethinking Innateness ed una matita per scarabocchiarlo.
Nel giro di cinque minuti scarsi, di fronte a me vi erà già una rete di Elman addestrata e perfettamente in grado di prevedere il carattere successivo di una sequenza (ovviamente standard) di lettere ricevute in input. Rete che, per inciso, non è quella mostrata nella figura qui sopra, riguardante invece un’implementazione dell’AND logico.
Detto tutto ciò, consultando la parte del mio manuale sulle reti neurali (il sempre ottimo Floreano-Mattiussi) dedicata alle reti con memoria dinamica, ho scoperto l’esistenza di una topologia di rete che assolutamente ignoravo. Trattasi della cosidetta “Rete di Jordan”. La quale dovrebbe consentire di raggiungere prestazioni del tutto analoghe a quelle ottenibili attraverso una rete di Elman, risparmiando però un sacco di neuroni. Da quello che sono riuscito a capire, infatti, invece che replicare il pattern dello strato intermedio, in questa topologia si fa la stessa cosa con quello di output. Il che, nel contesto di una rete come la mia, consentirebbe una drastica economizzazione. Peccato soltanto che queste reti di Jordan non sembrino proprio essere così largamente utilizzate. L’unico posto che sono riuscito a trovare dove se ne parla in maniera un minimo dettagliata è nei meandri della manualistica di SSNS (alias, lo Stuttgart Neural Network Simulator). Dello pseudo-paper nel quale sono state introdotte per la prima volta, su Internet pare non ce ne sia traccia (a meno che qualcuno non lo riesca a trovare: M. I. Jordan. Serial order: A parallel distributed processing approach. Technical Report Nr. 8604, Institute for Cognitive Science, University of California, San Diego, La Jolla, California, 1986.). Prima che mi appelli all’equivalente anglosassone di Chi l’ha visto? c’è per caso qualcuno di voi in grado di darmi una qualche dritta?
Comments(3)


In generale, le reti di Elman e di Jordan sono identiche… e difatti spesso le ho trovate citate come reta alla Elman-Jordan (o viceversa Jordan-Elman).
Il succo è sempre quello, creare uno ricorrenza “copiando” le attivazioni di uno strato neurale (sia esso hidden o output) su uno strato “context” in input.
E’ un caso speciale di reti ricorrenti… in particolare, sono reti ricorrenti dove è applicabile la back-propagation perché tramite il “context” esplicità la temporalità della ricorrenza.
Preferisco di gran lunga una bella e semplice ricorrenza. Tanto se usi algoritmi genetici… allora un semplice loop sullo strato di hidden e’ identico ad avere una rete di elman…. però è più fico (almeno per me) disegnare un piccolo loop sullo strato di hidden invece di tirare in ballo il “contesto”
Stavo rispondendo una cosa simile. Uso spesso reti ricorrenti, alla fine addestrate con algoritmi evolutivi – così non ho bisogno di discese del gradiente. Tanto le NNFW permettono di crearle facilmente.
Grazie cari!
Quindi mi confermate che nel mio caso sarebbe sufficiente aggiungere una ricorrenza all’hidden layer? Ovviamente del tipo “tutti con tutti”?