Actualización de sesgo con RBM (Máquinas de Boltzmann restringidas)

8

Soy muy nuevo en RBM, estoy intentando escribir un programa RBM ahora. Lo siento si esta es una pregunta tonta y / o respondida aquí ya.

He leído algunos artículos en línea y preguntas aquí, pero no puedo encontrar nada sobre cómo actualizar los sesgos (o los pesos de sesgo). He leído acerca de cómo configurarlos inicialmente. Referencias fugaces a las que se deben actualizar. Geoff Hinton menciona el sesgo, por supuesto, y aparece en sus ecuaciones, (he leído algunos de sus documentos, he visto un par de presentaciones en video) pero no puedo encontrar ninguna mención en sus documentos de sesgo que se modifiquen una vez establecido , o cómo / cuándo / por qué hacerlo. ¡Debo estar perdiendo algo!

El artículo de Edwin Chen se recomienda aquí: http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/ No menciona cómo actualizar / 'aprender' los prejuicios; están alterados en su programa pero no entiendo su código. (Tiene una tabla que proporciona los pesos actualizados que no parece correcto; extrañamente, da un peso sesgo, lo que sea que eso pueda significar).

¡Um, así que no estoy seguro de por qué es tan difícil encontrar material! Gracias por cualquier ayuda.

Adam P
fuente
Mire aquí: image.diku.dk/igel/paper/AItRBM-proof.pdf en la sección 4.1 (para la derivada de la probabilidad de los términos de sesgo) y 5 (para algoritmos de ajuste aproximados).
shadowtalker
Muchas gracias! Bueno, la mayoría de las matemáticas están muy por encima de mi cabeza, pero entiendo la línea sobre cómo actualizar el sesgo en p28 :-) y será genial tenerlo cuando quiera profundizar en la teoría. PD Lo hice funcionar bien hoy sin ninguna unidad de sesgo o pesos en absoluto. (Smolenksy, quien los inventó, los llamó Harmoniums, un nombre mucho más agradable, creo que los llamaré así).
Adam P
¡me alegro de oirlo! Sugiero escribir lo que encontraste y responder tu propia pregunta aquí. De esa forma, otros pueden buscar aquí y encontrarlo fácilmente (no se buscan comentarios, solo preguntas y respuestas)
shadowtalker
También apuesto a que si realmente lees detenidamente las matemáticas, encontrarás que no es tan complicado. Realmente es solo un montón de derivados. Muchas veces simplemente tiran mucho en la página a la vez y omiten pasos, pero estos documentos generalmente no son tan esotéricos, excepto cuando prueban cosas como la existencia y los teoremas de convergencia
shadowtalker

Respuestas:

5

TLDR

por n-Pasar divergencia contrastante, actualizar sesgo visible bj, basado en el vector de datos d utilizando:

bj(t)bj(t1)+η(djv^j(n))

Actualizar sesgo oculto hi utilizando:

ci(t)ci(t1)+η(h^i(0)h^i(n))

Dónde bj(t) y ci(t) son los sesgos después del número de actualización t, η es la tasa de aprendizaje dj es el jth componente del vector de datos, y donde h^j(n) y v^j(n) son las probabilidades de unidad oculta i y unidad visible j estar activo una vez que el RBM ha sido expuesto a los datos y ejecutar npasos. Esto supone un tamaño de minibatch de 1; para un tamaño práctico de minibatchk, promediar las actualizaciones obtenidas durante el k vectores de datos


Explicación completa

Tuve el mismo problema. Una buena manera de pensarlo es que los prejuicios son en sí mismos solo pesos. A menudo, en los modelos de redes neuronales, el sesgo de una unidad se modela como el peso de un enlace que conecta la unidad en cuestión a una unidad "siempre encendida", es decir, una unidad imaginaria cuya activación es siempre 1.

En el caso de RBM, eso significaría que usted piensa que hay una unidad visible adicional cuya salida es siempre 1. Esta unidad visible se une a cada una de las unidades ocultas (al igual que cualquier otra unidad visible), y el peso de estas conexiones son los prejuicios de las respectivas unidades ocultas. Del mismo modo, los sesgos de las unidades visibles se pueden modelar imaginando una unidad oculta adicional, cuyo valor es siempre uno, y que se conecta a cada una de las unidades visibles, siendo los pesos de estas conexiones los sesgos visibles.

Incluso podría implementar su RBM de esta manera, pero no creo que las personas usualmente lo hagan. El punto es que, al pensarlo de esta manera, puede usar (esencialmente) la misma regla de actualización para los sesgos que para los pesos, ya que los sesgos son solo pesos que se conectan a unidades "siempre encendidas".

Seamos concretos. Escribiré lo de siempren-step Regla de actualización de divergencia contrastante, ignorando la regularización por simplicidad. También por simplicidad, esta regla de actualización es para un "minibatch" de 1 vector de datos. La actualización para un minibatch conk vectores es la actualización promedio de todos kvectores La regla de actualización es:

Wi,j(t)Wi,j(t1)+η(h^i(0)djh^i(n)vj(n))
dónde:
  • Wi,j(t) es el peso que conecta la unidad visible vj a la unidad oculta hi después del número de actualización t
  • η es la tasa de aprendizaje
  • h^i(n) es la probabilidad de unidad oculta i estar activo una vez que la máquina ha sido expuesta al vector de datos d y evolucionado por n pasos.
    • Lo que significa que h^i(0) es solo la activación de la unidad oculta i en respuesta inmediata al vector de datos
  • dj es el jComponente th del vector de datos d
  • vj(n) es el estado de la unidad visible j una vez que la máquina ha estado expuesta al vector de datos y evolucionado para n pasos.

(Algunas personas usan i para indexar las unidades visibles y j para indexar los ocultos, pero aún así escribir Wi,j --- no importa siempre que multiplique los valores correctos juntos).

Tenga cuidado de distinguir el "estado" de una unidad, denotado por hi(n) o vj(n)y la "activación" de una unidad, indicada h^i(n) o v^i(n). El estado de una unidad es 0 o 1, mientras que la activación es cualquier número real entre 0 y 1. Si la activación es 0.8, es probable que el estado sea 1, pero el 20% del tiempo será 0.

Al tratar los sesgos como pesos para las unidades "siempre encendidas", encontrará que la ecuación anterior se simplifica a las que se dan para las actualizaciones de sesgo bajo el " TLDR ". Sin embargo, hay una ligera diferencia en la actualización de los sesgos visibles: aquí se usa la activación visible en lugar del estado . La activación tiene el mismo valor esperado, pero tiene una varianza menor que el estado, por lo que esto reduce el ruido en la señal de aprendizaje. Mira esta guía §3 para una breve discusión sobre cuándo usar activaciones en lugar de estados es deseable.

Edward Newell
fuente
Edward Newell ¡Muchas gracias por la explicación clara! ¿Por casualidad tiene un código MATLAB para este ejemplo (como se describe en el blog de Edwin Chan) y podría compartir?
Bill Ancalagon el negro
Me alegra que haya ayudado. Lamentablemente, solo tengo una implementación de Python. Y, en este momento, mi implementación difiere de lo anterior (estaba experimentando con diferentes reglas de actualización ...). ¡Buena suerte!
Edward Newell