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.
Respuestas:
TLDR
pornorte -Pasar divergencia contrastante, actualizar sesgo visible sij , basado en el vector de datos re utilizando:
Actualizar sesgo ocultohyo utilizando:
Dóndeb(t)j y c(t)i son los sesgos después del número de actualización t, η es la tasa de aprendizaje dj es el j th componente del vector de datos, y donde h^(n)j y v^(n)j 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 n pasos. 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 k vectores La regla de actualización es:
(Algunas personas usani 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 porh(n)i o v(n)j y la "activación" de una unidad, indicada h^(n)i o v^(n)i . 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.
fuente