TLDR
por norte-Pasar divergencia contrastante, actualizar sesgo visible sij, basado en el vector de datos re utilizando:
si( t )j←si( t - 1 )j+ η(rej-v^( n )j)
Actualizar sesgo oculto hyo utilizando:
c(t)i←c(t−1)i+η(h^(0)i−h^(n)i)
Dónde b(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 jth 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 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:
W(t)i,j←W(t−1)i,j+η(h^(0)i⋅dj−h^(n)i⋅v(n)j)
dónde:
- W(t)i,j 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^(n)i 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^(0)i 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
- v(n)j 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 h(n)i o v(n)jy 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.