Technologie | Google | Strojové učení

Hrátky s „umělou inteligencí“ od Googlu: zkusil jsem vytvořit kopii sebe samotného

  • Už je to rok, co Google zveřejnil strojové učení TensorFlow
  • GitHub se o té doby zaplnil zajímavými projekty
  • Vyzkoušíme si pár specialit

Když se vás zeptám, jak si představujete počítač pro umělou inteligenci, tedy mašinu, která se díky tolik citovanému strojovému učení a neuronovým sítím sama zdokonaluje, leckdo si představí datacentrum Googlu plné serverů, anebo alespoň malý desktopový superpočítač vyzbrojený armádou pokročilých grafických karet.

V případě Googlu, Facebooku a dalších velkých hráčů tomu tak samozřejmě je a oba dokonce vyvíjejí pro tyto účely specializovaný hardware, pod náporem sci-fi představ o umělé inteligenci však možná občas zapomínáme na to, že ono zmíněné strojové učení a neuronové sítě jsou ve své podstatě stále jen softwarové programy jako každé jiné, které můžeme spustit a experimentovat s nimi v podstatě na jakémkoliv počítači.

45729649
Google Tensor Processing Unit od Googlu má velikost pevného disku, aby ho bylo možné snadno integrovat v datacentrech. Malá jednotka pro strojové učení nahradí mašinu s výkonnou grafikou.

TensorFlow

Když Google loni na podzim zveřejnil svoji technologii TensorFlow, způsobil tím na scéně menší poprask: „Podívejte, ten Google, který strojové učení již roky používá ve svých produktech, svůj poklad nyní nabízí zdarma milionům vývojářů z celého světa!“

TensorFlow na Windows 10

TensorFlow je primárně určený pro Linux a macOS, nicméně k dispozici jsou i virtualizační kontejnery Docker, které umožní běh na Windows. Pokud máte Windows 10, TensorFlow bez problému nainstalujete i do zdejšího nativního subsytému Bash on Ubuntu on Windows.

516008282
TensorFlow a API pro Python bez problému nainstalujete i do nativního Ubuntu on Windows. Na rozdíl od virtualizace vše poběží rychleji a nespotřebuje moc RAM. Já testoval TensorFlow na Ubuntu on Windows ve verzi 16.04.

A skutečně, pokud si nainstalujete celý balík knihoven a nástrojů pro strojové učení pod společnou značkou TensorFlow, budete mít na svém počítači stejný software, na jehož základě dnes Google zcela běžně rozpoznává věci na fotografiích, skládá hudbu a synteticky mluví.

Ale nemylte se. TensorFlow není žádná hotová umělá inteligence z fantaskních filmů. Je to spíše systém knihoven a nástrojů, se kterými komunikujete buď skrze jazyk C++, anebo Python. TensorFlow prostě není inteligentní Samantha ze snímku Her, ale surová analytická technologie, na jejíchž základech se možná za pár desítek let nějaká ta Samantha skutečně zrodí.

TensorFlow není jediný systém pro strojové učení. Internet jich nabízí hromadu.

Co je to vlastně to strojové učení

V čem ale vlastně spočívá ona podstata strojového učení? Dejme tomu, že byste si třeba chtěli vytvořit vlastní OCR program, který na fotografii rozpozná text a obrázek převede na dokument Wordu. S trochou píle by to už dnes nemuselo být tak složité, na internetu totiž najdete hromadu komplexních knihoven, které přesně toto dělají. Výsledkem by ale byl v každém případě program s neměnnými – natvrdo naprogramovanými – pravidly.

Strojové učení k problému přistupuje úplně jinak. Namísto pevně daných postupů mu vysvětlíte pouze základní podmínky a předložíte obrovský soubor studijních dat. Program pro strojové učení pak data cyklicky prochází, hodnotí, rozřazuje, přiděluje jim podle dalších vazeb různé parametry a vytváří jejich model, který pak může aplikovat na další libovolná vstupní data. Model je tedy analogií znalostí a zkušeností. A stejně jako u člověka zpravidla platí, že čím více zkušeností má, tím má i lepší znalosti, tak i stroj vyrobí lepší model, pokud bude mít po ruce dostatek pestrých vstupních dat.

