¿Cómo se explica el algoritmo de propagación de creencias en las redes bayesianas?

Tomaré un ejemplo bastante simple para mostrar cómo funciona la propagación de creencias. Supongo que ya sabe cómo encontrar el producto factorial y cómo marginar (sumar) una variable del factor.
Es más fácil entender BP en gráficos de factores (podemos convertir cualquier red de Markov en un gráfico de factores).
Un gráfico de factores es un gráfico bipartito no dirigido donde tenemos nodos variables en un lado, y nodos de factores en el otro lado, y hay un borde entre el nodo variable [matemáticas] A [/ matemáticas] y el nodo de factores [matemáticas] F [/ matemáticas ] si la variable [matemática] A [/ matemática] aparece en el factor [matemática] F [/ matemática]. A continuación, llamaré a los nodos variables como simples nodos y factorizaré los nodos como características.
Consideremos un gráfico de factor simple como se muestra a continuación:
Supongamos que queremos calcular las probabilidades marginales de [matemática] A [/ matemática], [matemática] B [/ matemática] y [matemática] C [/ matemática] sin usar BP, luego primero tenemos que calcular la distribución conjunta y luego sumar variables
La distribución conjunta se puede encontrar multiplicando dos características [matemática] F1 [/ matemática] y [matemática] F2 [/ matemática]. Obtenemos la distribución conjunta como:
Aquí, como podemos ver, P (A = 0) = 14/42 = 1/3 , P (B = 0) = 12/42 = 2/7 , P (C = 0) = 12/42 = 2/7 .
Calculemos estos marginales usando BP en un gráfico de factor dado. En BP,
cada nodo envía un mensaje a su función vecina y cada función envía un mensaje a su nodo vecino. Básicamente, un mensaje es la creencia acerca de la probabilidad de algún nodo de estar en estado 0 o 1 (por eso lo llamamos propagación de creencias), y es solo una tabla de 2 entradas que especifica la probabilidad no normalizada de un nodo. De ahora en adelante, especificaré el mensaje o cualquier tabla potencial como un vector de fila, de modo que la última variable en factor cambie más rápido. Por ejemplo, [math] \ phi (A, B) [/ math] puede escribirse como [1 2 2 4] . Tenga en cuenta que en cualquier momento, podemos dividir la tabla completa por constante para simplificar los cálculos.

Un nodo [math] n [/ math] envía un mensaje a una función [math] f [/ math] multiplicando todos los mensajes que [math] n [/ math] obtiene de sus funciones vecinas excepto [math] f [/ math] . Intuitivamente, el nodo [matemática] n [/ matemática] le dice a la característica [matemática] f [/ matemática] lo que otras características piensan acerca de la probabilidad del nodo [matemática] n [/ matemática] de ser 0 o 1.

Tenga en cuenta que en nuestro ejemplo, el nodo A está conectado solo a la función F1, lo que significa que no tiene nada que decir a F1 sobre lo que otros piensan al respecto. Por lo tanto, siempre envía un mensaje de [1 1], es decir, ambos estados son igualmente probables. Similar es el caso con C a F2.

Un factor [math] f [/ math] envía un mensaje a un nodo [math] n [/ math] multiplicando todos los mensajes que [math] f [/ math] recibe de sus nodos vecinos excepto [math] n [/ math] , y luego multiplicando el producto resultante con su propia tabla de potencial, y finalmente sumando todas las variables excepto [math] n [/ math].

