Una máquina de Boltzmann muy pequeña
(eoinmurray.info)- 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
Me hizo recordar cuando en 1990 hacía “neuronas” con arreglos de punteros
voiden C puro para crear una máquina de Boltzmann y perceptronesEn ese entonces, lo que hacíamos como “IA” era cosas como adivinar la siguiente nota de una melodía MIDI, o reconocer figuras de redondas, blancas, negras y corcheas en una cuadrícula de puntos de 5×9, y una precisión del 85% se consideraba “suficientemente buena”
Leer notas en un pentagrama suena como un proyecto divertido. Especialmente si lo construyes tú mismo desde cero, como el ejemplo de redes neuronales para dígitos de 3Blue1Brown[1]
Si lo mezclas con algo como Chuck[2], hoy en día incluso podrías hacer una aplicación que corra completamente del lado del cliente
[1] - https://www.3blue1brown.com/lessons/neural-networks
[2] - https://chuck.stanford.edu/
Me pregunto si la salida sonaba como música
Según entiendo, Harmonium (Smolensky) fue la primera máquina de Boltzmann restringida, pero maximizaba la “armonía” en vez de minimizar la “energía”
Cuando Smolensky, Hinton y Rummelhart colaboraban, al parecer a esto le llamaban “bondad de ajuste”. El paper de Harmonium[1] es realmente muy agradable de leer, Hinton por supuesto se volvió una superestrella, y Smolensky escribió libros extensos sobre lingüística. Me pregunto si alguien sabe más sobre esta historia
[1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...
Un texto interesante sobre David Ackley: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
También vale mucho la pena ver el T2 Tile Project
El valor de los estudiantes de posgrado suele subestimarse, pero en realidad contribuyen enormemente y después siguen desarrollando la investigación. La investigación ha impulsado muchísimas cosas hacia adelante; no entiendo por qué en EE. UU. se ve como si fuera un desperdicio
Leí mal el título como “A Tiny Boltzmann Brain”[0]
Mi mente natural inmediatamente resolvió el acertijo. Pensé que se trataba de poner pesos generados aleatoriamente en un modelo muy pequeño y probar si hacía algo realmente útil. Después de todo, mientras más pequeño es el modelo, más probable es que una generación puramente aleatoria produzca algo interesante en relación con su tamaño
Acepto la corrección, pero no me desanimo. Propongo una nueva clase de modelos: “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Algún día, cuando haya computadoras cuánticas lo bastante grandes, podríamos fijar todo el dataset como una restricción clásica sobre un modelo definido por N valores serializados que representen todos los parámetros y configuraciones de estructura. Luego, un sistema cuántico con N qubits mantendría todos los parámetros y estructuras posibles en superposición cuántica, ejecutaría un paso de inferencia sobre toda la muestra clásica, y después colapsaría el resultado para devolver en forma clásica los parámetros y la estructura del mejor modelo o de uno casi óptimo
Me pregunto si alguien tiene por ahí algunos qubits de sobra para probar esto. Tiene cierta ironía que, aunque todo sea cuántico, todavía sea demasiado resbaladizo como para aprovecharlo mucho.
Como escenario de ciencia ficción, uno podría imaginar una especie alienígena que evolucionó un sensor cuántico de un solo uso, y que eso llevó a todo un sistema sensorial y nervioso cuántico, desarrollándose desde el principio como una inteligencia cuántica completa. ¿Cómo sería una sociedad así y su trayectoria tecnológica? Espero que estén orbitando cerca de un agujero negro para que su progreso explosivo todavía no nos amenace. Y luego un día escapan del pozo gravitacional...
[0] https://en.wikipedia.org/wiki/Boltzmann_brain
Buena explicación. Solo que, por alguna razón, el scroll del mouse es demasiado sensible
Supongo que en móvil el swipe estará bien, pero no lo comprobé. Cada vez que intentaba desplazarme, saltaba de la primera “página” a la última “página” y luego de vuelta. Por suerte, la entrada por teclado sí funcionó, así que pude leer todo el artículo
Si entendí bien, en lugar de usar propagación hacia adelante y retropropagación basadas en gradiente como las redes neuronales a las que estamos acostumbrados hoy, parece que aquí se necesita muestreo de Gibbs para calcular las actualizaciones de pesos
Me pregunto si alguien entiende por qué
Ese valor se necesita para calcular el gradiente de la log-verosimilitud, pero integrar la distribución es difícil de manejar. Es parecido a cómo se usa MCMC en los VAE para sacar muestras representativas. En las redes neuronales al estilo deep learning, el gradiente se estima sobre lotes del dataset, no sobre una distribución de probabilidad modelada explícitamente
Normalmente Gibbs se usa cuando no hay un gradiente directo sencillo, o cuando quieres reproducir la distribución misma y no una estimación puntual. En cambio, es útil cuando tienes verosimilitudes marginales o condicionales fáciles de muestrear. Como cada nodo visible depende de cada nodo oculto y cada nodo oculto influye sobre todos los nodos visibles, el gradiente se vuelve muy desordenado, así que el muestreo de Gibbs basado en las probabilidades marginales se vuelve mucho más simple para ajustar el modelo
Por eso no puedes construir un grafo computacional de la misma forma que con una red feed-forward
Explicación limpia y buena. Me trajo muchos recuerdos
Haciendo un poco de autopromoción vergonzosa, hace unos años hice una visualización del entrenamiento de un RBM: https://www.youtube.com/watch?v=lKAy_NONg3g
El demo está genial. Hace 15 años tomé en la universidad un curso de redes neuronales de Geoff Hinton, y dedicó varias clases a explicar las máquinas de Boltzmann
La frase “una máquina de Boltzmann restringida es un caso especial en el que las neuronas visibles y las neuronas ocultas no están conectadas entre sí” es incorrecta. Esa redacción suena como si las neuronas visibles no estuvieran conectadas con las ocultas
La forma correcta sería: “las neuronas visibles no están conectadas entre sí, y las neuronas ocultas tampoco están conectadas entre sí”. O también: “las neuronas visibles y las ocultas no tienen conexiones dentro de su propio tipo”
Edit: ya entendí. No me había dado cuenta de que había que hacer scroll hacia arriba para ver el resumen introductorio
Como decía el comentario [flagged][dead] de 0xTJ, tiene toda la razón en que intentar secuestrar o reinventar el scroll no es una buena idea