KYBERNETIKA A UMĚLÁ INTELIGENCE 4. Algoritmická entropie a složitost laboratory Gerstner Gerstnerova laboratoř katedra kybernetiky fakulta elektrotechnická ČVUT v Praze
Revidujeme pojem entropie Uvažujme zprávu... Informační entropie: P() =.5, P() =.5, H = Zprávu tedy nelze komprimovat?! Evidentně to není pravda. Toto jsme již vyřešili v minulé přednášce. Závěr je nesprávný, protože není splněna podmínka statistické nezávislosti znaků na znacích předchozích. Např: P(,) = > ½ = P() Entropie vyšších řádů N H... n ( Zm Zm, Zm 2,..., Zm N ) = P( zm, zm 2,..., zm N ) H ( Zm zm, zm 2 zm zm 2 z m n jsou již < pro N >. Tím je rozpor vysvětlen.,..., z m N ) Zdá se tedy, že entropie dostatečného řádu je již univerzálním měřítkem neuspořádanosti, množství informace a komprimovatelnosti. Je tomu tak opravdu?
Příklad: zpráva z chaotického zdroje Uvažujme chaotický dynamický systém z. přednášky: logistický model v diskrétním čase. Pro stav S m v čase m nechť platí S =.3 S m+ = 4 S m ( - S m ) Definujme diskrétní stav. veličinu X m = S m.5 X m = S m <.5 Zkoumejme (nekonečnou) zprávu sestávající z posloupnosti stavů X m :... Lze tuto zprávu komprimovat? Zkusme zjistit hodnotu entropie.
Lze komprimovat zprávu chaotického zdroje? Entropie H řádu N vypočítaná ze zprávy délky l choatického modelu. Pravděpodobnosti odhadnuty relativními četnostmi ve zprávě. Tj. např. P(z m = z m =,z m- =,z m-2 = ) # "" # "" Zkuste si naprogramovat sami! Se stoupající délkou zprávy l se četnosti blíží skutečným pravděpodobnostem. Pozorování: H všech řádů konverguje k! (Pro N > nutno věřit ) Zpráva binarizovaného chaotického zdroje tedy podle Shannonovy informační teorie není komprimovatelná. Ve skutečnosti ji ale lze komprimovat zcela jednoduše! JAK?
Algoritmická komprese Stačí vyslat zprávu:.s:=.3; 2.S:=4*S*(-S); 3.print((sign(S-.5)+)/2); 4.goto 2; Tato zpráva obsahuje 6 znaků (CR/LF nepodstatné, jen pro přehlednost) Nese v sobě úplnou informaci o nekonečné posloupnosti stavů zdroje. Dosáhli jsme nekonečné komprese! (6/ = znaků na jeden znak zdroje) (Je-li komunikační kanál binární, program lze dále překódovat do délky max. 7(~ASCII) * 6 binárních znaků) Dekódování u cíle = vykonání programu. Dekódování není problém. Kódování bude obecně obtížnější uvidíme dále Je to švindlování? Srovnejme s principy kódování z minulé přednášky: Vysílající (zdroj) a příjemce (cíl) museli mít před začátkem komunikace k dispozici stejnou kódovou tabulku. V tomto případě musí mít stejný k dispozici překladač stejného programovacího jazyka. Na principu přenosu informace se ale nic nemění.
Algoritmická entropie Zpráva může být algoritmicky komprimovatelná, i když není komprimovatelná z hlediska Shannonovy informační teorie. Obráceně to samozřejmě neplatí, protože klasické kódování lze vždy implementovat algoritmem (vyhledávání v tabulce). Našli jsme tedy silnější (obecnější) měřítko množství informace ve zprávě a její komprimovatelnosti: Andrey N. Kolmogorov 93-987 Algoritmická entropie, též Kolmogorovská složitost K(J,Z) zprávy (posloupnosti) Z délka nejkratšího programu (v jazyce J ), který generuje Z. K( J, Z) = min prg ( J, Z ) prg( J, Z) prg(j,z)... program v jazyce J generující posloupnost znaků Z prg(j,z)... délka programu prg(j,z), tj. počet znaků v programu Systémová interpretace alg. entropie: žádná zpráva (jakkoliv složitá, chaotická) nemůže být složitější než systém, který ji generuje. Definice nepoužívá pojmu pravděpodobnost. Platí, i když pravděpodobnosti znaků v nekonečné zprávě vůbec neexistují (příslušné relativní četnosti nekonvergují). K čemu je ale taková definice, když jedna zpráva má různou A.E. pro různé jazyky J?
Algoritmická entropie Závislost na konkrétním programovacím jazyku je ve skutečnosti nepodstatná. Uvažujme množinu dostatečně silných jazyků J, kde v každém jazyku J J můžeme naprogramovat intepretr každého jazyka J J. Potom pro každé dva J, J J : c Z : K( J, Z) K( J ', Z) c.... absolutní hodnota, c konstanta nezávislá na Z (viz pořadí kvantifikátorů) Důkaz: stačí ukázat (symetrie), že K(J,Z) K(J,Z) + c. Toto platí: c je déka programu v J intepretujícího jazyk J. Pro dostatečně složité ( zajímavé) zprávy Z příspěvek konstanty c zanedbatelný, volba jazyka J tedy nepodstatná. Nadále tedy vynecháme J ze značení. Alg. entropii zprávy Z označíme K(Z). Úmluva: K(Z) budeme měřit při binárním kódování programů, tj. v bitech. Jaké konkrétní jazyky obsahuje J? Všechny běžné jazyky: JAVA, C, Perl, Prolog,... Neformálně: jakýkoliv jazyk s přístupem k paměti, obsahující větvení na základě podmínek cykly (nebo možnost rekurze) aritmetiku (alespoň inkrementaci a dekrementaci) může implementovat jakýkoliv algoritmus, tj. i interpretovat jiné jazyky.
Turingův stroj Je užitečné definovat jeden referenční, co nejjednodušší prvek J Turingův stroj abstraktní, jednoduchý systém pro vykonání algoritmu konečný automat s přístupem k externí paměti Jeho vlastnosti se snadno matematicky analyzují. Součásti Turingova stroje: Alan M. Turing 92 954 Páska: může uchovat neomezeně dlouhou posloupnost znaků z konečné abecedy. Hlava: může číst a psát na pásku a pohybovat s ní (měnit aktuální místo o krok) Stavový registr: uchovává aktuální stav (jeden z konečné množiny možných stavů) Přechodová tabulka: pro každou dvojici aktuálního stavu a znaku na pásce definuje nový znak na aktuálním místě pásky, nový stav, a směr pohybu pásky (L/P) o krok. Churchova-Turingova teze: jakýkoliv výpočet (obecněji: algoritmus, racionální myšlenkový pochod ) lze implementovat Turingovým strojem. Není matematickou větou! Výpočet je intuitivní pojem. Jazyky schopné implementovat stejné algoritmy jako T.S. (tedy jazyky v naší množině J) v se nazývají turingovsky ekvivalentní. Alonzo Church 93 995
Turingovská ekvivalence dynamických systémů I nelineární dynamické systémy jsou Turingovsky ekvivalentní! Každý výpočet algoritmus lze implementovat nějakým nelineárním dynamickým systémem. Stavové veličiny paměť, přechod mezi stavy vykonání instrukce. Příklad: Paritní funkce vrací, pokud je vstupem sudé číslo, jinak. Program lze překódovat do dynamického systému: kde x je vstupní hodnota, A je matice je jednoduchá nelineární funkce: = A function parity(x). y:=; 2. if x > {x--; y++} else goto 5 3. if x > {x--; y--} else goto 5 4. goto 2 5. return(y) T x s k s A f k s,,,,,,,] [ () )) ( ( ) ( = = + r r r r f r, ) ( ) ( = > = i i i i i s s f s s s f pokud, pokud r r f s
Turingovsky ekvivaletní dynamické systémy Systém se ustálí na řešení, tj. pro ustálený stav systému v čase k u platí s 2 (k u ) = parity(x) Na obrázku: barva úměrná hodnotě s 2 v ustáleném stavu, pro různé počáteční hodnoty s () = x... vstup s 3 ()... jedna z paměťových buněk systému Stavové veličiny reálné. Modré body odpovídají speciálním případům místům, kde je definována tradiční paritní funkce pro celá čísla. Turingovská ekvivalence nelineárních dynamických systémů má zásadní důsledky pro teorii dynamických systémů uvidíme dále. představuje vazbu mezi teorií dynamických systémů a teoretickou informatikou.
Vlastnosti algoritmické entropie Opakování: Zpráva může být algoritmicky komprimovatelná, i když není komprimovatelná z hlediska Shannonovy informační teorie. Existují vůbec nějaké algoritmicky nekoprimovatelné zprávy? Ano! Uvažujme binární zprávy a binárně kódované programy. Existuje právě 2 l zpráv délky l. Najdeme pro každou z nich nějaký program dosahující alespoň minimální komprese tedy kratší alespoň o bit? Programů maximální délky l- je + 2 + 2 2 +... + 2 l l 2 = 2 = 2 l (součet geom. řady). Tedy i kdyby všechny programy maximální délky l- byly použity pro zprávy délky právě l, tak se stejně na jednu nedostane. Důsledek: Neexistuje žádný univerzální (vždy úspěšný) bezeztrátový kompresní algoritmus. Obecně lze ukázat, že zprávy s vysokou algoritmickou entropií (tj. zprávy, které komprimovat nelze, nebo lze jen velmi málo) tvoří většinu všech možných zpráv. Srovnejte s 2. termodynamickou větou: stavy s nejvyšší termodynamickou entropií jsou nejpravděpodobnější.
Souvislosti algoritmické entropie: Ockhamova břitva Libovolnou teorii (např. přírodně-vědeckou) lze formalizovat a převést na algoritmus v nějakém turingovsky ekvivalentním jazyce. Libovolnou posloupnost pozorování (např. přírodního systému) lze formalizovat a převést na posloupnost znaků nějaké abecedy (tj. na zprávu). Přírodní vědy = hledání teorií k pozorováním přírody. V řeči obecné teorie systémů: hledání generativního systému k datovému. Jednu posloupnost pozorování lze obvykle vysvětlit více než jednou teorií. Kterou z nich zvolit? William of Ockham: entia non sunt multiplicanda praeter necessitatem tj. entity se nemají násobit bezdůvodně. Teorie by neměla klást předpoklady zbytečné pro vysvětlení pozorování. Ockamova (též Occamova) břitva: Ze všech teorií vysvětlujících daná pozorování vybrat tu nejjednodušší. Přímá aplikace algoritmické komprese! Tj. hledání programu ( teorie) generujícího ( vysvětlujícího) zprávu ( pozorování) Z, tak, že prg(z) je co nejkratší, ideálně délky K(Z). Varianty alg. komprese se využívají ve strojovém učení a data miningu (přednáška 8). Teoreticky by mohly být základem automatizovaného vědeckého bádání! Má to ale jeden háček... William of Ockham 4. století
Lze vypočítat algoritmickou entropii? Lze vůbec naprogramovat funkci slozitost(z) pro výpočet K(Z)? Předpokládejme, že ano, a využijme ji v následujícím programu generujícím zprávu složitosti alespoň n : function generujzpravu(n) for l = to for z in < všechny zprávy délky l > /* je jich 2 l */ if slozitost(z) >= n {return z; quit} Označme: u = délka tohoto programu v binárním kódování. Nyní naprogramujme funkci: function generujpodivnouzpravu() return generujzpravu(< nějaké číslo >) Funkce ještě není hotová, zbývá doplnit argument v 2. řádce. Označme nejprve c = délka funkce v binárním kódování, když je argument prázdný. Po dosazení nějakého čísla n do argumentu bude délka funkce c + log 2 n. (Pro zakódování čísla n je potřeba log 2 n binárních číslic) Dosaďmě do argumentu takové n, které vyhovuje nerovnici u + c + log 2 n < n Najdeme snadno, neboť n roste rychleji než log 2 n a u, c jsou konstanty.
Nerozhodnutelnost algoritmické entropie Nyní volejme: Z = generujpodivnouzpravu(). Dostaneme zprávu Z, která má algoritmickou entropii nejméně n (viz definici funkcí). Zároveň platí, že zpráva Z je generována programem jehož délka je u + c + log 2 n : function generujpodivnouzpravu() return generujzpravu( < n > ) function generujzpravu(n) délka: log 2 n for l = to for z in < zprávy délky l > /* je jich 2 l */ if slozitost(z) >= n {return z; quit} délka: c + log 2 n délka: u Protože u u + + c + c log + log 2 n< n, : Z má algoritmickou entropii nižší než n. 2 n < n Z předpokladu, že program slozitost(z) existuje, jsme dospěli k logickému sporu! Jediný možný důsledek: předpoklad byl chybný. Algoritmus pro výpočet algoritmické entropie libovolné zprávy neexistuje. Určení hodnoty a.e. je nerozhodnutelný problém. Stále zbývá možnost horního odhadu K(Z). Např. je-li HK(Z) zpráva obdržená Huffmanovým kódováním zprávy Z, tak určitě platí K(Z) HK(Z) + c, kde konstanta c je délka programu pro převod kódu dle kódovací tabulky + počet bitů nutných k uložení tabulky a HK(Z) je délka komprimované zprávy HK(Z).
Problém zastavení algoritmu (Ne)rozhodnutelnost = zásadní vlastnost výpočetních problémů. Existují ještě další nerozhodnutelné problémy? Je jich mnoho. Slavný příklad: Problém zastavení (halting problem): Mějme nějaký program, jehož binární kód je P a jehož vstupem je binární zpráva Z. Problém: prohlédni si P a Z a rozhodni, zda se P na Z zacyklí, nebo zastaví. Lze naprogramovat funkci halt(p,z), která správně rozhodne pro libovolné P a Z? Rozhodnutí v konečném čase, tj. nestačí jen spustit P na Z a čekat, jak to dopadne. Předpokládejme, že halt(p,z) existuje, a využijme ji v tomto programu: function neprijemnost(z) /* vstupem je binární zpráva */. if halt(z,z)= zastavi then goto Nechť NEPRIJEMNOST je binární kód programu neprijemnost. Zastaví se, nebo zacyklí program neprijemnost(neprijemnost)? Pokud se zacyklí, tak podmínka v. řádce byla splněna. Tedy výstupem funkce halt(neprijemnost,neprijemnost) bylo zastavi, z čehož plyne, že neprijemnost se na vstupu NEPRIJEMNOST zastaví. SPOR! Pokud se zastaví, tak podmínka v. řádce nebyla splněna.tedy výstupem funkce halt(neprijemnost,neprijemnost) bylo zacykli, z čehož plyne, že neprijemnost se na vstupu NEPRIJEMNOST zacyklí. SPOR! Funkce tedy nemůže existovat! Problém zastavení je nerozhodnutelný.
Problém zastavení: důsledek pro dynamické systémy Přednáška : z popisu lineárního dynamického systému lze určit jeho stabilitu, tj. zda bude jeho stav při dané počáteční podmínce konvergovat k nějaké ustálené hodnotě. Je něco podobného možné pro obecné dynamické systémy (vč. nelineárních)? Dříve v této přednášce: každý výpočet (algoritmus) lze implementovat nějakým (obecně nelineárním) dynamickým systémem. vstupní data ~ počáteční podmínky, ustálený stav ~ výsledek výpočtu. Předpokládejme, že umíme pro jakýkoliv dynamický systém S určit, zda se ustálí při daných počátečních podmínkách s r (). Je tedy k dispozici funkce odezva(s,s), kde S je popis S (např v binárním kódu) a s je popis s r (). Potom bychom vyřešili problém zastavení: function mazanyhalt(p,z) preved P na popis ekvivalentniho dynamickeho systemu S preved Z na popis evivalentnich pocatecnich podminek s if odezva(s,s)= ustali then return( zastavi ) else return( zacykli ) To ale není možné dokázali jsme, že problém zastavení je nerozhodnutelný. Ze sporu vyplývá, že předpoklad byl nesprávný. Neexistuje tedy postup pro určení (ne)stability z popisu libovolného dynamického systému. Nikdy nebude existovat obecná teorie dynamických systémů s podobnými schopnostmi, jako má teorie lineárních dynamických systémů.
Rozhodnutelnost a dokazování Ukázali jsme nerozhodnutelnost některých problémů. Co vlastně ale přesně znamená rozhodnout problém? Je to totéž, jako najít důkaz nějakého tvrzení. Např. tvrzení algoritmus P se zastaví na vstupu Z Co je tedy důkaz tvrzení T? Posloupnost odvození tvrzení z již odvozených tvrzení, dokud není odvozeno i T. Odvozuje se podle odvozovacích pravidel. Dokud není odvozeno nic, nedá se ani nic odvodit! Je třeba zavést nějaká počáteční tvrzení, považovaná za platná bez důkazu. To jsou tzv. axiomy. Všechna tvrzení vč. axiomů musí být formulována v nějakém jazyce, tj. v nějaké kódové abecedě znaků) jazyk + axiomy + odvozovací pravidla = formální systém Příklad pro formální systém výrokové logiky: jazyk: znaky pro výroky (A, B, C,...), logické spojky (,,, ) příklad axiomu: A (B A) (pro jakákoliv tvrzení A,B.) odvozovací pravidlo modus ponens : je-li již odvozeno A a A B, lze odvodit B. Nejsou nerozhodnutelné problémy (tj. nedokazatelná tvrzení) jen důsledkem špatně nastaveného formálního systému? např. nevhodná volba axiomů v matematické logice
Nerozhodnutelnosti se nezbavíme! Gödelova věta o neúplnosti. Kurt Gödel: V každém bezesporném formálním systému s aritmetikou existují tvrzení, jejichž pravdivost nelze rozhodnout. Bezespornost: nelze odvodit tvrzení i jeho opak. Co je to systém s aritmetikou? Např. systém, v němž lze dokázat tvrzení jako x : x < x +, tedy pro všechna x platí, že x je menší než x +. Pozn.: např. ve výrokové logice to nelze proč? Důkaz neúplnosti: Každé tvrzení lze syntakticky chápat jako zprávu v konečné abecedě znaků (zde, x,...). Můžeme tedy zavést kódování, které libovolnému tvrzení jednoznačně přiřazuje nějaký binární kód (viz přednášku 3). Tento binární kód je zároveň binární reprezentací nějakého přirozeného čísla n. Definujme tedy funkci k(t) kódující tímto způsobem tvrzení T na přirozené číslo n. Dále definujme funkci d(n): d(n) = je-li tvrzení s kódem n v systému dokazatelné, jinak d(n) =. Příklad: v jakémkoliv systému s aritmetikou platí Kurt Gödel 96,Brno 978,Princeton d(k( x : x < x + ) =
Gödelova věta o neúplnosti Gödelův trik: zaveďme substituční funkci s(n) = m tak, že m je kód tvrzení vzniklého tak, že ve tvrzení s kódem s n nahradíme všechny znaky proměnných konstantou n a vymažeme kvantifikace. Příklad: platí-li k( x : x < x + ) = 35 a také k( 35 < 35 + ) = 298 tak platí s(35) = 298 Uvažujme dvě tvrzení T : x : d(s(x)) = ; a nechť m = k(t) T2 : d(s(m)) = ;T2 neobsahuje žádnou proměnnou! Do tvrzení je dosazena konkrétní hodnota m z předchozí řádky. Předpoklad systému s aritmetikou jsme potřebovali proto, aby systém byl schopen počítat funkce s a d prostřednictvím odvozování. Všimněte si, že s(m) je kód tvrzení T2. Teď to přijde! Předpokládejme úplnost, tj. systém dokáže T2, nebo jeho negaci T2. Pokud dokáže T2, tak platí d(s(m)) =, tedy tvrzení s kódem s(m) je nedokazatelné (z definice funkce d). Tvrzení s kódem s(m) je T2, tedy T2 je nedokazatelné! Spor. Pokud dokáže T2, tak platí d(s(m)) = a tvrzení s kódem s(m), tedy T2, je dokazatelné. Vzhledem k bezespornosti je tedy T2 nedokazatelné! Spor. V obou případech spor: T2 nelze dokázat ani vyvrátit. Věta dokázána.
Shrnutí přednášky Algoritmická entropie (= Kolmogorvská složitost) zprávy je délka nejkratšího programu v turingovsky ekvivalentním jazyce, který tuto zprávu generuje. Turingovsky ekvivalentní jazyk = umí implementovat jakýkoliv algoritmus (výpočet). Abstraktním představitelem je Turingův stroj. Pro zprávy dostatečné složitosti má volba konkrétního turingovsky ekvivalentního jazyka zanedbatelný vliv na hodnotu algoritmické entropie. A. E. je mírou neuspořádanosti a komprimovatelnosti zprávy nezávislou na pravděpodobnostní distribuci znaků. A. E. je silnější, než informační entropie: zprávu lze algoritmicky komprimovat, i když není komprimovatelná z hlediska I.E. Hodnotu A. E. lze jen aproximovat, nelze ji obecně vypočítat, jde o nerozhodnutelný problém. Další příklady nerozhodnutelných problémů: problém zastavení algoritmu, či problém stability nelineárního dynamického systému. Gödelova věta: V každém bezesporném formálním systému s aritmetikou existují tvrzení, jejichž pravdivost nelze rozhodnout. Důsledky Gödelovy věty jsou obrovské: nelze alternativně formulovat matematické axiomy tak, aby nevznikaly výše uvedené nerozhodnutelné problémy. Důsledek pro umělou inteligenci: Nelze sestrojit univerzální inteligentní systém schopný logicky odvodit pravdivost jakéhokoliv tvrzení v daném systému, pokud je alespoň natolik silný, aby uměl dokázat aritmetická fakta.