Übersicht - Lehrstuhl für Informatik VI

Werbung
Übersicht
I Künstliche Intelligenz
II Problemlösen
III Wissen und Schlußfolgern
6. Logisch schließende Agenten
7. Prädikatenlogik 1. Stufe
8. Entwicklung einer Wissensbasis
9. Schließen in der Prädikatenlogik 1. Stufe
10. Logische Inferenzsysteme
IV Logisch Handeln
V Unsicheres Wissen und Schließen
VI Lernen
VII Kommunizieren, Wahrnehmen und Handeln
Kategorien von Schlussfolgerungssystemen
• Theorem Beweiser (SAM, AURA, OTTER)
und logische Programmiersprachen (Prolog, MRS, LIFE)
• Regelbasierte Produktionssysteme (OPS-5, CLIPS, SOAR)
• Frame-Systeme (OWL, FRAIL, KODIAK)
und semantische Netze (SNEPS, NETL, Conceptual Graphs)
• Terminologische Logiken (Beschreibungslogiken; KL-ONE,
CLASSIC, LOOM)
Grundaufgaben von Schlussfolgerungssystemen
1. Hinzufügen von Fakten (Wahrnehmungen oder
Schlußfolgerungen) zur Wissensbasis (Funktion TELL).
2. Herleiten von Fakten aus einem neuem Faktum und der
Wissensbasis (bei Vorwärtsverkettung Teil von TELL).
3. Fragen beantworten (Funktion ASK). Mit Ja/Nein oder durch
Instanziierungen).
4. Feststellen, ob eine Frage bereits in der Wissensbasis enthalten ist
(eingeschränkte Version von ASK).
5. Entfernen von Sätzen aus der Wissensbasis.
Implementierung der Datentypen
Vorbemerkung: Ein/Ausgabe für Interaktion mit Benutzer muss
gesondert behandelt werden.
Interne Repräsentation: Basis-Datentyp „Compound“ mit einem Feld
für den Operator und einem Feld für die Argumente,
z.B. wird der Satz c = „P(x) ∧ P(y)“
in folgende interne Darstellung umgesetzt:
OP(c) = ∧
ARGS (c) = [P(x), P(y)].
Naives Abspeichern von Sätzen in einer linearen Liste hat einen
Suchaufwand von O(n), ob ein Satz in der Liste enthalten ist, und beim
Abspeichern ebenfalls einen Aufwand von O(n), falls Duplikate erkannt
und entfernt werden sollen (ohne Duplikat-Erkennung nur O(1)).
→ Besser: Indexierung
Indexierung
Implementierung der Wissensbasis als Hash-Tabelle:
1. Ansatz: Reserviere jeweils eine Speicherzelle für jeden Satz.
Nachteile: 1. Reflektiert nicht die strukturbildenden Elemente der Logik
2. Kann nicht mit Variablen umgehen.
→ Daher nicht geeignet für Anfragen wie:
• Suche eine Implikation mit P auf der rechten Seite (Nachbedingung)
• Suche Match zu „∃x Bruder (Richard, x)“ mit „Bruder (Richard, John)“
2. Ansatz: Indiziere nach Prädikatsymbolen und teile nach 4 Kategorien
auf:
- Liste von positiven Literalen für das Prädikatsymbol
- Liste von negativen Literalen für das Prädikatsymbol
- Liste von Sätzen mit Prädikatssymbol in Nachbedingung
- Liste von Sätzen mit Prädikatssymbol in Vorbedingung
Verfeinerung des 2. Ansatz: Unterindex für die konstante Argumente
Beispiel für Indizierung logischer Sätze
Unifikationsalgorithmus (1)
Mit Indexierung ist die Unifikation ziemlich effizient, allerdings erhöht
der „Occur-Check“ in der Prozedur „Unify-Var“ die Komplexität von
O(n) auf O(n2), wobei n die Länge des Ausdrucks bezeichnet.
Unifikationsalgorithmus (2)
Logische Programmiersprachen
Programm und die Eingabe:
logische Sätze
Herleitung von Schlußfolgerung:
logische Inferenz (Beweis)
Algorithmus = Logik + Kontrolle
Logische Programmiersprachen ermöglichen das Schreiben von
Algorithmen, indem sie logische Sätze mit Informationen anreichern, um
den Inferenzprozess zu kontrollieren.
Verbreitetestes Beispiel: Prolog
Beispieldefinition:
member (X, [X | L])
∀ x, l Member (x, [x | l])
member (X, [Y | L]) :- member (X, L)
∀ x, y, l Member (x, l) ⇒ Member (x, [y | l])
Eigenschaften von Prolog
• Programm besteht aus Folge von (mit „und“ verknüpften) Sätzen, alle
Variablen sind allquantifiziert und disjunkt in verschiedenen Sätzen.
• Als Sätze sind nur Hornklauseln zugelassen.
• Terme: Konstanten, Variablen, Funktionsausdrücke
• Anfragen: Terme, Konjunktionen, Disjunktionen,
• Negation as Failure: Das Ziel ¬P gilt als bewiesen, wenn P nicht
hergeleitet werden kann.
• Syntaktisch disjunkte Terme sind disjunkt, d.h. man kann nicht A=B
oder A = f(x) ausdrücken, falls A eine Konstante ist.
• Viele eingebaute Prädikate für Arithmetik, Ein/Ausgabe usw., deren
Code bei Aufruf einfach ausgeführt wird.
Implementierung von Prolog
• Inferenz mittels Rückwärtsverkettung und Tiefensuche
• Reihenfolge der Abarbeitung: von links nach rechts & oben nach unten
• Kein Occur-Check aus Effizienzgründen
Prolog liefert alle Lösungen zu einer Anfrage nacheinander:
member (loc (X,X), [loc (1,1), loc (2,1), loc (2,2)]) → „X=1“ und „X=2“
Effizienzsteigerungen für den Interpreter
• Es werden nicht alle Lösungen für ein Teilziel generiert, sondern nur
eine Lösung, sowie ein Versprechen (choice point), weitere zu
generieren, wenn die erste Lösung vollständig untersucht wurde.
• Substitutionen für Variablen werden nicht als Bindungslisten, sondern
als Wertbindungen repräsentiert. Zum effizienten Rücksetzen der
Variablen wird ein Stack (Trail) verwendet.
Kompilierung von Prolog
Da der Instruktionsvorrat von den üblichen Computern schlecht zur
Semantik von Prolog passt, kompilieren die meisten Prolog-Compiler in
eine Zwischensprache, vor allem die Warren Abstract Machine oder
auch in andere Sprachen wie LISP oder C.
• Die Klauseln für Member werden nicht in einer Datenbasis gesucht,
sondern sind in die Prozedur eingebaut.
• Die Variablenbindungen werden auf einem Stack (trail) verwaltet.
• Continuation:Speichern von Informationen zur Fortsetzung des Aufrufs
Parallelisierung von Prolog
• Oder-Parallelität: Ein Ziel kann mit vielen Literalen unifiziert werden,
die unabhängig voneinander untersucht werden können.
• Und-Parallelität: Die Konjunktionen im Hornklausel-Rumpf werden
parallel überprüft. Problem: konsistente Bindungen für Variablen.
Effizienz (LIPS = Logical Instructions Per Second):
• Standard-Prolog-Compiler (1990 Workstations): 50 000 LIPS
• Hochleistungs-Compiler (1990): Millionen LIPS
• PIM (Parallel Inference Machine; 5th Gen Project: 64 000 000 LIPS
Logische Constraintsprachen (CLP)
Erweiterung von Prolog um Constraints über Werten, z.B. x > 3.
Beispiel: Definition eines Dreiecks:
Dreieck (x,y,z) ⇐ (x>0) ∧ (y>0) ∧ (z>0) ∧ (x+y>z) ∧ (y+z>x) ∧ (x+z>y)
Dreieck (3,4,5) kann sowohl in Prolog als auch CLP bestätigt werden.
aber
Dreieck (x,4,5) liefert nur in CLP die Antwort: {x>1 ∧ x<9}
Auch symbolische Constraints wie Person (p) möglich, die nicht wie in
Prolog sofort instantiiert werden, sondern verzögert ausgewertet werden
(Least Commitment).
Fortgeschrittene Kontrollmöglichkeiten
Metareasoning: Schlussfolgern über den Schlußfolgerungsprozess
Beispiel1: Was ist das Einkommen der Gattin des Präsidenten?
Einkommen (s,i) & verheiratet (s, p) & Beruf (p, Präsident)
→ Ineffizient, daher besser die Reihenfolge der Anfrage umdrehen.
Beispiel2: Welche Personen sind aus derselben Stadt wie der Präsident?
Bürger (p, stadt) & Bürger (x, stadt) & Beruf (p, Präsident)
→ Statt bei fehlgeschlagenem Beweis des letzten Literals eine andere
Alternative beim vorletzten zu probieren (Backtracking), sollte man
gleich zum ersten Literal zurückspringen (Backjumping).
→ Außerdem kann man sich die fehlgeschlagene Variablenkombination
merken (dependency directed backtracking).
→ Oft ist es günstig, sich durchgeführte Inferenzen zu merken, um diese
nicht noch mal herleiten zu müssen. Problem: Was soll man vergessen?
Theorem Beweiser (1)
Unterschied zwischen logischen Programmiersprachen und TheoremBeweisern:
- Hornklauseln vs. volle Prädikatenlogik 1. Stufe
- implizite vs. explizite Repräsentation der Kontrolle
Beispiel für Kontrollinformationen in OTTER:
- Aufteilung der Klauseln in wichtige und nutzbare gemäß der Set of
Support Strategie
- Umformung von Gleichungen in Rewrite-Regeln, die nur in einer
Richtung benutzt werden, z.B. x+0=x.
- Steuerungswissen (z.B. Gewicht von Klauseln) und Filterwissen
(Ignorieren von Teilzielen).
Theorem Beweiser (2)
Erweiterung von Prolog zu Theorem-Beweiser in PTTP
- Occur-Check
- Statt Tiefensuche iterative Tiefensuche
- Zulassen negierter Literale
- Eine Klausel mit n Literalen wird als n Klauseln gespeichert, z.B. für
A ⇐ B ∧ C zusätzlich ¬B ⇐ C ∧ ¬A sowie ¬C ⇐ B ∧ ¬A
(kann sehr ineffizient sein).
- Statt Input-Resolution lineare Input-Resolution
Theorem Beweiser als Assistenten
Einsatz zur Programmverifikation (und Synthese)
Architektur des OTTER - Theorem - Beweises
Vorwärtsverkettung mit Produktionsregeln
Vereinfachung zu Theorem-Beweiser: Es werden Regeln mit Variabeln
gegen eine Faktenbasis ohne Variablen abgeglichen
(Pattern Matching statt Unifikation).
Typischer Aufbau:
- Working Memory (Faktenbasis).
- Regeln mit Kondition und Aktion (jeweils typischerweise mit &
verknüpft). Aktionen dürfen auch Elemente des Working Memory
löschen oder verändern.
- Vergleichsphase: In einem Inferenzzyklus werden alle Regeln berechnet, deren Konditionen aufgrund des Working Memory erfüllt sind.
- Konfliktauflösung: Aus diesen Regeln wird eine ausgewählt und
deren Aktion ausgeführt.
Beispiele: OPS-5, SOAR, ACT.
Konfliktlösungstrategien
Beispiele:
- Keine Wiederholung (einer gerade gefeuerten Regel)
- Spezifizität (Bevorzuge spezifischere Regeln).
Bsp.: (1) Säugetier (x) => add Beine (x,4)
(2) Säugetier (x) & Mensch (x) => add Beine (x,2)
(2) ist spezifischer als (1).
- Regelprioritäten (Zusatzwissen).
- Aktualität (Bevorzuge Regeln, die auf gerade geänderte Einträge
im Working Memory Bezug nehmen)
Vergleichsphase
Beobachtungen:
(1) Oft enthalten Regeln gleiche Elemente in der Kondition. Sie sollten
nicht in jeder Regel neu überprüft werden müssen.
(2) Von einem Inferenzzyklus zum nächsten ändert sich das Working
Memory oft nur geringfügig. Daher sollten nur die Regeln überprüft
werden, die von den Änderungen betroffen sind.
Beispiel für Kompilierung im RETE-Algorithmus
Regelbasis:
A(x) & B(x) & C(y) => Add D(x)
A(x) & B(y) & D(x) => Add E(x)
A(x) & B(x) & E(x) => delete A(x)
Working Memory:
{A(1), A(2), B(2)
B(3), B(4), C(5)}
A=E
Frame-Systeme und semantische Netze
Grafische Wissensnotationen wurden schon Ende des 19. Jahrhunderts
als "Logik der Zukunft" propagiert. Auf semantischer Ebene besteht aber
kein grundlegender Unterschied zur Prädikatenlogik 1. Stufe.
Kernmechanismen:
- Vererbung entlang von Kanten mit Default-Werten
- Zugeordnete Prozeduren möglich, um die Beschränkungen in der
Ausdrucksstärke zu kompensieren.
Vorteile grafischer Notationen:
- bessere Lesbarkeit für Menschen.
- durch Vereinfachungen in der Ausdrucksstärke wird der Inferenzprozess effizienter und transparenter (z.B. Verfolgen von Kanten im Netz)
Nachteile:
- oft unklare Semantik der Graphen (z.B. bei multipler Vererbung);
Klärung nur im Programmcode.
- Effizienzprobleme aufgrund von Nicht-Monotonie wegen Defaults.
Beispiel für Frame
Grundlegende Beziehung in semantischen Netzen
Mehrfachvererbung
Basis-Interpreter für semantische Netze (1)
Basis-Interpreter für semantische Netze (2)
Beschreibungslogiken (Terminologische Logiken)
Ziel: Definition von Kategorien, so dass aufgrund der Eigenschaften
einer Kategorie bzw. eines Objektes dessen Zugehörigkeit zu einer
Kategorie ermittelt werden kann (Subsumption bzw. Klassifikation).
Beispiel1 (Junggeselle): And (Unverheiratet, Erwachsener, Männlich)
Beispiel2 (Mann mit mindestens drei arbeitslosen und mit einem Doktor
verheirateten Söhnen und zwei Töchtern, die Professor in Chemie
oder Physik sind):
And (Mann, AtLeast (3 Sohn), Atleast (2 Tochter)
(All (sohn, And (arbeitslos, verheiratet, all (Partner Doktor)))
(All (Tochter, And (Professor, Fills (Fach, Physik, Chemie))))
Effizienzfrage: Wie aufwendig ist Subsumption in Abhängigkeit der
Ausdrucksstärke der Sprache?
Sprache für Beschreibungslogik in CLASSIC
Effizient interpretierbaren Beschreibungslogiken fehlen meist Operatoren für Negation und Disjunktion (z.B. „Or“ oder „Some“; Fills &
OneOf erlauben Disjunktion nur für explizit aufgezählte Individuen).
Belief Revision (1)
Implementierung von "Retract": Rücknahme oder Änderung einer
Aussage, z.B. wegen
•
•
•
•
Speicherbereinigung (Vergessen)
Änderungen in der Welt
Änderungen von Default-Annahmen
Korrektur von Fehlinformationen
Problem: Gewährleistung der Konsistenz der Datenbasis, da aus den
geänderten Aussagen andere Aussagen hergeleitet sein können.
Lösung: Truth-Maintenance-Systeme (TMS)
Drei Varianten:
1. Chronologische Backtracking:
Ziehe alle Schlussfolgerungen bis zu dem Punkt zurück, wo die
geänderte Aussage das erste Mal benutzt wurde.
Belief Revision (2)
2. Justification-Based TMS (JTMS):
Speichere zu jeder Schlussfolgerung die direkten Gründe (justifications)
für ihre Herleitung. Wenn ein Grund ungültig wird, dann überprüfe, ob
für die betroffene Schlußfolgerung noch andere Gründe zutreffen. Wenn
nicht, ziehe sie zurück und überprüfe rekursiv die Auswirkungen.
Problem: zirkuläre Gründe.
Lösung: Unterscheidung in "sichere" und "unsichere" Gründe.
3. Assumption-Based TMS (ATMS):
Speichere zu jeder Schlussfolgerung die Basisannahmen (Assumptions),
die zu ihrer Herleitung geführt haben. Wenn sich etwas ändert, überprüfe
anhand ihrer Basisannahmen, ob eine Schlussfolgerung immer noch gilt.
Vorteile gegenüber JTMS: Kein Problem mit Zyklen,
Behandlung multipler Zustände möglich.
Nachteile: Skalierungsproblem, Behandlung von unsicherem Wissen.
Herunterladen