Z toho všeho plyne jedna klíčová zákonitost. Než strojové učení vyrobí dostatečně dobrý model, nemusí ani náznakem dosahovat kvality tradičních programů. Pokud se mu to ale podaří, může je mnohonásobně překonat. Krásným příkladem mohou být třeba jazykové strojové překladače, které již dnes prvky A.I. používají. Občas se takovým překladům smějeme, protože se nám zatím nepodařilo vyrobit dostatečně dobré překladové modely, až to však pomocí ML jednoho dne dokážeme, dosáhnou kvalit, o kterých se nám dnes může leda jen zdát. Je to jako s dětmi, také vyžadují trpělivost a občasné pošťouchnutí dál.

OCR pomocí strojového učení

Pojďme se nyní vrátit k OCR. Hned první návod pro začátečníky na webu TensorFlow se totiž věnuje učení velmi jednoduchého modelu pro rozpoznávání ručně psaných číslic. Představte si, že byste si napsali program, do kterého nahrajete fotografií papírku, na který jste napsali 987654321, a on toto číslo krátce poté opravdu identifikuje.

V případě strojového učení TensorFlow k tomu potřebujete pár řádků v Pythonu a dostatek studijních dat, na kterých se naučí (tedy vytvoří model), jak jednotlivé číslice vypadají. Příklad pracuje s populární databází MNIST, ve které se nachází až 60 000 drobných skenů ručně napsaných číslic o rozměrech 28×28 pixelů. Součástí je pak i databáze s popisky, jaké číslo každý obrázek představuje.

959871505
mnist.png
10 000 miniatur ručně psaných číslic. Takto vypadá jedna ze studijních databází MNIST pro strojové učení.

Stroj nemá oči, pracuje tedy pouze s matematickou interpretací grafických dat. Černobílý sken o rozměrech 28×28 pixelů pro něj prostě není nic jiného než obrovský vektor se 784 čísly, které reprezentují intenzitu jednotlivých pixelů.

984826923
Číslice 1 a její interpretace pro TensorFlow jako vektor o 784 dimenzích
631391453
Řada vektorů jednotlivých číslic v celém studijním vzorku (55 000 obrázků) tvoří takzvaný tenzor – multidimenzionální pole, které při učení prochází neuronová síť.

Model

TensorFlow pak tyto pixely prochází napříč studijními obrázky a testuje je podle stanovených pravidel. Čím více vstupních dat a průchodů zpracuje, tím bude hotový model spolehlivější. Výsledkem pak může být model, který bychom mohli graficky vyjádřit podobně jako na obrázku níže.

Asi takto by si mohl náš stroj představovat, jak vypadají jednotlivé číslice, které se naučil analýzou desítek tisíc obrázků:

981658217
Model pro každou z číslic. Modře jsou znázorněné pozitivní váhy (to tam pravděpodobně patří) a červeně negativní váhy (to tam pravděpodobně nepatří).

Že ty fleky ani v nejmenším nepřipomínají číslice? Ale připomínají, jen je třeba si uvědomit, že takto stroj vidí všechny podoby každé z číslic. Třeba taková nula byla jednou hezky kulatá, podruhé šišatá, potřetí tenká, počtvrté tlustá a tak dále. Stroj proto postupným učením zdokonaloval v modelu dvě hlavní váhy. Ta pozitivní je znázorněna modře a ta negativní červeně.

  • Pozitivní váha říká: „Tyto pixely se u obrázků nul mohou vyskytovat.“
  • Negativní říká: „Tyto pixely se u obrázků nul moc nevyskytují.“

Podívejte se na obrázek modelu nuly ještě jednou a už je vše jasné. Zakulacený modrý obrys je typický pro tvar nuly, takže představuje pozitivní váhu, zatímco pixely uprostřed jsou pro nulu atypické, a proto představují negativní váhu.

