Přeskočit na obsah
coden

Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač

Sdružené rozdělení a jeho faktorizace, bayesovská síť a tabulky podmíněných pravděpodobností, odvozování výčtem, vysvětlení pryč, d-separace a přibližné odvozování vzorkováním — na síti zataženo, postřikovač, déšť, mokrá tráva.

13 minut Matěj Žalmánek 2026-10-15

Série Základy AI Díl 40 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Jak bayesovská síť zkrátí obrovskou tabulku pravděpodobností na pár malých tabulek.
  • Jak se v síti odvozuje od následků k příčinám a co je vysvětlení pryč.
  • Jak z grafu vyčíst, které veličiny jsou nezávislé, a jak se pravděpodobnosti odhadují vzorkováním.

Co se hodí znát předem: Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového, Grafy a stromy: struktura, na které stojí hledání i neuronové sítě

Ráno vyjdete ven a tráva je mokrá. Pršelo, nebo běžel postřikovač? A když se pak od souseda dozvíte, že v noci pršelo — změní to, co si myslíte o postřikovači? Člověk takhle uvažuje bez přemýšlení. Stroj to dokáže taky, pokud ví, co s čím souvisí. Bayesovská síť je obrázek těchto souvislostí, ze kterého se dá spočítat odpověď na libovolnou otázku. Judea Pearl za ni a za navazující teorii příčinnosti dostal v roce 2011 Turingovu cenu.

Navazuje na díly Podmíněná pravděpodobnost a Bayesova věta a Grafy a stromy.

1. Problém velké tabulky

Úplná informace o několika náhodných veličinách je jejich sdružené rozdělení — pravděpodobnost každé kombinace hodnot. Pro čtyři ano/ne veličiny je kombinací 16, tedy 15 nezávislých čísel. Pro 37 veličin (tolik má známá lékařská síť ALARM pro monitorování pacientů na anestezii) by to bylo přes 137 miliard čísel, i kdyby byly všechny jen ano/ne. Takovou tabulku nikdo nesestaví, neuloží ani neodhadne z dat. Zachrání nás to, že většina veličin spolu souvisí jen nepřímo.

Definice — sdružené rozdělení a počet jeho parametrů

Nechť (Ω, 𝓕, P) je pravděpodobnostní prostor (viz díl Co je pravděpodobnost), n ≥ 1 a X1, …, Xn jsou diskrétní náhodné veličiny na něm (viz díl Náhodná veličina); veličina Xi nabývá hodnot z konečné nebo spočetné množiny 𝒳i, i = 1, …, n. Sdružené rozdělení veličin X1, …, Xn je funkce 𝒳1 × ⋯ × 𝒳n → [0, 1], která každé kombinaci hodnot (x1, …, xn) přiřadí číslo

P(x1, …, xn) = P({ω ∈ Ω : X1(ω) = x1 ∧ … ∧ Xn(ω) = xn}),

