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
  • 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

    • La clave es que muchísimas personas participan en estos avances importantes. Los estudiantes de posgrado aportan muchísimo, y el trabajo que hacen luego se desarrolla más. No entiendo por qué en EE. UU. se piensa que la investigación es un desperdicio, cuando ha hecho avanzar enormemente todo
  • 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

    • Corrección de erratas completada, ahora se ve mucho mejor en móvil
  • 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)

    • Pobres formas de vida cuánticas. Están condenadas a esperar siempre largos tiempos de cómputo porque no pueden acceder a modelos computacionales más rápidos que su propia velocidad de pensamiento
    • Señalo que las computadoras cuánticas no funcionan así
  • 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é

    • También creo que el gibbs sampling se usa para aproximar el valor esperado sobre la distribución del modelo. Para calcular el gradiente del log likelihood se necesita integrar sobre la distribución, y calcularlo directamente es imposible. Es parecido a sacar muestras representativas con MCMC en un VAE. En deep learning estimamos el gradiente mediante batches del dataset, pero en un RBM hace falta el valor esperado de la distribución de probabilidad modelada explícitamente
    • No soy experto, pero recibí algo de formación formal en el área bayesiana. Gibbs suele usarse cuando el gradiente no está claro o cuando quieres reconstruir la distribución misma. Cada nodo visible depende de los hidden, y los hidden también influyen en los visibles, así que el gradiente se vuelve muy complejo. Por eso usar gibbs sampling basado en la marginal likelihood es mucho más simple
    • Puede que me equivoque, pero creo que es por la estructura no dirigida del RBM. A diferencia de una feed-forward network, no se puede construir un computational graph
  • 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

    • Es curioso lo de reconocer figuras de notas musicales en una cuadrícula de 5x9 puntos. Se siente como implementar todo completamente desde cero, parecido a los ejemplos de redes neuronales de 3Blue1Brown. Si le agregas algo como Chuck, hoy en día incluso podrías hacer un programa así del lado del cliente en el navegador
    • Me pregunto si el resultado sonaba musical
  • 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

    • Cuando leí “no hay conexiones internas entre neuronas visibles/hidden”, me confundí pensando entonces en qué se diferencia de un MLP. Pero me di cuenta demasiado tarde de que tenía que hacer scroll hacia arriba a la introducción. Y sí, me parece correcto que no es muy buena idea reinventar o arreglar la implementación del scroll