Možná tak vidí i naše podvědomí, když zpracovává optický vjem z oka a pomocí vlastního naučeného modelu našemu vědomí o úroveň výše říká, na co právě koukáme. Obrázek s váhami je tedy v jistém slova smyslu jakousi vizualizací podvědomí TensorFlow.

92% úspěšnost

V každém případě, jakmile je model hotový, můžeme s ním porovnat jakýkoliv obrázek čísla a model nám řekne, že v něm s určitou pravděpodobností rozpoznává nějaký znak.

Vy si můžete pomocí návodu během několika okamžiků vycvičit model, který poté projde další velký soubor testovacích obrázků MNIST a vyplivne úspěšnost, která dosáhne zhruba 92 %!

111293483
První tutoriál na webu TensorFlow má velmi jednoduchý model a stručný výstup. Naučí se MNIST, provede kontrolu modelu další várkou obrázků z projektu MNIST a změří přesnost modelu. To je celé.

Dvaadevadesátiprocentní úspěšnost rozpoznávání znaků čísel? A s několika málo řádky v Pythonu, pomocí kterého jsme ovládali samotný motor strojového učení TensorFlow? To je bomba! Ano, je, ale jen pro začátečníky, současné špičkové modely totiž dosahují v testu MNIST úspěšnosti nad 99 %.

Návod sám o sobě je ale vlastně nepoužitelné demo. V dalším kroku bychom tedy mohli jednoduchý kód v Pythonu upravit takovým způsobem, aby model identifikoval číslice na našich vlastních obrázcích, aby to celé běželo na serveru jako webová aplikace a tak dále.

Komunita nad TensorFlow postavila tisíce aplikací

A přesně to dělá komunita. Během posledního roku totiž skladiště svobodného kódu GitHub zaplavily přes dva tisíce projektů nadšenců z celého světa, kteří nad základním TensorFlow postavili už mnohem použitelnější dema a ukázky. Zpravidla ke komunikaci s TensorFlow opět používají Python a jejich autoři na GitHubu vystavili i hotové modely, takže je nemusíte znovu učit.

789786093
Databáze projektů z GitHubu, které mají něco společného s TensorFlow

Mít po ruce hotový model se určitě hodí, učení složitějších znalostí už totiž není tak rychlé jako v případě primitivní analýzy obrázků MNIST. I proto TensorFlow podporuje akceleraci na grafických kartách s výpočetními technologiemi CUDA/OpenCL.

Strojově naučený malíř

Na GitHubu jsem narazil třeba na projekt Fast Style Transfer studenta Logana Engstroma z MIT, který spojil několik dalších prací k tomu, aby mohl použít hromadu modelů pro TensorFlow, které se pokoušejí přenést grafický styl z maleb slavných autorů na vaši fotografii.

322056872 366114053
Edvard Munch, Výkřik přenesený na moji fotografii
815936036 388665634
Leonid Afremov, Rain Princess přenesená na moji fotografii
34941602 346074956
Hokusai, The Great Wave off Kanagawa přenesená na moji fotografii
389647494 634926777
Francis Picabia, Udnie přenesená na moji fotografii

Během studia se tedy TensorFlow naučil, jakým způsobem maloval třeba Edvard Munch svůj slavný Výkřik. Strojové učení si podobně jako u našich číslic z úvodu prostudovalo pixel po pixelu Výkřiku a stvořilo model, který pak stejné barvy a deformace aplikoval na pixely jiných obrázku. A co více, model malíře–plagiátora to dokáže i s videem!

Engstromův projekt nicméně není jen takto pasivní. Nemusíte na své fotografie aplikovat výhradně jeho model, ale stejně tak si můžete z vlastní fotky vytvořit svůj. Jen už to nebude trvat dvě minuty. Loganovi to trvalo 4-6 hodin nepřetržité práce na mašině s grafikou GeForce GTX Titan X (architektura Maxwell). Pokud bych se o to pokusil já na svém šest let starém notebooku, asi by dříve shořel. Pro složité učení je podpora výpočetních technologií CUDA/OpenCL naprostou nutností.

