Sto cercando di capire come funzionano le macchine Boltzmann, ma non sono sicuro di come i pesi vengano appresi e non sono stato in grado di trovare una descrizione chiara. Il seguente è corretto? (Inoltre, i suggerimenti per qualsiasi buona spiegazione della macchina Boltzmann sarebbero anche ottimi.)
Abbiamo una serie di unità visibili (ad esempio, corrispondenti a pixel bianchi / neri in un'immagine) e una serie di unità nascoste. I pesi vengono inizializzati in qualche modo (ad esempio, uniformemente da [-0,5, 0,5]), quindi si alternano tra le due fasi seguenti fino a raggiungere una regola di arresto:
Fase bloccata - In questa fase, tutti i valori delle unità visibili sono fissi, quindi aggiorniamo solo gli stati delle unità nascoste (secondo la regola di attivazione stocastica di Boltzmann). Aggiorniamo fino a quando la rete non raggiunge l'equilibrio. Una volta raggiunto l'equilibrio, continuiamo aggiornando più volte (per alcuni predefinito N ), tenendo traccia della media di x i x j (dove x i , x j sono stati di nodi i e j ). Dopo quegli aggiornamenti di equilibrio N , aggiorniamo w i j = w i j +, doveCè un tasso di apprendimento. (Oppure, invece di eseguire un aggiornamento batch alla fine, eseguiamo l'aggiornamento dopo il passaggio di equilibrio?)
Fase libera - In questa fase, gli stati di tutte le unità vengono aggiornati. Una volta raggiunto l'equilibrio, allo stesso modo continuiamo ad aggiornare N 'più volte, ma invece di aggiungere correlazioni alla fine, sottraggiamo: .
Quindi le mie domande principali sono:
Ogni volta che siamo nella fase bloccata, reimpostiamo le unità visibili su uno dei modelli che vogliamo imparare (con una certa frequenza che rappresenta l'importanza di quel modello) o lasciamo le unità visibili nello stato in cui si trovavano al termine della fase libera?
Effettuiamo un aggiornamento batch dei pesi alla fine di ogni fase o aggiorniamo i pesi ad ogni fase di equilibrio nella fase? (Oppure, o va bene uno?)