Trosutbredningsalgoritm , förtroendeutbredningsalgoritm , även summaproduktalgoritm , är en marginaliseringsalgoritm som använder dubbelriktade meddelanden som förmedlas på en graf , som används för att sluta sig till grafiska probabilistiska modeller (som Bayesian- och Markov-nätverk ). Föreslog av J. Pearl 1982.
Tänk på en funktion:
, varFör att få sannolikheten måste du normalisera den:
Följande uppgifter övervägs:
Alla dessa problem är NP-kompletta , så deras komplexitet i värsta fall ökar exponentiellt. Vissa specialfall kan dock lösas snabbare, vilket är vad den här algoritmen gör .
Grafen som används av algoritmen består av hörn som motsvarar variabler och hörn som motsvarar funktioner. Funktioner är kopplade till variabler som de är beroende av.
Till exempel funktioner
motsvarar följande graf:
Två typer av meddelanden skickas i grafen: från funktioner till variabler och från variabler till funktioner.
Från variabel till funktion :
(här är uppsättningen av hörn intill i)
Från funktion till variabel :
I detta fall antas den tomma produkten vara lika med en. Från dessa formler kan man se att om en vertex bara har en angränsande punkt, så kan dess (vertex) meddelande beräknas utan att känna till de inkommande meddelandena.
Det finns två tillvägagångssätt, beroende på karaktären av den resulterande grafen.
Låt oss anta att grafen är ett träd . Med utgångspunkt från löven kommer vi gradvis att kringgå alla hörn och beräkna meddelanden (i det här fallet gäller standardregeln för att skicka meddelanden: ett meddelande kan bara överföras om det kan konstrueras helt).
Sedan, i ett antal steg lika med diametern på grafen , kommer algoritmen att avslutas.
Om grafen inte är ett träd kan du börja med att låta alla variabler skicka meddelande 1 och sedan ändra det när meddelanden från funktioner når dem.
En sådan algoritm fungerar i allmänhet felaktigt och gör en hel del onödigt arbete, men den är ändå användbar i praktiken.
När distributionen av meddelanden är klar, beräknas marginalerna enligt följande formel:
Om du bara behöver beräkna normaliserade marginaler ( verkliga sannolikheter ), kan du normalisera meddelanden från variabler till funktioner i varje steg:
,var är valda så att
Ur en matematisk synvinkel sönderdelar algoritmen om den ursprungliga nedbrytningen:
in i arbetet:
,där motsvarar funktionsnoder och variabla noder.
Inledningsvis, innan meddelanden och
Varje gång ett meddelande kommer från funktionen till variabeln och räknas om:
,Det är uppenbart att den totala produkten inte förändras från detta, och i slutet av överföringen av meddelanden kommer den att bli marginell .