Bayesian Networks
Modellierung
Such Probleme
Regression
Markov Decision Processes
Constraint Satisfaction Problems
Classifier
Kompetitive Spiele
Bayesian networks
Reflex
Zustände
Variablen
Logik
"Niedrige Intelligenz"
"Höhere Intelligenz"
Jetzt werden wir factor graphs mit Wahrscheinlichkeiten verheiraten. Hier kommt auch wieder ein Element
zum Lernen von Modellen dazu.
Wahrscheinlichkeiten
Zwei Zufallsvariablen : "Sonne scheint" $S \in \{0,1\}$, "Regen" $R \in \{0,1\}$
Joint distribution
$P(S,R) =$
$s$ $r$ $P(S=s, R=r)$
$0$ $0$ $0.20$
$0$ $1$ $0.08$
$1$ $0$ $0.70$
$1$ $1$ $0.02$
Marginal distribution
$P(S) =$
$s$ $P(S=s)$
$0$ $0.28$
$1$ $0.72$
(aggregierte Zeilen)
Conditional distribution
$P(S | R=1) =$
$s$ $P(S=s | R=1)$
$0$ $0.8$
$1$ $0.2$
(normalisierte Teilmenge der Zeilen)
Uppercase=Variable, lowercase=value. Joint distribution ist unser vollständiges Wissen über die Welt.
Probabilistische Inferenz
Ausgangspunkt: Joint distribution (probabilistische Datenbank): $P(S,R,H,V)$
Bedingt auf unserer Beobachtung: $H=1, V=1$
Interessiert an Frage : $R$
$P({\color{red}\underbrace{R}_{\text{Frage /\ Query}}} | {\color{green} \underbrace{H=1, V=1}_\text{Bedingung /\ Condition}})$
$S$ ist aus marginalisiert
Aufgabe häufig in der Robotik: Basierend auf meinen Sensoren und Aktionen will ich wissen, was mein Zustand ist.
Aufgaben
Modellierung:
Wie spezifizieren wir die joint distribution $P(X_1, \ldots, X_n)$?
Inferenz:
Wie berechnen wir Query $P(X_i, X_j, \ldots | X_k = x_k, X_l = x_l, \ldots)$ effizient?
Erdbeben und Einbrüche sind unabhängige Ereignisse, die unsere Alarmanlage auslösen können.
Wir werden vom Alarm geweckt. Dann merken wir, dass auch die Erde bebt. Wie ändert das unsere
Einschätzung, dass gerade ein Einbruch passiert?
Ein Einbruch ist wahrscheinlicher
Ein Einbruch ist unwahrscheinlicher
Ein Einbruch ist gleich wahrscheinlich
Bayesian network
$P(B=b, E=e, A=a) = {\color{blue} p(b)}{\color{green} p(e)}{\color{red} p(a | b,e)}$
$b$ $p(b)$
$0$ $0.98$
$1$ $0.02$
$e$ $p(e)$
$0$ $0.95$
$1$ $0.05$
$b$ $e$ $a$ $p(a | b,e)$
$0$ $0$ $0$ $1$
$0$ $0$ $1$ $0$
$0$ $1$ $0$ $0$
$0$ $1$ $1$ $1$
$1$ $0$ $0$ $0$
$1$ $0$ $1$ $1$
$1$ $1$ $0$ $0$
$1$ $1$ $1$ $1$
Pfeile im Bayes Net entsprechen so etwas wie Kausalität.
Wir verwenden kleine p für die lokalen Wahrscheinlichkeiten (specify locally) und große für die globale Verteilung.
Die lokale Verteilung ist nur abhängig von der Variable selber und ihren Eltern
$P(B=b, E=e, A=a) = {\color{blue} p(b)}{\color{green} p(e)}{\color{red} p(a | b,e)}$
Darstellung als Factor Graph
Jeder Knoten hat einen eigenen Factor (der alle Eltern verbindet).
$b$ $e$ $a$ $P(B=b, E=e, A=a)$
$0$ $0$ $0$ $0.98 \cdot 0.95 = 0.931$
$0$ $0$ $1$ $0$
$0$ $1$ $0$ $0$
$0$ $1$ $1$ $0.98 \cdot 0.05 = 0.049$
$1$ $0$ $0$ $0$
$1$ $0$ $1$ $0.02 \cdot 0.95 = 0.019$
$1$ $1$ $0$ $0$
$1$ $1$ $1$ $0.02 \cdot 0.05 = 0.001$
Queries
$P(B=1)$ $= 0.019 + 0.001 = 0.02$
$P(B=1 | A=1)$ $= \frac{0.019 + 0.001}{0.019 + 0.001 + 0.049} = 0.29$
$P(B=1 | A=1, E=1)$ $= \frac{0.001}{0.001 + 0.049} = 0.02$
Das wir ein Erdbeben spüren macht also den Einbruch wieder unwahrscheinlicher.
Explaining away
Wenn ein Effekt zwei Ursachen hat, dann reduziert die Beobachtung des Effekts und der einen Ursache die Wahrscheinlichkeit der anderen.
In kleinen Beispielen lassen sich die Queries noch explizit berechnen.
Anzahl Zeilen in joint distribution ist exponentiell mit Anzahl Variablen.
Definition: Bayesian network
$X = (X_1, \ldots, X_n)$ Zufallsvariablen
Ein Bayesian network ist ein gerichteter, azyklischer Graph (DAG), der eine joint distribution
über $X$ als Produkt von lokalen conditional distributions (eine je Knoten) spezifiziert
${\color{blue}P(X_1=x_1, \ldots, X_n=x_n)} = \prod_{i=1}^n {\color{red} p(x_i | x_{\text{Parents}(i)})}$
Bedingung: Lokal normalisiert
Alle factors erfüllen:
\[
\sum_{x_i} p(x_i | x_{\text{Parents}(i)}) = 1
\]
für alle $x_{\text{Parents}(i)}$
Das ist die Schlüsseleigenschaft, dass wir die factors als Wahrscheinlichkeiten interpretieren können.
Teilgraph eines Bayesian network ist ein Bayesian network
$P(B=b, E=e) = \sum_a P(B=b, E=e, A=a)$
$= \sum_a p(b) p(e) p(a | b,e)$
$= p(b)p(e) \sum_a p(a | b,e)$
$= p(b)p(e)$
Eine algebraische Operation hat hier ein graphisches Analogon.
Das hat auch eine andere nette Implikation: Andere Dinge die von unserem Modell abhängen könnten (z.B.: Luftfeuchtigkeit),
machen keinen Unterschied, solange wir sie nicht beobachten.
Marginalisieren eines Blattes entspricht Netzwerk ohne Blatt.
$\Rightarrow$
Lokale conditional distribution ist wahre conditional distribution
$P(A=a | E=e, B=b) = p(a|e,b)$
(wir dürfen die lokalen conditional distributions verwenden, wenn die Query passt)
Das ist nur, dass auch formell gilt, was wir implizit annehmen (die kleinen p sind ja erstmal nur Werte, die wir vorgeben)
Zufallsvariablen modellieren den Zustand der Welt
Kanten sind Abhängigkeiten
Spezifiziere lokale conditional distributions
Probabilistische Inferenz: Frage nach dem Zustand der Welt bei bestimmten Beobachtungen
Andere Sichtweise: Probabilistic programs
$
B \sim \text{Bernoulli}(0.02)\\[2mm]
E \sim \text{Bernoulli}(0.05)\\[2mm]
A = B \vee E
$
Bernoulli entspricht einem Münzwurf, mit Bias.
Anders als ein normales Programm, wollen wir das hier nicht ausführen (jeder Lauf produziert einen Zustand der Welt). Das ist mehr ein mentales Modell (wir könnten das Programm ausführen - aber wir tun es nicht)
Beispiel: Random walk
$X_0 = (0,0)$
Zu jedem Zeitschritt $t=1,\ldots, n$:
Mit Wahrscheinlichkeit $\alpha$:
$X_t = X_{t+1} + (1,0)$ (Schritt nach rechts)
Mit Wahrscheinlichkeit $1-\alpha$:
$X_t = X_{t+1} + (0,1)$ (Schritt nach unten)
$\alpha = 0.5$, $X_{10} = (8,2)$
Ein konkreter Pfad ist nett - aber uns interessiert in Wirklichkeit wie wahrscheinlich die
anderen Zustände sind unter der Beobachtung, die wir gemacht haben.
Anwendung: Natural Language Processing
Jedes Wort hängt von seinem Vorgänger ab: $X_i \sim p(X_i | X_{i-1})$
(Markov model)
Früher war das die Standard Herangehensweise für NLP. Die Ergebnisse machen aber nur lokal Sinn und
ein Schlüsselelement von Sprache sind lange Verbindungen.
Kann aber schon viel helfen um lokale Fehler zu vermeiden oder die Qualität von einem Spracherkenner oder
Übersetzer zu sicher / verbessern.
Object Tracking
Zu jedem Zeitpunkt $t = 1, \ldots, T$:
Befindet sich das Objekt an Position $H_t \sim p(H_t | H_{t-1})$
Erhalten wir Sensordaten $E_t \sim p(E_t | H_t)$
Inferenz: Wir kennen die Sensordaten und wollen die Objekt Position wissen.
(Hidden Markov Model - HMM)
Solche Modelle haben wir sehr oft. In der Robotik um unseren Zustand zu kennen. Zum Verbessern unserer GPS Informationen.
Oder auch für Sprachdaten (der Sensor ist dann das Akustische Signal und H sind die Phoneme).
Multiple Object Tracking
Zu jedem Zeitpunkt $t = 1, \ldots, T$:
Befindet sich das Objekt $a$ an Position $H_t^a \sim p(H_t^a | H^a_{t-1})$
Befindet sich das Objekt $b$ an Position $H_t^b \sim p(H_t^b | H^b_{t-1})$
Erhalten wir Sensordaten $E_t \sim p(E_t | H_t^a, H_t^b)$
(factorial HMM)
Solche Modelle haben wir sehr oft. In der Robotik um unseren Zustand zu kennen. Zum Verbessern unserer GPS Informationen.
Oder auch für Sprachdaten (der Sensor ist dann das Akustische Signal und H sind die Phoneme).
Können deutlich komplexere Modelle innerhalb einer Zeitscheibe haben.
Dokument Klassifikation
Jedes Dokument erhält ein Label $Y \sim p(Y)$
Für jedes Position im Dokument $i = 1, \ldots, L$:
Generiere Wort $W_i \sim p(W_i | Y)$
(naive Bayes)
Oft spricht man von "generative model" (im Gegensatz zu discriminative Model bei Klassifikation).
Wichtig ist die umgekehrte Denkweise: Wir modellieren wie der Text aus dem Label entsteht.
Topic Modeling
Wähle je Thema eine Wahrscheinlichkeit $\alpha \in \mathbb{R}^K$
Für jedes Position im Dokument $i = 1, \ldots, L$:
Wähle ein Thema $Z_i \sim p(Z_i | \alpha)$
Wähle ein Wort $W_i \sim p(W_i | Z_i)$
Inferenz: welche Themen kommen in einem Dokument vor.
(latent Dirichlet allocation)
alpha wird von einer Dirichlet Verteilung produziert (daher der Name).
Erweiterung von Naive Bayes um mehrere Kategorien.
Ähnlicher Ansatz für andere Daten (Musik, Bilder, Videos).
Medizinische Diagnose
Für jede Krankheit $i=1,\ldots, m$:
Entscheide ob Krankheit vorliegt $D_i \sim p(D_i)$
Für jedes Symptom $j=1,\ldots, n$:
Entscheide ob sich Symptom äußert $S_j \sim p(S_j | D_1,\ldots,D_m)$
Inferenz: Gegeben die beobachteten Symptome, welche Krankheiten sind wie wahrscheinlich?
TODO: Network analysis Beispiel zeichnen
Es ist oft einfacher ein Modell anfangend bei den versteckten Ursachen, hin zu den
Beobachtungen zu erstellen.
Bayes Net ist eine Art probabilistische Datenbank mit unserem Wissen über die Welt, die wir querien.
Wir denken umgekehrt, nicht beginnend, sondern endent bei den Beobachtungen.
Wir suchen die Story, wie der Output generiert sein könnte.
Vor allem können wir so die Unsicherheit abbilden, die mit jedem Wissen einhergeht. Vorteil gegenüber
deterministischen Entscheidungsbäumen.
Bayesian Networks
Inferenz
Wie machen wir probabilistic inference?
1. Schritt: Graph vereinfachen.
Query: $P(Q | E=e)$
Entferne (marginalize) alle Variablen, die keine Vorfahren von $Q$ oder $E$ sind.
Konvertiere in einen Factor Graphen
Fixiere $E=e$
Entferne alle Knoten die nicht mehr mit $Q$ verbunden sind.
Das ist eine Art Preprocessing, damit wir anschließend keine unnötige Arbeit machen.
Factor Graph
$\Rightarrow$
Ein factor je Knoten
Variablen fixieren
Query: $P(H | E=1)$
$\Rightarrow$
$H$ $E$ $p$
$0$ $0$ $p_{0,0}$
$0$ $1$ $p_{0,1}$
$1$ $0$ $p_{1,0}$
$1$ $1$ $p_{1,1}$
$H$ $p$
$0$ $p_{0,1}$
$1$ $p_{1,1}$
Query: $P(C,H | E)$
Nach dem fixieren von E können wir nicht mehr prunen. Aber der Graph zerfällt trotzdem in zwei Teile, die wir unabhängig voneinander rechnen können.
Wie berechnen wir nun die Wahrscheinlichkeiten auf dem reduzierten Graph?
Spezialfall: Hidden Markov Model
Forward-backward Algorithmus
Particle filtering
Allgemein: Gibbs sampling
Hidden Markov Model
Beispiel: Object Tracking
$H_i \in \{1, \ldots, K \}$ : Ort zum Zeitpunkt $i$
$E_i \in \{1, \ldots, K \}$ : gemessener Ort zum Zeitpunkt $i$
Start $p(H_1)$ : z.B. Uniform über alle Orte
Transition $p(h_i | h_{i-1})$ : z.B. Uniform über benachbarte Orte
Emission $p(e_i | h_i)$ : z.B. Normalverteilt über benachbarte Orte
$P(H=h, E=e) = p(h_1) \prod_{i=2}^n p(h_i | h_{i-1}) \prod_{i=1}^n p(e_i | h_i)$
Typische Queries
Filtering:
$P(H_3 | E_1 = e_1, E_2 = e_2, E_3 = e_3)$
Smoothing:
$P(H_3 | E_1 = e_1, E_2 = e_2, E_3 = e_3, E_4 = e_4)$
Wenn man ein HMM benutzt geht es eigentlich immer um Queries von diesem Typus.
Filtering ist die real time Variante (was vermuten wir unter den aktuellen Hinweisen).
Mit Smoothing suchen wir die Wahrheit im Nachhinein (zum Beispiel auch um einen Datensatz zu fitten)
OBDA schauen wir uns smoothing an (beim filtering marginalisieren wir die Zukunft weg)
Gitter Modell
Kante "$\text{start} \Rightarrow H_1=h_1$" hat Gewicht $p(h_1)p(e_1 | h_1)$
Kante "$H_{i-1} = h_{i-1} \Rightarrow H_i = h_i$" hat Gewicht $p(h_i | h_{i-1}) p(e_i | h_i)$
Jeder Pfad von "start" nach "ende" ist ein mögliches Assignment mit Wahrscheinlichkeit (Gewicht)
gleich dem Produkt der Kantengewichte
Beachte: die e_i kennen wir alle (unsere conditionals).
Die h_i können alle Werte von 1 bis K annehmen.
Wir können natürlich nicht alle Pfade auflisten (sowenig wie wir alle möglichen Kombinationen durchgehen können)
Das Gitter hat O(nK) Knoten und O(nK^2) Kanten.
Vorwärts: $F_i(h_i) = \sum_{h_{i-1} = 1}^K F_{i-1}(h_{i-1}) w_i(h_{i-1}, h_i)$
Alle Gewichte von "start" bis "$H_i=h_i$"
Rückwärts: $B_i(h_i) = \sum_{h_{i+1} = 1}^K B_{i+1}(h_{i+1}) w_{i+1}(h_i, h_{i+1})$
Alle Gewichte von "$H_i=h_i$" bis "ende"
$S_i(h_i) = F_i(h_i) B_i(h_i)$
Alle Gewichte von "start" bis "ende" durch "$H_i=h_i$"
Wir nutzen (mal wieder) dynamic programming um die Lösung effizient zu berechnen.
Durch die Anordnung des Markov Modells haben wir eine eindeutige Richtung um die Werte jeweils zu berechnen
TODO: Beispiel mit einfachen Werten rechnen.
\[
P(H_i = h_i | E=e) = \frac{S_i(h_i)}{\sum_{h' = 1}^K S_i(h')}
\]
($S$ sind die noch nicht normalisierten Wahrscheinlichkeiten)
Berechne $F_1, F_2, \ldots, F_n$
Berechne $B_n, B_{n-1}, \ldots, B_1$
Berechne $S_i$ für jedes $i$ und normalisiere.
Rechenzeit: $O(nK^2)$
Praktisch: Wir bekommen automatisch alle Wahrscheinlichkeiten für alle Zeitschritte mitgeliefert.
Mit vielen möglichen Werten (großes $K$) wird Forward-Backward ineffizient.
Idee: Versuche korrektes Ergebnis zu approximieren
Nicht exponentiell aber ab 10000 möglichen Positionen ist quadratischer Aufwand schon problematisch.
Particle Filter
Erweiterung von Beam-Search
Geeignet für Filter Queries: $P(H_i | E_1=e_1, \ldots, E_i = e_i)$
Uns interessieren ja vor allem Assignments, die besonders Wahrscheinlich sind - solche, wo die W.-keiten nahe 0 sind, können wir gerne ignorieren.
Beam Search
Zur Erinnerung Beam Search: Wir behalten immer die K Ergebnisse mit dem höchsten Gewicht. Nachteil: Oft alle Beams im gleichen Teilbaum (Gefahr von lokalem Optimum, ignorieren anderer Optionen)
Particle Filter
3 Schritte:
Propose
Weight
Resample
Propose
Zum Zeitpunkt $i$ haben wir $K$ Partikel, aus der Verteilung $P(H_1, \ldots, H_i | E_1 = e_1, \ldots, E_i = e_i)$
Beispiel (Object Tracking): Beobachtung $e_1 = 0, e_2 = 1$.
Partikel: $[0, 1], [1, 0]$
Wir generieren mehrere mögliche Pfade, die das Objekt gelaufen sein könnte.
Für jeden Partikel samplen wir ein $H_{i+1} \sim p(h_{i+1} | h_i)$.
Verteilung von neuen Partikeln ist $P(H_1, \ldots, H_i, {\color{red} H_{i+1}} | E_1 = e_1, \ldots, E_i = e_i)$
Beispiel:
$[0,1] \to [0,1,{\color{red} 1}]$
$[1,0] \to [1,0,{\color{red} 0}]$
Wir lassen unsere Partikel einen zufälligen Schritt machen, unabhängig von unserer Beobachtung.
Jeder Partikel bewegt sich so, wie das HMM es vorsieht.
Im Beispiel bleibt ein Partikel eher da, wo er schon ist.
Weight
Jeder Partikel erhält Gewicht $w(h_1, h_2, h_3) = p(e_3 | h_3)$
Idee: Wie Wahrscheinlich ist es, dass der Partikel an $h_3$ ist, wenn wir $e_3$ beobachten.
Beispiel (Object Tracking): Beobachtung $e_1 = 0, e_2 = 1, e_3 = 1$.
$w([0,1,1]) = 0.8$
$w([1,0,0]) = 0.4$
Nun bringen wir die Dynamik unserer Partikel mit unserer Beobachtung in Einklang.
Resample
Wir wählen $K$ Partikel aus. Wahrscheinlichkeit für Partikel $q$ ist $\frac{w_q}{\sum_{q'} w_{q'}}$
Ziehen mit Zurücklegen: Ein Partikel kann $0,1,2,\ldots$ mal gezogen werden.
Beispiel
$w([0,1,1]) = 0.8 \to \frac{2}{3} \\[1mm] w([1,0,0]) = 0.4 \to \frac{1}{3}$
$\Rightarrow$
$[0,1,1]$ $[0,1,1]$
Wir wollen mehr Gewicht auf die wahrscheinlicheren Partikel legen. Also wählen wir so aus, dass diese eher überleben (und sogar öfters vorkommen).
Vorteil gegenüber greedy Beam Search: Auch weniger wahrscheinliche Optionen überleben - nur halt nicht so oft.
Wenn zum Beispiel die Dynamik des Modells der Beobachtung widerspricht, gleichen sich die Schritte aus: wir bekommen erst
mehr Partikel, die unwahrscheinlicher beobachtet werden und resamplen dann so, dass wieder mehr Partikel passen.
Vorteil gegenüber Beam Search: Potentiell diversere Menge an Lösungen.
Bei Beam Search enden oft alle K Beams im selben Teilbaum was schade ist, wenn der sich als schlecht herausstellt.
Particle Filter lässt sich entsprechend auch für CSPs modifizieren (Gewichte normalisieren, ...) - Vorteil von
factor graph Modellierung.
Gibbs sampling
Wie machen wir probabilistic inference auf beliebigen Bayes Netzen?
neg i sind alle Variablen, die nicht i sind.
Die Wahrscheinlichkeiten in jedem Schritt ist das normalisierte Produkt der lokalen Wahrscheinlichkeiten (alle anderen Teile des Assignments sind fix und fallen weg).
Beobachtung: Gibbs sampling hält sich länger dort auf, wo die Wahrscheinlichkeit höher ist.
Zähle, wie oft jedes Assignment vorkommt $\Rightarrow$ gesuchte Wahrscheinlichkeitsverteilung
Theorem: Gibbs sampling konvergiert zur richtigen Verteilung (unter bestimmten Voraussetzungen). Aber:
Das kann sehr lange dauern.
Voraussetzung ist, dass auch jeder Zustand von jedem aus erreichbar ist (0 Wahrscheinlichkeiten könnten das ausschließen).
Mit etwas Pech kann es sehr lange dauern, bis die Verteilung anfängt sinnvoll zu werden.
Anwendung: Image denoising
$X_i$: Pixel Wert an Position $i$
Benachbarte Pixel sind eher gleich als unterschiedlich
Wir suchen jetzt den wahrscheinlichsten Wert aller Pixel, wenn wir nur eine Teilmenge beobachten.
Hier beobachten wir eine Teilmenge der Pixel.
Erweiterung: alle Pixel sind beobachtet, aber wir trauen der Beobachtung nicht
In Kombination mit deep learning bekommen wir besseres denoising hin (W.keit hängt komplex von mehr als den direkten Nachbarn ab)
Das ist auch einer der Bausteine für stable diffusion.
Probabilistic inference
Forward-backward HMMs exakt
Particle filter HMMs Approximation
Gibbs sampling beliebig Approximation
Bayesian Networks
Lernen
Jetzt wissen wir, wie man ein Bayes Net queried. Nun wollen wir die Parameter lernen. Das tolle: Das ist deutlich leichter,
als Inferenz.
Woher wissen wir die Wahrscheinlichkeiten?
$P(B=b, E=e, A=a) = {\color{blue} p(b)}{\color{green} p(e)}{\color{red} p(a | b,e)}$
$b$ $e$ $a$ $p(a | b,e)$
$0$ $0$ $0$ ?
$0$ $0$ $1$ ?
$0$ $1$ $0$ ?
$0$ $1$ $1$ ?
$1$ $0$ $0$ ?
$1$ $0$ $1$ ?
$1$ $1$ $0$ ?
$1$ $1$ $1$ ?
Trainingsdaten $\mathcal{D}_\text{train}$: Jedes Beispiel ist ein Assignment aller Variablen $X$
Parameter $\theta$: Lokale bedingte Wahrscheinlichkeiten
Wir beginnen mit dem Fall, dass wir zum Training komplette Assignments beobachten können (später machen wir den Fall, dass wir nur einen Teil
der Variablen sehen).
Was ist aufwendiger von der Rechenzeit?
Probabilistic inference
Parameter lernen (mit vollständigen Daten)
Einfachstes aller Bayesian networks
R ist ein Rating $\{1,2,3,4,5\}$ $P(R=r) = p(r)$
Parameter: $\theta = (p(1), p(2), p(3), p(4), p(5))$
Daten: $\mathcal{D}_\text{train} = \{1,3,4,4,4,4,4,5,5,5\}$
Eigentlich brauchen wir nur 4 Parameter, weil sie sich zu 1 addieren müssen.
Intuition: $p(r)$ proportional zu "Wie oft kommt $r$ in $\mathcal{D}_\text{train}$ vor."
Beispiel: $\mathcal{D}_\text{train} = \{1,3,4,4,4,4,4,5,5,5\}$
$r$ $\operatorname{anzahl}(r)$ $p(r)$
$1$ $1$ $0.1$
$2$ $0$ $0$
$3$ $1$ $0.1$
$4$ $5$ $0.5$
$5$ $3$ $0.3$
Zählen + normalisieren
$p(r) = \frac{\operatorname{anzahl}(r)}{|\mathcal{D}_\text{train}|}$
Zwei Variablen
Genre $G \in \{\text{drama}, \text{comedy}\}$
Rating $R \in \{1,2,3,4,5\}$
$P(G=g, R=r) = p_G(g) p_R(r|g)$
$\mathcal{D}_\text{train} = \{(d,4), (d,4), (d,5), (c,1), (c,5)\}$
$\theta = (p_G, p_R)$
Hier brauchen wir 2 + 5*2 = 12 (bzw 1 + 4*2 = 9) Parameter
$P(G=g, R=r) = p_G(g) p_R(r|g)$
$\mathcal{D}_\text{train} = \{(d,4), (d,4), (d,5), (c,1), (c,5)\}$
Strategie: Schätze jede lokale Verteilung separat ab
$g$ $p_G(g)$
$d$ $\frac{3}{5}$
$c$ $\frac{2}{5}$
$r$ $g$ $p_R(r | g)$
$4$ $d$ $\frac{2}{3}$
$5$ $d$ $\frac{1}{3}$
$1$ $c$ $\frac{1}{2}$
$5$ $c$ $\frac{1}{2}$
Für die bedingte Wahrscheinlichkeit muss sich die Wahrscheinlichkeit je g zu aufaddieren.
Die Parameter, die 0 sind tauchen in der Tabelle nicht auf.
Drei Variablen
Genre $G \in \{\text{drama}, \text{comedy}\}$
Award $A \in \{0, 1\}$
Rating $R \in \{1,2,3,4,5\}$
$P(G=g, A=a, R=r) = p_G(g) p_A(a) p_R(r|g, a)$
Hier brauchen wir 2 + 2 + 5*2*2 = 24 (bzw 1 + 1 + 4*2*2 = 18) Parameter
Das ist unser Alarm Netzwerk vom Anfang. Hier war Inferenz teils unintuitiv (explaining away)
$\mathcal{D}_\text{train} = \{(d,0,3), (d,1,5), (d,0,1), (c,0,5), (c,1,4)\}$
$g$ $p_G(g)$
$d$ $\frac{3}{5}$
$c$ $\frac{2}{5}$
$a$ $p_A(a)$
$0$ $\frac{3}{5}$
$1$ $\frac{2}{5}$
$r$ $g$ $a$ $p_R(r | g,a)$
$1$ $d$ $0$ $\frac{1}{2}$
$3$ $d$ $0$ $\frac{1}{2}$
$5$ $d$ $1$ $1$
$5$ $c$ $0$ $1$
$4$ $c$ $1$ $1$
Hier muss man schon etwas mehr aufpassen, dass richtig normalisiert wird (für jedes eindeutige Setting von g und a).
Drei Variablen - Variante 2
Genre $G \in \{\text{drama}, \text{comedy}\}$
Rating von Jim $R_1 \in \{1,2,3,4,5\}$
Rating von Martha $R_2 \in \{1,2,3,4,5\}$
$P(G=g, R_1=r_1, R_2=r_2)= p_G(g) p_{R_1}(r_1 | g) p_{R_2}(r_2 | g)$
2 + 5*2 + 5*2 = 22 (bzw. 1 + 1 + 4*2 = 10) Parameter
$\mathcal{D}_\text{train} = \{(d,4,5), (d,4,4), (d,5,3), (c,1,2), (c,5,4)\}$
Parameter $\theta = (p_G, p_{R_1}, p_{R_2})$
$g$ $p_G(g)$
$d$ $\frac{3}{5}$
$c$ $\frac{2}{5}$
$g$ $r_1$ $p_{R_1}(r_1 | g)$
$d$ $4$ $\frac{2}{3}$
$d$ $5$ $\frac{1}{3}$
$c$ $1$ $\frac{1}{2}$
$c$ $5$ $\frac{1}{2}$
$g$ $r_2$ $p_{R_2}(r_2 | g)$
$d$ $3$ $\frac{1}{3}$
$d$ $4$ $\frac{1}{3}$
$d$ $5$ $\frac{1}{3}$
$c$ $2$ $\frac{1}{2}$
$c$ $4$ $\frac{1}{2}$
$\mathcal{D}_\text{train} = \{(d,4,5), (d,4,4), (d,5,3), (c,1,2), (c,5,4)\}$
Parameter $\theta = (p_G, p_R)$
$g$ $p_G(g)$
$d$ $\frac{3}{5}$
$c$ $\frac{2}{5}$
$g$ $r$ $p_R(r | g)$
$d$ $3$ $\frac{1}{6}$
$d$ $4$ $\frac{3}{6}$
$d$ $5$ $\frac{2}{6}$
$c$ $1$ $\frac{1}{4}$
$c$ $2$ $\frac{1}{4}$
$c$ $4$ $\frac{1}{4}$
$c$ $5$ $\frac{1}{4}$
Wenn wir Variablen haben, die sich ähnlich verhalten, ist es manchmal sinnvoll, sie gleich zu modellieren.
Hier nehmen wir an, dass Jim und Martha ähnlich raten.
Wir können nun r_1 und r_2 zusammen zählen (die beiden Tabellen von vorher "addieren").
Achtung: Man muss genau aufpassen um den Unterschied in den Parametern zum vorherigen Beispiel zu sehen.
Geteilte Parameter
Idee: Die lokalen Verteilungen von verschiedenen Variablen verwenden die gleichen Parameter
Parameter lassen sich schneller lernen mit weniger Daten
Modell kann weniger Unterschiede abbilden
Mehrere Variablen teilen sich eine Tabelle mit Wahrscheinlichkeiten.
Hier geht unser Domänenwissen rein: Macht es Sinn, wenn Parameter geteilt sind, oder nicht.
Jede Verteilung ist wie eine Funktion in einem Programm, die wir von mehreren Stellen aus aufrufen können.
Beispiel: Naive Bayes
Kategorie $Y \in \{\text{kein Spam}, \text{Spam}\}$
Worte $W_i, \ldots, W_L$
\[P(Y=y, W_1=w_1, \ldots, W_L=w_l) = p_Y(y) \prod_{i=1}^L p_W(w_i | y)\]
Parameter: $\theta=(p_Y, p_W)$
Naive Bayes ist ein sehr populärer Classifier. Naive, da die Variablen als nur abhängig
von der Kategorie und unabhängig voneinander angenommen werden.
Hier werden Parameter exzessiv geteilt. Jedes Wort kommt aus der gleichen Verteilung.
Wir haben einen Parameter je Kategorie und einen je Kategorie und Wort. Anzahl Worte
im Dokument ist nicht relevant.
Beispiel: HMMs
$H_1, \ldots, H_n$: Objekt Positionen
$E_1, \ldots, E_n$: Sensor Messdaten
\[
P(H=h, E=e) = p_\text{start}(h_1) \prod_{i=2}^n p_\text{trans}(h_i | h_{i-1}) p_\text{emit}(e_i | h_i)
\]
Parameter: $\theta=(p_\text{start}, p_\text{trans}, p_\text{emit})$
Mit K Positionen und D Beobachtungen haben wir K^2 transition und KD emission parameter.
Hier teilen sich die Zeitschritte die Parameter.
Wir haben 3 unterschiedliche Tabellen aus denen die Wahrscheinlichkeiten kommen.
Ganz allgemein
Bayesian network: Variablen $X_1, \ldots, X_n$
Parameter: Verteilungen $\theta = \{p_d : d \in D\}$
Jede Variable $X_i$ hat eine Verteilung $p_{d_i}$:
\[
P(X_1 = x_1, \ldots, X_n = x_n) = \prod_{i=1}^n p_{\color{red} d_i} (x_i | x_{\text{Parents}(i)})
\]
Geteilte Parameter: $d_i$ kann für mehre $i$ gleich sein.
Maximum likelihood für Bayesian Networks
Zählen
Für jedes $x \in \mathcal{D}_\text{train}$:
Für jede Variable $x_i$:
Erhöhe um Eins: $\text{count}_{d_i}(x_{\text{Parents}(i)}, x_i)$
Normalisieren
Für jede Verteilung $d$, Variablenwerte $\hat x$ und $\hat x_\text{Parents}$:
\[
p_d(\hat x | \hat x_\text{Parents}) \gets \frac{\text{count}_d(\hat x_\text{Parents}, \hat x)}{\sum_{\hat x'} \text{count}_d(\hat x_\text{Parents}, \hat x')}
\]
Maximum Likelihood
\[
\max_\theta \prod_{x \in \mathcal{D}_\text{train}} P(X = x; \theta)
\]
Suche Parameter, so dass die Beobachtung der Trainingsbeispiele am wahrscheinlichsten ist.
Ich werfe eine Münze 1000 mal und beobachte 700 mal Kopf und 300 mal Zahl.
Unter welche Annahme ist dieses Ergebnis wahrscheinlicher?
Kopf kommt mit $50\%$ Wahrscheinlichkeit
Kopf kommt mit $70\%$ Wahrscheinlichkeit
Auch hier muss man etwas umgekehrt denken. Wir wollen das Modell so einstellen,
dass die Beobachtung die wahrscheinlichste ist.
Zählen und normalisieren berechnet genau die Maximum Likelihood Lösung.
Wir brauchen kein Gradient descent oder ähnliches.
Beweis dieser Aussage führt für die Vorlesung zu weit.
Bayesian Networks
Laplace Smoothing
Ich werfe eine Münze einmal und bekomme "Kopf".
Was schätzen wir für die Wahrscheinlichkeit $p(K)$?
Maximum Likelihood:
\[
p(K) = 1 \quad p(Z) = 0
\]
Solange wir wenige Daten haben, führt Maximum Likelihood zu Overfitting
Das ist etwas radikal. Wir schließen sehr viel aus nur einer Beobachtung. Intuitiv
sollten wir etwas näher an 0.5 nehmen.
Laplace Smoothing
Idee: Tue so, als hätten wir jedes mögliche Ereignis schon einmal beobachtet.
Beispiel: Münzwurf, 1x Kopf geworfen
Maximum Likelihood
\[
p(K) = \frac{1}{1}=1 \quad p(Z) = \frac{0}{1} = 0
\]
Maximum Likelihood mit Laplace Smoothing
\[
p(K) = \frac{1{\color{red}+1}}{1{\color{red}+2}} = \frac{2}{3} \quad p(Z) = \frac{\color{red}1}{1{\color{red}+2}} = \frac{1}{3}
\]
Wirkt dem Overfitting als eine Art Regularisierung entgegen
$\mathcal{D}_\text{train}=\{(d,4), (d,5), (c,5)\}$
$g$ $p_G(g)$
$d$ $\frac{2{\color{red}+1}}{3{\color{red}+2}}=\frac{3}{5}$
$c$ $\frac{1{\color{red}+1}}{3{\color{red}+2}}=\frac{2}{5}$
$r$ $g$ $p_R(r | g)$
$1$ $d$ $\frac{\color{red}1}{2{\color{red}+5}} = \frac{1}{7}$
$2$ $d$ $\frac{\color{red}1}{2{\color{red}+5}} = \frac{1}{7}$
$3$ $d$ $\frac{\color{red}1}{2{\color{red}+5}} = \frac{1}{7}$
$4$ $d$ $\frac{1+{\color{red}1}}{2{\color{red}+5}} = \frac{2}{7}$
$5$ $d$ $\frac{1+{\color{red}1}}{2{\color{red}+5}} = \frac{2}{7}$
$1$ $c$ $\frac{\color{red}1}{1{\color{red}+5}} = \frac{1}{6}$
$2$ $c$ $\frac{\color{red}1}{1{\color{red}+5}} = \frac{1}{6}$
$3$ $c$ $\frac{\color{red}1}{1{\color{red}+5}} = \frac{1}{6}$
$4$ $c$ $\frac{\color{red}1}{1{\color{red}+5}} = \frac{1}{6}$
$5$ $c$ $\frac{1+{\color{red}1}}{1{\color{red}+5}} = \frac{2}{6}$
Die Verteilung startet als Gleichverteilung und bleibt eine Zeit lang so (bis wir mehr Daten haben).
Allgemeiner: Wir addieren ${\color{red} \lambda} \geq 0$ zu jedem $\text{count}_d(x_{\text{Parents}(i)}, x_i)$ hinzu.
Größeres $\lambda$: Verteilung bleibt länger nahe bei Gleichverteilung
Lambda nennt sich manchmal auch Pseudo Count.
Genug Daten überwiegen am Ende immer
Ein Experiment:
\[
p(K) = \frac{1{\color{red}+1}}{1{\color{red}+2}} = \frac{2}{3} \quad p(Z) = \frac{\color{red}1}{1{\color{red}+2}} = \frac{1}{3}
\]
998 Experimente:
\[
p(K) = \frac{998{\color{red}+1}}{998{\color{red}+2}} = 0.999 \quad p(Z) = \frac{\color{red}1}{998{\color{red}+2}} = 0.001
\]
Egal, wie groß wir lambda wählen, am Ende überwiegen die Daten. Das wollen wir ja auch (wenn wir viele Daten
haben, können wir denen auch eher trauen)
Bayesian Networks
Unsupervised Learning
Was machen wir, wenn wir manche Variablen nicht beobachten (können)?
$\mathcal{D}_\text{train} = \{ ({\color{red}?}, 4,5), ({\color{red}?}, 4,4), ({\color{red}?}, 5, 3), ({\color{red}?}, 1,2)\}$
Im allgemeinen können wir oft nicht alles immer beobachten. Es könnten auch einzelne Werte nur manchmal fehlen.
Gerade bei hidden Markov models lassen sich die hidden Variablen oft nicht beobachten.
Wir haben 2 Typen von Variablen: $H$ ist hidden und $E=e$ ist beobachtet (Evidenz)
Beispiel
\[
H = G, \quad E= (R_1, R_2), \quad e = (1,2),\\ \theta = (p_G, p_R)
\]
Maximum marginal likelihood
\[
\max_\theta \prod_{e \in \mathcal{D}_\text{train}} P(E=e; \theta)
\]
\[
= \prod_{e \in \mathcal{D}_\text{train}} \sum_h P(H=h, E=e; \theta)
\]
Zur Erinnerung: Marginal Probability ist die Summe über die nicht beobachteten Variablen. ("unten" ist die Folie vom Anfang)
Formell haben wir hier, was wir ausrechnen wollen.
Wahrscheinlichkeiten
Zwei Zufallsvariablen : "Sonne scheint" $S \in \{0,1\}$, "Regen" $R \in \{0,1\}$
Joint distribution
$P(S,R) =$
$s$ $r$ $P(S=s, R=r)$
$0$ $0$ $0.20$
$0$ $1$ $0.08$
$1$ $0$ $0.70$
$1$ $1$ $0.02$
Marginal distribution
$P(S) =$
$s$ $P(S=s)$
$0$ $0.28$
$1$ $0.72$
(aggregierte Zeilen)
Conditional distribution
$P(S | R=1) =$
$s$ $P(S=s | R=1)$
$0$ $0.8$
$1$ $0.2$
(normalisierte Teilmenge der Zeilen)
Uppercase=Variable, lowercase=value. Joint distribution ist unser vollständiges Wissen über die Welt.
Expectation Maximization (EM)
Der E Schritt kann eine beliebige Inferenz Methode (Forward Backward, Particle Filter, Gibbs Sampling) verwenden.
Wir erzeugen künstlich vollständig beobachtete Punkte aus den partiellen Beobachtungen.
Expectation Maximization konvergiert zu einem lokalen Optimum
Andere Start Verteilung $\theta$ kann zu anderem Ergebnis führen.
Es kann Sinn machen, mit verschiedenen theta zu starten und das beste Ergebnis zu nehmen.
Beispiel
Genres $\{c, d\}$ und Ratings $\{1,2\}$
$\mathcal{D}_\text{train} = \{ (?, 2,2), (?, 1,2) \}$
Wir nehmen nur 2 mögliche Ratings um das Beispiel einfacher zu machen.
Start Parameter
Sinnvoller Start: Nah an, aber ungleich Gleichverteilung.
$g$ $p_G(g)$
$c$ $0.55$
$d$ $0.45$
$r$ $g$ $p_R(r | g)$
$1$ $c$ $0.4$
$2$ $c$ $0.6$
$1$ $d$ $0.6$
$2$ $d$ $0.4$
Analog zu neuronalen Netzen. Da brauchen wir auch leichte zufällige Abweichung, damit das funktioniert.
E-Step
$\mathcal{D}_\text{train} = \{ (?, 2,2), (?, 1,2) \}$
$g$ $p_G(g)$
$c$ $0.55$
$d$ $0.45$
$r$ $g$ $p_R(r | g)$
$1$ $c$ $0.4$
$2$ $c$ $0.6$
$1$ $d$ $0.65$
$2$ $d$ $0.35$
$(r_1, r_2)$ $g$ $P(G=g, R_1 = r_1, R_2=r_2)$ $q(g) = P(g|r_1,r_2)$
$(2,2)$ $c$ $0.55 \cdot 0.6 \cdot 0.6 = 0.198$ $\frac{0.198}{0.198+0.055}= 0.783$
$(2,2)$ $d$ $0.45 \cdot 0.35 \cdot 0.35 = 0.055$ $\frac{0.055}{0.198+0.055}= 0.217$
$(1,2)$ $c$ $0.55 \cdot 0.4 \cdot 0.6 = 0.132$ $\frac{0.132}{0.132+0.102}= 0.564$
$(1,2)$ $d$ $0.45 \cdot 0.65 \cdot 0.35 = 0.102$ $\frac{0.102}{0.132+0.102}= 0.436$
Hier berechnen wir die Wahrscheinlichkeiten direkt. Bei einem großen Netz würden wir hier einen der anderen Algorithmen nehmen.
M-Step
$(r_1, r_2)$ $g$ $q(g)$
$(2,2)$ $c$ $0.783$
$(2,2)$ $d$ $0.217$
$(1,2)$ $c$ $0.564$
$(1,2)$ $d$ $0.436$
$g$ count $p_G(g)$
$c$ $0.783 + 0.564 = 1.347$ $\frac{1.347}{1.347 + 0.653} = 0.674$
$d$ $0.217 + 0.436 = 0.653$ $\frac{0.653}{1.347 + 0.653} = 0.326$
$r$ $g$ count $p_R(r|g)$
$1$ $c$ $0.564$ $\frac{0.564}{0.564 + 2.13} = 0.209$
$2$ $c$ $0.783 + 0.783 + 0.564 = 2.13$ $\frac{2.13}{0.564 + 2.13} = 0.791$
$1$ $d$ $0.436$ $\frac{0.436}{0.436 + 0.87} = 0.334$
$2$ $d$ $0.217 + 0.217 + 0.436 = 0.87$ $\frac{0.87}{0.436 + 0.87} = 0.666$
Ergebnis 1. Iteration:
$g$ $p_G(g)$
$c$ $0.55$
$d$ $0.45$
$r$ $g$ $p_R(r | g)$
$1$ $c$ $0.4$
$2$ $c$ $0.6$
$1$ $d$ $0.65$
$2$ $d$ $0.35$
$\Rightarrow$
$g$ $p_G(g)$
$c$ $0.674$
$d$ $0.326$
$r$ $g$ $p_R(r|g)$
$1$ $c$ $0.209$
$2$ $c$ $0.791$
$1$ $d$ $0.334$
$2$ $d$ $0.666$
$\mathcal{D}_\text{train} = \{ (?, 2,2), (?, 1,2) \}$
Hier werden Comedies vom Algorithmus bevorzugt, was an unserem Startwert liegt.
Da es keine Daten zum Genre gibt, denkt sich der Algorithmus hier selber etwas aus (was keinen echten Genres entsprechen muss).
Zielfunktion (Start)
$g$ $p_G(g)$
$c$ $0.55$
$d$ $0.45$
$r$ $g$ $p_R(r | g)$
$1$ $c$ $0.4$
$2$ $c$ $0.6$
$1$ $d$ $0.65$
$2$ $d$ $0.35$
$\mathcal{D}_\text{train} = \{ (?, 2,2), (?, 1,2) \}$
\[
\begin{align*}
P(\mathcal{D}_\text{train}) = &(0.55 \cdot 0.6 \cdot 0.6 + 0.45 \cdot 0.35 \cdot 0.35) \\
&\cdot (0.55 \cdot 0.4 \cdot 0.6 + 0.45 \cdot 0.65 \cdot 0.35) \\
=& (0.198 + 0.055) \cdot (0.132 + 0.102) \\
=& 0.059
\end{align*}
\]
Zielfunktion (1. Iteration)
$g$ $p_G(g)$
$c$ $0.674$
$d$ $0.326$
$r$ $g$ $p_R(r|g)$
$1$ $c$ $0.209$
$2$ $c$ $0.791$
$1$ $d$ $0.334$
$2$ $d$ $0.666$
$\mathcal{D}_\text{train} = \{ (?, 2,2), (?, 1,2) \}$
\[
\begin{align*}
P(\mathcal{D}_\text{train}) = &(0.674 \cdot 0.791 \cdot 0.791 + 0.326 \cdot 0.666 \cdot 0.666) \\
&\cdot (0.674 \cdot 0.209 \cdot 0.791 + 0.326 \cdot 0.334 \cdot 0.666) \\
=& (0.422 + 0.145) \cdot (0.111 + 0.073) \\
=& 0.104
\end{align*}
\]
Die Wahrscheinlichkeit, die gegebenen Daten zu beobachten, hat sich verdoppelt.
Wichtig: Wenn wir zu wenig Variablen beobachten, können wir nichts sinnvolles lernen.
Variablen, die wir nie beobachten sind wie hidden layer in einem nn. Ihre Werte müssen nicht interpretierbar sein.
Anwendung: Entschlüsselung
Copiale cipher: 75000 Zeichen; 2011 mit EM entschlüsselt
Stellte sich als Handbuch eines deutschen Geheimbundes (ähnlich den Freimaurern) heraus.
Nutzt eine Homophone Verschlüsselung, wo jedes original Zeichen (oder Zeichenfolgen) durch ein oder mehr neue Zeichen dargestellt wird.
Wir schauen uns eine einfachere Abwandlung an
Monoalphabetische Substitution
Jedes Zeichen wird durch ein neues ersetzt
Klartextalphabet:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Geheimalphabet:
U
F
L
P
W
D
R
A
S
J
M
C
O
N
Q
Y
B
V
T
E
X
H
Z
K
G
I
"hallo welt" $\Rightarrow$ "AUCCQ ZWCE"
Das ist keine besonders effektive Verschlüsselung, aber gut zur Illustration
Entschlüsselung als HMM
$H_1, \ldots, H_n$: Zeichen des Klartext
$E_1, \ldots, E_n$: Zeichen des Geheimtexts
Parameter: $\theta = (p_\text{start}, p_\text{trans}, p_\text{emit})$
\[
P(H=h, E=e) = p_\text{start}(h_1) \prod_{i =2}^n p_\text{trans} (h_i | h_{i-1}) \prod_{i=1}^n p_\text{emit}(e_i | h_i)
\]
Am Ende sollten in p_emit nur 0en und 1en stehen, da wir ja deterministisch Verschlüsseln.
Die Transition Wahrscheinlichkeit modelliert, dass Zeichen in jeder Sprache nicht völlig zufällig sind, sondern
vom Kontext abhängen.
Bessere Ergebnisse bekäme man, wenn jedes Zeichen von noch mehr Vorgängern abhinge (n-gramme).
Wir hoffen, dass $p_\text{emit}$ am Ende unsere Substitutionstabelle ist.
Um eine Chance auf sinnvolle Ergebnisse zu haben brauchen wir gute Startverteilungen
$p_\text{emit}$: Uniform (wollen wir durch EM schätzen)
$p_\text{start}$: Uniform
$p_\text{trans}$: Geschätzt aus beliebigen anderen Texten
Indem wir p_trans mit anderen Texten initialisieren, machen wir eine Art Warmstart für den Algorithmus.
Es kann Sinn machen, p_trans im EM Algorithmus fix zu lassen (wir haben das ja schon gut abgeschätzt)
Das Warmstarten mit anderen Daten (Transfer Learning) kann allgemein sehr viel bringen (z.B. auch bei Bildern).
Zusammenfassung
Maximum Likelihood lernt Parameter aus vollständigen Daten
Laplace Smoothing verhindert Overfitting
Expectation Maximization lernt Parameter aus unvollständigen Daten
Wiederhole: Inference für fehlende Parameter + Maximum Likelihood