Soluzioni informatiche per l'impresa

NNS

1999-2000
CHIUSO
Questa pagina riguarda un progetto terminato e non più supportato od un articolo non più aggiornato.

Nel caso degli articoli di approfondimento, le informazioni riportate, mantenute per integrità e riferimento storico, potrebbero risultare non più accurate.

NNS è una libreria composta da una gerarchia di classi atte a simulare reti di Hopfield e reti neurali multilayer feedforward. È completamente realizzata in C++ standard e si basa in modo sostanziale sulla STL.

La libreria contiene nove classi i cui rapporti sono evidenziati nel seguente diagramma:

Organizzazione classi

L’utente utilizza solo quattro di queste classi:

pattern
per gestire l’Input/Output di tutte le reti neurali;
hopfield_net
per simulare reti di Hopfield;
multilayer_net
per simulare reti multilayer feedforward;
perceptron_net
per simulare il Perceptron.

Caratteristiche

PATTERN

Rappresenta sequenze di valori binari o bipolari (a seconda del contesto) di lunghezza arbitraria, ma costante, ed è realizzato in modo da minimizzare l’occupazione di spazio (ogni valore viene codificato mediante un unico bit). I costruttori dell’oggetto ne permettono l’inizializzazione a partire da molti altri tipi di dato, in particolar modo:

tipi elementari
unsigned e unsigned long;
vettori di oggetti bool, stringhe di caratteri, vettori di tipo valarray.

Inoltre è possibile l’inizializzazione mediante la sola dimensione del pattern. Gli altri metodi della classe servono per l’accesso e la manipolazione dei singoli valori (operator[], polarity, set), la conversione di tipo, l’effettuazione di modifiche globali (flip, corrupt) ed il calcolo di statistiche (size, average_hamming_distance).

HOPFIELD_NET

Permette di simulare una rete di Hopfield. Lo stato della rete è memorizzato in un array contenente una sola metà della matrice dei pesi (diagonale esclusa); altro spazio è riservato per registrare il numero di ricordi che si è tentato di inserire nella rete ed, eventualmente, nel caso se ne faccia uso, per la memorizzazione delle soglie dei neuroni. In definitiva per la descrizione di una rete di Hopfield di n neuroni si utilizza, nel caso peggiore, uno spazio proporzionale a ½·n·(n+1).

I principali metodi della classe sono descritti nella tabella seguente:

Riferimento rapido per i principali metodi della classe hopfield_net
TIPO NOME DESCRIZIONE
COSTRUTTORE hopfield_net(size_t n) rete di hopfield priva di ricordi costituita da n neuroni
INFORMAZIONI hopfield_net(istream in) rete di hopfield precedentemente memorizzata nello stream in
energy(pattern p) calcola l’energia dello stato p
full true se la rete non può memorizzare altri ricordi
load carico percentuale della rete
stable(pattern p) true se lo stato p della rete è stabile
basin_of_attraction(pattern p, …) calcola il bacino di attrazione dello stato p
records(…) calcola l’insieme dei ricordi memorizzati nella rete
find(pattern p) calcola il pattern evocato dalla rete quando le si presenta in ingresso il probe p. La modalità di attivazione è asincrona con minimizzazione dell’energia o casuale
I/O insert(pattern p) memorizza un nuovo ricordo
remove(pattern p) elimina un ricordo precedentemente memorizzato
operator <<(…) memorizza lo stato della rete su file

MULTILAYER_NET

Permette di simulare una rete multilayer feed forward (il numero di hidden layer è arbitrario ma non può variare nel tempo). Lo stato della rete è memorizzato in un vettore di matrici che descrivono le connessioni intra-strato ed i bias. Tutti i calcoli vengono effettuati mediante l'uso della classe di supporto cmatrix e della classe STL valarray in modo tale da permettere ai compilatori di ottimizzare il codice per microprocessori ad architettura vettoriale o con istruzioni SIMD.

I principali metodi della classe sono di seguito elencati:

Riferimento rapido ai principali metodi della classe multilayer_net
TIPO NOME DESCRIZIONE
COSTRUTTORI multilayer_net(list l) inizializza una la rete in modo che abbia l.size() layer e che l'i-esimo layer sia costituito da l[i] neuroni
multilayer_net(istream in) inizializza la rete mediante i dati memorizzati nello stream in
INFORMAZIONI average_quadratic_error informazioni sui vari tipi di errore della rete dopo l'addestramento
max_quadratic_error
max_error
fan_in(size_t i) connessioni pre-sinapsi e post-sinapsi di un neurone dell'i-esimo layer
fan_out(size_t i)
ADDESTRAMENTO E SIMULAZIONE train(list a) addestra la rete mediante le associazioni della lista a. Permette di specificare diverse condizioni di stop (mediante un'apposita classe stop_condition). Sono inoltre disponibili più opzioni per l'addestramento:

  • permutazione degli esempi di un'epoca per ridurre la probabilità di rimanere intrappolati in minimi locali
  • modalità di calcolo approssimata per accelerare la convergenza
operator[pattern p] calcola l'uscita della rete quando le si presenta in ingresso il pattern p
I/O operator<<(…) registra la rete su file

No computer has ever been designed that is ever aware of what it's doing; but most of the time, we aren't either.
Marvin Minsky