Representatie & Zoeken College 5: Productie-regel systemen Definitie Varianten Voorbeelden Generalisatie: Blackboards Leeswijzer: Hoofdstuk 6.2-6.3 + 8.2 RZ5 1 1 1 1 1 1 1
Productie-regel systemen: 3 onderdelen Verzameling productie-regels Werkgeheugen Reken-cyclus Meest gebruikte type systeem in huidige AI industrie Productie-regel systemen zijn waarschijnlijk een van de meest gebruikte vormen van AI systemen in de praktijk. Veel grote bedrijven maken er gebruik van: Shell (bijv. voor het configureren van raffinaderijen (die moeten bij elke aankomende supertanker opnieuw ingesteld worden afhankelijk van de kwaliteit van de aankomende ruwe olie en de marktprijzen op dat moment (die bepalen hoeveel er van welk product moet worden gemaakt) Nationale Nederlanden (bijv bij het bepalen van het optimale verzekeringspakket voor een nieuwe klant, afhankelijk van inkomen, leeftijd, levenstijl, woongebied,etc) Unilever (bijv bij het adviseren over ingewikkelde hygiene programma’s van in voedselfabrieken) Everest is een van de Nederlandse berdrijven die hun geld verdienen met het bouwen van productie-regel systemen voor uiteenlopende klanten. Elke productieregel systeem bestaat uit drie onderdelen: een verzameling productie-regels (waar de kennis van het systeem in opgeslagen staat) een werkgeheugen (waar de huidige stand van de wereld in opgeslagen staat) een rekencyclus die bepaalt hoe het werkgeheugen veranderd wordt onder invloed van de productie-regels. Elk van deze drie onderdelen wordt nu besproken RZ5
Productie-regels (1) ALS <conditie> DAN <actie> <conditie> = test op huidige toestand van de wereld Vb: <atribuut>(<object>,<waarde>) symptoom(patient112, koorts) risico(spaarrekening, laag) risico(aandelen, hoog) <actie> = operatie op huidige toestand van de wereld Vb: ADD ziekte(patient112,griep) DEL advies(client57, aandelen) Productie regels zijn conditie-actie paren: Als een bepaalde conditie waar is, dan moet een bepaalde actie worden uitgevoerd. Dat is dus anders dan een logische implicatie. Die heeft ook de als-dan vorm, maar gaat over de waarheid van uitspraken: A->B betekent: als A waar is, dan is B ook waar. Dat is anders dan in een productie-regel, waar het als-deel ook een conditie is, maar het B-deel een actie is. Logica: IF it rains, then you will get wet Conditie-Actie: IF it rains, then you should wear a coat Die condities bestaan meestal uit attribuut-waarde-paren die worden getest op de huidige toestand van de wereld (natuurlijk niet de echte toestand van de echte wereld, maar de weergegeven versie van de toestand van de wereld in het werkgeheugen) voorbeelden van zulke condities zijn:… De actie bestaat dan uit een operatie op de huidige toestand van de wereld (alweer: niet op de echte toestand van de echte wereld, maar op de weergegeven versie van de toestand van de wereld in het werkgeheugen) RZ5
Productie-regels (2) Regels bevatten variabelen Vb: ALS symptoom($Patient, koorts) DAN ADD ziekte($Patient, infectie) DEL ziekte($Patient, vergiftiging) Vb: ALS diagnose($Patient, $Ziekte) EN ernst($Ziekte, hoog) DAN ADD opname($Patient, urgent) Productie regels bestaan zoals gezegd uit een ALS-deel en een DAN-deel. Het ALS-deel heeft ook de vorm van attribuut-waarde paren, maar dan met mogelijk variabelen. We zullen zo zien dat deze attribuut-waarde paren worden gematched tegen de inhoud van het werkgeheugen, waarbij de variabelen een waarde krijgen door het matchings-process. Het DAN-deel bestaat uit een ADD of DELETE actie, waarbij het vermelde attribuut-waarde paar aan het werkgeheugen wordt toegevoegd of eruit verwijderd. De waardes van de variabelen in het DAN-deel zijn ingevuld tijdens het matchen van het ALS deel tegen de inhoud van het werkgeheugen, zodat er alleen maar volledig ingevulde attribuut-waarde paren worden toegevoegd of verwijderd. (Om dit te laten kloppen is het natuurlijk nodig dat er ge’e’n actie-delen zijn waar variabelen in voorkomen die niet al in het als-deel staan. Waarom? Voorbeeldje?) Dus: het werkgeheugen bevat alleen maar volledig ingevulde attribuut-waarde paren, zonder variabelen. (Die komen alleen maar voor in de productie regels). RZ5
Werkgeheugen Verzameling patronen die de huidige toestand van de wereld beschrijven Vb: doel(klant512, snellewinst) doel(klant412, pensioen) NB: geen variabelen zie commentaren vorige slide RZ5
Rekencyclus Match conditie-deel van regels tegen WM ðconflict-set Selecteer een regel uit de conflict set ðconflict-set Executeer actie-gedeelte van de geselecteerde regel = conflict resolutie Tot nu toe hebben we alleen maar gesproken over de onderdelen van een productieregel systeem (regels en werkgeheugen). Hier zien we hoe die onderdelen gebruikt worden om met een productie-regel systeem te “rekenen” (of: te “redeneren” als je wilt): 1. Match het als-deel van alle regels tegen de inhoud van het werkgeheugen dat levert een verzamelen “toepasbare” regels op, die heet de conflict set (naam is gekozen omdat die regels allemaal willen vuren, en allemaal een andere actie willen doen, en dus met elkaar in conflict zijn) 2. selecteer een van de toepasbare regels uit de conflict set. Dat keuze proces heet conflict resolutie 3. voer het actie-deel van de gekozen regel uit. Dit zal leiden tot veranderingen in het werkgeheugen (ADD of DEL acties), en dus heeft het zin om weer opnieuw te kijken welke regels nu van toepassing zijn op het nieuwe, veranderde werkgeheugen. Deze cyclus stopt op 2 manieren: de gunstige manier: de conclusie waar we naar op zoek zijn is verschenen in het werkgeheugen (de redenering is geslaagd) de ongunstige manier: geen van de regels is nog toepasbaar op het werkgeheugen (de redenering loopt dood) Stopconditie: Als geen regel meer matched, of Als gewenst element aanwezig in WM RZ5
Voorbeeld: dubbele letter puzzel Gegeven een rij van letters uit {A,B,C,D,E} Vervang dubbele letters door hun cyclisch-alfabetische voorganger of opvolger Reduceer de rij tot één letter Start: AACCDC ï WM Doel: enkele letter Regels: 1. AA ® B 2. BB ® C 3. CC ® D 4. DD ® E 5. EE ® A 6. AA ® E 7. BB ® A 8. CC ® B 9. DD ® C 10. EE ® D Het voorbeeld spreekt voor zich (excuus: dit is een kunstmatig, beetje flauw voorbeeldje; maar het is eenvoudig genoeg dat iedereen het gelijk begrijpt en dat het op e’e’n slide past) RZ5
Voorbeeld: dubbele letter puzzel Regels: 1. AA ® B 2. BB ® C 3. CC ® D 4. DD ® E 5. EE ® A 6. AA ® E 7. BB ® A 8. CC ® B 9. DD ® C 10. EE ® D Iteratie WM Conflict set Gevuurde regel AACCDC 1,3,6,8 1 1 BCCDC 3,8 3 2 BDDC 4,9 9 steeds aangegeven de conflict set en de conflict-resolutie. NB: de conflict-resolutie is hier nogal willekeurig gedaan, om te zorgen dat er een succesvolle terminatie plaatsvindt 3 BCC 3,8 8 4 BB 2,7 2 5 C ¾ ¾ RZ5
Zoekbesturing Met of zonder backtracking? Voorwaards of achterwaards? Conflict resolutie strategie Het algemene schema voor de rekencyclus legt lang niet alle details vast. Er zijn nog steeds veel verschillende keuzen die gemaakt moeten worden bij het bouwen van een specifiek productieregelsysteem. Elk van deze keuzen wordt vervolgens besproken. Ten slotte zijn er veel verschillende keuzes voor conflict resolutie strategieen, zie later. RZ5
Backtracking doodlopende berekening = lege conflict-set, maar oplossing nog niet in WM backtracking = bij doodlopende berekening, keer terug naar eerdere positie, en kies anders Iteratie WM Conflict set Gevuurde regel AACCDC 1,3,6,8 1 1 BCCDC 3,8 3 2 BDDC 4,9 4 9 3a BEC ¾ Bijvoorbeeld: wat doe je als een berekening onsuccesvol blijkt te eindigen. De meeste systemen doen dan helemaal niks: ze stoppen gewoon zonder succes. In principe is het natuurlijk ook mogelijk om terug te gaan naar de meest recente iteratie waar een conflictset > 1 was, en daar een andere mogelijkheid kiezen, etc. Zie illustratie met voorbeeld, waar lege conflict set optreedt in stap 3. Backtracken naar stap 2 en een andere keuze maken lijst tot een alternatieve stap 3, die wel tot succes leidt. Vraag aan de zaal: op welke zoekstrategie komt dat neer? (antwoord: depth-first search) Zoals gezegd doen de meeste productie regel systemen dit niet. 3b BCC 3,8 8 4 BB 2,7 2 5 C ¾ ¾ RZ5
Voorwaards of achterwaards Voorwaards: match conditie-deel met WM, (zie eerder) Achterwaards: match actie-deel met gewenste doel kies regel met juiste actie-deel bekijk conditie-delen van regel als conditie-deel in WM dan OK als conditie-deel niet in WM dan conditie-deel wordt gewenste doel Een andere keuze die we kennen uit de voorgaande colleges is natuurlijk voorwaards of achterwaards redeneren. Vraag aan de zaal: waar komt de tot nu toe beschreven rekencyclus op neer? (antwoord: voorwaards redenenen (data-driven). Immers, je begint met de gegeven data (toestand vand wereld, en redeneert toe naar een gewenste eindtoestand (nl. een situatie waarin het werkgeheugen een gezocht antwoord-element bevat)) Een systeem dat wel backward reasoning zou doen met productie regels zou de bovenbeschreven reken-cyclus hebben(die dus anders is dan de tot nu toe beschreven forwards-reasoning cyclus). Ook hier geldt weer: de meeste systemen doen dit niet, die redeneren gewoon voorwaards. RZ5
Conflict resolutie strategie Refractie: geen regel 2´ achter elkaar op het zelfde patroon laten vuren Recency: prefereer matches met nieuwe WM elementen Specificity: prefereer regels met meer condities Wegingsfactoren: kies regel met hoogste gewicht Meta-redeneren: bouw tweede systeem dat conflict-resolutie doet De laatste keuze om te maken is de te volgen conflict resolutie strategie. Hier staan een aantal van de meest gebruikte strategieen: naam, definitie, intuitie. (studenten worden geacht deze te kennen) Refractie: vuur niet 2x dezelfde regel achtereen. Regels die alleen ADD acties hebben, kunnen per definitie de volgende cyclus weer vuren. dat heeft natuurlijk niet veel zin, is de intuitie achter deze strategie. Recency: het idee hier is dat er een “lijn” in de redenering zitten: elementen die zojuist zijn toegevoegd zijn als het ware tussen-conclussies in die redeneerlijn, en nieuwe regels zouden dus juist deze lijn moeten vasthouden/voortzetten, en dus krijgen regels die deze nieuwe elementen gebruiken de voorkeur. Specifity verkiest regels met de meeste condities: bijv. een medicijn dat toepasbaar is op mensen met koorts, of een medicijn dat toepasbaar is op mensen met koorts onder de 6 jaar. De 2e regel is specifieker, en verdient dus de voorkeur. Met wegingsfactoren kan de systeem bouwer zelf aangeven welke regels belangrijker zijn dan anderen. Meestal is de enige waarde van de getallen hun onderlingen rangorde. Dus: factor “0.8” heeft niet een eigen betekenis, maar zorgt alleen maar voor voorrang boven regels met “0.7”. Het conflict-resolutie probleem vereist soms veel kennis over het probleem in kwestie, en over probleem oplossen in het algemeen. We zouden dus ook een tweede kennissysteem kunnen bouwen wiens enige rol het is om conflict-resolutie te doen voor het eerste kennissyteem (het systeem dat daadwerkelijk een probleem in het toepassingsdomein oplost). Zo’n tweede systeem heet een meta-systeem. Meta=“over”, het redeneert immers over het eerste systeem. Vraag aan de zaal: wat is het voor de hand liggende probleem met meta-systemen? Antw: ze hebben zelf natuurlijk ook weer een conflict-resolutie probleem, dat weer opgelost zou moeten worden door een meta-meta-systeem, etc. Echter, in de praktijk is gebleken dat de regelverzamelingen steeds kleiner worden naarmate je hoger in deze hierarchie gaat. In de praktijk volstaat 1 meta-systeem, dat dan zelf een van de andere strategieen gebruikt. RZ5
Gebruik van de begrippen over zoekruimtes: Wat is de zoekruimte van een productie-regelssysteem? wat is de begin toestand wat is de eind toestand wat zijn de tussen toestanden wat zijn de toegestane overgangen Forward/backward zoeken Wat is de branching factor? Wat is een oneindige tak? De bedoeling van deze slide is om te laten zien dat veel van de begrippen over zoekruimtes uit de eerste colleges nuttig zijn om iets totaal anders zoals productie-regel-systemen te beschrijven. een zoekruimte is gedefinieerd door deze 4 eigenschappen. We kunnen ook een productie-regel systeem opvatten als een zoekruimte: begin toestand = inhoud van werkgeheugen bij het begin eind toestand = inhoud van het werkgeheugen aan het eind tussentoestanden = inhouden van werkgeheugen tijdens de rekencyclus toegestane overgangen = toepasbare productie-regels die het ene werkgeheugen veranderen in het andere Branching factor = het aantal toepasbare productie-regels op een werkgeheugen = omvang van de conflict set oneindige tak = bijv. oneindig vaak toepasbare regel, bijv: regel met alleen ADD actie, en niet de juiste conflict resolutie strategie. RZ5
Eigenschappen van productie-regel systemen Scheiding van algemene kennis (regels) geval-specifieke kennis (WM) Vb: algemene kennis = ziekten + symptomen geval-specifiek = observaties bij een patient Uitleg door “tracing” Model voor menselijk probleem-oplossen (?) Modulariteit van regels (?) Algemeen computationeel model Waarom zijn productie-regel systemen een van de meest toegepaste vormen van AI technologie: de scheiding tussen regel-verzameling en werkgeheugen levert een mooie scheiding op tussen algemeen bruikbare kennis, en de specifieke data waarop de kennis wordt toegepast. Bij andere vormen van kennis-representatie (bijv. frames, semantische netwerken, zie opvolgende colleges) is die scheiding veel minder helder. Het succes van een AI systeem wordt niet alleen bepaald door de kwaliteit van de output ,maar ook door of het systeem in staat is om uit te leggen waarom het met zijn anwtoord komt, wat de motivatie is. Het eenvoudig volgen van de keten van toegepaste regels is vaak een nuttige vorm van uitleg voor domain experts: “waarom concludeer je dit?” kan uitgelegd worden door terug te lopen langs de keten van toegepaste regels die ons tot het huidige werkgeheugen hebben gebracht. “waarom vraag je dit” kan uitgelegd worden door te verwijzen naar de conclusie van de huidige regel (en naar de ALS- en DAN-delen van mogelijk opvolgende regels. Er wordt beweerd dat menselijke experts ook vaak denken in termen van regels. Dit is overigens niet altijd zo. Bij perceptuele expert-taken (bijv. het visueel herkennen van objecten) blijkt het vaak onmogelijk te zijn om zulke regels te formuleren. Maar bij expliciete kennis-taken (rechters, artsen, technici, etc) kunnen de experts hun kennis vaak redelijk makkelijk in regels formuleren. Elke regel is een klein pakketje kennis, een “module”. Dat levert een overzichtellijke opdeling van de kennis op. (Ook dat is bij andere kennisrepresentaties zoals frames of semantische netwerken minder het geval). Overigens wordt er ook vaak kritiek geleverd op het “modulaire” karakter van regels: als je veel regels hebt gaan veel regels van elkaar afhangen: als je de conclusie van een regel veranderd, vuurt de conditie van een andere regel niet meer, etc. Er ontstaat dan “regel-spaghetti”, die juist heel onoverzichtelijk is, en waarvan het niet meer te voorspellen is wat het gevolg zal zijn van veranderingen. Oppervlakkig gezien lijken productie-regels een zeer beperkte uitdrukkingskracht te hebben. Echter, een stelling van Neil Post uit de jaren ’30 zegt al dat (de formele versie van) productie-regel systemen universele uitdrukkingskracht hebben. Dat wil zeggen: alles wat je ooit in een willekeurige programmeertaal zou kunnen uitdrukken kun je uitdrukken in productieregels. En alles wat je ooit zou kunnen berekenen op een computer kun je ook uitrekenen met productie-regel systemen. Deze zaken tezamen verklaren waarom productie-regel systemen zo populair zijn in de praktijk. AI studenten, die in hun 2e jaar hun eerste kennis-systeem gaan bouwen, zullen daar ook productie-regel systemen voor gaan gebruiken. Meest gebruikte middel voor kennis-systeem toepassingen in de praktijk RZ5
Voorbeeld ¼ (start) ® del 1, add task(choose-guitar) task(choose-guitar) & music(blues, 60s) ® add guitar(fender, stratocaster, 0.8) task(choose-guitar) & music(blues, 70s) ® add guitar(gibson, les-paul, 0.8) ¼ task(choose-guitar) & guitar($Brand,$Type,$CF) ® del 1, del 2, add task(choose-amp),add guitar($Brand,$Type) task(choose-amp) & guitar(fender,--) ® add amp(vox,ac30) task(choose-amp) & guitar(gibson,--) ® add amp(marshall,jtm-45) task(choose-amp) & amp(--,--) ® del 1 Hier is een eenvoudig maar realistisch voorbeeld van het gebruik van productie-regels: De keuze voor een electrische gitaar (bijv. in een muziekwinkel) valt uiteen in twee fasen: eerst het kiezen van een gitaar, gevolgd door het kiezen voor een versterker. De keuze voor een gitaar wordt bepaald door (oa) de voorkeur voor muziek-stijl, de keuze voor een versterker hangt (oa) af van de gekozen gitaar. Om te zorgen dat deze keuzen in de goede volgorde gemaakt worden zijn er speciale werkgeheugen-elementen die aangeven welke “task” we gaan doen of aan het doen zijn . Het wordt vaak als een nadeel van productie-regel systemen gezien dat ze dit soort “besturingsinformatie” wel nodig hebben, maar dat er geen goede manier is om het netjes op te schrijven, zodat deze instructies in dezelfde vorm gepropt moeten worden als de daadwerkelijke domein kennis (hier: over gitaren, muzieksmaken, en versterkers). RZ5
Voorbeeld (planning): acties & toestand Vind acties die doel bereiken vanuit huidige toestand A B C D E Acties (vb) Pakop(X), ZetNeer(X), ZetOp(X,Y), HaalAf(X,Y) Toestand (o.a.) InHand(C) & OpTafel(A) & StaatOp(E,D) & IsVrij(B) & ... Nog een realistisch voorbeeld van het gebruik van productie-regels, om een robot-arm te besturen. De wereld ziet er uit als in het plaatje, het vocabulair om de wereld te beschrijven is gegeven in de rechter kolom, de acties die uitgevoerd kunnen worden in de wereld staan in de linker-kolom. RZ5
Voorbeeld (planning): acties als regels Actie = Preconditie + add list + del list Vb: ZetNeer(X) InHand(X) ® del InHand(X) & add InHand(niets) & add OpTafel(X) Vb: Pakop(X) InHand(niets) & Vrij(X) ® add InHand(X) & del InHand(niets) & del Vrij(X) & del OpTafel(X) & del StaatOp(X,Y) Hier staat weergegeven voor 2 voorbeelden hoe de acties van de vorige slide kunnen worden weergegeven als productie-regels, gebruikt maken van het vocabulair dat we ook op de vorige slide zagen. De algemene vorm van de regels is: preconditie (dingen die waar moeten zijn in de wereld voordat de actie uitvoerbaar is), gevolgd door een ADD list (nieuwe dingen die waar worden in de wereld door het uitvoeren van de actie), gevolgd door een DEL lsit (dingen in de wereld die niet langer waar zijn na het uitvoeren van de actie). Dit is een zeer algemene vorm die vaak gebruikt wordt in uiteenlopende toepassingen. RZ5
Efficientie van productie-regel systemen 100 200 5 1000 w = aantal elementen in WM r = aantal regels n = aantal condities per regel c = aantal cycles w×r×n×c matches nodig » 100 milioen Laatste onderwerp voor vandaag: Efficient manier om de toepasbare regels te vinden. Waarom is dat nodig. Voor een praktisch productie-regel systeem zijn bovenstaande getallen realistisch. Bij een naïve implementatie zou het systeem in 1 gebruiks-sessie 100 miljoen matches moeten doen. Hoe kunnen we daarop bezuinigen? RZ5
RETE Algorithme A(x) & B(x) & C(y) ® add D(x) A(x) & B(y) & D(x) ® add E(x) A(x) & B(x) & E(x) ® del A(x) WM = {A(1), A(2), B(2), B(3), B(4), C(5)} D A=B A=D add E A B C E add D Er bestaat een slimmere manier om te kijken welke regels toepasbaar zijn zonder alle condities van alle regels te moeten checken. Dit voorbeeld maakt duidelijk hoe dat RETE algorithme werkt: Bouw een “selectie-netwerk”, waarin de knopen de condities in de ALS-delen van regels zijn. De volgorde van de knopen in het netwerk wordt bepaald door hoe belangrijk een conditie is, dwz: bij hoeveel regels die conditie betrokken is. Dit leidt tot een efficiente manier om zo min mogelijk condities te checken. (bijv: checken van D heeft niet veel zin als je A niet al gechecked hebt, terwijl A een veel grotere invloed heeft (want komt in meer regels voor), en dus kun je beter A eerst checken. A(1) A(2) B(2) B(3) B(4) A(2) B(2) C(5) D(5) E=B del A RZ5
Veralgemenisering van productie-regels Productie-regel systeem » WM Regel2 Regel1 Regeln Generalisatie: Regel = Willekeurig programma (KS) WM = Willekeurige data-structuur (BB) Regel-conditie = “trigger” patroon BB KS2 KS1 KSn Besturing: Match trigger patronen met BB Actieve KS Selecteer een actieve KS Executeer geselecteerde KS Heel algemeen gezien bestaat een productie-regel systeem uit kleine kennisbronnen (regels), die allemaal naar een centraal werkgeheugen kijken, om te zien of ze toepasbaar zijn. Dat beeld kunnen we ook veralgemeniseren: waarom zouden we de kennisbronnen beperken tot een regel per kennisbron? Waarom zouden we die kennisbronnen niet willekeurig complexe subsystemen kunnen maken, die elk “expert” zijn op een deelprobleem. Dit leidt tot het idee van een “blackboard systeem”: een aantal “deskundigen” (“kennisbronnen”) die allemaal rond een blackboard staan (het centrale, gedeelde werkgeheugen), die allemaal steeds kijken of hun kennis van toepassing is op de inhoud van het werkgeheugen. Als ja, dan roepen ze dat ze toepasbaar zijn, en een van hen wordt uitgekozen om zijn kennis toe te passen op het werkgeheugen; hierdoor verandert het werkgeheugen, en zijn wellicht weer andere experts toepasbaar. Merk op dat dit precies de rekencyclus van productie-regel systemen is, maar dan met een “grotere korrel”: niet langer meer enkelvoudige regels, maar willekeurig grote kennisbronnen (wellicht zelfs hele sub-kennisysstemen). De blackboard-architectuur is een van de meest gebruikte manieren om AI systemen te organiseren, en is een directe afstammeling van productie-regel systemen. RZ5
Redeneren met onzekerheid Volgende keer Kennis-systemen & Redeneren met onzekerheid RZ5