269886620
A takto může vypadat aplikace modelu na vstupní obrázek v praxi. Engstrom vyrobil skript v Pythonu evaluate.py, kterému jsem předal parametr o modelu, který má použít (rain_princess.ckpt) a adresáře se vstupem a výstupem. Aplikace složitého modelu může spotřebovat enormní množství RAM.

Strojově naučený autor Živě.cz

Přenášení stylů z jednoho obrázku na druhý pomocí strojového učení je sice efektní (a kýčovité), ale já měl odjakživa trošku jiný sen, že za mě bude psát články na Živě.cz robot a já si budu s hordou divokých Tahiťanek užívat kdesi na tichomořské pláži.

Neuronové sítě Googlu už tvoří souvislé texty nějaký čas a pomocí TensorFlow můžete i vy. Na GitHubu se syntéze textu věnuje celý zástup projektů. Mě zaujal ten od Samuela Gravána, který propojil s TensorFlow techniku použitou ve strojovém učení WaveNet.

O WaveNetu jsme na Živě.cz už psali. Stvořila jej slavná britská laboratoř Google DeepMind a jedná se o strojové učení, které tentokrát nestuduje pixely, ale zvukové vlny. Britové tedy této neuronové síti předložili tisíce a tisíce nahrávek, načež si vytvořila model, pomocí kterého dokáže rekonstruovat prakticky jakýkoliv zvuk od klavíru po anglického mluvčího.

Hlas vygenerovaný neuronovou sítí WaveNet:


Samuel použil WaveNet k syntéze textu. Strojové učení tedy namísto zvukových vln analyzuje jednotlivé textové znaky, které pak jeho model synteticky skládá za sebe podle pravidel, které se naučil na studijních datech.

Nauč se mé články, WaveNete

Jelikož Samuelova síť nemá ani páru o tom, co jednotlivé znaky znamenají, je úplně jedno jestli bude studijní text v angličtině, hindštině anebo třeba v češtině. Jen je třeba, aby ho bylo sakra hodně!

A tak mě napadlo, že bych se mohl pokusit vytvořit model sebe samotného. Mám to o to snazší, že mám na počítači zálohu všech svých článků publikovaných na Živě.cz v DOCX vyjma krátkých bleskovek.

599864251
Napsal jsem si jednoduchý program, který vytvořil prostý textový soubor z tisícovky vybraných článků publikovaných na Živě.cz

Nejprve jsem si tedy napsal jednoduchý program, který z mého archivu vybral vzorek 1 000 článků, převedl je na prostý text, odstranil z nich diakritiku (Samuelova síť pracuje jen s ASCII znaky) a vše spojil do jednoho velkého textového souboru o pěti milionech znaků. To už by mohl být docela slušný studijní balík.

Pak už pouze stačilo nastavit počet průchodů a nastartovat samotné učení modelu pomocí stručného skriptu v Pythonu s několika málo parametry.

814583350
Studium v plném proudu. Právě za sebou mám 1 400 průchodů. Celkem jsem strojovému učení naplánoval 15 000 iterací.

Já pro začátek nastavil 15 000 iterací, aniž bych pořádně tušil, jak dlouho bude učení probíhat, a klepl na Enter. Bez grafické karty s CUDA to opravdu nebyla žádná sláva a můj TensorFlow se učil rychlostí asi jednoho průchodu za půl sekundy. S takovou jsem měl tedy počítač víceméně zablokovaný na několik příštích hodin.

Strojové učení naštěstí umí průběžně vytvářet snapshoty aktuálního modelu, takže jsem mohl během učení zkoušet, jaké výsledky podává model po 2 000 iterací, po 4 000 iterací a tak dále, zatímco ten se nadále a nerušeně zdokonaloval. A to je na tom všem nakonec možná nejzajímavější. Právě v tomto okamžiku pochopíte, že tu nejde o žádné předprogramované počítání statistiky výskytu jednotlivých slov, ale opravdu o sebezdokonalování po maličkých krůčcích.

