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:
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
eunsigned long
;- vettori di oggetti
bool
, stringhe di caratteri, vettori di tipovalarray
.
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:
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:
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:
|
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