Dejaremos de transmitir este mensaje cuando los mensajes no cambien en las iteraciones.
Ahora comencemos el algoritmo de BP en un gráfico de factor dado:


  1. Todos los nodos comienzan el proceso. Como no han recibido ningún mensaje de los factores, envían el mensaje [1 1] a todos los factores.
  2. Ahora calculamos el mensaje de F1 a A. Para esto, multiplicamos todos los mensajes a F1 excepto a partir de A. Dado que solo hay otro mensaje (de B), no necesitamos multiplicar nada. Ahora multiplicamos este mensaje de B con la tabla potencial de F1 para obtener [1 2 2 4] , y finalmente después de sumar B, recibimos el mensaje de F1 a A como [3 6] = [1 2] .
    Del mismo modo, el mensaje de F1 a B es [1 2] , F2 a B es [4 5] y F2 a C es
    [1 2] .
  3. Ahora, nuevamente, los nodos envían mensajes a los factores. Como ya dije que el mensaje de A a F1 y de C a F2 siempre será [1 1] , necesitamos calcular el mensaje de B a F1 y de B a F2.
    El mensaje de B a F1 es la multiplicación de todos los mensajes a B, excepto de F1 a B. Como solo tenemos un mensaje restante para B, es decir, de F2 a B, no necesitamos multiplicar nada y simplemente enviar [4 5] desde B a F1. De manera similar, B envía [1 2] a F2.
  4. Ahora nuevamente los factores envían mensajes a los nodos. Para calcular el mensaje de F1 a A, primero multiplicamos la tabla de potencial de F1 con el mensaje de B a F1, y obtenemos [4 10 8 20] , y después de sumar B, obtenemos [14 28] = [1 2] .
    Del mismo modo, el mensaje de F1 a B es [1 2] , F2 a B es [4 5] y F2 a C es
    [4 10] = [2 5]
  5. Ahora nuevamente los nodos envían mensajes a los factores. El mensaje de B a F1 es [4 5] y de B a F2 es [1 2] .
  6. Ahora los factores envían mensajes a los nodos, el mensaje de F1 a A es el mismo que el mensaje anterior, es decir, [1 2] . Del mismo modo F1 a B es igual que el anterior, es decir
    [1 2] , de F2 a B también es igual que el anterior, es decir [4 5] , y F2 a C también es igual, es decir, [2 5]
  7. Como podemos ver, los mensajes de los factores a los nodos son exactamente los mismos que en la iteración anterior (paso 2), podemos detenernos aquí.
  8. Ahora para calcular el marginal de cada nodo, solo tenemos que multiplicar todos los mensajes a ese nodo.
    Entonces [matemáticas] \ phi (A) [/ matemáticas] = [1 2] , [matemáticas] \ phi (B) [/ matemáticas] = [1 2] * [4 5] = [4 10] = [2 5 ] , [matemáticas] \ phi (C) [/ matemáticas] = [2 5] .
  9. De estos potenciales no normalizados, podemos obtener las probabilidades respectivas:
    P (A = 0) = 1/3 , P (B = 0) = 2/7 , P (C = 0) = 2/7 , que son exactamente lo mismo que calculamos anteriormente a través de la distribución conjunta.

Si la pregunta es si puedo explicar la propagación de creencias, diría que no. Pero te sugiero que vayas a las conferencias en you-tube.

More Interesting

¿Dónde puedo encontrar a alguien que me enseñe 1 a 1 sobre el aprendizaje automático?

¿Cuál es el orden para aprender a usar los campos aleatorios de Markov para el procesamiento de imágenes?

¿Es efectivo el entrenamiento de confrontación contra los ejemplos de confrontación en general?

¿Por qué es importante el aprendizaje no supervisado?

¿Cómo puedo aprender a realizar simulaciones de dinámica molecular? ¿Cuáles son algunas buenas fuentes para aprender sobre este campo?

Si ya hemos conocido una función, ¿podemos generar una red neuronal para la inferencia, sin pasar por el proceso de capacitación que consume tiempo y energía?

Conjuntos de datos: ¿Cuáles son los principales corpus de texto utilizados por los lingüistas computacionales y los investigadores del procesamiento del lenguaje natural, y cuáles son las características / sesgos de cada corpus?

Cómo lidiar con un trabajo de investigación cuando contiene muchos materiales de fondo que no has estudiado

¿Cuáles son las principales similitudes y diferencias entre los alumnos basados ​​en instancias y las máquinas de vectores de soporte?

¿Cuáles son las mejores conferencias y revistas sobre aprendizaje automático?

¿Cuáles son los mejores algoritmos para construir sistemas de recomendación?

¿Cuál es la mejor manera de hacer reconocimiento / clasificación de múltiples objetos en tiempo real usando OpenCV y GPU (CUDA)?

¿Por qué el método de Newton solo es apropiado cuando el hessiano es positivo definido?

Para comenzar en los roles de la ciencia de datos, ¿los cursos de Jigsaw Academy o Coursera son lo suficientemente buenos?

¿Qué tipo de algoritmos utilizamos para el análisis de sentimientos? ¿Hay alguna lista para los algoritmos y sobre su estructura?