# Macchina di Boltzmann ristretta

Una macchina di Boltzmann ristretta (RBM) (detta anche modello di Sherrington-Kirkpatrick ristretto con campo esterno o modello di Ising-Lenz-Little stocastico ristretto ) è una rete neurale artificiale stocastica generativa in grado di apprendere una distribuzione di probabilità dall'insieme dei dati in ingresso.
Le RBM furono inizialmente proposte con il nome di Harmonium da Paul Smolensky nel 1986 e salirono alla ribalta dopo che Geoffrey Hinton e i suoi collaboratori idearono algoritmi di apprendimento efficienti per questi modelli a metà degli anni 2000. Le RBM hanno trovato applicazioni a problemi di riduzione della dimensionalità, classificazione, filtraggio collaborativo, apprendimento delle feature modellazione degli argomenti, l'immunologia, e persino di meccanica quantistica a moti corpi. A seconda del compito da svolgere, l'addestramento può avvenire in modalità supervisionata o non supervisionata.
Come suggerisce il nome, le RBM sono una variante delle macchine di Boltzmann, con la restrizione che i loro neuroni debbano formare un grafo bipartito:
* una coppia di nodi appartenenti ciascuno ai due gruppi distinti di unità (comunemente denominate, rispettivamente, unità "visibili" e "nascoste") può avere una connessione simmetrica tra loro; e
* non ci sono connessioni tra i nodi all'interno di uno stesso gruppo.
Per converso, le macchine di Boltzmann "senza restrizioni" possono avere connessioni tra unità nascoste. Tale restrizione consente algoritmi di addestramento più efficienti di quelli disponibili per la classe generale di macchine di Boltzmann, in particolare l'algoritmo di divergenza contrastiva basato su gradiente.
Le RBM possono essere utilizzate anche nelle reti per l'apprendimento profondo. In particolare, si possono formare reti bayesiane profonde "impilando" più RBM e addestrando la rete profonda risultante mediante discesa di gradiente e retropropagazione.

## Struttura

Il tipo standard di RBM contiene unità nascoste e visibili a valori binari (booleani) e consiste in una matrice di pesi $W$ di dimensioni $m\times n$. Ogni peso $w_{i,j}$ della matrice è associato alla connessione tra l'unità visibile (input) $v_{i}$ e l'unità nascosta $h_{j}$. Inoltre, ci sono pesi aggiuntivi per i bias (offset) $a_{i}$ per $v_{i}$ e $b_{j}$ per $h_{j}$. Dati i pesi e i bias, l'energia di una configurazione (coppia di vettori booleani) $(v,h)$ è definita come segue:
    $E(v,h)=-\sum _{i}a_{i}v_{i}-\sum _{j}b_{j}h_{j}-\sum _{i}\sum _{j}v_{i}w_{i,j}h_{j}$
o, in forma matriciale,
    $E(v,h)=-a^{\mathrm {T} }v-b^{\mathrm {T} }h-v^{\mathrm {T} }Wh.$
Tale funzione d'energia è analoga a quella di una rete di Hopfield. Come per le macchine di Boltzmann generali, la distribuzione di probabilità congiunta per i vettori visibili e nascosti viene definita in termini della funzione d'energia come segue:
    $P(v,h)={\frac {1}{Z}}e^{-E(v,h)}$
dove $Z$ è una funzione di partizione definita come la somma di $e^{-E(v,h)}$ su tutte le possibili configurazioni, interpretabile come una costante di normalizzazione necessaria a garantire che la somma delle probabilità sia unitaria. La probabilità marginale di un vettore visibile è la somma delle $P(v,h)$ su tutte le possibili configurazioni dello strato nascosto,
    $P(v)={\frac {1}{Z}}\sum _{\{h\}}e^{-E(v,h)}$ ,
e viceversa. Poiché la struttura del grafo dell'RBM è bipartita (quindi non ci sono connessioni intra-strato), le attivazioni delle unità nascoste sono reciprocamente indipendenti date le attivazioni delle unità visibili. Al contrario, le attivazioni delle unità visibili sono reciprocamente indipendenti date le attivazioni delle unità nascoste. Cioè, per $m$ unità visibili e $n$ unità nascoste, la probabilità condizionata di una configurazione delle unità visibili $v$, data una configurazione delle unità nascoste $h$, è
    $P(v|h)=\prod _{i=1}^{m}P(v_{i}|h)$ .
