Programming lesson
Bayes-Netze in der KI: Ein Tutorial zu CS6601 Assignment 3 mit Gibbs-Sampling
Lerne Bayes-Netze und Gibbs-Sampling anhand eines Spionage-Szenarios. Dieses Tutorial hilft dir, CS6601 Assignment 3 zu verstehen, ohne die Lösung vorwegzunehmen.
Einführung in Bayes-Netze für CS6601 Assignment 3
Bayes-Netze sind ein zentrales Werkzeug der Künstlichen Intelligenz, um mit unsicherem Wissen umzugehen. In diesem Tutorial lernst du die Grundlagen, die du für CS6601 Assignment 3 benötigst – von der Netzerstellung bis zu Sampling-Methoden wie Gibbs-Sampling. Wir nutzen ein Spionage-Szenario mit James Bond, um die Konzepte greifbar zu machen.
Was sind Bayes-Netze?
Ein Bayes-Netz ist ein gerichteter azyklischer Graph (DAG), der probabilistische Abhängigkeiten zwischen Variablen modelliert. Jeder Knoten steht für eine Zufallsvariable, und Kanten repräsentieren direkte Abhängigkeiten. Die Stärke dieser Abhängigkeiten wird durch bedingte Wahrscheinlichkeitstabellen (CPTs) festgelegt.
Stell dir vor, du entwickelst eine KI für ein Spiel wie Valorant: Die Wahrscheinlichkeit, dass ein Spieler eine bestimmte Waffe wählt, hängt von der Karte und dem Gegner ab. Ein Bayes-Netz kann solche Zusammenhänge abbilden und Vorhersagen treffen.
Das Spionage-Szenario aus Assignment 3
In der Aufgabenstellung geht es um Spectre, die versuchen, an die „Double-0“-Dateien von MI6 zu gelangen. Folgende Variablen sind gegeben:
- H: Spectre kann professionelle Hacker anheuern.
- C: Spectre kann den Computer „Contra“ kaufen.
- M: Spectre kann Söldner anheuern.
- B: Bond bewacht M zum Zeitpunkt des Kidnapping-Versuchs.
- Q: Qs Datenbank wird gehackt und der Code gestohlen.
- K: M wird entführt und gibt den Schlüssel preis.
- D: Spectre erlangt die „Double-0“-Dateien.
Deine Aufgabe ist es, ein Bayes-Netz zu entwerfen, das diese Variablen und ihre Abhängigkeiten modelliert. Die gegebenen Wahrscheinlichkeiten helfen dir, die CPTs zu füllen.
Netzstruktur festlegen
Überlege, welche Variablen voneinander abhängen. Beispielsweise hängt Q (Datenbank gehackt) von H (Hacker) und C (Contra) ab. K (Kidnapping) hängt von M (Söldner) und B (Bond) ab. D (Dateien erlangt) hängt von Q und K ab. Zeichne die Kanten entsprechend.
Ein typischer Fehler ist, zu viele Kanten einzufügen. Halte dich an die logischen Abhängigkeiten – weniger ist oft mehr.
Wahrscheinlichkeiten aus den Daten
MI6 hat dir folgende Wahrscheinlichkeiten gegeben:
- P(H) = 0.5
- P(C) = 0.3
- P(¬M) = 0.2 → also P(M) = 0.8
- P(B) = 0.5
- P(Q|H, C):
- P(Q|H, C) = 0.9
- P(Q|H, ¬C) = 0.55
- P(Q|¬H, C) = 0.25 (denn sicher mit W'keit 0.75)
- P(Q|¬H, ¬C) = 0.05 (sicher mit 0.95)
- P(¬K|M, B) = 0.85 → P(K|M, B) = 0.15
- Weitere Werte musst du aus dem Text ableiten. Achte auf die Formulierungen: „probability that M does not get kidnapped is 0.85 if mercenaries conduct the attack“ – das ist P(¬K|M, B). Fehlende Angaben kannst du als 0 annehmen oder symmetrisch ergänzen.
Gibbs-Sampling für Inferenz
In Teil 2 des Assignments wirst du Gibbs-Sampling implementieren, um Wahrscheinlichkeiten zu berechnen, wenn einige Variablen beobachtet werden. Gibbs-Sampling ist ein Markov-Chain-Monte-Carlo-Verfahren (MCMC), das iterativ eine Variable aus ihrer bedingten Verteilung gegeben die anderen (der Markov-Blanket) zieht.
Stell dir vor, du willst die Wahrscheinlichkeit berechnen, dass Spectre die Dateien erlangt, gegeben dass Bond nicht anwesend ist. Mit Gibbs-Sampling kannst du diese Schätzung durchführen, ohne die vollständige gemeinsame Verteilung zu berechnen.
Schritt-für-Schritt: Gibbs-Sampling
- Initialisiere alle nicht beobachteten Variablen zufällig (z.B. gemäß ihrer Prior-Verteilung).
- Wiederhole für viele Iterationen (z.B. 1000):
- Wähle eine Variable X aus (z.B. H).
- Berechne die bedingte Wahrscheinlichkeit P(X | alle anderen Variablen, Evidenz). Diese hängt nur von der Markov-Blanket von X ab (Eltern, Kinder und Eltern der Kinder).
- Ziehe einen neuen Wert für X gemäß dieser Verteilung.
- Nach einer Einschwingphase (Burn-in) sammelst du Stichproben und schätzt die gewünschte Wahrscheinlichkeit als Anteil der Stichproben, in denen die Bedingung erfüllt ist.
Ein einfaches Code-Beispiel in Python (ohne pgmpy, wie gefordert):
import random
# Beispiel: Gibbs-Sampling für eine Variable H
# Angenommen, wir haben die CPTs als Funktionen
def prob_H_given_rest(H, C, Q, ...):
# Berechne P(H | C, Q, ...)
# Verwende die CPTs
pass
# Initialisierung
H = random.choice([True, False])
C = random.choice([True, False])
...
for i in range(num_samples):
# Sample H
prob = prob_H_given_rest(H, C, Q, ...)
H = random.random() < prob
# Sample C, etc.
Achtung: Du darfst keine pgmpy-Funktionen wie pgmpy.sampling.GibbsSampling verwenden. Implementiere alles selbst.
Häufige Fehler vermeiden
- Falsche Netzstruktur: Überprüfe, ob die Kanten die Abhängigkeiten korrekt widerspiegeln. Zeichne das Netz auf Papier.
- CPTs falsch befüllt: Lies die Angaben genau. Manchmal sind Wahrscheinlichkeiten für das Gegenteil gegeben (z.B. P(¬K)). Wandle sie um.
- Gibbs-Sampling: Burn-in vergessen: Verwirf die ersten 100–200 Stichproben, da sie von der Initialisierung abhängen.
- Falsche bedingte Verteilung: Die bedingte Verteilung einer Variable gegeben ihre Markov-Blanket ist proportional zum Produkt der CPTs, die die Variable betreffen.
Trend-Beispiel: Bayes-Netze in der Praxis
Bayes-Netze werden heute in vielen Bereichen eingesetzt, z.B. in der Medizindiagnostik (ähnlich wie das berühmte Beispiel von Rev. Thomas Bayes) oder in Empfehlungssystemen. Stell dir vor, du entwickelst eine KI für eine Lernplattform wie Duolingo: Die Wahrscheinlichkeit, dass ein Nutzer eine Lektion abschließt, hängt von seiner Tageszeit, seinem Fortschritt und der Schwierigkeit ab. Ein Bayes-Netz kann diese Zusammenhänge modellieren und personalisierte Empfehlungen geben.
Aktuell (Juni 2026) nutzen viele KI-Apps wie ChatGPT oder Copilot probabilistische Modelle, um kontextbezogene Antworten zu generieren. Bayes-Netze sind ein grundlegender Baustein für solche Systeme.
Zusammenfassung
Mit diesem Tutorial hast du die Grundlagen für CS6601 Assignment 3 verstanden: Du kannst ein Bayes-Netz entwerfen, CPTs aus Daten ableiten und Gibbs-Sampling anwenden. Übe, indem du das Szenario selbst modellierst, und teste dein Netz mit einfachen Inferenzen. Viel Erfolg!