Strojové učení nemá vědomí, ale klidně složí sonet nebo fiktivní kód Linuxu

  • Hlavním přínosem strojového učení je univerzalita jeho použití
  • Jeho modely mohou suplovat jinak extrémně složité programování
  • Skutečné vědomí ale nejspíše nikdy mít nebude

Když Google předloni na podzim představil svůj systém strojového učení TensorFlow, způsobil tím menší poprask. Ne snad, že by byl první – hotových programovatelných systémů pro strojové učení je na webu celý zástup, TensorFlow si však brzy získal své fanoušky z řad studentů a akademických badatelů, a rok poté je tak GitHub plný prefabrikovaných projektů.

Optikou (téměř) naprostého zelenáče, který posledních pár semestrů nestrávil studiem umělé inteligence, tedy stačí stáhnout běhové prostředí TensorFlow a nějaký konkrétní projekt strojového učení, se kterým si tu legraci vyzkouší.

Strojové učení nemá vědomí

Předtím je však třeba se zbavit některých přetrvávajících romantických představ. Strojové učení a neuronové sítě nejsou umělou inteligencí v tom smyslu, že by se snad jednalo o jakousi bytost s vědomím (ostatně nikdo dodnes netuší, jak uvědomění si sebe sama vlastně funguje a co je k tomu potřeba). Ono spojení umělá inteligence znamená spíše to, že se architektura softwaru chová podobně jako síť biologických neuronů, které primitivními rozhodovacími signály, které si mezi sebou posílají, zpracovávají vstupní informaci a budují statistický pravděpodobnostní model – znalost.

Klepněte pro větší obrázek
Softwarová neuronová síť napodobuje neurony

Je to stejné jako třeba s rogalem, které napodobuje let ptáka, ale to ještě neznamená, že se snad z jeho pilota stane pták. Bude i nadále člověkem s křídlem na zádech, které jen napodobuje schopnosti jiného živočišného druhu. Softwarová neuronová síť dělá to samé. Není chytrá, stejně jako pilot rogala za letu nebaští žížaly.

Strojové učení je univerzální, proto je sexy

Jednou z hlavních specialit počítačové neuronové sítě je univerzálnost a tvárnost jejího použití. Do hypotetické neuronové sítě můžete poslat v podstatě jakoukoliv vstupní digitální informaci a ta ji podle stanovených kritérií zpracuje, vytvoří model a tedy znalost, kterou pak bude moci aplikovat na další vstupní data.

K čemu je to dobré? Jednou z nejtypičtějších aplikací současného strojového učení jsou obrázkové klasifikátory, se kterými si hraje jak Google, tak Facebook. Jedná se o neuronové sítě, které se naučily, jak vypadá kočka, a tak když zadáte do Googlu „kočka,“ najde nejen fotky koček, které identifikoval podle jejich textového popisu a názvu souborů, ale i podle toho, jestli je na snímku skutečně zobrazeno toto nebohé stvoření.

Klepněte pro větší obrázek
Google používá strojové učení třeba ve své galerii Google Photos, kde umí s obdivuhodnou přesností automaticky identifikovat různé osoby a to nejen na fotografiích, ale i ve videu. Čím více fotografií s danou osobou do galerie nahrajete, tím lépe ji bude neuronová síť identifikovat.

Představte si, že byste měli napsat program na rozpoznávání koček bez použití strojového učení. Nejspíše byste tedy strávili měsíce a roky analýzou, jak vypadají obrázky s kočkami a podle toho byste pak napsali počítačový algoritmus, který by měřil, jestli daná fotka obsahuje dostatečné množství geometrických tvarů, abyste s určitou mírou pravděpodobnosti mohli říci, že to je kočka.

Po pár letech by se vám to podařilo, načež by vám nadřízený sdělil, že teď chce hledat zase psy…

Strojové učení se liší v tom, že si tento algoritmus – pravděpodobnostní model, vytvoří sama neuronová síť. Vy ji pouze předáte fotky tisíců a tisíců koček a spustíte třeba zrovna TensorFlow na superpočítači, anebo pořádné herní mašině s grafikou, která umí akcelerovat výpočty (CUDA).

Po několika hodinách, dnech nebo i týdnech učení dle výkonu počítače pak předložíte neuronové síti libovolnou fotku, ta ji porovná se svým vlastním modelem, jak si na pixelové úrovni představuje kočku, a vyplivne pravděpodobnost, s jakou se dle jejího mínění jedna o… Kočku.

