2 puntos por GN⁺ 2025-05-17 | 1 comentarios | Compartir por WhatsApp
  • 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
    1. Fase positiva: se muestrea la capa oculta h(0) a partir de P(h | v(0)=datos)
    2. 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

 
GN⁺ 2025-05-17
Comentarios en Hacker News
  • Me hizo recordar cuando en 1990 hacía “neuronas” con arreglos de punteros void en C puro para crear una máquina de Boltzmann y perceptrones
    En 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 punto clave es que muchas personas participan en lograr estos avances
      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

    • Las computadoras cuánticas no funcionan así
    • Pobres seres cuánticos. Están condenados a esperar una eternidad a que termine un cómputo, incapaces de acceder a modelos computacionales más rápidos que sus propios pensamientos
  • 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é

    • Parece que el muestreo de Gibbs se usa como una forma de aproximar el valor esperado bajo la distribución del modelo
      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
    • No soy experto, pero recibí algo de formación formal en temas bayesianos que lidian con problemas parecidos
      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
    • Puede que esté equivocado, pero creo que esto se debe en parte a la estructura no dirigida de los RBM
      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”

    • Visto así, no me queda claro en qué se diferencia de un perceptrón multicapa. ¿Qué hace diferente a una máquina de Boltzmann?
      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