35
Università degli studi di Camerino Corso di laurea in Informatica Algoritmi e strutture dati Hierarchical Memory Algorithms A cura di: Alessandro Di Carlo Hector Martinez Anna Biselli Leonardo Caggianelli Professore: Matteo Rucco

Hierarchical temporal memory

Embed Size (px)

Citation preview

Page 1: Hierarchical temporal memory

Università degli studi di Camerino

Corso di laurea in Informatica

Algoritmi e strutture dati

Hierarchical Memory Algorithms

A cura di:

Alessandro Di Carlo

Hector Martinez

Anna Biselli

Leonardo Caggianelli

Professore:

Matteo Rucco

Page 2: Hierarchical temporal memory

Scopo del progettoLo scopo del nostro progetto consiste nell'analizzare algoritmi di hierarchical

tempory memory (da ora chiamati HTM) per la raccolta e l'analisi di onde

elettromiografiche impiegate per la realizzazione di un bracciale

elettromiografico.

Page 3: Hierarchical temporal memory

ElettromiografiaL’Elettromiografia (EMG) è un esame strumentale neurofisiologico che riveste un ruolo

fondamentale nello studio e nella diagnosi delle malattie neuromuscolari.

L’Elettromiografia serve a valutare la funzionalità dei muscoli (mentre la elettroneuronografia

misura la velocità di conduzione dei nervi).Le fibre muscolari, quando attivate, generano il

MUAP(Motor Unit Action Potential).L’EMG si avvale di elettrodi monouso, che registrano

l’attività delle fibre muscolari in diverse condizioni: a riposo, durante una contrazione

volontaria e progressiva fino al massimo sforzo, e durante una contrazione media sostenuta.

Generalmente non si vale di stimoli elettrici, ma nei casi in cui si registra attraverso l’ago e si

stimola il nervo a distanza allora possiamo considerarla una variante dell’elettroneurografia.

Page 4: Hierarchical temporal memory

Rilevazione onde

Il primo passo per la raccolta dei dati elettromiografici

è l’identificazione appropriata di quest’ultimi in un set

di movimenti. Per far ciò, si sono analizzati e utilizzati

gli algoritmi di:

Hodges Bui

Page 5: Hierarchical temporal memory

Finite Moving Average (FMA)

L’algoritmo di Hodges e Bui fà parte di una classe di algoritmi chiamati FMA. Tali

algoritmi usano una finestra di ampiezza fissa che abbiamo usato per scannerizzare

il segnale EMG; una volta analizzato il segnale, si va a studiare la parte che si è

sollecitata con il movimento. Quando questo segnale supera l'ampiezza massima

della finestra corrente l’algoritmo si arresta e ritorna al primo indice della finestra

iniziale come valore stimato. Fondamentale importanza ha la deviazione standard.

Possiamo notare un esempio:

Page 6: Hierarchical temporal memory

Artificial Neural NetworkUna rete neurale artificiale (ANN "Artificial Neural Network"), normalmente è chiamata solo "rete neurale"

(NN "Neural Network" in inglese), ed è un modello matematico/informatico di calcolo basato sulle reti

neurali biologiche. Tale modello è costituito da un gruppo di interconnessioni di informazioni costituite da

neuroni artificiali e processi che utilizzano un approccio basato su connessioni di calcolo. Nella maggior

parte dei casi una rete neurale artificiale è un sistema adattivo che cambia la sua struttura in base a

informazioni esterne o interne che scorrono attraverso la rete durante la fase di apprendimento.

In termini pratici le reti neurali sono strutture non-lineari di dati statistici organizzate come strumenti di

modellazione. Esse possono essere utilizzate per simulare relazioni complesse tra ingressi e uscite che

altre funzioni analitiche non riescono a rappresentare.

Una rete neurale artificiale riceve segnali esterni su uno strato di nodi (unità di elaborazione) d'ingresso,

ciascuno dei quali è collegato con numerosi nodi interni, organizzati in più livelli. Ogni nodo elabora i

segnali ricevuti e trasmette il risultato a nodi successivi.

Page 7: Hierarchical temporal memory

Back-Propagation Based

Neural Network

initialize network weights (often small random values)

do

forEach training example ex

prediction = neural-net-output(network, ex) // forward pass

actual = teacher-output(ex)

compute error (prediction - actual) at the output units

compute for all weights from hidden layer to output layer // backward

pass

compute for all weights from input layer to hidden layer // backward