také psané P(x1, …, xn) = P(X1 = x1, …, Xn = xn). Z axiomů pravděpodobnosti plyne:

  1. P(x1, …, xn) ≥ 0 pro všechna (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n;
  2. ∑(x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n P(x1, …, xn) = 1.

Počet parametrů. Jsou-li všechny veličiny dvouhodnotové (|𝒳i| = 2 pro i = 1, …, n, hodnoty ano/ne), má definiční obor 2n prvků. Libovolných 2n − 1 hodnot lze zvolit nezávisle (nezáporných, se součtem nejvýš 1) a poslední je podmínkou 2 určena jako 1 minus jejich součet. Sdružené rozdělení n dvouhodnotových veličin má tedy

2n − 1

nezávislých parametrů — tolik čísel je potřeba, aby bylo určeno jednoznačně.

Výpočet. 24 − 1 = 15; 237 − 1 = 137 438 953 471.

Věta — řetězové pravidlo

Nechť (Ω, 𝓕, P) je pravděpodobnostní prostor, n ≥ 2, X1, …, Xn jsou diskrétní náhodné veličiny s hodnotami v 𝒳1, …, 𝒳n a (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n je kombinace hodnot, pro kterou P(x1, …, xn−1) > 0. Zápisem P(xi | x1, …, xi−1) rozumíme podmíněnou pravděpodobnost (viz díl Podmíněná pravděpodobnost) jevu {Xi = xi} za podmínky {X1 = x1, …, Xi−1 = xi−1}. Pak

P(x1, …, xn) = P(x1) · P(x2 | x1) · P(x3 | x1, x2) ⋯ P(xn | x1, …, xn−1) = ∏i=1n P(xi | x1, …, xi−1),

kde činitel pro i = 1 je P(x1) (prázdná podmínka).

Důkaz: pro k ≤ n − 1 je jev {X1 = x1, …, Xk = xk} nadmnožinou jevu {X1 = x1, …, Xn−1 = xn−1}, takže má kladnou pravděpodobnost a všechny podmíněné pravděpodobnosti ve vzorci jsou definované. Z definice podmíněné pravděpodobnosti

P(xn | x1, …, xn−1) = P(x1, …, xn)/P(x1, …, xn−1),

tedy P(x1, …, xn) = P(xn | x1, …, xn−1) · P(x1, …, xn−1). Totéž použijeme na druhý činitel a tak dál, až zbude P(x1). ∎

Řetězové pravidlo nic nešetří: poslední činitel stále závisí na všech předchozích veličinách, takže je to jen jiný zápis téže obrovské tabulky. Úspora přijde, až některé podmínky vypustíme.

2. Bayesovská síť

Definice — bayesovská síť

Nechť n ≥ 1 a X1, …, Xn jsou veličiny, Xi s hodnotami v konečné neprázdné množině 𝒳i, i = 1, …, n. Bayesovská síť nad těmito veličinami je dvojice (G, Θ), kde

  1. G = (V, H) je orientovaný acyklický graf (DAG, viz díl Grafy a stromy) s množinou vrcholů V = {X1, …, Xn} a množinou hran H ⊆ V × V; rodiče vrcholu Xi jsou rodiče(Xi) = {Xj ∈ V : (Xj, Xi) ∈ H};
  2. Θ přiřazuje každému vrcholu Xi tabulku podmíněných pravděpodobností: pro každou kombinaci hodnot u jeho rodičů rozdělení P( · | u) na 𝒳i, tj. čísla P(xi | u) ≥ 0 pro xi ∈ 𝒳i taková, že ∑xi ∈ 𝒳i P(xi | u) = 1. Vrchol bez rodičů má jediné rozdělení P(xi).

Síť určuje sdružené rozdělení veličin X1, …, Xn předpisem

P(x1, …, xn) = ∏i=1n P(xi | rodiče(Xi))   pro všechna (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n,

kde v i-tém činiteli za rodiče(Xi) dosazujeme hodnoty, které mají rodiče v kombinaci (x1, …, xn). Součin je nezáporný a přes všechny kombinace sčítá do 1 (sečteme-li nejdřív přes hodnoty vrcholu, který je v topologickém pořadí poslední, jeho činitel dá 1 a zbude síť bez něj), takže je to opravdu sdružené rozdělení.

Laicky řečeno

Šipky vedou od příčin k následkům. U každé veličiny stačí vědět, jak závisí na svých přímých příčinách — nic víc. Pravděpodobnost celé situace je součin těchto místních čísel. Místo jedné obrovské tabulky máme pár malých.

Proč smí síť napsat jen P(xi | rodiče) a ne celou minulost jako řetězové pravidlo? Protože o grafu předpokládá podmíněné nezávislosti.

Definice — podmíněná nezávislost

Nechť (Ω, 𝓕, P) je pravděpodobnostní prostor a A, C, E jsou diskrétní náhodné veličiny na něm s hodnotami v 𝒜, 𝒞, ℰ (každá z nich může být i skupina veličin, tj. vektor; E smí být prázdná skupina). Zkráceně píšeme P(a | c, e) = P(A = a | C = c, E = e) apod. Veličiny A a C jsou podmíněně nezávislé při E, píšeme A ⊥ C | E, právě když

∀a ∈ 𝒜 ∀c ∈ 𝒞 ∀e ∈ ℰ :   P(c, e) > 0 ⇒ P(a | c, e) = P(a | e).

Slovy: když známe hodnotu E, znalost hodnoty C nezmění pravděpodobnost žádné hodnoty A. Rovnost v definici:

P(a | c, e) = P(a | e)

P(a | c, e)
co víme o A, když známe E a navíc C
P(a | e)
co víme o A ze samotného E; rovnost říká, že C už nic nepřidá — veškerá souvislost A s C vede přes E
Ekvivalentně P(a, c | e) = P(a | e) · P(c | e) pro všechna a, c a všechna e s P(e) > 0. Pro prázdné E je to obyčejná nezávislost.
Věta — faktorizace je řetězové pravidlo plus místní nezávislosti

Nechť G = (V, H) je orientovaný acyklický graf s vrcholy V = {X1, …, Xn}, které jsou diskrétní náhodné veličiny na pravděpodobnostním prostoru (Ω, 𝓕, P), a vrcholy jsou očíslované topologicky: (Xj, Xi) ∈ H ⇒ j < i. Potomci vrcholu Xi jsou vrcholy různé od Xi, do kterých z Xi vede orientovaná cesta; nepotomci(Xi) = V ∖ ({Xi} ∪ potomci(Xi)). Předpokládejme místní Markovovu podmínku:

∀i ∈ {1, …, n} :   Xi ⊥ (nepotomci(Xi) ∖ rodiče(Xi)) | rodiče(Xi),

tj. každá veličina je při známých rodičích podmíněně nezávislá na všech ostatních veličinách, které nejsou jejími potomky. Pak pro každou kombinaci hodnot (x1, …, xn) s P(x1, …, xn−1) > 0 platí

P(x1, …, xn) = ∏i=1n P(xi | rodiče(Xi)).

Důkaz: v řetězovém pravidle v topologickém pořadí stojí P(xi | x1, …, xi−1). Mezi X1, …, Xi−1 jsou všichni rodiče Xi (rodič má menší číslo) a žádný jeho potomek (potomek je v pořadí až za ním), tedy {X1, …, Xi−1} ⊆ nepotomci(Xi). Podle Markovovy podmínky můžeme všechny veličiny kromě rodičů z podmínky vypustit a zbude P(xi | rodiče(Xi)). ∎

Platí to i obráceně: každé rozdělení dané součinem tabulek místní Markovovu podmínku splňuje. Proto lze bayesovskou síť definovat kterýmkoli z obou způsobů.

Naše síť: když je zataženo, je pravděpodobnější déšť a méně pravděpodobné, že někdo zapne postřikovač. Déšť i postřikovač udělají mokrou trávu. Čísla jsou z oblíbeného příkladu Kevina Murphyho:

zataženo Z P(Z) 0,5 postřikovač P Z P(P) − 0,5 + 0,1 déšť D Z P(D) − 0,2 + 0,8 mokrá tráva T P D P(T) + − 0,9 + + 0,99 − + 0,9 − − 0
Síť „mokrá tráva“ s tabulkami podmíněných pravděpodobností + ano, − ne

Síť má 1 + 2 + 2 + 4 = 9 čísel místo 15. U čtyř veličin je to malá úspora, u stovek obrovská: pokud má každý vrchol nejvýš k rodičů, roste počet čísel s n lineárně (n · 2k), ne exponenciálně (2n). Pravděpodobnost situace „zataženo, postřikovač neběžel, pršelo, tráva mokrá“ je 0,5 · 0,9 · 0,8 · 0,9 = 0,324 (barvy podle vzorce níže).

P(z, p, d, t) = P(z) · P(p | z) · P(d | z) · P(t | p, d)

P(z)
zataženo nemá rodiče, jeho tabulka je jediné číslo; v příkladu 0,5
P(p | z)
postřikovač závisí jen na mracích — tady se od řetězového pravidla nic neliší; v příkladu neběžel při zatažené obloze: 1 − 0,1 = 0,9
P(d | z)
řetězové pravidlo by chtělo P(d | z, p); síť předpokládá, že při známé obloze postřikovač o dešti nic neřekne, a tak p z podmínky vypadne; v příkladu 0,8
P(t | p, d)
řetězové pravidlo by chtělo P(t | z, p, d); tráva o mracích „ví“ jen přes déšť a postřikovač, a tak vypadne z; v příkladu (postřikovač ne, déšť ano) 0,9
Každý vypuštěný člen podmínky je jedna podmíněná nezávislost, kterou síť předpokládá — právě ty zkrátí 15 čísel na 9.

3. Odvozování: z následku k příčině

Definice — odvozování výčtem

Nechť (G, Θ) je bayesovská síť nad veličinami X1, …, Xn a tyto veličiny jsou rozdělené do tří disjunktních skupin: dotaz Q (jedna veličina s hodnotami v 𝒬), důkazy E = (E1, …, Em) s pozorovanými hodnotami e = (e1, …, em) a skryté veličiny Y (všechny ostatní) s množinou kombinací hodnot 𝒴. Předpokládejme P(e) > 0. Pak pro každé q ∈ 𝒬 je

P(q | e) = ∑y ∈ 𝒴 P(q, e, y)/∑q′ ∈ 𝒬 ∑y ∈ 𝒴 P(q′, e, y),

kde každé P(q, e, y) je hodnota sdruženého rozdělení sítě — součin čísel z tabulek podle faktorizace. Odvozování výčtem je algoritmus, který podle tohoto vzorce počítá:

Vstup: síť (G, Θ), dotazová veličina Q, důkazy E = e s P(e) > 0. Výstup: čísla P(q | e) pro všechna q ∈ 𝒬. Kroky:

  1. Pro každé q ∈ 𝒬 polož S(q) := 0.
  2. Pro každé q ∈ 𝒬 a každé y ∈ 𝒴 spočítej součin P(q, e, y) z tabulek a přičti ho k S(q).
  3. Po projití všech (konečně mnoha) dvojic (q, y) polož Z := ∑q′ ∈ 𝒬 S(q′) = P(e) a vrať P(q | e) = S(q)/Z pro každé q ∈ 𝒬.
Laicky řečeno

Projdeme všechny možné světy, které souhlasí s tím, co víme (tráva je mokrá), a podíváme se, jakou váhu mezi nimi mají ty, kde pršelo. Je to Bayesova věta z dílu o podmíněné pravděpodobnosti, jen se sčítá přes víc veličin najednou.

P(q | e) = ∑y P(q, e, y)/∑q′, y P(q′, e, y)

e
důkazy — hodnoty, které jsme pozorovali (u nás mokrá tráva); ve všech sčítaných světech jsou pevné
∑y
skryté veličiny (u nás zataženo a postřikovač) neznáme a nezajímají nás, tak sečteme všechny jejich možnosti — marginalizace; světy jsou navzájem neslučitelné, takže se pravděpodobnosti sčítají
P(q, e, y)
pravděpodobnost jednoho úplného světa, kde platí dotaz i důkazy — součin čísel z tabulek podle faktorizace
∑q′, y P(q′, e, y)
= P(e), váha všech světů, které souhlasí s důkazy; dělení je definice podmíněné pravděpodobnosti P(q | e) = P(q, e)/P(e) a zaručí, že ∑q P(q | e) = 1 (u ano/ne dotazu P(Q | e) + P(¬Q | e) = 1)
Příklad — P(déšť | mokrá tráva) výčtem

Důkaz je T = ano, dotaz D, skryté jsou Z a P. Světů s mokrou trávou je 23 = 8; každý je součin P(z) · P(p | z) · P(d | z) · P(t | p, d):

déšťzataženopostřikovačsoučinP(svět)
anoanoano0,5 · 0,1 · 0,8 · 0,990,0396
anoneano0,5 · 0,5 · 0,2 · 0,990,0495
anoanone0,5 · 0,9 · 0,8 · 0,90,3240
anonene0,5 · 0,5 · 0,2 · 0,90,0450
neanoano0,5 · 0,1 · 0,2 · 0,90,0090
neneano0,5 · 0,5 · 0,8 · 0,90,1800
neanone0,5 · 0,9 · 0,2 · 00,0000
nenene0,5 · 0,5 · 0,8 · 00,0000

Řádky, kde pršelo, jsou světy P(q, e, y) pro q = déšť ano; jejich součet přes skryté Z, P dá P(D, T) = 0,4581, součet všech osmi P(T) = 0,6471. Poslední dva řádky jsou nulové: bez deště i bez postřikovače tráva mokrá není. Tedy (barvy podle vzorce výše)

P(D | T) = 0,4581/0,6471 = 0,708.

def dotaz(Q, dukazy, sit):
    citatel = jmenovatel = 0.0
    for svet in vsechna_prirazeni(sit):              # 2^n úplných světů
        if any(svet[k] != v for k, v in dukazy.items()):
            continue                                 # nesouhlasí s důkazy
        p = 1.0
        for uzel in sit:                             # faktorizace sítě
            p *= P(uzel, svet[uzel], svet[rodice(uzel)])
        jmenovatel += p                              # → P(e)
        if svet[Q]:
            citatel += p                             # → P(Q, e)
    return citatel / jmenovatel

Předem (bez jakéhokoli pozorování) je pravděpodobnost deště 0,5 a postřikovače 0,3. Mokrá tráva obojí zvýší: P(déšť | mokrá tráva) = 0,708 a P(postřikovač | mokrá tráva) = 0,430. Déšť je pravděpodobnější vysvětlení, protože prší častěji, než běží postřikovač. Mokrá tráva zvýší i pravděpodobnost, že bylo zataženo — z 0,5 na 0,576 —, ačkoli tráva a mraky spolu přímo nesouvisejí. Informace teče sítí proti šipkám.

4. Vysvětlení pryč

Teď se dozvíme, že v noci opravdu pršelo. Co se stane s postřikovačem?

00,51 0,30 0,43 0,19 postřikovač 0,50 0,71 0,32 déšť příčina mokré trávy (kategorie) pravděpodobnost P (0–1)
Postřikovač a déšť: předem, při mokré trávě a při mokré trávě, když víme o druhé příčině předem tráva je mokrá a víme o druhé příčině

Pravděpodobnost postřikovače spadne z 0,430 na 0,194. Déšť mokrou trávu už vysvětlil, takže pro postřikovač nezbývá důvod. Naopak když víme, že běžel postřikovač, klesne pravděpodobnost deště ze 0,708 na 0,320. Tomuto jevu se říká vysvětlení pryč (explaining away). Dvě příčiny, které spolu předem souvisely jen slabě, se jakmile pozorujeme jejich společný následek, začnou navzájem „vytlačovat“. A kdybychom věděli, že nepršelo, postřikovač by musel běžet: P(postřikovač | mokrá tráva, ne déšť) = 1, protože v naší síti tráva sama od sebe mokrá být nemůže.

Příklad — vysvětlení pryč v číslech

Z tabulky v předchozím příkladu: světy, kde pršelo, běžel postřikovač a tráva je mokrá, mají dohromady P(P, D, T) = 0,0396 + 0,0495 = 0,0891. Proto

P(P | T, D) = P(P, D, T)/P(D, T) = 0,0891/0,4581 = 0,194,

P(D | T, P) = P(P, D, T)/P(P, T) = 0,0891/0,2781 = 0,320

(jmenovatel je pravděpodobnost důkazů P(e), barvy podle vzorce odvozování výčtem výše).

Formálně je vysvětlení pryč nerovnost P(P | T, D) < P(P | T): potvrzení jedné příčiny sníží pravděpodobnost druhé (0,194 < 0,430).

5. Co se dá ze sítě vyčíst: d-separace

Graf neříká jen, jak počítat — říká i, které veličiny jsou na sobě nezávislé, a to bez jediného čísla. Všechny možnosti se skládají ze tří základních tvarů:

  • Řetěz A → B → C: A a C spolu souvisejí, ale když známe B, už ne. (Zataženo → déšť → mokrá tráva: kdo ví, jestli pršelo, tomu mraky o trávě nic neřeknou.)
  • Vidlička A ← B → C: společná příčina dělá A a C závislými; když ji známe, závislost zmizí. (Postřikovač a déšť předem souvisejí přes mraky: P(postřikovač | déšť) = 0,18, ale P(postřikovač | nepršelo) = 0,42. Když víme, jestli je zataženo, jsou nezávislé.)
  • Srážka A → B ← C: příčiny jsou nezávislé, dokud nepozorujeme společný následek — pak se stanou závislými. To je vysvětlení pryč.
Definice — d-separace

Nechť G = (V, H) je orientovaný acyklický graf, A, C ∈ V jsou různé vrcholy a E ⊆ V ∖ {A, C} je množina vrcholů (pozorované veličiny).

  1. Neorientovaná cesta mezi A a C je posloupnost navzájem různých vrcholů (V0, V1, …, Vk), k ≥ 1, s V0 = A, Vk = C, taková, že (Vj−1, Vj) ∈ H ∨ (Vj, Vj−1) ∈ H   pro j = 1, …, k (sousední vrcholy spojuje hrana, směr šipky nehraje roli).
  2. Vnitřní vrchol Vj cesty (0 < j < k) je středem řetězu, právě když Vj−1 → Vj → Vj+1 nebo Vj−1 ← Vj ← Vj+1; vidličky, právě když Vj−1 ← Vj → Vj+1; srážky, právě když Vj−1 → Vj ← Vj+1 (U → W znamená (U, W) ∈ H). Každý vnitřní vrchol je právě jedním z těchto tří.
  3. Cesta je zablokovaná množinou E, právě když má vnitřní vrchol Vj, pro který platí aspoň jedno z: (a)  Vj je středem řetězu nebo vidličky ∧ Vj ∈ E, (b)  Vj je středem srážky ∧ ({Vj} ∪ potomci(Vj)) ∩ E = ∅, kde potomci(Vj) jsou vrcholy, do kterých z Vj vede orientovaná cesta.
  4. Vrcholy A a C jsou d-separované množinou E, právě když je množinou E zablokovaná každá neorientovaná cesta mezi A a C.

Věta (Verma a Pearl). Nechť (G, Θ) je bayesovská síť, P sdružené rozdělení, které určuje, a A, C, E jako výše. Jsou-li A a C d-separované množinou E, pak A ⊥ C | E vzhledem k P — a to pro každou volbu tabulek Θ.

Laicky řečeno

Informace teče grafem po cestách. Známá veličina uprostřed řetězu nebo vidličky tok zastaví — už je „vysvětlená“. U srážky je to obráceně: dokud následek neznáme, tok tam stojí; jakmile ho pozorujeme, otevře se. Z obrázku se tak dá vyčíst, co je potřeba měřit a co je zbytečné.

V naší síti jsou zataženo a mokrá tráva d-separované, když známe postřikovač i déšť — výpočet to potvrdí: pravděpodobnost zatažené oblohy pak na trávě vůbec nezávisí.

Příklad — tři tvary ověřené výpočtem
  • Vidlička postřikovač ← zataženo → déšť. Bez znalosti oblohy: P(P | D) = 0,18 ≠ P(P) = 0,3, závislé. Při známé obloze: P(P | Z, D) = 0,1 = P(P | Z), tedy P ⊥ D | Z.
  • Srážka postřikovač → mokrá tráva ← déšť. Při známé obloze jsou P a D nezávislé (P(P | Z, D) = P(P | Z, ¬D) = 0,1), ale jakmile pozorujeme trávu, už ne: P(P | Z, D, T) = 0,109, kdežto P(P | Z, ¬D, T) = 1.
  • D-separace zatažené oblohy a mokré trávy množinou {P, D}: obě cesty Z → P → T a Z → D → T jsou řetězy se známým středem, takže jsou zablokované. A opravdu: P(Z | P, D) = 0,444 a P(Z | P, D, T) = 0,444; P(Z | P, ¬D) = 0,048 a P(Z | P, ¬D, T) = 0,048.

6. Přibližné odvozování vzorkováním

Odvozování výčtem prochází všechny kombinace skrytých veličin — v obecné síti exponenciálně mnoho. Přesné odvozování v bayesovských sítích je NP-těžké. Pro velké sítě se proto pravděpodobnosti odhadují simulací.

Algoritmy — vzorkování se zamítáním a vážená věrohodnost

Oba algoritmy mají stejný vstup: bayesovskou síť (G, Θ) nad veličinami X1, …, Xn očíslovanými topologicky (rodič má menší číslo než dítě), dotaz Q = q, důkazy E = e a počet vzorků N ∈ ℕ, N ≥ 1; a stejný výstup: odhad P̂(q | e) čísla P(q | e). Vylosovat xi znamená zvolit náhodně hodnotu z 𝒳i podle rozdělení P( · | u) z tabulky vrcholu Xi, kde u jsou hodnoty jeho rodičů už určené v tomto vzorku.

Vzorkování se zamítáním:

  1. Polož Npřij := 0, Nq := 0.
  2. Opakuj Nkrát: pro i = 1, …, n vylosuj xi. Souhlasí-li vzorek s důkazy (každá důkazová veličina má v něm pozorovanou hodnotu), zvyš Npřij o 1 a platí-li v něm navíc Q = q, zvyš o 1 i Nq; jinak vzorek zahoď.
  3. Po N opakováních skonči a vrať P̂(q | e) = Nq/Npřij (pro Npřij = 0 odhad není definován).

Vážená věrohodnost:

  1. Polož W := 0, Wq := 0.
  2. Opakuj Nkrát (k-tý vzorek): polož wk := 1 a pro i = 1, …, n: je-li Xi důkazová veličina s pozorovanou hodnotou ei, polož xi := ei (nelosuj) a wk := wk · P(ei | u), kde u jsou hodnoty rodičů ve vzorku; jinak xi vylosuj. Pak W := W + wk a platí-li ve vzorku Q = q, i Wq := Wq + wk.
  3. Po N opakováních skonči a vrať P̂(q | e) = Wq/W (pro W = 0 odhad není definován).
Laicky řečeno

Zamítání je poctivé, ale plýtvá: když je důkaz vzácný, skoro všechny vzorky zahodí. Vážená věrohodnost nezahazuje nic — jen každému vzorku přidělí váhu podle toho, jak dobře sedí s tím, co víme.

def zamitani(Q, dukazy, n, sit):
    prijato = ano = 0
    for _ in range(n):
        svet = {}
        for uzel in sit:                             # od příčin k následkům
            svet[uzel] = nahoda() < P(uzel, True, svet[rodice(uzel)])
        if any(svet[k] != v for k, v in dukazy.items()):
            continue                                 # do koše
        prijato += 1
        ano += svet[Q]
    return ano / prijato

def vazena(Q, dukazy, n, sit):
    s = s_ano = 0.0
    for _ in range(n):
        svet, w = {}, 1.0
        for uzel in sit:
            p = P(uzel, True, svet[rodice(uzel)])
            if uzel in dukazy:                       # důkaz nelosujeme…
                svet[uzel] = dukazy[uzel]
                w *= p if dukazy[uzel] else 1 - p    # …ale zvážíme, jak je pravděpodobný
            else:
                svet[uzel] = nahoda() < p
        s += w
        s_ano += w * svet[Q]
    return s_ano / s

P̂(Q | e) = ∑k wk [Q platí ve vzorku k]/∑k wk,   wk = ∏j P(ej | rodiček)

wk
váha vzorku (zeleně jako křivka vážené věrohodnosti v grafu) — součin pravděpodobností všech důkazů ej při hodnotách jejich rodičů, které ve vzorku k padly: důkazy jsme nelosovali, ale vnutili, a tak musíme zohlednit, jak pravděpodobné by byly při ostatních vylosovaných hodnotách — jinak by odhad byl vychýlený
[Q platí ve vzorku k]
1, když ve vzorku platí dotaz, jinak 0 — započítáme jen váhu vzorků, kde pršelo
∑k wk
celková váha; dělením z ní uděláme podíl, stejně jako dělení P(e) při výčtu. Díky němu nevadí, že váhy nesčítají do 1
Zamítání je zvláštní případ: váha je 1 pro vzorky, které s důkazy souhlasí, a 0 pro ostatní.
Příklad — váhy při důkazu „tráva je mokrá“

Jediný důkaz je T = ano, jeho rodiče jsou postřikovač a déšť. Váha vzorku je proto prostě P(T = ano | p, d) z tabulky mokré trávy:

  • postřikovač i déšť: w = 0,99,
  • jen jedno z nich: w = 0,9,
  • ani jedno: w = 0 — takový vzorek nepřispěje nikam, stejně jako by ho zamítání zahodilo.

(Barva podle vzorce výše.)

Na obloze váha nezávisí: zataženo není rodičem trávy.

0,60,70,8 101001 00010 000 vzorky (počet, log. měřítko) odhad P(déšť | mokrá) (0–1)
Odhad P(déšť | mokrá tráva) podle počtu vzorků zamítání vážená věrohodnost přesně 0,708

Se sto vzorky dalo zamítání odhad 0,686 a použilo jich jen 70 — zbylých 30 mělo suchou trávu a šlo do koše. S 10 000 vzorky (z nichž zbylo 6 524) je odhad 0,703, blízko přesné hodnotě 0,708. Chyba klesá jako 1/√N, jak říká centrální limitní věta: pro desetkrát přesnější odhad je potřeba stokrát víc vzorků.

σP̂ = √p(1 − p)/Npřij,   Npřij ≈ N · P(e)

p(1 − p)
rozptyl jednoho vzorku typu ano/ne (alternativní rozdělení s pravděpodobností p); největší je pro p = 0,5, kdy je jeden vzorek nejméně předvídatelný
Npřij
počet vzorků, které se opravdu počítají; u zamítání jen ty, které prošly, a těch je v průměru podíl P(e) — u vzácného důkazu skoro žádné. Rozptyl průměru N nezávislých vzorků je N-krát menší
Odmocnina převádí rozptyl zpátky na jednotky pravděpodobnosti — proto chyba klesá jen jako 1/√N. (Rovnost je přibližná: počet přijatých vzorků je sám náhodný.)
Příklad — jak velkou chybu čekat

Přesně je p = 0,708 a P(e) = P(T) = 0,6471, takže z 10 000 vzorků čekáme asi 6 471 přijatých (skutečně jich bylo 6 524).

  • Npřij = 70: σ = √0,708 · 0,292/70 = 0,054; skutečná chyba |0,686 − 0,708| = 0,022.
  • Npřij = 6 524: σ = 0,0056; skutečná chyba 0,0050.

Obě skutečné chyby jsou menší než jedna směrodatná odchylka — v souladu s tím, že asi dvě třetiny odhadů padnou do ±σ (normální rozdělení podle centrální limitní věty).

7. Bayesovské sítě v praxi

  • Diagnostika. Lékařské sítě (ALARM, QMR-DT se stovkami nemocí a tisíci příznaků) a diagnostika poruch strojů a sítí: z pozorovaných příznaků odvodit nejpravděpodobnější příčinu — a navrhnout, co změřit dál.
  • Učení z dat. Tabulky se dají odhadnout z dat počítáním (metodou maximální věrohodnosti z dílu o statistice), dokonce i když některé hodnoty chybí — algoritmem EM, příbuzným Baumovu–Welchovu algoritmu z minulého dílu.
  • Příčinnost. Pearl ukázal, že síť čtená jako graf příčin umí odpovídat i na otázky „co by se stalo, kdybychom zasáhli“ — zapnuli postřikovač sami — což ze samotných korelací vyčíst nejde. Na tom stojí dnešní kauzální odvozování v epidemiologii i ekonomii.
  • Příbuzní. Naivní Bayesův klasifikátor je bayesovská síť s jednou příčinou a mnoha nezávislými následky. Skryté Markovovy modely z minulého dílu jsou bayesovská síť rozvinutá v čase.

8. Shrnutí

  • Bayesovská síť je orientovaný acyklický graf s tabulkami P(X | rodiče); sdružené rozdělení je součin těchto tabulek. Naše síť potřebuje 9 čísel místo 15.
  • Odvozování jde i proti šipkám: mokrá tráva zvýší pravděpodobnost deště na 0,708 a postřikovače na 0,430.
  • Vysvětlení pryč: když víme, že pršelo, klesne pravděpodobnost postřikovače na 0,194.
  • D-separace přečte nezávislosti přímo z grafu — řetěz a vidlička se pozorováním uzavřou, srážka otevře.
  • Přesné odvozování je obecně NP-těžké; vzorkování dává odhady s chybou klesající jako 1/√N.

Chcete si to osahat? Nechte AI agenta postavit bayesovskou síť pro poruchu vlastního auta nebo počítače („nestartuje — baterie, nebo startér?“) a zkuste, jak se mění podezření, když přidáváte pozorování.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu