Každé malé dítě ví, že ${title}. Vyjádřeno formálněji, pokud x je pták, x létá. Modus ponens jako vyšité. Problém ovšem nastává, jakmile někdo namítne, že x může být pštros. Nebo tučňák.
Nejen v přirozeném jazyce, ale obecně při logickém rozumování o světě velice záhy narazíme na nejasné hranice pojmů, pravidel a ontologie vůbec. Jinými slovy, svět kolem nás nejde dokonale formálně reprezentovat v klasické logice prvního řádu. Na druhou stranu ovšem existují dostatečně robustní metody, které se v AI osvědčily.
Běžná formální logika je založena na deduktivním odvozování, tedy pokud platí x a pokud z x plyne y, musí zákonitě a bez výjimky platit y. V AI se ale používá spíše odvozování abduktivní, tedy pokud platí y a pokud z x plyne y, odvozuji x. S tím rozdílem, že to taky dost dobře nemusí být pravda. Abdukce pokrývá dva aspekty AI – výjimky z pravidel a nedostatečnou znalost. Nejprve k výjimkám.
Zmíněný ptačí příklad ilustruje, že obecná pravidla mohou mít výjimky. Pokud (v nějakém formálním logickém systému) řeknu, že Jerry je myš, a pokud vím, že ptáci létají, tak nemůžu na základě dedukce usoudit, zda Jerry létá. Pokud ovšem vím, že Jerry je pták (tento fakt je ve znalostní bázi), automaticky předpokládám, že Jerry létá. Co když se ale později dozvím, že Jerry je tučňák?
Dospěli jsme k problému nemonotónní logiky. Výjimky z pravidel se obvykle formálně podchycují přidáním predikátu abnormálnosti do pravidla: pták(x) & ¬abnormální(x) → létá(x). Abnormalita se vyjádří formálním predikátem a při absenci bližších informací se předpokládá normalita. Pokud mám dáno pták(Jerry), mohu předpokládat, že je normální, a odvodit, že Jerry létá. Pokud ovšem vím, že Jerry je tučňák, pak z pravidla, že tučňáci nelétají, s využitím principu rezoluce nutně dospěju k závěru, že Jerry je (vzhledem k pravidlu o létání ptáků) abnormální. Přesně takto fungují moderní expertní systémy. Předpoklad normality při absenci detailních informací je zde velmi důležitý, při stavbě formálního modelu (tj. při ohodnocování literálů) mne výjimečné případy nezajímají, pokud nejsou průkazné. Pokud mi někdo řekne, že na Václaváku jsou tisíce ptáků, stojím při budování formálního modelu (tedy, z pohledu filozofické logiky, možného světa) před rozhodnutím, zda tito ptáci jsou abnormální, nebo zda létají (což plyne z pravidla pták(x) & ¬abnormální(x) → létá(x) použitím „unit propagation“). A protože (z mimologického neformálního pravidla, že většina ptáků létá) inklinuji spíše k možnosti, že jde o normální ptáky, správně v nejpravděpodobnějším modelu dojdu k závěru, že nám na památky neserou v Praze tisíce tučňáků. Pokud se později ke znalostní bázi přidá, že jde o holuby, bude domněnka potvrzena. Kdyby se náhodou potvrdilo, že jde přece jen o tučňáky, bude nutné závěr přehodnotit. Proto se tento typ logiky nazývá nemonotonní (jednou dokázané neplatí navždy, nová informace může závěr zvrátit).
Druhý způsob použití abdukce souvisí s podspecifikací (nedostatkem znalostí) a pravděpodobností. Abdukce je vlastně „hádání“ směřující k nejpravděpodobnější variantě. Použijme příklad z přirozeného jazyka: Koleje reziví. Jak této větě rozumět? Problém pochopitelně spočívá v lexikální víceznačnosti. Systém odvozující formální sémantickou reprezentaci této věty nutně musí obsahovat pravidla kolej1 → kolej a kolej2 → kolej. V prvním případě jde o kolejnice, ve druhém o ubytovnu pro studenty. Počítačový systém z textové reprezentace věty dostane pouze predikát kolej (víceznačný). Je zřejmé, že dedukcí se nikam nedostaneme. Inferenční systém proto použije abdukci, tj. vysloví domněnku a rozhodne se (v tomto případě nedeterministicky) pro první nebo druhou variantu. Při stavbě modelu se nakonec ukáže (na základě širšího diskursu), která varianta je správná. Pokud se to neukáže (ani v jednom modelu nedojdeme ke kontradikci), máme holt reprezentace dvě a můžeme si hodit korunou. Nebo se jedna z nich vyloučí později (díky nemonotonnímu rozumování). V tomto případě bychom měli vědět, že kolejnice jsou z kovu a že kov může rezivět. To sice nevylučuje, že může jít o budovu postavenou (z velké části) z kovu, ale rozložení pravděpodobnosti preferuje první možnost.
Snad je nyní jasné, že deduktivní odvozování (jakkoliv je ve formální logice užitečné) v AI daleko nevede. Na druhou stranu je vidět, že s abdukcí lze formálně pracovat v logice prvního řádu. To je nesmírně důležité, neboť dostatečně expresivní fragment této logiky je rozhodnutelný, a tedy „naprogramovatelný“. I když se to možná na první pohled nezná, většina dnešních projektů v oblasti AI abdukci v té či oné formě (úspěšně) používá.
a co chori resp postreleni vtaci, v dazdi tiez nelietaju, atd
nie len vtak moze byt abnormalny ale aj situacia resp cas, miesto, niekde pod morom nic nelieta
tieto udaje ti do modleu nikto neda, dokym ten bot nebude dokazat sam zberat tieto data z prostredia a budovat velmi kvalitne modely tak to bude uvazovat na urovni 1r dietata.
samozrejme aj heuristika pomaha, ono ten algoritmus by mal byt trochu greedy aby mal urcite worst case zaruky, nebudem predsa rok cakat kym sa mi objavi predstava holubov na vaclavaku, pretoze "co ak su to tucniaci" jednoducho sa po vygenerovani predstavy prahy vygeneruje nejaka usporiadana mnozina pravdepodobnych vtakov ktory by tam asi mohli zit a garantujem ti ze tucniak tam bude az niekde na konci ak vobec (vetva sa nahodne prunuje kvoli usetreniu vypoctoveho vykonu, t.j na tucniakov som zabudol).
samozrejme pokial ten AI zisti ze potrebuje vyssiu vypoctovu presnost napr na vaclavaku je cirkus alebo ma pocit ze situacia je nejasna tak si moze prebehnut ten odvodzovaci graf a mozno sa mu spoji pointer s cirkusom s tucniakom
zober do uvahy aj to k akemu ucelu uvazovanie u jednotlivca sluzi t.j. nie k odvodzovaniu spravnych zaverov, ale k odvodzovaniu zaverov ktore zvysuju mieru prezitia jednotlivca, to ze niekedy sa snazime odvodzovat spravne zavery je v podstate nase rozhodnutie ale defaultne tomu tak nie je pretoze v praxi zavisi aj od vypoctovej rychlosti t.j. latencie, (hlavne v rizikovej situacii), dalej energeticka efektivita /suspend=spanok/ napriek tomu v spanku vypocet stale pokracuje t.j sa generuju mozne buduce riesenia a cacheuju sa do hash tabulky podobne ako google. t.j. ja uz mam niekde nacacheovany pribeh ako som isiel prahou cez prechod a ked sa povie vtak okamzite v tej predstave sa pozrem hore a co tam vidim?
dalej ten algoritmus v praxy by mal garantovat ze nieco vzdy vymysli. ziadne segmentation fault. ziadne error=nekonzistentne zadanie proste toto ne v praxi taky algoritmus bude vystaveny obrovskej variabilite toho co sa moze stat. ai je schopnost reagovat na neocakavanu situaciu tak ako zivy tvor.
proste ten bot si precita ﭸﭬﮀﮒ . Proste on musi nejako sa rozhodnut to je jedno ako. Musi si nieco o tom myslet.
Gausse a Bayese na Vas, barbari! :)
Jsou na svete proste veci, ktere bez pravdepodobnostniho poctu nepujdou. Existuji dokonce i lide, kteri maji, stejne jako ja, nazor, ze uplne VSE je vysledkem pravdepodobnostniho usuzovani, tedy ze predikaty by vzdy mely byt doplneny hustotou jejich pravdepodobnosti :p
@7 Neco takoveho jsem tu uz napsal, ale nezobrazilo se to (tak nevim jestli blbnu nebo slo o cenzuru). Akorat problem s pravdepodobnosti (a jinymi pristupy) je ten, ze sice popisete nemotonnost, ale pocitat se s tim realne neda, protoze mnozstvi informace naroste exponencialne. Naopak logika se pocita krasne, ale zase musi byt konzistentni, jinak je to v haji.
@9 Kazdy mluvime o necem trochu jinem, a s tim co pisete souhlasim. Ale me jde o to, ze pokud chcete uvazovat nemonotonne, tak ano, muzete to udelat, ale obecne vam mnozstvi dodatecne informace naroste exponencialne (a tezko to vyresite jednim dodatecnym predikatem).
Takze krasny jednoduchy model v logice, pokud chcete pridat nemonotonnost, nebo realizovat jeho analog pravdepodobnostnimi metodami, vam vyrazne nakyne.
Existuji ruzne kompromisy, jako treba bayesovske site, ktere jdou upocitat jen proto, ze jste zase cast toho modelu nekompromisne striktne definoval (tim, ze jste definoval podminene nezavislosti mezi velicinami). A v dusledku toho muzete zase narazit.
Nicmene, puvodne jsem chtel rict, ze mne specialne predikat "abnormalni" nepripada moc uzitecny, protoze jakmile pouziji predikat "ptak" nebo predikat "leta", tak uz implicitne vzdy myslim, ze existuji vyjimky. Takze nakonec se skonci na tom, ze se takto oznaci cela znalostni baze a dostaneme se na zacatek. Je to proste marna snaha jednoduse obejit neco (nemonotonnost), co se obejit jednoduse neda.
V predikátové logice žádné implicitní výjimky u predikátů nejsou. Přidání abn je trik, jak umožnit na úrovni prvního řádu abdukci. V bázi znalostí se takový predikát nevyskytuje. Reasoning s abn zachází bez rozdílu. Pouze při tvorbě konkrétního modelu se rozlišuje mezi abdukcí a dedukcí. A právě zde je místo, kde hrozí exponenciální exploze. Predikáty pro abnormalitu této explozi zamezí a reasoning je zachráněno.
Sečteno a podtrženo, formální logika nic implicitního nezná. A že vám abn nepřijde užitečné? V IBM jsou jiného názoru a proto mají Watson.
@11 Ano, ja chapu, ze je to formalni mechanismus, jak to do logiky zavest, a to je v poradku. Otazka ale je, jestli by opravdu nebylo pak v praxi jednodussi, kdyby proste inferencni stroj rozlisoval ruzne typy predikatu (a pri pouziti toho druheho predikatu oznacil prislusnou uvahu za abdukci). I tak predikaty, ktere potkame jako model jevu v realnem svete (vyjma snad matematickych objektu, a i tam je to na hrane, protoze muze zaviset na volbe axiomatiky nebo definice) budou mit vsechny vyjimku z abnormality.
Protoze ja si opravdu nedokazu predstavit formuli, kde bychom napsali jenom "leta(x)" a nikoli "leta(x) & ~abn(x)". Mozna by nejaky priklad pomohl, proc v dane situaci (treba pri tvorbe te znalostni baze) plati to prvni a neplati to druhe (nebo naopak plati). Proto nevidim duvod zavadet to jako samostatny predikat.
Watsona bych do toho netahal - moc o nem nevim, IBM detaily dost taji, ale pokud vim, tak ten pouziva nekolik metod soucasne a pak jejich vysledek nejak kombinuje. Takze to jako celek nic nevypovida o prakticnosti toho ci onoho pristupu.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 201×
Přečteno 25 361×
Přečteno 23 795×
Přečteno 20 177×
Přečteno 17 874×