- Una breve introducción a la estructura y el propósito de la máquina de Boltzmann
- Se definen con fórmulas la función de energía y la distribución de probabilidad
- Se derivan mediante diferenciación las reglas de actualización de los pesos y sesgos
- Se explica el método para aproximar la expectativa del modelo mediante la fase positiva y negativa y el muestreo de Gibbs
- Finalmente, se resume de forma integral el algoritmo de Contrastive Divergence
Conceptos de máquina de Boltzmann y Contrastive Divergence
- En una máquina de Boltzmann se tienen una capa de entrada (visible layer) y una capa oculta (hidden layer), además de la matriz de pesos que las conecta y los vectores de sesgo de cada una de las dos capas
Función de energía y distribución de probabilidad
-
La función de energía se define en forma matricial de la siguiente manera
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
- v: vector de la capa visible, h: vector de la capa oculta, w: pesos, b/c: sesgos de cada capa
-
La distribución conjunta de una máquina de Boltzmann es
P(v, h) = (1/Z) * exp(-E(v, h))
- Z (función de partición) cumple el papel de normalizar la distribución de probabilidad
Log-verosimilitud (log-likelihood) y derivación
-
El aprendizaje avanza maximizando la verosimilitud de los datos de entrenamiento
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
-
La derivada parcial de la log-verosimilitud respecto al peso wij es
∂(log P(v))/∂wij = <vi hj>datos - <vi hj>modelo
- < · >datos: expectativa sobre los datos reales
- < · >modelo: expectativa sobre los datos generados por el modelo
Reglas de aprendizaje para pesos y sesgos
- Los pesos y sesgos se actualizan de la siguiente manera
- Δwij = η(<vi hj>datos - <vi hj>modelo)
- Δbi = η(<vi>datos - <vi>modelo)
- Δcj = η(<hj>datos - <hj>modelo)
- η es la tasa de aprendizaje
Algoritmo de Contrastive Divergence
- Como la expectativa del modelo < · >modelo es difícil de calcular directamente, se usa muestreo de Gibbs
- Contrastive Divergence la aproxima con el siguiente procedimiento
- Fase positiva: se muestrea la capa oculta h(0) a partir de P(h | v(0)=datos)
- Fase negativa: se repite el muestreo de Gibbs k veces
- Alternando, se muestrea v(t+1) ~ P(v | h(t)) y h(t+1) ~ P(h | v(t))
- Desde la perspectiva de la actualización, se usa la diferencia entre la expectativa de los datos y la expectativa del modelo
- Δwij = η(<vi hj>datos - <vi hj>modelo)
- Δbi = η(<vi>datos - <vi>modelo)
- Δcj = η(<hj>datos - <hj>modelo)
Resumen
- La esencia del aprendizaje en una máquina de Boltzmann, como modelo basado en energía, es reducir la diferencia de expectativas entre los datos reales y la distribución generada por el modelo
- Contrastive Divergence es el método de entrenamiento clave que permite aproximar esa diferencia de manera rápida y eficiente
- Mediante el muestreo de Gibbs, cumple el papel de conectar la distribución del modelo con los datos reales, y al repetir este proceso actualiza los pesos y sesgos para que la máquina de Boltzmann pueda representar bien los datos
1 comentarios
Comentarios en Hacker News
Según entiendo, Harmonium (Smolensky) fue la primera restricted Boltzmann machine, y era un concepto que maximizaba la “harmonía” en lugar de minimizar la “energía”. Cuando Smolensky, Hinton y Rummelhart colaboraban, lo llamaban “goodness of fit”. El artículo de Harmonium es una lectura realmente impresionante. Hinton se convirtió en una superestrella de la IA, y Smolensky escribió un libro largo relacionado con la lingüística. Me pregunto si alguien sabe más sobre esta historia
Interesante artículo sobre David Ackley. También vale la pena revisar el T2 Tile Project
Soy el autor. Gracias por tantos comentarios, no esperaba que esto se volviera tan popular. Estoy corrigiendo erratas, espacios en blanco y problemas de scroll, gracias por reportarlo
Leí mal el título como "A Tiny Boltzmann Brain". Mi cerebro natural resolvió de inmediato esa confusión. Supuse que sería un experimento para ver si se podía hacer algo significativo asignando pesos aleatorios a un modelo diminuto. Pensé que, cuanto más pequeño es el modelo, mayor es relativamente la probabilidad de que surja algo interesante por generación aleatoria. Mi suposición estaba equivocada, pero sigo sin perder el ánimo. Propongo una nueva familia de modelos llamada “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Imagino que algún día, cuando exista una computadora cuántica lo bastante grande, se podrá superponer en un estado cuántico todo el dataset junto con todos los parámetros y la arquitectura del modelo, e inferir todo de una sola vez. ¿Alguien tiene qubits de sobra para intentar este experimento? (Dicho sea de paso, es irónico que todo sea cuántico, pero que todavía resulte difícil aprovecharlo de verdad. Y también me imagino qué tipo de sociedad y trayectoria tecnológica tendría una civilización alienígena que evolucionara desde un único sensor cuántico hasta convertirse en seres con un sistema nervioso completamente cuántico)
La explicación es muy buena. Solo como referencia, el scroll del mouse es excesivamente sensible (supongo que en móvil estará bien). Me resultó incómodo porque cada desplazamiento me lanzaba a la primera o a la última página. Por suerte, con el teclado sí pude leer todo normalmente
Si entiendo bien, a diferencia de las redes neuronales que usamos hoy, aquí se necesita gibbs sampling para actualizar los pesos, en lugar de un forward/backward pass basado en gradiente. Me pregunto si alguien sabe por qué
Este artículo me trajo recuerdos. En 1990 hice un arreglo de nodos de red neuronal con void pointers e implementé en C una Boltzmann machine y un perceptrón. En ese entonces los usos de la “IA” eran cosas como predecir la siguiente nota en melodías MIDI, o reconocer figuras de notas musicales como minim, crotchet y quaver en una cuadrícula de 5x9 puntos. Una tasa de reconocimiento del 85% se consideraba suficientemente “buena” entonces
El artículo fue fácil de entender y claro. Me trajo mucha nostalgia. Promo vergonzosa, pero hace tiempo hice un video visualizando el proceso de entrenamiento de un RBM
Es una demo realmente limpia. Recuerdo haber escuchado varias clases sobre Boltzmann machines en un curso de redes neuronales de Geoff Hinton. Una observación: es incorrecta una explicación tipo “las restricted Boltzmann machines no tienen conexiones entre neuronas visibles y hidden”, porque eso puede hacer pensar que los nodos visibles y los hidden no están conectados entre sí. Lo correcto es que no hay conexiones dentro del mismo tipo, es decir, ni entre visibles ni entre hidden. O también puede decirse que los nodos visibles y hidden no tienen conexiones internas dentro de su propio tipo