Klepněte pro větší obrázek
Takto vypadala před pěti lety grafická interpretace představy (modelu) lidské tváře, jak se ji naučila neuronová síť Googlu. Dnes jsme zase o pěkný kus cesty dál a modely jsou mnohem přesnější.

Nejkouzelnější je na tom všem to, že vlastně vůbec nemusíte rozumět tomu, jak to sakra ta neuronová síť ve svém nejhlubším nitru dělá. Podstatné je to, že si takový klasifikační skript v Pythonu pro TensorFlow můžete z GitHubu stáhnout také a připravit mu vlastní vstupní data – třeba fotky své partnerky/partnera, abyste si natrénovali vlastní program, který pak bude ukládat do EXIFu fotografií z dovolené popisky „Zuzanka, Petruška, Janička, Evička aj.“ A to aniž byste snad kdy v životě napsali diplomku či doktorát na téma počítačové analýzy grafických dat.

Jistě, nebude to úplně pro každého, ale pokud umíte alespoň trošku programovat a Python pro vás není naprosto španělskou vesnicí, abyste jej mohli alespoň číst a chápat význam daného skriptu, zvládnete to. Ostatně, jak už jsem napsal výše, spuštění podobného strojového učení pro klasifikaci fotografií je rozhodně jednodušší, než vývoj programu, který by snad vaši Zuzanku a další hledal bez neuronové sítě. Tím byste jako zelenáč strávili zbytek svého života a výsledek by byl nejistý.

Když se začne neuronová síť učit jednotlivé znaky

Dejme ale Zuzanky, Petrušky a Janičky stranou a pojďme se podívat na něco jednoduššího – na text. Specialista ze Stanfordu a laboratoře OpenAI Andrej Karpathy na svém blogu před dvěma lety napsal rozsáhlý článek o tzv. rekurentním strojovém učení (RNN) typu LSTM, které použil na studium textu znak po znaku. Pozor, článek je určený opravdu těm, kteří tuší, která bije, nicméně podobné čtivo v češtině najdete třeba na webu Jiřího Materny, který RNN/LSTM učení demonstroval na syntetickém básníkovi.

Jedna z implementací Karpathyho RNN/LSTM sítě pro TensorFlow. Stačí ji stáhnout a spustit učení modelu pomocí libovolného souboru s textem.

Oč se jedná? Takový typ strojového učení si díky opakování a paměti dokáže během studia udržovat kontext. Nu, z toho asi čtenář nebude o nic chytřejší, ale dejme tomu, že budeme mít neuronovou síť a jako studijní data třeba všechny textové dokumenty z Wordu, které jsme kdy napsali.

Klepněte pro větší obrázek
Čím pestřejší studijní data, tím lépe. 5MB vzorek asi stovky článků ze Živě.cz na obrázku výše je tedy naprosté minimum.

Strojové učení půjde písmenko po písmenku a bude se učit vzájemný vztah – kontext – mezi těmito znaky do určité hloubky. Nebude se tedy učit jen to, že po znaku „A“ přichází na řadu s velkou pravděpodobností písmeno „h,“ protože studijní data začínají písmeny „A, h, o, j,“ ale díky hloubce učení a paměti se postupným procházením textu naučí, že po sekvenci znaků „Ahoj“ přichází často na řadu další sekvence znaků „ Petruško.“

Strojové učení přitom netuší, co je to slovo a co je to věta – jeho studijní jednotkou je jeden jediný znak, ale do svého pravděpodobnostního modelu si s dalším a dalším zpracovaným písmenkem ukládá nejen to, jaký znak po tomto znaku přichází na řadu, ale i řadu znaků na předchozích pozicích. Slovní a větné celky se tedy nevědomky naučí tak jako tak.

Díky tomu si TensorFlow postupem času vytvoří pravděpodobnostní model, který dokáže generovat jednotlivá slova (protože je velmi pravděpodobné, že se každý x. znak objevuje mezera), pak interpunkci (protože je pravděpodobné, že se čas od času objeví znak čárky), následně velká a malá písmenka, odstavce textu a nakonec, pokud se zadaří, bude model natolik detailní, že generovaný text bude dávat i nějaký smysl v daném jazyku.

Postupně se zdokonalující model

Karpathyho strojové učení anglického překladu Vojny a míru po 100 iteracích:

„tyntd-iafhatawiaoihrdemot lytdws e ,tfti, astai f ogoh eoase rrranbyne 'nhthnee e
plia tklrgd t o idoe ns,smtt h ne etie h,hregtrs nigtike,aoaenns lng“

