In questo primo articolo di una serie in due parti, ci concentreremo sugli aspetti essenziali: cosa sono gli armonium, quando sono utili e come iniziare a utilizzarli. scikit-impara. In un seguito, daremo uno sguardo più da vicino agli aspetti tecnici.
L’harmonium vanilla – o macchina di Boltzmann ristretta – è una rete neurale che opera su dati binari (2). Queste reti sono composte da due tipi di variabili: l’input, X, e gli stati nascosti, H (Fig. 1). L’input è composto da zero e uno, xᵢ ∈ {0, 1}, e insieme chiamiamo questi valori osservati—X – IL stati visibili O unità della rete. Al contrario, le unità nascoste H sono latenti, non osservati direttamente; sono interni alla rete. Come le unità visibili, le unità nascoste H sono zero o uno, hᵢ ∈ {0, 1}.
Le reti neurali feed-forward standard elaborano i dati in sequenza, indirizzando l’output del livello all’input del livello successivo. Negli armonium questo è diverso. Invece il modello è an Erete diretta. La struttura della rete determina il modo in cui la distribuzione di probabilità viene fattorizzata sul grafico. A sua volta, la topologia della rete segue da funzione energetica E(X, H) che quantifica le preferenze per specifiche configurazioni delle unità visibili X e le unità nascoste H. Poiché l’armonium è definito in termini di funzione energetica, lo chiamiamo an modello basato sull’energia.
La funzione energetica
La rete più semplice collega direttamente le osservazioni, Xcon gli stati nascosti, HAttraverso E(X, H) = XᵀWh Dove W è un campo ricettivo. Configurazioni favorevoli di X E H hanno una bassa energia E(X, H) mentre le combinazioni improbabili hanno un’elevata energia. A sua volta, la funzione energetica controlla la distribuzione di probabilità sulle unità visibili
P(X,H) = esp(-E(X, H)) / Z,
dove il fattore Z è una costante chiamata funzione di partizione. La funzione di partizione lo garantisce P(X,H) è normalizzato (somma a uno). Di solito includiamo termini di pregiudizio aggiuntivi per gli stati visibili, UNe stati nascosti, B nella funzione energetica:
E(X, H) = XᵀUN + XᵀWh + BᵀH.
Strutturalmente, E(X, H) forma una bipartizione in X E H (Fig. 1). Di conseguenza, possiamo facilmente trasformare le osservazioni X agli stati nascosti H campionando la distribuzione:
P(hᵢ=1|X) = P(-(WᵀX+B)),
Dove P(X) = 1/(1 + esp(-X)) è la funzione di attivazione del sigmoide. Come vedi, la distribuzione di probabilità per H | X è strutturalmente simile a una rete neurale feed-forward a un livello. Una relazione simile vale per gli stati visibili data l’osservazione latente: P(xᵢ=1|H) = P(-(Wh+UN)).
Questa identità può essere utilizzata imputare (generare nuove) variabili di input in base allo stato latente H. Il trucco sta nel campionare Gibbs alternando P(X|H) E P(H|X). Ne parleremo più nella seconda parte di questa serie.
In pratica, considera l’utilizzo degli armonium quando:
1. I tuoi dati sono discreti (con valori binari).
Gli armoni hanno una solida base teorica: risulta che il modello è abbastanza potente da poter essere descritto Qualunque distribuzione discreta. Cioè, gli armoni sono approssimatori universali (5). Quindi, in teoria, gli armonium sono validi per tutti quando il set di dati è discreto. In pratica, gli armonium funzionano bene anche su dati che si trovano naturalmente nell’intervallo unitario (0, 1).
2. Per l’apprendimento della rappresentazione.
Gli stati nascosti, H, che sono interni alla rete possono essere utilizzati in sé. Per esempio, H può essere utilizzato come tecnica di riduzione delle dimensioni per apprendere una rappresentazione compressa di X. Considerala come un’analisi dei componenti principali, ma per dati discreti. Un’altra applicazione della rappresentazione latente H è per un’attività a valle utilizzandolo come funzionalità per un classificatore.
3. Per suscitare una struttura latente nelle variabili.
Gli armonium sono reti neurali con campi recettivi che descrivono come, ad esempio, Xriguarda il suo stato latente H: i neuroni che si collegano insieme, si attivano insieme. Possiamo utilizzare i campi ricettivi come lettura per identificare le variabili di input che vanno naturalmente insieme (cluster). In altre parole, il modello descrive diversi moduli di associazioni (o correlazioni) tra le unità visibili.
4. Per imputare i tuoi dati.
Poiché gli armonium sono modelli generativi, possono essere utilizzati per completare i dati mancanti (cioè l’imputazione) o generare esempi completamente nuovi (sintetici). Tradizionalmente, sono stati utilizzati per la pittura: completare parte di un’immagine mascherata. Un altro esempio sono i sistemi di raccomandazione: armonium presenti nella competizione Netflix per migliorare i consigli sui film per gli utenti.
Ora che conosci gli elementi essenziali, mostriamo come addestrare un modello.
Come esempio in esecuzione, utilizzeremo il file Database delle cifre scritte a mano UCI MLR (CC BY 4.0) che fa parte di scikit-impara. Sebbene tecnicamente l’armonium richieda dati binari come input, l’uso delle probabilità binarie (invece dei relativi campioni) funziona bene nella pratica. Pertanto normalizziamo i valori dei pixel nell’intervallo unitario (0, 1) prima dell’allenamento.
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MaxAbsScaler# Load dataset of 8x8 pixel handwritten digits numbered zero to nine.
digits = load_digits()
X = MaxAbsScaler().fit_transform(digits.data) # Scale to interval (0, 1).
X_train, X_test = train_test_split(X)
Convenientemente, scikit-impara viene fornito con un’implementazione standard: BernoulliRBM.
from sklearn.neural_network import BernoulliRBMharmonium = BernoulliRBM(n_components=32, learning_rate=0.05)
harmonium.fit(X_train)
receptive_fields = -harmonium.components_ # Energy sign convention.
Dietro le quinte, il modello si basa sull’algoritmo di divergenza contrastiva persistente per adattarsi ai parametri del modello (6). (Per saperne di più sui dettagli algoritmici, restate sintonizzati.)
Per interpretare le associazioni nei dati, che fanno sì che i pixel di input si attivino insieme, è possibile ispezionare i campi ricettivi W. In scikit-imparaun array NumPy di W è possibile accedere da BernoulliRBM.components_
attributo dopo aver adattato il file BernoulliRBM
modello (Fig. 2). (Attenzione: scikit-impara utilizza una convenzione di segno diversa nella funzione energia: E(X,H) -> –E(X,H).)
Per apprendimento della rappresentazioneè consuetudine utilizzare un valore deterministico P(hᵢ=1|X) come rappresentazione invece che come campione stocastico hᵢ ~ p(hᵢ|X). Da P(hᵢ=1|X) equivale allo stato nascosto previstohᵢ> dato Xè una misura conveniente da utilizzare durante l’inferenza dove preferiamo il determinismo (rispetto alla casualità). In scikit-imparala rappresentazione latente, P(hᵢ=1|X), può essere ottenuto direttamente tramite
H_test = harmonium.transform(X_test)
Infine, per dimostrare imputazione oppure in pittura, prendiamo un’immagine contenente la cifra sei e cancelliamo il 25% dei valori dei pixel.
import numpy as npmask = np.ones(shape=(8,8)) # Mask: erase pixel values where zero.
mask(-4:, :4) = 0 # Zero out 25% pixels: lower left corner.
mask = mask.ravel()
x_six_missing = X_test(0) * mask # Digit six, partly erased.
Utilizzeremo ora l’armonium per imputare le variabili cancellate. Il trucco è fare la catena di Markov Monte Carlo (MCMC): simulare i valori dei pixel mancanti utilizzando i valori dei pixel che osserviamo. Si scopre che il campionamento Gibbs – un approccio MCMC specifico – è particolarmente facile negli armonium.
Ecco come farlo: innanzitutto inizializza più catene di Markov (ad esempio 100) utilizzando il campione che desideri attribuire. Quindi, Gibbs campiona la catena per diverse iterazioni (ad esempio, 1000) fissando i valori osservati. Infine, aggregare i campioni delle catene per ottenere una distribuzione sui valori mancanti. Nel codice, questo appare come segue:
# Impute the data by running 100 parallel Gibbs chains for 1000 steps:
X_reconstr = np.tile(x_six_missing, reps=(100, 1)) # Initialise 100 chains.
for _ in range(1_000):
# Advance Markov chains by one Gibbs step.
X_reconstr = harmonium.gibbs(X_reconstr)
# Clamp the masked pixels.
X_reconstr = X_reconstr * (1 - mask) + x_six_missing * mask
# Final result: average over samples from the 100 Markov chains.
x_imputed = X_reconstr.mean(axis=0)
Il risultato è mostrato in Fig. 3. Come puoi vedere, l’armonium fa un lavoro abbastanza decente ricostruendo l’immagine originale.
L’intelligenza artificiale generativa non è una novità, risale a molto tempo fa. Abbiamo esaminato gli armonium, un modello di rete neurale non supervisionata basato sull’energia che era popolare vent’anni fa. Sebbene non siano più al centro dell’attenzione, gli armonium rimangono oggi utili per una nicchia specifica: imparare da dati discreti. Poiché si tratta di un modello generativo, gli armonium possono essere utilizzati per attribuire (o completare) valori variabili o generare esempi completamente nuovi.
In questo primo articolo di una serie di armonium in due parti, abbiamo esaminato gli elementi essenziali. Quanto basta per iniziare. Resta sintonizzato per la seconda parte, in cui esamineremo più da vicino gli aspetti tecnici dietro l’addestramento di questi modelli.
Ringraziamenti
vorrei ringraziare Rik Huijzer e Dina Boer per la correzione di bozze.
Riferimenti
(1) Suggerimento “Prodotti formativi di esperti riducendo al minimo la divergenza contrastiva.” Calcolo neurale 14.8, 1771–1800 (2002).
(2) Smolenskyj “Elaborazione dell’informazione in sistemi dinamici: Fondamenti della teoria dell’armonia.” 194–281 (1986).
(3) Hinton-Salakhutdinov, “Ridurre la dimensionalità dei dati con le reti neurali.” Scienza 313.5786, 504–507 (2006).
(4) Hinton-Osindero-Tech. “Un algoritmo di apprendimento rapido per reti di credenze profonde.” Calcolo neurale 18.7, 1527–1554 (2006).
(5) Le Roux-Bengio, “Potere rappresentazionale delle macchine Boltzmann ristrette e delle reti di credenze profonde.” Calcolo neurale 20.6, 1631–1649 (2008).
(6) Tieleman, “Addestramento limitato di macchine Boltzmann utilizzando approssimazioni al gradiente di verosimiglianza.” Atti del 25° convegno internazionale sul Machine Learning. 2008.
Fonte: towardsdatascience.com