Premium

Získejte všechny články
jen za 89 Kč/měsíc

Matykání: staňte se učiteli strojů

Pokud se rádi rácháte v číslech a přemýšlíte, co s kariérou, nabízí se bouřlivě se rozvíjející odvětví strojového učení (machine learning). Nu, dali jsme světu "učitele národů", tak proč bychom nemohli  přihodit i učitele nástrojů.

Jistě jste si všimnuli, že když začnete něco ťukat do vyhledávače, tak vám stroj (zde prohlížeč) nabídne několik populárních možností, včetně těch, které jste vy sami už kdysi hledali. Nebo si někde na Internetu koupíte hodinky s vodotryskem a hned na vás začnou ze všech stran obrazovky vykukovat průtokové kašny s vestavěným ciferníkem.

Ať chceme či nechceme, stroje nás šmírují a snaží se z našeho chování zjistit, co vlastně chceme - aby to mohly obratem páky pošeptat někomu, kdo to produkuje. A jak budou stroje chytřejší a chytřejší, tato "vnímavost" se bude pravděpodobně prohlubovat, až se jednoho dne dobereme k umělé inteligenci, kdy budeme se strojem schopni přímo komunikovat.

V tradičním programovacím schematu člověk počítači přesně sdělí, jak se má v každé dané situaci zachovat. "POKUD déšť PAK vytáhni deštník JINAK přibal slunečník". Moderní doba nás ovšem zaplavuje daty s takovou rychlostí, že už není možné stroji přesně nahustit do obvodů, jak se má pro každou možnou konfiguraci dat zachovat. Těch dat je příliš mnoho. A jediný, kdo má šanci je přečíst a vstřebat je právě stroj.

A tak je nutno začít stroje trpělivě učit, jak se v té záplavě dat vyznat sami. Jenže aby stroj z toho stohu informací dokázal vycucat nějaké užitečné vztahy a abstraktní zákonitosti, musí dostat určitou algoritmickou svobodu: musí mít možnost se volně pohybovat v nějakém parametrickém prostoru a pružně reagovat na změny v toku a charakteru dat.

Nižší formě tohoto úsilí se říká "strojové učení" (machine learning), zatímco pro vyšší se vžilo označení "umělá inteligence" (artificial intelligence). Hranice mezi klasickým programováním a těmito novými paradigmaty je pochopitelně do jisté míry mlhavá a ještě ne zcela usazená. Já chápu strojové učení jako schopnost orientovat se v určitém speciálním kontextu, zatímco umělou inteligenci vidím spíše ve zvládnutí přechodu do kontextů zcela nových.

Strojové učení se v tomto vidění světa umí vypořádat s jednoduchými úkoly v rámci stabilního prostředí - např. dokáže rozpoznat určité typy objektů či vysledovat trendy ve strukturovaných datech. Umělá inteligence dokáže aplikovat (resp. překládat) poznatky z jiných vědomostních okruhů a zvládne tudíž i komplexní činnosti vyžadující souhru několika relativně autonomních podsystémů (např. řízení auta).

Zatímco dnešní "vyučené" algoritmy vám po návratu z dovolené v Řecku budou ještě dalšího půl roku nabízet tutéž destinaci, "umělý inteligent" budoucnosti pochopí, že pokud si něco koupíte, tak to nějaký čas nebudete potřebovat a zaměří se na jiné oblasti. Jeho všudypřítomná čidla si například všimnou, že se vám třepí podrážky a komunikační modul vám nenápadně začne nabízet nové boty.

Do jaké míry se nám podaří tu umělou inteligenci dotáhnout až do stadia sebereflexe (kdy se počítač plácne robotickým chapadlem do čela a uvědomí si, že je počítač a ne třeba medvídek mýval) je otázka spíše filosofická a abych nezabředl do dalekosáhlých úvah o tom, co je to vědomí, raději se jí vyhnu. Stejně jako možným eticko-morálním otázkám soužití lidí a chytrých strojů. To bychom tu byli do jara.

V tomto Matykání se soustředím na pár základních principů strojového učení a pro ilustraci vám ukážu pár příkladů, jak na to ti kovoví koumáci vlastně jdou.

+++++++++

Trénink, test a predikce

Než začneme hloubat, jak se učí stroje, podívejme se sami na sebe. Jak se třeba naučíme rozlišovat mezi kočičkami a pejsky?

Nu, jednoduše. Ťapkáme si s maminkou po svěťě a maminka nám trpělivě ukazuje příklady. "Tohle je kočička a ne pejsek". A u boudy naopak:  "To vevnitř je pejsek - žádná kočička, ty trumpeto". A capart si začne všímat, že kočičky a pejskové mají různé atributy (kterým se ve strojovém učení říká též fíčury - z angl. features). Například pejsek je obvykle větší a umí plavat. Kočička bývá menší a plavat neumí. Umí ale lézt na stromy, což zase neumí pejsek. A capart si postupem času různou kombinací těchto atributů vytvoří ve své hlavičce poměrně spolehlivý algoritmus na rozlišování pejsků a kočiček.

Tu posloupnost příkladů, kterými nás maminka zásobuje si můžeme schematicky zapsat pomocí matice, které se v tomto kontextu často říká datová tabulka (angl. dataframe). Každý příklad je samozřejmě nutno doprovodit tzv. "nálepkou", která nám říká, zda je uvedený příklad kočička a nebo pejsek. Atributy se obvykle značí x a nálepka y (pro obě kategorie existuje v literatuře obrovské množství synonym, např. nezávislé a závislé proměnné, input a output, prediktor a regresand atd).