Po 300 iteracích se už objevuje správná interpunkce (mezera po čárce), odstavce a první anglická slova:

„"Tmont thithey" fomesscerliund
Keushey. Thom here
sheulke, anmerenith ol sivh I lalterthend Bleipile shuwy fil on aseterlome
coaniogennc Phe lism thond hon at. MeiDimorotion in ther thize.“

Po 700 iteracích už anglická slova převažují nad nesmysly:

„Aftair fall unsuch that the hall for Prince Velzonski's that me of
her hearly, and behs to so arwage fiving were to it beloge, pavu say falling misfort
how, and Gogition is so overelical and ofter.“

Po 2 000 iteracích začínají dávat věty smysl:

„"Why do what that day," replied Natasha, and wishing to himself the fact the
princess, Princess Mary was easier, fed in had oftened him.
Pierre aking his soul came to the packs and drove up his father-in-law women.“

Snad i proto v posledních několika letech všichni výzkumníci včetně inženýrů z Googlu vytvářeli syntetické básníky. Proč? Nu, napadá mě jedno poněkud kacířské vysvětlení: Protože poezie je občas natolik abstraktní, že jen těžko poznáte, jestli se jedná o náhodný shluk slov, anebo lyriku s hlubším poetickým významem. A tak i A.I. generátory básniček budí často větší údiv než A.I. generátory odstavců smysluplného textu, kde jsme při hodnocení kvality textu vědomě i podvědomě mnohem kritičtější.

A co kdybych ji začal učit programovat?

Jelikož je taková RNN/LSTM síť pro učení textu znak po znaku vlastně naprosto univerzální, můžeme ji předložit k učení prakticky cokoliv. Andrej Karpathy zkusil snad vše.

Když se jeho síť učila zdrojové texty z Wikipedie, model poté samozřejmě generoval i mnohdy zcela správné formátování textu, citace a dokonce i odkazy na zdroje (třeba http://www.humah.yahoo.com/guardian.cfm/7754800786d17551963s89.htm), i když byly pochopitelně nefunkční.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Strojovým učením vytvořený zdrojový kód článku z Wikipedie a XML soubor – neuronová síť se správně naučila, jak formátovat XML, samotný obsah ale příliš smysl nedává. Zvládá syntaxi, ale nezná význam slov – sémantiku. (Zdroj: Karpathy.github.io)

Když Karpathy předložil strojovému učení hromadu XML souborů, model po čase začal generovat v podstatně validní XML s korektně uzavřenými tagy a občas i hodnotami. Opravdovou specialitou byl však Latex a učení knihy o matematice. Výsledek? Neuronová síť vytvořila Latex s grafy a výpočty, i když s nesmyslnými významy, poněvadž strojové učení se sice naučilo generovat text, ale opět neznalo jeho význam.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Tento Latex náhodně vytvořilo strojové učení (Zdroj: Karpathy.github.io)

Kdyby tedy mělo toto strojové učení alespoň vzdáleně připomínat skutečně lidský mozek, musela by být jeho neuronová síť mnohem komplexnější a barvitější. Anebo by se jednalo o hromadu různě specializovaných sítí, které by dohromady vytvářely jakýsi neuronový učící se internet. Jedna část by se učila psát (Karpathyho síť), druhá by se učila chápat význam jednotlivých naučených slov pomocí nějakého znalostního grafu (paralela ke Google Knowledge Graph) a výsledkem by byl mnohem autonomnější softwarový celek.

Nakonec Karpathy navštívil GitHub, stáhl zdrojové kódy linuxového jádra a opět je použil jako studijní data. I tentokrát začala po určitém čase jeho síť generovat zdrojový kód, který formálně vypadal v pořádku, nicméně ani v tomto případě se pochopitelně nejednalo o žádné vědomí, ale jen a pouze o pravděpodobnostní model toho, co si strojové učení před tím přečetlo.

Kód níže vygenerovala neuronová síť poté, co se nějaký čas učila znak po znaku zdrojové kódy linuxového jádra. Opět platí, že sémantika (faktický význam kódu) bude pochybná, ale syntaxe je povětšinou správná.

/*
 * If this error is set, we will need anything right after that BSD.
 */
static void action_new_function(struct s_stat_info *wb)
{
 unsigned long flags;
 int lel_idx_bit = e->edd, *sys & ~((unsigned long) *FIRST_COMPAT);
 buf[0] = 0xFFFFFFFF & (bit << 4);
 min(inc, slist->bytes);
 printk(KERN_WARNING "Memory allocated %02x/%02x, "
 "original MLL instead\n"),
 min(min(multi_run - s->len, max) * num_data_in),
 frame_pos, sz + first_seg);
 div_u64_w(val, inb_p);
 spin_unlock(&disk->queue_lock);
 mutex_unlock(&s->sock->mutex);
 mutex_unlock(&func->mutex);
 return disassemble(info->pending_bh);
}