Invece, la probabilità condizionata di $h$ dato $v$ è
    $P(h|v)=\prod _{j=1}^{n}P(h_{j}|v)$ .
Le probabilità di attivazione individuali sono date da:
    $P(h_{j}=1|v)=\sigma \left(b_{j}+\sum _{i=1}^{m}w_{i,j}v_{i}\right)$ e $\,P(v_{i}=1|h)=\sigma \left(a_{i}+\sum _{j=1}^{n}w_{i,j}h_{j}\right)$
dove $\sigma$ denota la sigmoide logistica.
Le unità visibili della macchina di Boltzmann ristretta possono essere multinomiali, sebbene le unità nascoste siano Bernoulli. In tal caso, la funzione logistica per le unità visibili è sostituita dalla funzione softmax
    $P(v_{i}^{k}=1|h)={\frac {\exp(a_{i}^{k}+\Sigma _{j}W_{ij}^{k}h_{j})}{\Sigma _{k'=1}^{K}\exp(a_{i}^{k'}+\Sigma _{j}W_{ij}^{k'}h_{j})}}$
dove $K$ è il numero di valori discreti che hanno i valori visibili. Sono applicati nella modellazione degli argomenti e nei sistemi di raccomandazione.

### Relazione con altri modelli

Le macchine di Boltzmann ristrette sono un caso speciale delle macchine di Boltzmann e dei Markov random field.
Il modello grafico delle RBM trova corrispondenza a quello dell'analisi fattoriale.

## Algoritmo di addestramento

Le RBM sono addestrate per massimizzare il prodotto delle probabilità assegnate a un insieme di addestramento $V$ (una matrice, ogni riga della quale viene trattata come un vettore visibile $v$),
    $\arg \max _{W}\prod _{v\in V}P(v)$
o equivalentemente, per massimizzare il valore atteso del logaritmo della probabilità di un campione di addestramento $v$ selezionato casualmente da $V$:
    $\arg \max _{W}\mathbb {E} \left[\log P(v)\right]$
L'algoritmo utilizzato più spesso per addestrare le RBM, ovvero per ottimizzare la matrice dei pesi $W$, è l'algoritmo di divergenza contrastiva (CD) di Hinton, sviluppato originariamente per addestrare modelli PoE (<i>prodotti di esperti</i>). L'algoritmo effettua il campionamento di Gibbs e viene utilizzato all'interno di una procedura di discesa del gradiente per calcolare l'aggiornamento dei pesi (similmente a come la backpropagation viene usata in tale procedura per l'addestramento delle reti neurali feedforward).
La procedura di base di divergenza contrastiva a passo singolo (CD-1), dato un singolo campione, può essere riassunta come segue:
* Si considera un campione di training $v$, si calcolano le probabilità delle unità nascoste e si estrae un vettore di attivazione nascosto $h$ da questa distribuzione di probabilità.
* Si calcola il cosiddetto gradiente positivo, ossia il prodotto esterno di $v$ e $h$.
* Da $h$, si campiona una ricostruzione $v'$ per le unità visibili poi, da questa, si ri-campionano le attivazioni nascoste $h'$ (passo di Gibbs sampling).
* Si calcola il cosiddetto gradiente negativo, ossia il prodotto esterno di $v'$ e $h'$.
* Si calcola l'aggiornamento della matrice dei pesi $W$ come differenza fra il gradiente positivo e quello negativo, moltiplicata per un certo learning rate $\epsilon$: $\Delta W=\epsilon (vh^{\mathsf {T}}-v'h'^{\mathsf {T}})$ .
* Si aggiornano i bias $a$ e $b$ in modo analogo: $\Delta a=\epsilon (v-v')$, $\Delta b=\epsilon (h-h')$ .
Una guida pratica per l'addestramento delle RBM scritta da Hinton è disponibile nella sua homepage.

## Letteratura

* Lecture Notes in Computer Science, vol. 7441, DOI:10.1007/978-3-642-33275-3_2, ISBN 978-3-642-33274-6. Parametro titolo vuoto o mancante (aiuto)

## Altri collegamenti

* Autoencoder
* Macchina di Helmholtz