pass continued

update network weights

until all examples classified correctly or another stopping criterion satisfied

return the network

Complessità

O(n)

Page 8: Hierarchical temporal memory

Fuzzy Mean Max Neural

Network(FMMNN)

Rete neurale ibrida

Esempio di rete FMMNNComplessità

O(n)

Page 9: Hierarchical temporal memory

Modello di Markov nascosto

Un Modello di Markov nascosto (Hidden Markov Model

- HMM) è una catena di Markov i cui stati non sono

osservabili direttamente. Più precisamente:

• la catena ha un certo numero di stati

• gli stati evolvono secondo una catena di Markov

• ogni stato genera un evento con una certa

distribuzione di probabilità che dipende solo dallo stato

• l'evento è osservabile ma lo stato no

I modelli nascosti di Markov sono conosciuti

particolarmente per le loro applicazioni nel riconoscimento

dello schema temporale dei discorsi parlati, della scrittura a

mano, nel riconoscimento di textures e la bioinformatica

(per esempio HMMer).

Transizioni di stato in un modello di Markov nascosto (esempio)

x — Stato nascosto

y — Uscita osservabile

a — Probabilità di transizione

b — Probabilità di uscita

Page 10: Hierarchical temporal memory

Esempio modello di Markov

Forward–backward algorithm

ForwardBackward(guessState, sequenceIndex):

if sequenceIndex is past the end of the sequence, return 1

if (guessState, sequenceIndex) has been seen before, return saved result

result = 0

for each neighboring state n:

result = result + (transition probability from guessState to n given

observation element at sequenceIndex)

* ForwardBackward(n, sequenceIndex+1)

save result for (guessState, sequenceIndex)

return result

stati = ('Pioggia', 'Sole')

osservazioni = ('camminare', 'shopping', 'pulire')

probabilità_iniziale = {'Pioggia': 0.6, 'Sole': 0.4}

probabilità_transizione = {

'Pioggia' : {'Pioggia': 0.7, 'Sole': 0.3},

'Sole' : {'Pioggia': 0.4, 'Sole': 0.6},

}

probabilità_emissione = {

'Pioggia' : {'camminare': 0.1, 'shopping': 0.4, 'pulire': 0.5},

'Sole' : {'camminare': 0.6, 'shopping': 0.3, 'pulire': 0.1},

}

Esempio in Python

Complessità

O(N2T)

Page 11: Hierarchical temporal memory

Rete di BayesNel 2007 è stata implementata con un accelerometro

bidimensionale per la classificazione di molteplici gesti. La

combinazione di questa rete con il dispositivo ha

aumentato la precisione del 5/10%.

Nel 2008 invece venne implementata questa rete con il

classificatore KNN per lo sviluppo di un'interfaccia EMG:

quest'ultima è riuscita a raggiungere una precisione di

classificazione del 94% usando anche un solo sensore.

Page 12: Hierarchical temporal memory

Hierarchical Temporal

MemoryLa tecnica dell’HTM è molto simile alle reti neurali. È

una tecnica di apprendimento basata sui pattern che è

stata sviluppata dalla società Numenta.

Page 13: Hierarchical temporal memory

Struttura di una rete HTMUna rete HTM ha una gerarchia ad albero. La rete consiste in nodi dove ognuno

di essi nella gerarchia scopre da solo un set di cause in input attraverso un

processo di ricerca di pattern comuni che portano alla scoperta di pattern

temporali comuni.

L’immagine sotto mostra la struttura della rete utilizzata per le nostre onde

elettromiografiche:

Page 14: Hierarchical temporal memory

Funzione dell’HTM

Le reti basate sull’Hierarchical temporal memory sono

meglio descritti come un sistema di memoria che

esegue deduzioni e prevede alcuni comportamenti. Le

deduzioni e le “predizioni” sono elaborate attraverso

una rete denominata nodi.

Page 15: Hierarchical temporal memory

Apprendimento

Una regione HTM impara a conoscere il suo mondo

trovando modelli e quindi sequenze di pattern, in dati

provenienti da sensori. La regione non “sa” cosa i suoi

input rappresentano; lavora in un ambiente puramente

statistico.Sembra che lavori per combinazioni di

pattern in input che si verificano insieme, che noi

chiameremo pattern spaziali. Sembra poi che questi

modelli spaziali appaiano in una determinata

sequenza nel tempo, chiamati pattern temporali.

Page 16: Hierarchical temporal memory