Datová tabulka T pro n příkladů s m atributy

x1[1]  x2[1]  x3[1] ... xm[1] ---> y[1]
x1[2]  x2[2]  x3[2] ... xm[2] ---> y[2]
x1[3]  x3[3]  x3[3] ... xm[3] ---> y[3]
....
x1[n]  x2[n]  x3[n] ... xm[n] ---> y[n]

(hranatá závorka indexuje jednotlivé příklady)

Takhle tedy vidí pejsky a kočičky počítač. Hezky mu tu matici T naservírujeme a necháme ho, aby si z těch příkladů vytvořil nějaký model reality, který mu umožní správně oba živočichy klasifikovat. Jak ot udělá? Na to existují desítky algoritmů a na pár z nich se za chvíli podíváme.

+++++++++

Matice T tedy při strojovém učení hraje roli maminky, která počítači prozradí, zda daný řádek (tedy kolekce atributů) reprezentuje kočičku či pejska. Aby se ale dalo ověřit, že počítač se naučil zvířátka rozlišovat správně, je nutno výsledný algoritmus otestovat a teprve potom ho můžeme pustit k samostatnému určování. Proto má vývoj určovacího softvéru obvykle tři fáze: trénink, test a predikce.

V praxi si kromě matice T připravíme ještě (ze stejného zdroje) matici T°, která je obvykle menší a počítač ji během trénovací fáze nevidí. Tréninková matice T se pak naláduje do stroje a ten se z ní pokusí vytvořit klasifikační algoritmus, který každé množině atributů x přiřadí určitou nálepku y' (např. 0=kočička, 1=pejsek). Tím končí trénink trénink. Když je algoritmus nalezen, do počítače se naláduje testovací množina T° a počítačem předpovězené nálepky y' se porovnají s těmi skutečnými y. Pokud je testování úspěšné a algoritmu se v té testovací množině podařilo správně rozlišit uspokojivé procento příkadů (typicky 80-100%), daný model se uloží a slouží potom k vlastní predikci. Atributy x nového příkladu živočicha se hodí do stroje a ten vyplivne nálepku y', která nám prozradí, zda je to kočička a nebo pejsek.

Shrnuto a podtrženo: namísto, abychom trápili programátora s vymýšlením přesného klíče k určování zvířátek (a riskovali, že se nám ztratí v bludišti atributů), tak stroji prostě ukážeme pár příkladů a necháme ho, aby si  - v rámci předem definovaných mantinelů - to bludiště vymyslel sám.

Z pohledu matematiky je takový klasifikační algoritmus de facto hledání funkce F, která spojuje kolekce atributů x s nálepkami y. Samozřejmě ta závislost je zamaskovaná spoustou náhodilých vlivů, které do problému vnesl život (někteří pejskové nedorostou do běžné velikosti, některé kočičky se naučí plavat atd). Funkce, kterou pozorujeme, má tedy realisticky vzato tvar: y=F(x)+?, kde ? reprezentuje náhodné hodnoty. Úkolem strojového učení je tyto náhodné vlivy odfiltrovat a objevit tu skutečnou funkci F. A to je docela fuška i bez náhodných vlivů: představte si, že vám na tabuli nakreslím osový kříž, do něho načmárám šest bodů a zeptám se vás, co je to za funkci? (respektive která funkce těmito body prochází).

Navíc musíme mít na paměti, že ne všechny atributy jsou reálná čísla - některé mohou být diskrétní atributy (barva srsti: černá, šedá či bílá), jiné mohou být binární (umí to plavat: ANO či NE). Takové se musí v mnoha algoritmech nejprve převést na čísla, aby se s nimi mohlo rozumně pracovat. Obvykle stačí atributy očíslovat (černá 0, šedá 1 a bílá 2), ale někdy je výpočetně výhodnější je označit binárními vektory, které mají všude nulu, jen pro příslušnou komponentu 1: černá (1,0,0), šedá (0,1,0) a bílá (0,0,1). V angličtině se tomuto triku říká one-hot encoding.

Klasifikační proces v mnoha ohledech připomíná regresi, kde se z nezávisle naměřených hodnot x snažíme odhadnout hodnoty závislé proměnné y. Například z různých atributů x nějakého obytného domku se můžeme pokusit předpovědět jeho prodejní cenu y.  Zde ty atributy mohou být např. počet místností (celé číslo), celková obytná plocha (reálné číslo), zda má domek garáž (binární ANO či NE), jak daleko je do centra (reálné číslo) atd.

To není náhoda - na regresi se v jistém smyslu můžeme dívat jako na spojitou klasifikaci (nálepka y nabývá libovolné reálné hodnoty). A stejně jako nálepka "kočička-pejsek" klasifikuje domácího mazlíčka, nálepka "cena domu" také v jistém smyslu ten dům klasifikuje (na škále mansarda-pastouška). Ale činí tak spojitým způsobem.

Anebo obráceně: na klasifikaci se můžeme dívat jako na diskrétní regresi (kde závislá proměnná y nabývá pouze diskrétních hodnot).

Zkrátka, na regresi a klasifikaci se můžeme dívat jako na dvě strany téže mince. A to je další příklad kontinentálního zlomu spojitost-diskrétnost, o kterém jsem kdysi referoval.

+++++++++

Typologie strojového učení

Takže si to zopakujme.

V předešlé sekci jsme se zabývali problémem, jak z dané množiny atributů odhadnout nějakou diskrétní (klasifikace) či spojitou (regrese) veličinu. Za tím účelem jsme si setrojili matici příkladů T, sestávající se v podstatě z dvojic (x,y), kde x je vektor atributů a y je spojitá či diskrétní nálepka (on to v některých případech může být i vektor, ale s tím si nebudeme lámat hlavu). A počítač má za úkol z těchto příkladů objevit přiřazovací funkci F: x --> y.