Opět zopakuji, že TensorFlow a WaveNet nemají ani páru o tom, co je to slovo, jakou roli plní mezera, tečka a tak dále. Jen zkoumají distribuci znaků v celém textu a vzájemné vazby podezřele se opakujících shluků písmen (ano, to už jsou slova) a vazby podezřele se opakujících shluků těchto shluků (no a to už jsou typická sousloví).

Ceprre nrkhrecruu gur prrhnrch

Když jsem si nechal modelem vygenerovat první zkušební úryvek textu v okamžiku, kdy byl ještě velmi mladičký (2 000 průchodů), zobrazilo se na obrazovce jen dětské brblání:

Syntetický text po 2 000 iterací

„ceprre nrkhrecruu gur prrhnrch prdrk prrktrdrk trge ku.ckprrcdc mrdrprchh prprkudurkk.dur drdrkpr drcrrprdrcrhjkm adrkkurdrke bracrddrshr skrkirkkchdurgikakpr prrha prrkhurceukachtr. jprccestruryded prrh prchudurjemcik drsigh“

V tuto chvíli byl model na velmi nízké úrovni asi jako nemluvně, které jen slintá, znečišťuje pleny a marně se snaží napodobit zvuky svého okolí. Chápe ale, že zvuk má stejně jako Matrix nějaký začátek a nějaký konec. A stejně tak můj model již v tomto okamžiku chápe, že text bývá z jakéhosi důvodu rozdělený prázdnými znaky, a tak je začíná používat také.

Když stroj po hodině učení pokořil 4 000. průchod, na monitoru se pomalu začalo objevovat cosi, co již připomínalo slovanské jazyky. Tu a tam vykouklo nějaké srozumitelné slovíčko, ale jinak to byly stále jen patvary, které vzešly z pravděpodobnostního modelu učící se sítě.

Syntetický text po 4 000 iterací

„vas skladou nakonnosti preznamel se zame, ze jeho dny znakupe ofotou pripojeni bezmalni dos alespati prtakovou ostatni. trebe na totiz nebo na nekolik ve tesitce a usa, se pomerni ale si inabi tride projektu dalekvari, jizonali stroj epoznych praktickych obcas by routery ovsem bolifikne mobicke“

Po patnácti tisících průchodů moje studium skončilo a model nyní generuje text, který se spíše než češtině podobá mixu chorvatštiny, polštiny a dalších slovanských jazyků… Vyjma češtiny. Teprve v tomto okamžiku jsem si totiž uvědomil, že i dítě začne brblat a vyslovovat první zkomolená slova docela brzy, ovšem intelektem oplývající tvor, který se umí smysluplně vyjádřit, se z něj stane až hluboko po třicítce.

Syntetický text po 15 000 iterací

„se seze dom mych pre mybori a vsetejte pristostem c propocat strobci, to jsot jak prax a uteho firdma svedslaci ze pocpit jejzna ale shby formi i mul shottware oblo potiz nemani8ivatu, ktere doz zumozdusi, otpz je se ns jeji a. microsoft f zat vepgt sms tadate zdoonmspne plaset je v hpspa, bebuve deca hrase 8 i w.“

Patnáct tisíc iterací tedy nestačí, ale díky snapshotům lze učení přerušit a kdykoliv později na něj navázat. Já tedy budu model sebe samotného stále zdokonalovat a budu naivně doufat, že jednoho dne vyloudí smysluplnou větu. Kdo ví, třeba to bude až po milionu iterací a úpravě dalších parametrů.

A vy začněte také. TensorFlow, Caffe, Microsoft Cognitive Toolkit a hromada dalších open-source technologií pro strojové učení je dnes totiž něčím podobným jako předválečná elektronka pro zrod současného informačního věku.

Ti šťastnější z vás si pak třeba za dalších padesát let vzpomenou na to romantické období počátku 21. století, kdy to všechno začínalo, bylo to tak roztomile primitivní, a přitom pro laika bez doktorátu z matematiky neskutečně složité.

Diskuze (24) Další článek: Video: takto vidí okolní svět autopilot Tesly

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,