Fasi di apprendimento

Le reti HTM hanno due distinte fasi di apprendimento

che tratteremo in maniera approfondita:

• Fase di “Training”

• Fase di “Inference”

Page 17: Hierarchical temporal memory

Algoritmi di “training” e di

“inference”

L’algoritmo di “training” e di “inference” sono basati su

due principi per ogni nodo:

• Comprendere le operazioni all’interno di un singolo

nodo;

• Comprendere come un nodo opera con gli altri nodi

della gerarchia.

Page 18: Hierarchical temporal memory

Training

Gli strati sono numerati a partire dal livello più basso come mostrato nella

figura precedente e riproposta sotto.

Quando il primo livello è stato “istruito”, esso cambia modalità spostandosi in

“deduzione”. Questo avviene per ogni livello fino ad arrivare all’ultimo nodo.

Page 19: Hierarchical temporal memory

Inference

Dopo che un HTM ha imparato gli schemi presenti nella sua

struttura, può dedicarsi alla deduzione di nuovi input.

Quando un HTM riceve un input, lo accoppierà agli schemi

temporali e spaziali precedentemente appresi.

Page 20: Hierarchical temporal memory

Struttura di un nodo

Un nodo è l’unità di elaborazione di una rete HTM.

Consiste in due moduli che rendono possibile l’attività

di training e di inference:

• Spatial Pooler

• Temporal Pooler

Page 21: Hierarchical temporal memory

Spatial Pooler

Lo Spatial Pooler approfitta,come ci suggerisce il

nome, della coerenza spaziale dei dati; apprende un

mapping da un numero potenzialmente infinito di input

per un numero finito di nodi.

La più importante funzione dello Spatial Pooler è

quella di convertire l’input delle “regioni” in pattern

sparsi. Questa funzione è molto importante perché il

meccanismo usato per apprendere le sequenze ed

effettuare una deduzione richiede pattern sparsi.

Page 22: Hierarchical temporal memory

Implementazione dello

Spatial Pooler

L’implementazione dello Spatial Pooling può essere

suddivisa in tre parti distinte:

1. Calcolare la sovrapposizione tra un input iniziale e

ogni colonna;

2. Calcolare le colonne “vincenti” (con le sinapsi

attive) dopo l’inibizione;

3. Aggiornare i valori permanenti delle sinapsi.

Page 23: Hierarchical temporal memory

Pseudocodice delle varie

fasi[1]1.Sovrapposizione

for c in columns

overlap(c) = 0

for s in connectedSynapses(c)

overlap(c) = overlap(c) + input(t, s.sourceInput)

if overlap(c) < minOverlap then

overlap(c) = 0

else

overlap(c) = overlap(c) * boost(c)

Prendendo un vettore iniziale, la prima fase è quella di calcolare la sovrapposizione di ciascuna colonna con il vettore dato. La sovrapposizione con ogni colonna è semplicemente il numero di dati comuni,chiamati sinapsi. Se questo valore è inferiore a

Page 24: Hierarchical temporal memory

Pseudocodice delle varie

fasi[2]2.Inibizione

for c in columns

minLocalActivity = kthScore(neighbors(c), desiredLocalActivity)

if overlap(c) > 0 and overlap(c) ≥ minLocalActivity then

activeColumns(t).append(c)

In questa seconda fase si calcolano tutte le colonne “vincenti” dopo la fase d’inibizione.

Page 25: Hierarchical temporal memory

Pseudocodice delle varie fasi

[3]3.Apprendimento

for c in activeColumns(t)

for s in potentialSynapses(c)

if active(s) then

s.permanence += permanenceInc

s.permanence = min(1.0, s.permanence)

else

s.permanence -= permanenceDec

s.permanence = max(0.0, s.permanence)

for c in columns:

minDutyCycle(c) = 0.01 * maxDutyCycle(neighbors(c))

activeDutyCycle(c) = updateActiveDutyCycle(c)

boost(c) = boostFunction(activeDutyCycle(c), minDutyCycle(c))

overlapDutyCycle(c) = updateOverlapDutyCycle(c)

if overlapDutyCycle(c) < minDutyCycle(c) then

increasePermanences(c, 0.1*connectedPerm)

inhibitionRadius = averageReceptiveFieldSize()

La terza fase è quella

dell’apprendimento; si aggiornano i

valori permanenti di tutte le sinapsi. Per

le colonne vincitrici, se la sinapsi è