static void num_serial_settings(struct tty_struct *tty)
{
 if (tty == tty)
 disable_single_st_p(dev);
 pci_disable_spool(port);
 return 0;
}

static void do_command(struct seq_file *m, void *v)
{
 int column = 32 << (cmd[2] & 0x80);
 if (state)
 cmd = (int)(int_state ^ (in_8(&ch->ch_flags) & Cmd) ? 2 : 1);
 else
 seq = 1;
 for (i = 0; i < 16; i++) {
 if (k & (1 << 1))
 pipe = (in_use & UMXTHREAD_UNCCA) +
 ((count & 0x00000000fffffff8) & 0x000000f) << 8;
 if (count == 0)
 sub(pid, ppc_md.kexec_handle, 0x20000000);
 pipe_set_bytes(i, 0);
 }
 /* Free our user pages pointer to place camera if all dash */
 subsystem_info = &of_changes[PAGE_SIZE];
 rek_controls(offset, idx, &soffset);
 /* Now we want to deliberately put it to device */
 control_check_polarity(&context, val, 0);
 for (i = 0; i < COUNTER; i++)
 seq_puts(s, "policy ");
}

Chcete učit software? Kupte si pořádnou grafiku

V každém případě, toto vše si díky TensorFlow a dalším běhovým prostředím pro strojové učení můžete sami vyzkoušet a relativně snadno můžete začít cvičit vlastní modely. Budete k tomu ale potřebovat výkonný počítač a týden dovolené, abyste se do toho dostali.

Učení na GPGPU kartách (CUDA) je i o řád rychlejší než na tradičních procesorech a učení na pomalém počítači je vhodné opravdu jen k základnímu pochopení principů, protože smysluplných výsledků se doberete třeba až po několika dlouhých dnech, týdnech a měsících učení a za cenu hromady propálených kWh elektrické energie. Snad i proto jsme na praktické aplikace strojového učení čekali tak dlouho, na papíře totiž existují již desítky let. Celé roky nám ale chyběl ekonomicky dostupný výpočetní výkon.

Témata článku: Software, Google, Programování, Umělá inteligence, Vědomí, Výzkum, Strojové učení, Neuronová síť, TensorFlow, IO, Princess, Neuron, Google Photos, LNG, Soul

23 komentářů

Nejnovější komentáře

  • Petr Galansky 9. 2. 2017 14:54:48
    Pro slabsi stroje by asi bylo lepsi ziskat jiz "Vyuceny" system (Neuralni...
  • esondra 9. 2. 2017 13:57:17
    Neexistuje žádná fundamentální definice toho co je to "opravdové vědomí".
  • StormBorec 9. 2. 2017 11:25:47
    Nikdo nemůže určit, jestli něco /někdo má nebo nemá vědomí. Čistě...
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

23.  4.  2017 | Pavel Tronner | 46

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

** Legendární hra Starcraft je nyní k dispozici zdarma ** Chystá se i nová remasterovaná verze s hezčí grafikou

19.  4.  2017 | Jakub Čížek | 25

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

** Máte nápad, ale chybí vám stroje a pořádná dílna? ** Chcete postavit ptačí budku, nebo krabičku pro Arduino? ** Brno otevřelo svůj FabLab – laboratoř pro bastlíře

19.  4.  2017 | Jakub Čížek | 31

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

Včera | Jakub Čížek | 88

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

23.  4.  2017 | Pavel Tronner | 13

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

** Google ve svém překladači roky používal statistickou technologii ** Nyní zavádí strojové učení a neuronové sítě ** Rozdíl by měl být zvláště na větších textech patrný už nyní

20.  4.  2017 | Jakub Čížek | 31


Aktuální číslo časopisu Computer

První test AMD Ryzen

Velké testy: 22 powerbank a 8 bezdrátových setů

Radíme s koupí Wi-Fi routeru

Co dokáží inteligentní domy?