Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
Združené rozdelenie a jeho faktorizácia, bayesovská sieť a tabuľky podmienených pravdepodobností, odvodzovanie vymenovaním, vysvetlenie preč, d-separácia a približné odvodzovanie vzorkovaním — na sieti zamračené, postrekovač, dážď, mokrá tráva.
Séria Základy AI Diel 40 z 52
- Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
- Stručná história umelej inteligencie: od Turinga po jazykové modely
- Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
- Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
- Funkcie a zobrazenia: prečo je každý model v AI funkcia
- Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
- Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
- Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
- Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
- Gradientný zostup: ako sa model učí
- Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
- Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
- Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
- Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
- Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
- Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
- Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
- Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
- Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
- Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
- Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
- Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
- Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
- Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
- Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
- Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
- Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
- Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
- Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
- Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
- Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
- Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
- Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
- Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
- Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
- Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
- Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
- Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
- Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
- Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
- Prompty, kontext a RAG: ako modelu dať správne informácie
- Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
- Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
- Difúzne modely: ako sa z čistého šumu stane obrázok
- Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
- Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
- Policy gradient a PPO: učenie priamo stratégie
- Ako funguje AI agent: jazykový model v slučke s nástrojmi
- Programovanie s AI agentmi: zadanie, testy a kontrola
- Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť
Celá osnova série Hotovo: 52 z 83 tém
- Ako bayesovská sieť skráti obrovskú tabuľku pravdepodobností na pár malých tabuliek.
- Ako sa v sieti odvodzuje od následkov k príčinám a čo je vysvetlenie preč.
- Ako z grafu vyčítať, ktoré premenné sú nezávislé, a ako sa pravdepodobnosti odhadujú vzorkovaním.
Čo sa hodí vedieť vopred: Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové, Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
Ráno vyjdete von a tráva je mokrá. Pršalo, alebo bežal postrekovač? A keď sa potom od suseda dozviete, že v noci pršalo — zmení to, čo si myslíte o postrekovači? Človek takto uvažuje bez premýšľania. Stroj to dokáže tiež, ak vie, čo s čím súvisí. Bayesovská sieť je obrázok týchto súvislostí, z ktorého sa dá vypočítať odpoveď na ľubovoľnú otázku. Judea Pearl za ňu a za nadväzujúcu teóriu príčinnosti dostal v roku 2011 Turingovu cenu.
Nadväzuje na diely Podmienená pravdepodobnosť a Bayesova veta a Grafy a stromy.
1. Problém veľkej tabuľky
Úplná informácia o niekoľkých náhodných premenných je ich združené rozdelenie — pravdepodobnosť každej kombinácie hodnôt. Pre štyri áno/nie premenné je kombinácií 16, teda 15 nezávislých čísel. Pre 37 premenných (toľko má známa lekárska sieť ALARM na monitorovanie pacientov v anestézii) by to bolo vyše 137 miliárd čísel, aj keby boli všetky len áno/nie. Takú tabuľku nikto nezostaví, neuloží ani neodhadne z dát. Zachráni nás to, že väčšina premenných spolu súvisí len nepriamo.
Definícia — združené rozdelenie a počet jeho parametrov
Nech (Ω, 𝓕, P) je pravdepodobnostný priestor (pozri diel Čo je pravdepodobnosť), n ≥ 1 a X1, …, Xn sú diskrétne náhodné premenné na ňom (pozri diel Náhodná premenná); premenná Xi nadobúda hodnoty z konečnej alebo spočítateľnej množiny 𝒳i, i = 1, …, n. Združené rozdelenie premenných X1, …, Xn je funkcia 𝒳1 × ⋯ × 𝒳n → [0, 1], ktorá každej kombinácii hodnôt (x1, …, xn) priradí číslo
P(x1, …, xn) = P({ω ∈ Ω : X1(ω) = x1 ∧ … ∧ Xn(ω) = xn}),
písané aj P(x1, …, xn) = P(X1 = x1, …, Xn = xn). Z axióm pravdepodobnosti vyplýva:
- P(x1, …, xn) ≥ 0 pre všetky (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n;
- ∑(x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n P(x1, …, xn) = 1.
Počet parametrov. Ak sú všetky premenné dvojhodnotové (|𝒳i| = 2 pre i = 1, …, n, hodnoty áno/nie), má definičný obor 2n prvkov. Ľubovoľných 2n − 1 hodnôt možno zvoliť nezávisle (nezáporných, so súčtom najviac 1) a posledná je podmienkou 2 určená ako 1 mínus ich súčet. Združené rozdelenie n dvojhodnotových premenných má teda
2n − 1
nezávislých parametrov — toľko čísel treba, aby bolo určené jednoznačne.
Výpočet. 24 − 1 = 15; 237 − 1 = 137 438 953 471.
Veta — reťazové pravidlo
Nech (Ω, 𝓕, P) je pravdepodobnostný priestor, n ≥ 2, X1, …, Xn sú diskrétne náhodné premenné s hodnotami v 𝒳1, …, 𝒳n a (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n je kombinácia hodnôt, pre ktorú P(x1, …, xn−1) > 0. Zápisom P(xi | x1, …, xi−1) rozumieme podmienenú pravdepodobnosť (pozri diel Podmienená pravdepodobnosť) javu {Xi = xi} za podmienky {X1 = x1, …, Xi−1 = xi−1}. Potom
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 činiteľ pre i = 1 je P(x1) (prázdna podmienka).
Dôkaz: pre k ≤ n − 1 je jav {X1 = x1, …, Xk = xk} nadmnožinou javu {X1 = x1, …, Xn−1 = xn−1}, takže má kladnú pravdepodobnosť a všetky podmienené pravdepodobnosti vo vzorci sú definované. Z definície podmienenej pravdepodobnosti
P(xn | x1, …, xn−1) = P(x1, …, xn)/P(x1, …, xn−1),
teda P(x1, …, xn) = P(xn | x1, …, xn−1) · P(x1, …, xn−1). To isté použijeme na druhý činiteľ a tak ďalej, až zostane P(x1). ∎
Reťazové pravidlo nič nešetrí: posledný činiteľ stále závisí od všetkých predchádzajúcich premenných, takže je to len iný zápis tej istej obrovskej tabuľky. Úspora príde, až keď niektoré podmienky vypustíme.
2. Bayesovská sieť
Definícia — bayesovská sieť
Nech n ≥ 1 a X1, …, Xn sú premenné, Xi s hodnotami v konečnej neprázdnej množine 𝒳i, i = 1, …, n. Bayesovská sieť nad týmito premennými je dvojica (G, Θ), kde
- G = (V, H) je orientovaný acyklický graf (DAG, pozri diel Grafy a stromy) s množinou vrcholov V = {X1, …, Xn} a množinou hrán H ⊆ V × V; rodičia vrcholu Xi sú rodičia(Xi) = {Xj ∈ V : (Xj, Xi) ∈ H};
- Θ priraďuje každému vrcholu Xi tabuľku podmienených pravdepodobností: pre každú kombináciu hodnôt u jeho rodičov rozdelenie P( · | u) na 𝒳i, t. j. čísla P(xi | u) ≥ 0 pre xi ∈ 𝒳i také, že ∑xi ∈ 𝒳i P(xi | u) = 1. Vrchol bez rodičov má jediné rozdelenie P(xi).
Sieť určuje združené rozdelenie premenných X1, …, Xn predpisom
P(x1, …, xn) = ∏i=1n P(xi | rodičia(Xi)) pre všetky (x1, …, xn) ∈ 𝒳1 × ⋯ × 𝒳n,
kde v i-tom činiteli za rodičia(Xi) dosadzujeme hodnoty, ktoré majú rodičia v kombinácii (x1, …, xn). Súčin je nezáporný a cez všetky kombinácie dáva súčet 1 (ak sčítame najprv cez hodnoty vrcholu, ktorý je v topologickom poradí posledný, jeho činiteľ dá 1 a zostane sieť bez neho), takže je to naozaj združené rozdelenie.
Šípky vedú od príčin k následkom. Pri každej premennej stačí vedieť, ako závisí od svojich priamych príčin — nič viac. Pravdepodobnosť celej situácie je súčin týchto miestnych čísel. Namiesto jednej obrovskej tabuľky máme pár malých.
Prečo smie sieť napísať len P(xi | rodičia) a nie celú minulosť ako reťazové pravidlo? Pretože o grafe predpokladá podmienené nezávislosti.
Definícia — podmienená nezávislosť
Nech (Ω, 𝓕, P) je pravdepodobnostný priestor a A, C, E sú diskrétne náhodné premenné na ňom s hodnotami v 𝒜, 𝒞, ℰ (každá z nich môže byť aj skupina premenných, t. j. vektor; E smie byť prázdna skupina). Skrátene píšeme P(a | c, e) = P(A = a | C = c, E = e) a pod. Premenné A a C sú podmienene nezávislé pri E, píšeme A ⊥ C | E, práve vtedy, keď
∀a ∈ 𝒜 ∀c ∈ 𝒞 ∀e ∈ ℰ : P(c, e) > 0 ⇒ P(a | c, e) = P(a | e).
Slovami: keď poznáme hodnotu E, znalosť hodnoty C nezmení pravdepodobnosť žiadnej hodnoty A. Rovnosť v definícii:
P(a | c, e) = P(a | e)
- P(a | c, e)
- čo vieme o A, keď poznáme E a navyše C
- P(a | e)
- čo vieme o A zo samotného E; rovnosť hovorí, že C už nič nepridá — celá súvislosť A s C vedie cez E
Veta — faktorizácia je reťazové pravidlo plus miestne nezávislosti
Nech G = (V, H) je orientovaný acyklický graf s vrcholmi V = {X1, …, Xn}, ktoré sú diskrétne náhodné premenné na pravdepodobnostnom priestore (Ω, 𝓕, P), a vrcholy sú očíslované topologicky: (Xj, Xi) ∈ H ⇒ j < i. Potomkovia vrcholu Xi sú vrcholy rôzne od Xi, do ktorých z Xi vedie orientovaná cesta; nepotomkovia(Xi) = V ∖ ({Xi} ∪ potomkovia(Xi)). Predpokladajme miestnu Markovovu podmienku:
∀i ∈ {1, …, n} : Xi ⊥ (nepotomkovia(Xi) ∖ rodičia(Xi)) | rodičia(Xi),
t. j. každá premenná je pri známych rodičoch podmienene nezávislá od všetkých ostatných premenných, ktoré nie sú jej potomkami. Potom pre každú kombináciu hodnôt (x1, …, xn) s P(x1, …, xn−1) > 0 platí
P(x1, …, xn) = ∏i=1n P(xi | rodičia(Xi)).
Dôkaz: v reťazovom pravidle v topologickom poradí stojí P(xi | x1, …, xi−1). Medzi X1, …, Xi−1 sú všetci rodičia Xi (rodič má menšie číslo) a žiadny jej potomok (potomok je v poradí až za ňou), teda {X1, …, Xi−1} ⊆ nepotomkovia(Xi). Podľa Markovovej podmienky môžeme všetky premenné okrem rodičov z podmienky vypustiť a zostane P(xi | rodičia(Xi)). ∎
Platí to aj naopak: každé rozdelenie dané súčinom tabuliek miestnu Markovovu podmienku spĺňa. Preto možno bayesovskú sieť definovať ktorýmkoľvek z oboch spôsobov.
Naša sieť: keď je zamračené, je pravdepodobnejší dážď a menej pravdepodobné, že niekto zapne postrekovač. Dážď aj postrekovač urobia mokrú trávu. Čísla sú z obľúbeného príkladu Kevina Murphyho:
Sieť má 1 + 2 + 2 + 4 = 9 čísel namiesto 15. Pri štyroch premenných je to malá úspora, pri stovkách obrovská: ak má každý vrchol najviac k rodičov, rastie počet čísel s n lineárne (n · 2k), nie exponenciálne (2n). Pravdepodobnosť situácie „zamračené, postrekovač nebežal, pršalo, tráva mokrá“ je 0,5 · 0,9 · 0,8 · 0,9 = 0,324 (farby podľa vzorca nižšie).
P(z, p, d, t) = P(z) · P(p | z) · P(d | z) · P(t | p, d)
- P(z)
- zamračené nemá rodičov, jeho tabuľka je jediné číslo; v príklade 0,5
- P(p | z)
- postrekovač závisí len od mrakov — tu sa od reťazového pravidla nič nelíši; v príklade nebežal pri zamračenej oblohe: 1 − 0,1 = 0,9
- P(d | z)
- reťazové pravidlo by chcelo P(d | z, p); sieť predpokladá, že pri známej oblohe postrekovač o daždi nič nepovie, a tak p z podmienky vypadne; v príklade 0,8
- P(t | p, d)
- reťazové pravidlo by chcelo P(t | z, p, d); tráva o mrakoch „vie“ len cez dážď a postrekovač, a tak vypadne z; v príklade (postrekovač nie, dážď áno) 0,9
3. Odvodzovanie: od následku k príčine
Definícia — odvodzovanie vymenovaním
Nech (G, Θ) je bayesovská sieť nad premennými X1, …, Xn a tieto premenné sú rozdelené do troch disjunktných skupín: dotaz Q (jedna premenná s hodnotami v 𝒬), dôkazy E = (E1, …, Em) s pozorovanými hodnotami e = (e1, …, em) a skryté premenné Y (všetky ostatné) s množinou kombinácií hodnôt 𝒴. Predpokladajme P(e) > 0. Potom pre 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 združeného rozdelenia siete — súčin čísel z tabuliek podľa faktorizácie. Odvodzovanie vymenovaním je algoritmus, ktorý podľa tohto vzorca počíta:
Vstup: sieť (G, Θ), dotazová premenná Q, dôkazy E = e s P(e) > 0. Výstup: čísla P(q | e) pre všetky q ∈ 𝒬. Kroky:
- Pre každé q ∈ 𝒬 polož S(q) := 0.
- Pre každé q ∈ 𝒬 a každé y ∈ 𝒴 vypočítaj súčin P(q, e, y) z tabuliek a pripočítaj ho k S(q).
- Po prejdení všetkých (konečne mnohých) dvojíc (q, y) polož Z := ∑q′ ∈ 𝒬 S(q′) = P(e) a vráť P(q | e) = S(q)/Z pre každé q ∈ 𝒬.
Prejdeme všetky možné svety, ktoré súhlasia s tým, čo vieme (tráva je mokrá), a pozrieme sa, akú váhu medzi nimi majú tie, kde pršalo. Je to Bayesova veta z dielu o podmienenej pravdepodobnosti, len sa sčítava cez viac premenných naraz.
P(q | e) = ∑y P(q, e, y)/∑q′, y P(q′, e, y)
- e
- dôkazy — hodnoty, ktoré sme pozorovali (u nás mokrá tráva); vo všetkých sčítaných svetoch sú pevné
- ∑y
- skryté premenné (u nás zamračené a postrekovač) nepoznáme a nezaujímajú nás, tak sčítame všetky ich možnosti — marginalizácia; svety sú navzájom nezlučiteľné, takže sa pravdepodobnosti sčítavajú
- P(q, e, y)
- pravdepodobnosť jedného úplného sveta, kde platí dotaz aj dôkazy — súčin čísel z tabuliek podľa faktorizácie
- ∑q′, y P(q′, e, y)
- = P(e), váha všetkých svetov, ktoré súhlasia s dôkazmi; delenie je definícia podmienenej pravdepodobnosti P(q | e) = P(q, e)/P(e) a zaručí, že ∑q P(q | e) = 1 (pri áno/nie dotaze P(Q | e) + P(¬Q | e) = 1)
Príklad — P(dážď | mokrá tráva) vymenovaním
Dôkaz je T = áno, dotaz D, skryté sú Z a P. Svetov s mokrou trávou je 23 = 8; každý je súčin P(z) · P(p | z) · P(d | z) · P(t | p, d):
| dážď | zamračené | postrekovač | súčin | P(svet) |
|---|---|---|---|---|
| áno | áno | áno | 0,5 · 0,1 · 0,8 · 0,99 | 0,0396 |
| áno | nie | áno | 0,5 · 0,5 · 0,2 · 0,99 | 0,0495 |
| áno | áno | nie | 0,5 · 0,9 · 0,8 · 0,9 | 0,3240 |
| áno | nie | nie | 0,5 · 0,5 · 0,2 · 0,9 | 0,0450 |
| nie | áno | áno | 0,5 · 0,1 · 0,2 · 0,9 | 0,0090 |
| nie | nie | áno | 0,5 · 0,5 · 0,8 · 0,9 | 0,1800 |
| nie | áno | nie | 0,5 · 0,9 · 0,2 · 0 | 0,0000 |
| nie | nie | nie | 0,5 · 0,5 · 0,8 · 0 | 0,0000 |
Riadky, kde pršalo, sú svety P(q, e, y) pre q = dážď áno; ich súčet cez skryté Z, P dá P(D, T) = 0,4581, súčet všetkých ôsmich P(T) = 0,6471. Posledné dva riadky sú nulové: bez dažďa aj bez postrekovača tráva mokrá nie je. Teda (farby podľa vzorca vyššie)
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 svetov
if any(svet[k] != v for k, v in dukazy.items()):
continue # nesúhlasí s dôkazmi
p = 1.0
for uzel in sit: # faktorizácia siete
p *= P(uzel, svet[uzel], svet[rodice(uzel)])
jmenovatel += p # → P(e)
if svet[Q]:
citatel += p # → P(Q, e)
return citatel / jmenovatel
Vopred (bez akéhokoľvek pozorovania) je pravdepodobnosť dažďa 0,5 a postrekovača 0,3. Mokrá tráva obe zvýši: P(dážď | mokrá tráva) = 0,708 a P(postrekovač | mokrá tráva) = 0,430. Dážď je pravdepodobnejšie vysvetlenie, pretože prší častejšie, než beží postrekovač. Mokrá tráva zvýši aj pravdepodobnosť, že bolo zamračené — z 0,5 na 0,576 —, hoci tráva a mraky spolu priamo nesúvisia. Informácia tečie sieťou proti šípkam.
4. Vysvetlenie preč
Teraz sa dozvieme, že v noci naozaj pršalo. Čo sa stane s postrekovačom?
Pravdepodobnosť postrekovača klesne z 0,430 na 0,194. Dážď mokrú trávu už vysvetlil, takže pre postrekovač nezostáva dôvod. Naopak, keď vieme, že bežal postrekovač, klesne pravdepodobnosť dažďa z 0,708 na 0,320. Tomuto javu sa hovorí vysvetlenie preč (explaining away). Dve príčiny, ktoré spolu vopred súviseli len slabo, sa hneď, ako pozorujeme ich spoločný následok, začnú navzájom „vytláčať“. A keby sme vedeli, že nepršalo, postrekovač by musel bežať: P(postrekovač | mokrá tráva, nie dážď) = 1, pretože v našej sieti tráva sama od seba mokrá byť nemôže.
Príklad — vysvetlenie preč v číslach
Z tabuľky v predchádzajúcom príklade: svety, kde pršalo, bežal postrekovač a tráva je mokrá, majú dohromady P(P, D, T) = 0,0396 + 0,0495 = 0,0891. Preto
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
(menovateľ je pravdepodobnosť dôkazov P(e), farby podľa vzorca odvodzovania vymenovaním vyššie).
Formálne je vysvetlenie preč nerovnosť P(P | T, D) < P(P | T): potvrdenie jednej príčiny zníži pravdepodobnosť druhej (0,194 < 0,430).
5. Čo sa dá zo siete vyčítať: d-separácia
Graf nehovorí len, ako počítať — hovorí aj, ktoré premenné sú od seba nezávislé, a to bez jediného čísla. Všetky možnosti sa skladajú z troch základných tvarov:
- Reťaz A → B → C: A a C spolu súvisia, ale keď poznáme B, už nie. (Zamračené → dážď → mokrá tráva: kto vie, či pršalo, tomu mraky o tráve nič nepovedia.)
- Vidlica A ← B → C: spoločná príčina robí A a C závislými; keď ju poznáme, závislosť zmizne. (Postrekovač a dážď vopred súvisia cez mraky: P(postrekovač | dážď) = 0,18, ale P(postrekovač | nepršalo) = 0,42. Keď vieme, či je zamračené, sú nezávislé.)
- Zrážka A → B ← C: príčiny sú nezávislé, kým nepozorujeme spoločný následok — potom sa stanú závislými. To je vysvetlenie preč.
Definícia — d-separácia
Nech G = (V, H) je orientovaný acyklický graf, A, C ∈ V sú rôzne vrcholy a E ⊆ V ∖ {A, C} je množina vrcholov (pozorované premenné).
- Neorientovaná cesta medzi A a C je postupnosť navzájom rôznych vrcholov (V0, V1, …, Vk), k ≥ 1, s V0 = A, Vk = C, taká, že (Vj−1, Vj) ∈ H ∨ (Vj, Vj−1) ∈ H pre j = 1, …, k (susedné vrcholy spája hrana, smer šípky nehrá rolu).
- Vnútorný vrchol Vj cesty (0 < j < k) je stredom reťaze práve vtedy, keď Vj−1 → Vj → Vj+1 alebo Vj−1 ← Vj ← Vj+1; vidlice práve vtedy, keď Vj−1 ← Vj → Vj+1; zrážky práve vtedy, keď Vj−1 → Vj ← Vj+1 (U → W znamená (U, W) ∈ H). Každý vnútorný vrchol je práve jedným z týchto troch.
- Cesta je zablokovaná množinou E práve vtedy, keď má vnútorný vrchol Vj, pre ktorý platí aspoň jedno z: (a) Vj je stredom reťaze alebo vidlice ∧ Vj ∈ E, (b) Vj je stredom zrážky ∧ ({Vj} ∪ potomkovia(Vj)) ∩ E = ∅, kde potomkovia(Vj) sú vrcholy, do ktorých z Vj vedie orientovaná cesta.
- Vrcholy A a C sú d-separované množinou E práve vtedy, keď je množinou E zablokovaná každá neorientovaná cesta medzi A a C.
Veta (Verma a Pearl). Nech (G, Θ) je bayesovská sieť, P združené rozdelenie, ktoré určuje, a A, C, E ako vyššie. Ak sú A a C d-separované množinou E, potom A ⊥ C | E vzhľadom na P — a to pre každú voľbu tabuliek Θ.
Informácia tečie grafom po cestách. Známa premenná uprostred reťaze alebo vidlice tok zastaví — už je „vysvetlená“. Pri zrážke je to naopak: kým následok nepoznáme, tok tam stojí; hneď ako ho pozorujeme, otvorí sa. Z obrázka sa tak dá vyčítať, čo treba merať a čo je zbytočné.
V našej sieti sú zamračené a mokrá tráva d-separované, keď poznáme postrekovač aj dážď — výpočet to potvrdí: pravdepodobnosť zamračenej oblohy potom od trávy vôbec nezávisí.
Príklad — tri tvary overené výpočtom
- Vidlica postrekovač ← zamračené → dážď. Bez znalosti oblohy: P(P | D) = 0,18 ≠ P(P) = 0,3, závislé. Pri známej oblohe: P(P | Z, D) = 0,1 = P(P | Z), teda P ⊥ D | Z.
- Zrážka postrekovač → mokrá tráva ← dážď. Pri známej oblohe sú P a D nezávislé (P(P | Z, D) = P(P | Z, ¬D) = 0,1), ale hneď ako pozorujeme trávu, už nie: P(P | Z, D, T) = 0,109, kým P(P | Z, ¬D, T) = 1.
- D-separácia zamračenej oblohy a mokrej trávy množinou {P, D}: obe cesty Z → P → T a Z → D → T sú reťaze so známym stredom, takže sú zablokované. A naozaj: 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. Približné odvodzovanie vzorkovaním
Odvodzovanie vymenovaním prechádza všetky kombinácie skrytých premenných — vo všeobecnej sieti exponenciálne veľa. Presné odvodzovanie v bayesovských sieťach je NP-ťažké. Pre veľké siete sa preto pravdepodobnosti odhadujú simuláciou.
Algoritmy — vzorkovanie so zamietaním a vážená vierohodnosť
Oba algoritmy majú rovnaký vstup: bayesovskú sieť (G, Θ) nad premennými X1, …, Xn očíslovanými topologicky (rodič má menšie číslo než dieťa), dotaz Q = q, dôkazy E = e a počet vzoriek N ∈ ℕ, N ≥ 1; a rovnaký výstup: odhad P̂(q | e) čísla P(q | e). Vylosovať xi znamená zvoliť náhodne hodnotu z 𝒳i podľa rozdelenia P( · | u) z tabuľky vrcholu Xi, kde u sú hodnoty jeho rodičov už určené v tejto vzorke.
Vzorkovanie so zamietaním:
- Polož Nprij := 0, Nq := 0.
- Opakuj N-krát: pre i = 1, …, n vylosuj xi. Ak vzorka súhlasí s dôkazmi (každá dôkazová premenná má v nej pozorovanú hodnotu), zvýš Nprij o 1 a ak v nej navyše platí Q = q, zvýš o 1 aj Nq; inak vzorku zahoď.
- Po N opakovaniach skonči a vráť P̂(q | e) = Nq/Nprij (pre Nprij = 0 odhad nie je definovaný).
Vážená vierohodnosť:
- Polož W := 0, Wq := 0.
- Opakuj N-krát (k-ta vzorka): polož wk := 1 a pre i = 1, …, n: ak je Xi dôkazová premenná s pozorovanou hodnotou ei, polož xi := ei (nelosuj) a wk := wk · P(ei | u), kde u sú hodnoty rodičov vo vzorke; inak xi vylosuj. Potom W := W + wk a ak vo vzorke platí Q = q, aj Wq := Wq + wk.
- Po N opakovaniach skonči a vráť P̂(q | e) = Wq/W (pre W = 0 odhad nie je definovaný).
Zamietanie je poctivé, ale plytvá: keď je dôkaz vzácny, takmer všetky vzorky zahodí. Vážená vierohodnosť nezahadzuje nič — len každej vzorke pridelí váhu podľa toho, ako dobre sedí s tým, čo vieme.
def zamitani(Q, dukazy, n, sit):
prijato = ano = 0
for _ in range(n):
svet = {}
for uzel in sit: # od príčin k následkom
svet[uzel] = nahoda() < P(uzel, True, svet[rodice(uzel)])
if any(svet[k] != v for k, v in dukazy.items()):
continue # do koša
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ážime, aký je pravdepodobný
else:
svet[uzel] = nahoda() < p
s += w
s_ano += w * svet[Q]
return s_ano / s
P̂(Q | e) = ∑k wk [Q platí vo vzorke k]/∑k wk, wk = ∏j P(ej | rodičiak)
- wk
- váha vzorky (zelenou ako krivka váženej vierohodnosti v grafe) — súčin pravdepodobností všetkých dôkazov ej pri hodnotách ich rodičov, ktoré vo vzorke k padli: dôkazy sme nelosovali, ale vnútili, a tak musíme zohľadniť, aké pravdepodobné by boli pri ostatných vylosovaných hodnotách — inak by bol odhad vychýlený
- [Q platí vo vzorke k]
- 1, keď vo vzorke platí dotaz, inak 0 — započítame len váhu vzoriek, kde pršalo
- ∑k wk
- celková váha; delením z nej urobíme podiel, rovnako ako delenie P(e) pri vymenovaní. Vďaka nemu nevadí, že súčet váh nie je 1
Príklad — váhy pri dôkaze „tráva je mokrá“
Jediný dôkaz je T = áno, jeho rodičia sú postrekovač a dážď. Váha vzorky je preto jednoducho P(T = áno | p, d) z tabuľky mokrej trávy:
- postrekovač aj dážď: w = 0,99,
- len jedno z nich: w = 0,9,
- ani jedno: w = 0 — taká vzorka neprispeje nikam, rovnako ako by ju zamietanie zahodilo.
(Farba podľa vzorca vyššie.)
Od oblohy váha nezávisí: zamračené nie je rodičom trávy.
So sto vzorkami dalo zamietanie odhad 0,686 a použilo ich len 70 — zvyšných 30 malo suchú trávu a išlo do koša. S 10 000 vzorkami (z ktorých zostalo 6 524) je odhad 0,703, blízko presnej hodnoty 0,708. Chyba klesá ako 1/√N, ako hovorí centrálna limitná veta: na desaťkrát presnejší odhad treba stokrát viac vzoriek.
σP̂ = √p(1 − p)/Nprij, Nprij ≈ N · P(e)
- p(1 − p)
- rozptyl jednej vzorky typu áno/nie (Bernoulliho rozdelenie s pravdepodobnosťou p); najväčší je pre p = 0,5, keď je jedna vzorka najmenej predvídateľná
- Nprij
- počet vzoriek, ktoré sa naozaj počítajú; pri zamietaní len tie, ktoré prešli, a tých je v priemere podiel P(e) — pri vzácnom dôkaze takmer žiadne. Rozptyl priemeru N nezávislých vzoriek je N-krát menší
Príklad — akú veľkú chybu čakať
Presne je p = 0,708 a P(e) = P(T) = 0,6471, takže z 10 000 vzoriek čakáme asi 6 471 prijatých (v skutočnosti ich bolo 6 524).
- Nprij = 70: σ = √0,708 · 0,292/70 = 0,054; skutočná chyba |0,686 − 0,708| = 0,022.
- Nprij = 6 524: σ = 0,0056; skutočná chyba 0,0050.
Obe skutočné chyby sú menšie než jedna smerodajná odchýlka — v súlade s tým, že asi dve tretiny odhadov padnú do ±σ (normálne rozdelenie podľa centrálnej limitnej vety).
7. Bayesovské siete v praxi
- Diagnostika. Lekárske siete (ALARM, QMR-DT so stovkami chorôb a tisíckami príznakov) a diagnostika porúch strojov a sietí: z pozorovaných príznakov odvodiť najpravdepodobnejšiu príčinu — a navrhnúť, čo zmerať ďalej.
- Učenie z dát. Tabuľky sa dajú odhadnúť z dát počítaním (metódou maximálnej vierohodnosti z dielu o štatistike), dokonca aj keď niektoré hodnoty chýbajú — algoritmom EM, príbuzným Baumovmu–Welchovmu algoritmu z minulého dielu.
- Príčinnosť. Pearl ukázal, že sieť čítaná ako graf príčin vie odpovedať aj na otázky „čo by sa stalo, keby sme zasiahli“ — zapli postrekovač sami — čo zo samotných korelácií vyčítať nejde. Na tom stojí dnešné kauzálne odvodzovanie v epidemiológii aj ekonómii.
- Príbuzní. Naivný Bayesov klasifikátor je bayesovská sieť s jednou príčinou a mnohými nezávislými následkami. Skryté Markovove modely z minulého dielu sú bayesovská sieť rozvinutá v čase.
8. Zhrnutie
- Bayesovská sieť je orientovaný acyklický graf s tabuľkami P(X | rodičia); združené rozdelenie je súčin týchto tabuliek. Naša sieť potrebuje 9 čísel namiesto 15.
- Odvodzovanie ide aj proti šípkam: mokrá tráva zvýši pravdepodobnosť dažďa na 0,708 a postrekovača na 0,430.
- Vysvetlenie preč: keď vieme, že pršalo, klesne pravdepodobnosť postrekovača na 0,194.
- D-separácia prečíta nezávislosti priamo z grafu — reťaz a vidlica sa pozorovaním uzavrú, zrážka otvorí.
- Presné odvodzovanie je vo všeobecnosti NP-ťažké; vzorkovanie dáva odhady s chybou klesajúcou ako 1/√N.
Chcete si to vyskúšať? Nechajte AI agenta postaviť bayesovskú sieť pre poruchu vlastného auta alebo počítača („neštartuje — batéria, alebo štartér?“) a skúste, ako sa mení podozrenie, keď pridávate pozorovania.
Máte na to iný názor? Napíšte na support@coden-app.com.