Každý algoritmus obsahuje několik tzv. hyperparametrů, které zadává člověk a pak několik parametrů (např. koeficienty polynomu při regresi), které si počítač propočítává sám během trénovací fáze. V testovací fázi pak algoritmu nabídneme obdobnou matici T', zaznamenáme si jaké nálepky y' z daných atributů x předpovídá, kde y' = F(x), a tyto pak porovnáme se skutečnými nálepkami y z testovací množiny.

V diskrétním případě je nejpřirozenějším způsobem porovnání procento úspěšných klasifikací - i když existují i jemnější způsoby, jak účinnost nově vzniklého klasifikátoru ocenit - např. ROC křivky nebo matice zmatenosti (ne nedělám si srandu).

Ve spojitém případě je nejjedodušší podívat se na akumulovaný rozdíl mezi předpovězenými  a skutečnými hodnotami, tj. ?(y'-y)2.

Pokud je chyba příliš velká, můžeme se pokusit přeštelovat hyperparametry metody a trénovací proces zopakovat (tomu se říká "ladění hyperparametrů").

Důležité je, že jak v diskrétním, tak ve spojitém případě má stroj k disposici nálepky, které mu umožňují se lépe orientovat v terénu. A protože ty nálepky zadává lidský "učitel" (ať je to programátor či maminka), mluvíme v tomto případě o učení s učitelem (supervised learning).

To je pochopitelně nákladné, protože někdo (člověk, kterého je nutno zaplatit) musí ty nálepky nějakým způsobem připravit (z měření, z historických dat atd). Proto se v mnoha případech používá tzv. učení bez učitele (unsupervised learning). Do stroje se nasypou pouze vektory atributů x a algoritmus se pak pokusí v tomto mnoho-dimenzionálním "oblaku bodů" najít nějakou strukturu.

Pokud například do počítače nasypeme zvířecí atributy, které po různých transformacích a redukcích vypadají jako obrázek vpravo, dá se předpokládat, že použitá data obsahovala tři podobná zvířátka (např. pejsek, kočička a prasátko). Počítač samozřejmě netuší kdo je kdo (nemá nálepky), takže jim musí říkat zvířátko č. 1, č. 2 a č. 3 - ale to nám v mnoha případech stačí.

Další významnou aplikací učení bez učitele je strojové zpracování textu (NLP). Představte si, že potřebujete zjistit, která slova jsou významově blízká (abyste se při vyhledávání mohli opřít i o synonyma). Stačí, aby se počítač naučil reprezentovat text pomocí vektorů a může se pustit do zkoumání struktury jazyka či celých textových korpusů. Takové algoritmy existují jak na úrovni jednotlivých slov (např. word2vec), tak na úrovni dokumentů (LSA). A žádného učitele (tedy nálepky) nepotřebují. Všechny zajímavé sémantické vztahy objeví na základě toho, která slova se v textech vyskytují pospolu. Či zrcadlově: které texty obsahují podobná slova.

Prostě nasypete milion textů do stroje a on vám obratem sdělí, které texty či slova se významově podobají. Ten počítač samozřejmě slovům ani textům nerozumí, jen se postupně naučil je vhodně reprezentovat.

Třetí důležitou kategorií strojového učení (vedle učení s učitelem a učení bez učitele) je tzv. zpětnovazebné učení (reinforcement learning), které se snaží do domény strojů převést jednu důležitou vlastnost lidské inteligence: často se vyplatí vybrat řešení, které je sice dočasně nevýhodné, ale později vám vynese mnohonásobně vyšší zisk - např. cesta ze sadu do stodoly pro žebřík se zpočátku jeví jako plýtvání energií (stroj by nic takového neudělal), ale nakonec nám umožní sklidit sladší plody. Anebo si to můžete představit jako obětování figury v šachu za účelem získání strategické výhody.

Stroje jsou velmi dobré v lokální optimalizaci - tedy dokáží sledovat řešení, které přináší okamžité výhody. Ale na to, aby se naučili, že občas je třeba vybrat méně optimální cestu, už je třeba speciálních algoritmů. Ty většinou fungují na základě určité rovnováhy mezi používáním již nalezených výhodových vzorců a prozkoumáváním dalších neoptimálních řešení, které by mohly vést k pozdějšímu úspěchu. Navržené systémy většinou fungují tak, že ze začátku se více věnují prozkoumávání prostoru možností za účelem zjištění, v čem spočívají největší odměny, zatímco ke konci vyměřeného času už spíše jen aplikují naučené dovednosti k získávání pamlsků (byť ne nutně těch nejlahodnějších).

Ve zbytku dnešního Matykání se podíváme na tři příklady učení s učitelem, které je v aplikacích o něco rozšířenější než zbylé dvě kategorie. Záměrně se při tom vyhnu neuronovým sítím, na něž se poměrně podrobně podíváme příště.

+++++++++

1. SVM (podpůrné vektory)

Asi nejpřirozenější metodou pro klasifikaci je situace, kdy máme dva typy objektů a jejich atributy lze v přislušném prostoru oddělit nadrovinou - jak je naznačeno vpravo na obrázku (a). Zde má prostor atributů dimenzi 2 (x1,x2) a nálepky jsem barevně odlišil.

Základem výpočtu je v tomto případě nalezení tzv. rozhodovací hranice (zde červené přímky - ve vyšších dimenzích pak nadroviny), která odděluje příklady jedné skupiny (kočičky) od skupiny druhé (pejskové). Když si v duchu budete s tou červenou přímkou trochu "šmrdlat", tak zjistíte, že existuje několik poloh, ve kterých dokáže modré a fialové body oddělit. Proto se obvykle hledá poloha, ve které je ta rozhodovací přímka oddělena od bodů jedné i druhé skupiny co nejširším (zeleným) koridorem, aby se při predikci (kdy uvidíme nové příklady) snížilo riziko chybné klasifikace. Těm bodům, které leží na okraji toho koridoru se říká podpůrné vektory - a od nich tato metoda odvozuje své jméno.

Jak se ten koridor najde?

Rovnice přímky, roviny či nadroviny je w.x+b=0, kde w je vektor normály, x bod prostoru a b skalární posunutí (vzpomeňte si třeba na rovnici nějaké roviny: 2x-3y+z-1=0, zde w bude (2,-3,1)). Tyto parametry budou odpovídat rozhodovací hranici. Když s tou konstantou b začneme pohybovat, tak se příslušná nadrovina bude po našem prostoru přemisťovat "rovnoběžně" (tj. bude mít stále stejnou normálu).

Jednotky zvolíme tak, že zelené okraje koridoru budou odpovídat hodnotám w.x+b=1 a w.x+b=-1. No a zbytek už je jen poměrně pracná vázaná optimalizace. Hledáme normálový vektor w, tak aby měl koridor maximální možnou šířku (a při tom dbáme na to, aby všechny modré body ležely na jedné straně koridoru a fialové na druhé). Detaily vás nebudu děsit, ale obecně se o optimalizaci zmíním níže v sekci Jauvajs.

Během tréninku se tedy spočítá ta rozhodovací přímka a vlastní predikce je pak vcelku jednoduchá. To, co leží na jedné straně hranice, jsou kočičky. To, co na druhé, pejskové.

Takhle fungují třeba některé programy, které určují, zda je nový email ve vašem kastlíku spam anebo ne.

+++++++++

Zajímavá situace nastane, pokud modré a červené body (v daném prostoru atributů) nelze oddělit - jak je naznačeno na obrázku (b). Pak je nutno buď zkusit najít lepší atributy a nebo se smířit s tím, že ta rozhodovací hranice už nedokáže přesně oddělit jednotlivé příklady a pak se optimalizací nalezne alespoň přímka, která těch chyb udělá nejméně (opět v červeném). Tomuto přístupu se říká soft-margin (tomu předchozímu - s koridorem - hard margin).

V praxi se občas stane, že atributy příkladů, které algoritmus vidí v tréninkové fázi se sice jakž takž oddělit dají, ale ne lineárně - jak je naznačeno na obrázku (c). Pak je nutno k oddělení fialových a modrých příkladů použít nějakou zakřivenou plochu, která se pochopitelně hledá obtížněji. V tomto případě naše chmury rozptýlí tzv. kernelový trik (kde kernel je funkce, která v podstatě supluje skalární součiny používané v lineárním případě). Řečeno lidově: ta rozhodovací hranice se musí pomocí kernelové funkce vhodně "ohnout".

+++++++++

2. Logistická regrese

Na tenkou hranici mezi klasifikací a regresí poukazuje logistická regrese, která je navzdory svému jménu vpodstatě binární klasifikací. Z daného vektoru atributů x se tedy pokusí stanovit nálepku náležící do jedné ze dvou tříd (zde se nálepka obvykle značí y=0 a y=1).

Podívejme se nejprve na nejjednodušší případ, kdy máme pouze jeden atribut x.

Na následujícím obrázku je na ose y znázorněn výsledek zkoušky (0=propadl, 1=uspěl) v závislosti na počtu hodin studia (osa x) pro několik příkladů. Je to vlastně zobrazení trénovací množiny pro tento problém. Ale stejně jako u lineární regrese, do obecné závislosti zasahují různé výše zmíněné náhodné vlivy reálného života - někdy dřeme jako koně, ale před zkouškou nás zlomyslní spolužáci opijí, jindy se zase na učebnice vyflákneme, ale máme štěstí na otázku.

Úkolem je naučit se z výše uvedených dat predikovat výsledek zkoušky na základě studijního úsilí. Ale protože ty diskrétní nuly a jedničky by se pomocí regrese těžko modelovaly (zkuste si těmi zelenými a červenými puntíky proložit přímku), převede se nejprve celý problém na spojitou pravděpodobnost. Položíme si otázku: jaká je pravděpodobnost p, že student, který studoval x hodin zkoušku složí.

Pravděpodobnost sice přímkou modelovat také nemůžeme (protože pro dostatečně vysoké hodnoty x by nám vyskočila nad 100%), ale zkusíme najít nějakou šikovnou modelovací funkci s volitelnými parametry, která se bude blížit k 0 pro malá x a k 1 pro velká x (když hodně studujete, pravděpodobnost úspěchu by se měla blížit 100%). Tedy zhruba řečeno funkci, která vypadá trochu jako arctg (na obrázku je v tmavě modrém). Takových esíčkovitých funkcí je celá řada a pro potřeby logistické regrese se používá - to byste neuhodli - logistická funkce, která má v základním tvaru vzoreček

L(x) = 1/(1+exp(-x))

V našem případě bude mít funkční hodnota L(x) význam pravěpodobnosti a do argumentu strčíme lineární funkci atributu x se zatím neznámými parametry a0 a a1.

p = 1/(1+exp(-a0-a1x))

Když si z této formulky vyjádříte exponencielu (a zlogaritmujete), dostanete

ln(p/(1-p)) = a0+a1x

(a to už lineární regresi hodně připomíná - jen se nám na levé straně místo závisle proměnné y rozvalila taková... no jak bych to řekl... zlý nehezký ošklivá věc)

Zbývá pouze určit hodnotu koeficientů a0 a a1. K tomu nám opět poslouží trénovací množina (jako ta na obrázku nahoře). Pro každou hodnotu hodnotu koeficientů jsme schopni vyčíslit akumulovanou chybu ?(L(x)-y). Jednu takovou chybu pro x=1.2 jsem na obrázku vyznačil bledě modře. Zbytek problému je proto opět optimalizační úloha. V parametrické rovině (a0,a1) chceme najít hodnoty, pro které bude souhrnná chyba co nejmenší.

+++++++++

Stejně jako při tradiční regresi y=a0+a1x se nemusíme omezit na případy, kdy máme pouze jeden atribut. Výsledek zkoušky může záviset nejen na počtu odstudovaných hodin, ale také třeba na počtu hodin spánku v noci před zkouškou či na momentální hladině alkoholu v krvi. Pokud tedy máme více atributů, sestavíme si prostě lineární kombinaci více proměnných, která bude modelovat tu zlou, nehezkou, ošklivou věc (anglicky se jí říká log-odds ratio)

ln(p/(1-p)) = a0+a1x1+a2x2 + ...

A ty kýžené koeficienty se hledají optimalizací v parametrickém prostoru, který má holt trochu víc dimenzí.

Jakmile jsme z trénovací množiny ty koeficienty vycucali (a testovací množina potvrdila, že fungují), můžeme přistoupit k vlastní klasifikaci. Pro každý nový příklad, charakterizovaný atributy x (ať už je jen jeden nebo je jich milion) si spočítáme hodnotu funkce L(x), která nám prozradí pravěpodobnost úspěchu. Pokud bude p>0.5 znamená to, že nálepka y=1, pro p<0.5 bude y=0.

+++++++++

3. Rozhodovací stromy

Velmi přirozenou metodou strojového učení jsou tzv. rozhodovací stromy, které jsou variací na klasické schéma určování rostlin. Utrhnete si kytičku, na kolena položíte rozevřený klíč a jedete: má to vroubkované listy (ANO-NE), pokud ANO, má to více než 5 okvětních lístků (ANO-NE), pokud NE má rostlina dlouhý řapík (ANO-NE). A tak pokračujete, až se doberete odpovědi.

Algoritmus postupuje podobně. Sestaví si strom z otázek (viz graf vpravo) a pak si bere si jeden příklad za druhým a v každém uzlu si položí nějakou otázku. Akorát se neptá, zda mají ty vektory atributů x vroubkované listy, ale dotazuje se např.: je atribut 1 větší než atribut 3? Nebo: je absolutní hodnota atributu 4 větší než jedna? Popřípadě u diskrétních atributů: je atribut 5 roven 2? Podle odpovědi pak pošle příklad do nižších uzlů. A takhle protáhne každý příklad tím stromem (shora dolů, počínaje uzlem 1) až dorazí do finálního uzlu (těm se říká listy) a tam už je připravena nálepka y. Čili predikce probíhá stejně jako u rostlin sérií otázek. Odpověď je většinou binární (ANO či NE), ale není to pravidlem (např. uzel 1 a 4 na obrázku připouští tři možné odpovědi).

Otázka je, jak si počítač ten strom sestaví.

Na začátku má k dispozici trénovací složku matice T - což je kupa příkladů (x,y), kde y je nálepka nabývající několika hodnot (tady těch tříd různých objektů může být více). A ty nálepky jsou ve složce nějakým způsobem rozděleny. A jak příklady probublávají stromem dolů, složka se dělí na nestejně velké podsložky a základní myšlenka je, aby se v každé podsložce koncentrovaly určité nálepky. Díky této strategii po dosažení nejspodnějšího uzlu (listu) v každé podsložce převládne určitá nálepka a tu příslušný list "zdědí". A pokud při vlastní klasifikaci nový příklad propluje stromem právě do tohoto "listu", dostane tu nálepku taky.

Představme si, že naše trénovací složka má 50% příkladů s nálepkou y=0 a 50% s nálepkou y=1. A řekněme, že pro první otázku (v horním uzlu) máme dvě varianty.

Varianta A. Pokud se zeptáme zda je atribut 1 kladný, algoritmus nám pošle jednu podsložku do levé větve a druhou do pravé, ale v obou podsložkách bude rozdělení nálepek pořád zhruba fifty fifty. Tak tudy ne.

Varianta B. Pokud se ale zeptáme, zda je třeba atribut 2 větší než 10, můžeme zjistit, že do pravé podsložky se nám dostaly příklady, kde je 80% nálepek y=0 a 20% nálepek y=1, zatímco v levé to bude naopak. Tohle je přesně, co jsme chtěli.

Je to takový Popelkový algoritmus. Na začátku má Popelka k disposici náhodnou směsici prosa, hrachu a zrní. A po průchodu každým uzlem se směska rozdělí na podskupiny, které budou mít určité převládající nálepky. Samozřejmě v reálu máme k disposici více variant než jen A a B (můžeme se zeptat prakticky na jakýkoliv atribut či jejich kombinaci), ale princip zůstavá stejný - ze všech možných variant vybereme tu, která snižuje rovnoměrnost zastoupení nálepek ve složce (neboli zvyšuje jejich "roztříděnost").

Jakým způsobem počítač tu roztříděnost posuzuje? Zhruba řečeno podle entropie.

Pokud máme tři nálepky (hrách, proso, čočka) a jedno jejich rozdělení je (30%, 30%, 40%) a druhé (10%, 30%, 60%), které z nich je roztříděnější? Když si spočítáte entropii, zjistíte, že to druhé - kde převládá třetí nálepka. A tuhle "roztříděnost" počítač systematicky zvyšuje, aby byla v listech co nejvyšší. Jen je při výpočtu nutno přihlédnout k tomu, že složky vycházející z uzlu mají různý počet příkladů (otázka daného uzlu nemusí do každé větve nutně poslat stejný počet). Proto se ty entropie musí ještě "ovážit" velikostmi příslušných podsložek, takže z toho nakonec vyleze veličina, které se říká "informační zisk" (information gain).

Algoritmus má při třídění příkladů k disposici spoustu atributů a u každého se může dotázat na spoustu vlastností (což jsou parametry této metody), takže v každém uzlu je ve hře je spousta variant, jak tu roztříděnost zvyšovat. A jak asi čekáte, prakticky se to provede tak, že se pro daný výběr parametrů (tj. pro daný výběr otázek) spočítá kolik příkladů se klasifikovalo špatně (neboť dorazily do listu, který jim přisoudil špatnou nálepku) a příslušné skóre se v parametrickém prostoru minimalizuje.

Možná si říkáte, proč prostě neudělat ten strom tak velký, že každý list bude (po dostatečně velkém počtu otázek) obsahovat pouze jeden příklad. Jeho nálepku pak zdědí všechny nové příklady do tohoto uzlu dorazivší. Takový strom by celou trénovací množinu klasifikoval přesně. De facto by se ji "nabifloval" nazpamět.

To ale není smyslem strojového učení. Smyslem je z trénovací množiny vytáhnout obecné trendy a zákonitosti (reprezentované funkcí F). Ne se ji naučit nazpaměť.

U testovací množiny už by tak oslnivé výsledky nebyly (mimo jiné pro to, že ona v sobě obsahuje jiné reálné vlivy ?, které se náš strom "nenašprtal").

+++++++++

Sekce Jauvajs: pohled pod kapotu

Žádný učený z nebe nespadl. Proto si učení většina lidí představuje jako poměrně komplikovaný proces probíhající v reálném čase. Proces, který je provázen celou řadou omylů a slepých uliček.

To, že do stroje naprogramujeme aritmetický průměr ve formátu (x+y)/2 samozřejmě neznamená, že se stroj něco naučil. Kde je tedy ve strojovém učení zaklíčován ten proces, provázený řadou omylů a slepých uliček?

Ten, zhruba řečeno, spočívá v optimalizaci.

Výše uvedenými příklady se jako červená niť vine myšlenka, že řešení dané klasifikační (či regresní) úlohy spočívá v tom, že minimalizujeme chybu v nějakém prostoru parametrů. Strojové učení se tedy realizuje hledáním minima více-rozměrné funkce F a to je proces zatížený - stejně jako lidské učení - celou řadou omylů a slepých uliček.

Problém spočívá v tom, že vícerozměrné funkce, se kterými se v praxi setkáme, nevypadají jako parabolické antény - kde se minimum najde raz dva - ale spíše jako bludiště hřebenů a údolíček jako na obrázku vpravo. V takovém případě je velmi snadné uvíznout u nějakého horského plesa (které je sice lokálním minimem), ale v žádném případě není minimem globálním, které hledáme (a dostat se z něho je pak docela problém).

Funkce F má obecný tvar ?chyba(p), kde p je vektor parametrů a suma probíhá přes všechny příklady obsažené v trénovací množině T.

Základní strategie hledání minima je stejná jako strategie hledání nejnižšího bodu daného údolí. Prostě vyrazíte ve směru největšího klesání - takovému směru se říká gradient funkce F a závisí pochopitelně na bodě, ve kterém se nalézáte. Zatímco v horách se ale pohybujeme spojitě a neustále svůj směr korigujeme podle povahy terénu, počítač musí rozhodnout jak daleko se podél daného gradientu přemístí. 

To je další hyperparametr, kterému se obvykle říká "vyučovací tempo" (learning rate) a musí se opatrně vyladit. Pokud je krok příliš malý, počítač se přesunuje k minimu příliš pomalu. Pokud je moc velký, počítač může to hledané minimum přeskočit a ocitnout se v úplně jiném údolí.

Obecně se této metodě říká gradientový sestup a protože leží v samotném srdci strojového učení, má několik důležitých variant. Protože ta funkce F je definována jako suma chyb přes všechny příklady (a těch mohou být tisíce), počítá se ten gradient často postupně vždy jen pro hrstku příkladů (až do vyčerpání celé množiny T). Metodám tohoto typu (a je jich několik, podle toho jak se ta hrstka příkladů vybírá) se v angličtině říká stochastic gradient descent. Další možností je pro určení směru dalšího postupu použít ne lineární aproximaci funkce (gradient je v podstatě první derivace - tedy indikátor lineárního růstu), ale přesnější aproximaci kvadratickou (na kterou jsou potřeba druhé derivace). Takové metody shrnuje angličtina do kategorie conjugate gradient method.

+++++++++

V posledních letech jsou velkým hitem strojového učení tzv. ánsámblové metody, které jsou založeny na známé lidové moudrosti, že víc hlav víc ví (viz možnost zeptejte se publika v televizním Milionáři).

Sestrojíme si několik klasifikátorů a závěrečný verdikt pak vyneseme podle jejich souhrnného doporučení. Tyto baterie učících se strojů používají pro agregaci klasifikačních výsledků jednu ze dvou základních metod.

V té první (angl. bagging) si každý klasifikátor vytvoří svůj vlastní model zcela nezávisle a výsledná nálepka je pak v podstatě výsledkem hlasování. Jedna z možností, jak si tu armádu klasifikátorů vytvořit je vzít si stejnou architekturu (třeba rozhodovací stromy), z trénovací množiny vytvořit náhodným výběrem (s opakováním) několik menších trénovacích množin a klasifikátory pak vytrénovat na těchto náhodně vygenerovaných podmnožinách (takový přístup vede k velmi úspěšnému klasifikátoru, kterému se říká náhodný les).

Ve druhé (angl. boosting) ty klasifikátory v jistém smyslu spolupracují. Můžete si je představit jako dělníky u pásu, s tím, že každý klasifikátor se snaží soustředit na ty příklady, které jeho předchůdce neklasifikoval správně (to znamená, že v té chybové funkci F přiřadí těm klasifikačním "zmetkům" větší váhu). V kategorii rozhodovacích stromů vede tato strategie k jednomu z nejpopulárnějších algoritmů posledních let - XGBoost.

Elektrikáři si ty rozdíly mezi oběma metodami mohou představit jako paralelní versus sériové zapojení.

Nu, pokud vás tahle změť statistiky a lineární algebry neodradila, máte docela dobré předpoklady stát se učitelem strojů. Tak chutě do toho. Bude to mít jednu velkou praktickou výhodu. O přestávce po vás studenti nebudou házet houbou.

+++++++++

Na podzim se mne vždycky zmocní nostalgie. A ta je pro mne v hudbě zosobněna tesknými melodiemi ruského skladatele Sergeje Rachmaninova. Tahle je z nich nejpodzimnější. Sergej Rachmaninov: Třetí věta z Druhé symfonie.

Předchozí díly Matykání

Autor: Jan Řeháček | pondělí 9.11.2020 9:09 | karma článku: 17,01 | přečteno: 706x
  • Další články autora

Jan Řeháček

Jaro: das ist nur die erste Phase

Jaro má v našem parku tři fáze, které jsem výstižně pojmenoval: první, druhá a třetí. Toto je svědectví o první z nich. Můžeme s ním nesouhlasit, můžeme proti němu protestovat, ale to je asi tak vše, co s tím můžeme dělat, Járo.

9.4.2024 v 9:09 | Karma: 16,67 | Přečteno: 422x | Diskuse| Fotoblogy

Jan Řeháček

A je po Velikonocích. A nejen po nich.

Globální kotlík zavěšený nad ohněm inkluze a diversity pomalu vytlačuje národní státy, vyrůstající ze sdíleného kulturního podhoubí. Tomuto trendu se nově přizpůsobuje i řada českých svátků s jejichž novelizací vás chci seznámit.

1.4.2024 v 9:09 | Karma: 21,15 | Přečteno: 458x | Diskuse| Společnost

Jan Řeháček

Impresionisté na hladině

Když se na podzim objevily barvy na stromech, všiml jsem si, že se občas zrcadlí v našem potoce či rybníčku. Tak jsem na ně zamířil objektiv a vyšly z toho roztěkané výtvarné kreace, za které by se nemusel stydět ani Claude Monet.

9.3.2024 v 9:09 | Karma: 22,50 | Přečteno: 323x | Diskuse| Fotoblogy

Jan Řeháček

AI Art: co už umí a co ještě ne

Loni jsem trochu experimentoval s malířskými schopnostmi tehdy nastupující generativní AI Art. Letos, za dlouhých zimních večerů jsem si na to vzpomněl a napadlo mne podívat se, jak moc za ten rok AI pokročila. Nu, posuďte sami.

15.2.2024 v 9:09 | Karma: 17,90 | Přečteno: 371x | Diskuse| Ostatní

Jan Řeháček

Není větvička jako větvička

Stromy a jejich rozeklaná větvoví jsou sochařská díla. V létě to ale nepoznáte, protože přírodní majstrštyky zakrývá koruna. Jakmile ale podzim povolá svá vojska zpět do zálohy, ladná elegance dřevěných křivek vystoupí do popředí.

9.2.2024 v 9:09 | Karma: 19,45 | Přečteno: 437x | Diskuse| Fotoblogy

Jan Řeháček

Co rok dal

Začátek nového roku je tradičně příležitostí k ohlédnutí za rokem starým, takže jsem prohrábl archív a vylovil z něho pár fotografií z našeho parku, které si nenalezly cestu do některého z předchozích tématických blogů.

9.1.2024 v 9:09 | Karma: 17,25 | Přečteno: 233x | Diskuse| Fotoblogy

Jan Řeháček

Politické školení mužstva: Pyšná princezna

Roto končit! Pozor! (vejde útvarový politruk) Soudruzi vojáci, kapitál se potácí. Ale sám se nám na smetiště dějin nevypotácí. My mu musíme co, soudruzi? No? Nikdo? No, my mu musíme pomoci, vy hlavy hovězí!

31.12.2023 v 9:09 | Karma: 25,82 | Přečteno: 911x | Diskuse| Poezie a próza

Jan Řeháček

Ten podzim se nám hezky vybarvil

Každý podzim je v našem parku trochu jiný. Stromy, které by loni přešminkovaly i šestnáctku před prvním rande, jsou letos pobledlé jako Rusalka. A ty, které se zprvu barevně upejpaly, se najednou utrhly z řetězu. Jak řezníkův pes.

9.12.2023 v 9:09 | Karma: 19,07 | Přečteno: 325x | Diskuse| Fotoblogy

Jan Řeháček

Paroháčů je letos dost

Srnka je v našem parku jako houska na krámě. Zato setkání s jelenem si člověk musí považovat. Letos jsem ale náhodou objevil, kde se srocují: na záložním travnatém parkovišti, kterému se říká Gil's Hill, těsně před západem slunce.

9.11.2023 v 9:09 | Karma: 19,30 | Přečteno: 346x | Diskuse| Fotoblogy

Jan Řeháček

Chřadnoucí prales - pod vodou i nad ní

O korálovém útesu se říká, že je to "dešťový prales" oceánu. Biodiversita, kterou reprezentuje je ohromující. Totéž platí i o jeho suchozemském ekvivalentu. Bohužel, oba ekologické systémy se dostávají na seznam ohrožených druhů.

27.10.2023 v 9:09 | Karma: 14,27 | Přečteno: 262x | Diskuse| Životní prostředí a ekologie

Jan Řeháček

Letní kvítí

Primární sezónou květů je sice jaro, ale ani léto není v našem parku z pohledu barev úplná nuda. Tady je malá fotovonička složená z příspěvků místní flory. Aneb kdo nekvete s námi, kvete proti nám.

9.10.2023 v 9:09 | Karma: 17,88 | Přečteno: 191x | Diskuse| Fotoblogy

Jan Řeháček

Plody léta

Léto je časem zrání a ani v našem parku tomu není jinak. Zajímavé plody nabízí říše rostlinná i živočišná. Tady je malý průřez letošní nabídkou: asijské maliny, kuriózní houby a malí mývalové. Ceny jsou mírné: léto létá zdarma.

9.9.2023 v 9:09 | Karma: 16,17 | Přečteno: 308x | Diskuse| Fotoblogy

Jan Řeháček

Kvetoucí fuga (Beethoven)

V Beethovenově Misse Solemnis nalezneme spoustu skrytých drahokamů, které zde leží prakticky nepovšimnuty, protože celková hudební struktura této Mše je na první poslech naprosto neprůstřelná. Jedním z nich je fuga v závěru Creda.

27.8.2023 v 9:09 | Karma: 14,39 | Přečteno: 321x | Diskuse| Kultura

Jan Řeháček

Sovy a supi

V našem parku také poletuje spousta zajímavých ptáků. Tak jsem jich pár vyfotil. Sovy jsou sice nočními živočichy, ale na jaře se občas dají zastihnout i za denního světla. A za pár šupů k nim přihodím ještě pár supů. Ať nežeru.

9.8.2023 v 9:09 | Karma: 20,92 | Přečteno: 342x | Diskuse| Fotoblogy

Jan Řeháček

Vlčí západy

Při procházkách naším parkem občas fotím západy slunce z vyvýšeného travnatého parkoviště zvaného Gil's Hill. Říkám jim Vlčí západy. Jednak proto, že mají zhusta barvu vlčích máků a jednak proto, že náš park se jmenuje Vlčí past.

9.7.2023 v 9:09 | Karma: 16,96 | Přečteno: 344x | Diskuse| Fotoblogy

Jan Řeháček

Za devatero fotkami: Malebné peklo

Já to tušil, že jednou skončím v pekle. Jen jsem si představoval, že vstup bude mít z nějaké islandské sopky. Houbeles! Jeho vchod se nalézá poblíž vesničky Medkovy Kopce nedaleko Hlinska. "Lasciate ogne speranza, voi ch'intrate".

21.6.2023 v 9:09 | Karma: 19,13 | Přečteno: 368x | Diskuse| Fotoblogy

Jan Řeháček

Sedm divů jara

Po dlouhém barevném půstu zimní šedi působí návrat jarní kavalerie jako zjevení. V našem parku v tomto období kvete několik dřevin, s jejichž uměleckými kreacemi bych vás v tomto blogu rád seznámil. Matička příroda dokáže kouzlit.

9.6.2023 v 9:09 | Karma: 16,12 | Přečteno: 233x | Diskuse| Fotoblogy

Jan Řeháček

strž

V dnešním pokračování poetického cyklu "Bez básně a Hany" se nedozvíme jakou krevní skupinu mají nejraději novozélandští upíři a zda je tuna pampeliškového chmýří těžší než sbírka maturitních příkladů z matematiky.

29.5.2023 v 9:09 | Karma: 14,28 | Přečteno: 296x | Diskuse| Poezie a próza

Jan Řeháček

Devět zastavení času

Příroda se mění pomalu, ale jistě. Den ze dne nic nepostřehnete, ale když se na známá místa vrátíte za pár týdnů, naleznete desítky drobných změn. Tak jsem se na třech místech našeho parku devětkrát zastavil, abych je zachytil.

9.5.2023 v 9:09 | Karma: 16,36 | Přečteno: 295x | Diskuse| Fotoblogy

Jan Řeháček

Cesta do hlubin duše (Beethoven)

Lidská duše je odvěkou hádankou, na které si vylámaly zuby celé generace psychologů, teologů a filosofů. Tajuplný komplex uvnitř každého z nás. Pro mne je definicí lidské duše Beethovenův 14. smyčcový kvartet cis moll, op. 131.

30.4.2023 v 9:09 | Karma: 14,42 | Přečteno: 289x | Diskuse| Kultura
  • Počet článků 402
  • Celková karma 19,53
  • Průměrná čtenost 920x
Devátý nejhorší kuchař na světě, odpůrce politické překorektnělosti, začínající marťan, neúnavný konzument točeného kyslíku a jazykový dobrodruh ab incunabulis. Člen Analytického piva a Gustavu pro jazyk český. Správce Vojensko-českého slovníku.