attiva, il loro valore permanente si

incrementa, altrimenti si decrementa.

Page 26: Hierarchical temporal memory

Temporal Pooler

Il Temporal Pooler approfitta della continuità temporale

dei dati in ingresso:esso apprende sequenze e

“predice”.Il principio di base è che quando una cella

diventa attiva, forma collegamenti con altre celle che

erano attive poco prima. Le celle possono quindi

prevedere quando diventeranno attive cercando tra le

loro connessioni. Se tutte le celle fanno questo, nel

loro insieme, possono archiviare e richiamare le

sequenze, e si può prevedere che cosa è probabile

che accada successivamente.

Page 27: Hierarchical temporal memory

Implementazione del

Temporal Pooler

L’implementazione del Temporal Pooler può essere

suddiviso in due fasi distinte:

1. Si calcola lo stato attivo per ogni cella,

activateState(t).

2. Si calcola lo stato stimato per ogni cella,

predictiveState(t).

Page 28: Hierarchical temporal memory

Pseudocodice delle varie

fasi[1]

Fase 1

for c in activeColumns(t)

buPredicted = false

for i = 0 to cellsPerColumn - 1

if predictiveState(c, i, t-1) == true then

s = getActiveSegment(c, i, t-1, activeState)

if s.sequenceSegment == true then

buPredicted = true

activeState(c, i, t) = 1

if buPredicted == false then

for i = 0 to cellsPerColumn - 1

activeState(c, i, t) = 1

La prima fase calcola lo stato

attivo per ogni cella.Per ogni

colonna uscita “vincitrice”

determiniamo quali celle

diventeranno attive.

Page 29: Hierarchical temporal memory

Pseudocodice delle varie

fasi[2]

for c, i in cells

for s in segments(c,i)

if segmentActive(c,i,s,t) then

predictiveState(c,i,t)=1

La seconda fase calcola lo

stato di previsione per ogni

cella. Una cella avrà

predictiveState=1 se uno

qualsiasi dei suoi segmenti

diventa attivo.

Fase 2

Page 30: Hierarchical temporal memory

Riassunto

Per riassumere le due fasi di Temporal Pooler e di Spatial Pooler mostriamo un

immagine:

Qui viene mostrata la struttura di un nodo: l’input del nodo corrisponde all’input

dello Spatial Pooler; l’output dello Spatial Pooler rappresenta l’input del

Temporal Pooler; l’output del Temporal Pooler è l’output del nodo stesso.

Page 31: Hierarchical temporal memory

Operazione dei nodi nella

gerarchiaGuardando più in dettaglio come effettivamente operano i nodi nella

gerarchia in una rete HTM, notiamo che tutti i nodi sono istruiti di

livello in livello: per la classificazione del segnale EMG la rete

consiste in 8 nodi al livello 1, 2 nodi al livello 2 e un nodo

classificatore.

I benefici di una struttura gerarchica sono

evidenti: viene ridotto il tempo di

apprendimento e la memoria usata, perchè i

pattern appresi nel livello più basso vengono

poi riutilizzati quando vengono combinati

con i pattern dei livelli più alti.

Page 32: Hierarchical temporal memory

Nodi al livello 1 in modalità apprendimento

Dopo aver ottenuto tutti gli input al primo livello, tutti i nodi del livello 1

della gerarchia vengono formati ed istruiti. Durante questo periodo tutti i

nodi del livello 2 sono disabilitati e poichè i nodi del livello 1 sono in

modalità apprendimento non inviano output ai nodi del livello 2.

Page 33: Hierarchical temporal memory

Nodi al livello 2 in modalità appendimento

e

nodi al livello 1 in modalità deduzione.

Una volta che i nodi al livello 1 hanno finito la fase di apprendimento,

i nodi al secondo livello sono abilitati e modificano il loro stato in

modalità apprendimento. I nodi al livello 1 sono switchati dalla

modalità apprendimento alla modalità di deduzione.

Page 34: Hierarchical temporal memory

Diagramma di apprendimento finale

Dopo il loro apprendimento i nodi al livello 2 saranno messi in

modalità di deduzione e tutto il processo di apprendimento

verrà ripetuto continuamente finché non sarà raggiunto il nodo

classificatore. I nodi al livello 1 e 2 completano il loro processo

di apprendimento ed entrambi vengono messi in modalità

deduzione.

Page 35: Hierarchical temporal memory

Grazie per l’attenzione