Your very first AI

Jiri Stepan
Etnetera Activate
Published in
8 min readAug 22, 2018
“white robot action toy” by Franck V. on Unsplash

AI inside. Tenhle a podobné výkřiky lze dnes najít na mnoha produktech a propagačních materiálech firem a služeb. Zpravidla se nabízí jako jakási lákavá magie, která z vašich dat udělá nějaký zázrak. Stačí jen málo, předejte nám data o vašich zákaznících a my už se postaráme...

Zní to lákavě, ale co když nechcete nechat vaše data zpracovat třeba Google? Co když si chcete doporučovací algoritmus produktů nebo rozpoznávání obrazu vytvořit sami? Mít jej pod kontrolou, zlepšovat jej, ladit jej a třeba nakonec výsledný model začlenit do svého produktu či služby?

Pak vám nezbývá než se ponořit do světa strojového učení, což je cesta, kterou máme v Etnetera Activate už za sebou. Takže zkusím popsat malého průvodce jak na to.

Pochopitelně neříkám, že tato cesta je jediná. Ale třeba zrovna Vám pomůže.

Co je to ta AI?

AI, strojové učení a neuronové sítě jsou související pojmy, které se často zaměňují. Představme si situaci, kdy máme data například o tom, jak někdo využívá předplatné kabelové televize. Máme informace o každém zhlédnutém filmu. Máme také informace o tom, kdo si předplatné následně neprodloužil. A naším úkolem je zkusit odhadnout budoucí odcházející zákazníky, abychom jim třeba mohli zavolat a dát jim nějakou nabídku předtím, než utečou. Tento model se nazývá churn model.

Kudy na to? Můžeme najmout data analytika. Ten se na data bude dívat, prožene je spoustou tabulek, R skriptů a kdoví čeho a na konci odprezentuje něco jako “pokud zákazník má tři měsíce po sobe klesající počet zhlédnutých minut o 20 %, tak je pravděpodobnost odchodu 73,5%”. Tato věta je takzvaný model. Vy zatleskáte, zaplatíte a zadáte IT oddělení, aby z databáze tahalo tento rizikový segment pro obvolávání.

Kde je problém? Zejména v tom, že do procesu vstupuje mnoho lidí a je jednorázový. Tento model platí pro teď. Bude se asi měnit a bylo by krásné celý proces automatizovat. Vynechat data analytika, prezentaci a IT.

A právě to je strojové učení. Jedná se o proces, kdy nějaký algoritmus nakrmíme daty, o kterých řekneme jen velmi málo, co znamenají. V podstatě se omezíme na typ, tedy zda se jedná o číslo, text, datum apod. V našem případě tedy připravíme data, kdy každý zákazník bude mít jeden řádek a třeba několik set sloupců. Např. počty zhlédnutí filmů po dnech za poslední rok podle kategorie, počty nedokoukaných, věk, lokalitu, počasí v dané dny, atd. Veledůležité je, že ke všem těmto sloupcům nakonec připojíme jeden, který obsahuje “odešel” nebo “zůstal”. Pokud máme tato data, můžeme nechat stroj aby si pomocí některé metody strojového učení vytvořil model sám. Dělá to zhruba takto:

  1. Náhodně si nastav výpočet, který ze vstupů určí, zda zákazník odešel nebo neodešel.
  2. Postupně zkoušej jednotlivé řádky vstupů a počítej, kolikrát ses spletl.
  3. Pokud ses spletl mockrát, nějak si uprav nastavení výpočtu a zkoušej to znovu.
  4. Voilá, máme model!

Ty kroky 2 a 3 zkouší hodněkrát. Opravdu hodněkrát. Tisíce, desetitisíce iterací. Stroj není chytrý, ale je trpělivý. Abychom si ověřili, že to vážně funguje, většinou vstupní data rozdělíme náhodně na dvě části:

  • Trénovací množinu — typicky 80 % — použijeme pro učení a tréning.
  • Testovací množinu — typicky 20 % — si necháme vedle. Výsledný model pak necháme spočítat predikce pro tento test a porovnáme, jak si vede na datech, které nikdy neviděl.

Jen tak mimochodem jsem teď zmínil, že výsledek predikce neuronové sítě není 100%. Chybuje a naším úkolem je rozhodnout, jaké míra chyby je pro nás akceptovatelná. Pokud omylem zavoláme člověku, který ve skutečnosti nechce vypovědět kabelovku (tzv. false positive chyba) nic se nestane, jen to něco stojí. Můžeme tedy připustit větší chybovost. Pokud trénujeme neuronovou síť například pro medicínské účely, musíme být mnohem náročnější.

Větička “nějak si uprav nastavení výpočtu” je právě to, co odlišuje jednotlivé algoritmy strojového učení. Není cílem článku je popsat všechny. Je jich hodně a některé navíc nepotřebují pro svoje učení ten správný výstup. Soustředíme se na nejmódnější algoritmus a to je neuronová síť. Představte si ji asi takto:

Schéma neuronové sítě

Každé kolečko je neuron. Má hodně vstupů a jeden výstup. Dělá v podstatě to, že vstupy sečte a na svůj výstup pošle hodnotu odpovídající nějak jejich součtu. Typicky 0 pokud je součet pod nějaký práh nebo 1 pokud je nad tento práh. Ale může to být i spojité apod. Důležité je, že ty vstupy mají svoje váhy a podle nich se sčítá. A právě nastavování těchto vah je ono učení. Ve výsledku získávají čáry na vstupech neuronů různou tloušťku a to tak dlouho, dokud se postupnými iteracemi zlepšuje odhad výsledku s tím, kolik víme, že to má vyjít.

Ty sítě jsou celkem rozsáhlé. Třeba taková klasická úloha pro rozpoznávání číslic v rastru 28x28 pixelů vypadá zjednodušeně takto:

Neuronová síť pro rozpoznání číslic potřebuje 784 + 15 + 10 = 809 neuronů.

Sítě pro deep learning pak obsahují řádově více neuronů a jsou tak výpočetně velmi náročné.

Stop! Teď jsem to začal komplikovat a přitom jsem chtěl ukázat, jak to jde jednoduše. Takže pojďme zpět na cestu k naší vlastní neuronové síti.

Mimochodem ještě jsem neřekl, co je to vlastně to AI. Inu AI je prostě buzzword, který znamená “použili jsme nějaký algoritmus strojového učení, takže ten výsledek dělá něco, co tradičními algoritmy šlo špatně.” My už ale víme, že to s inteligencí jako takovou má pramálo společného. AI dnes sice dokáže řadu činností, které dlouho uměl jen člověk, ale stále je to hlavně díky tupému výkonu a strojovému opakování. Ale i to se počítá a mnohdy hodí.

Typicky se hodí na:

  • Klasifikaci, kdy na základě vstupů (třeba hodnot barevností pixelů z obrázku) odhadujeme nějakou diskrétní hodnotu. Číslici například.
  • Predikci hodnot, kdy na základě vstupů odhadujeme spojitou hodnotu. Třeba nás zajímá na základě historie posledních 200 měření glukózy v krvi, jaká bude koncentrace za 5 minut.

Cesta k vlastní neuronové síti

Ta cesta má několik zastávek. Každá zastávka je složitější, ale současně vám umožňuje dělat více a více věcí. Podstatné je, že můžete začít, aniž byste museli přesně vědět, co je to neuron, práh atd. Ale tušit byste měli.

  1. Strojové učení jako služba je prvním krokem. Já vím, že jsem před chvílí varoval před nesmyslným předáváním dat cloudům. Ale tohle je něco jiného než nějaký javascriptový tracker. Mluvím o využití cloudových služeb, kam nahraji svoje data. A pak si vezmu jako výsledek naučený model. Je to skvělé k ověření proof of conceptů a většinou to člověk zvládne bez nutnosti programovat.
  2. Strojové učení pomocí knihoven pro obecné data science tooly je pak druhým krokem. Předpokládáme, že máte v týmu někoho kdo umí R, Python nebo Matlab. Pak stačí použít některou z mnoha knihoven pro strojové učení a začít experiemetnovat. Výhodou je plná kontrola a začlenění do celkového flow zpracování dat. Nevýhodou pak relativně malý výkon. Sítě nad řádově stovky neuronů se budou trénovat dlouho a bolestivě. A pochopitelně je limitující znalost daných nástrojů.
  3. Strojové učení pomocí specializovaných nástrojů se týká převážně neuronových sítí a deep learningu. V posledních letech se zjistilo, že učení neuronových sítí lze perfektně provádět na grafických kartách. A tak vznikl například projekt TensorFlow, který toto umožňuje. Už jen rozchození celého stacku, který TensorFlow umožňuje není jednoduché. Odměnou je ale super flexibilní a výkonný nástroj, umožňující trénovat ty nejpokročilejší neuronové sítě pro velmi komplexní úlohy.

V následujícím textu zkusím stručně vypíchnout kudy na to a poskytnout základní návody a odkazy.

Zastávka nultá — připravte si data

Úplně prvním krokem ve všech případech je připravit si data do struktury vhodné pro trénování. S tím vám většina nástrojů nepomůže a musíte to provést sami. Třeba v Excelu, pokud jinak neumíte.

Iris setosa je květina z jednoho velmi populárního datasetu pro začátečníky.

Doporučuji ale pro první experimenty vzít některý z hotových datasetů. Krásné jsou třeba tady: https://archive.ics.uci.edu/ml/index.php. Mají tu výhodu, že jsou připravené, popsané a také docela malé a přitom na nich lze něco natrénovat. Takže jsou perfektní pro první seznamování.

Zastávka první: Bigml.com

Nástrojů pro strojové učení v cloudu je na trhu dostatek. Každý z velkých cloud hráčů něco nabízí:

Na všech platformách lze nastartovat vlastní škálovatelné učení za rozumné peníze.

Pro první hraní jsou ale stále dosti komplikované a orientují se spíše na developery než business uživatele. Pro ty je krásnou vstupní branou právě BigML

Jedná se o nástroj, kde i ve freemium modelu můžete experimentovat s menšími datasety.

Ukázka bigML a možností datasetu.

V nástroji si velmi jednoduše nahrajete dataset a nad ním spustíte různé ML algoritmy. Neuronové sítě se zde nazývají DEEPNET, ale umí toho více. Na snímku je dataset obsahující názorové postoje našich zaměstnanců. Cílem je predikovat, do jaké z firem Etnetera Group patří. Tedy klasifikace.

K tomu stačí nahrát soubor z disku a nechat BigML, aby sám nastavil vhodnou neuronovou síť. Na toto nám stačí síť s jednou skrytou vrstvou.

Výsledný model pak je možné vyhodnocovat proti trénovací množině. Zde například výsledky klasifikace “patří do firmy Etnetera” proti 20% testovacímu vzorku.

Z patnácti vzorků, které měl určit jako “Etnetera” trefil 13. A z 19, kde měl říci “není Etnetera” trefil 14. Stačí nám to?

A poté pochopitelně zkoušet predikce na základě vstupů.

Predikce na základě manuálně zadaných hodnot

Výsledek pak lze snadno integrovat do aplikací pomoci API. Toto vše stihnete za 15 minut a pokud máte zájem, budu se tomuto konktétnímu případu a nástroji věnovat na workshopu na Future Port Prague.

Zastávka druhá: Machine learning v rámci R/Python/...

Toto by vydalo na delší článek. A tak jenom navedu. Pokud se pohybujete v oblasti Rka, pak zkuste package neuralnet. Základní kód využívající dataset cen nemovitostí v Bostonu vypadá takto.

Pokud umíte R, není to tak těžké a snadno si kód upravíte pro váš případ. Důležité je se podívat na parametry neuralnet. Zde se nastavuje počet vrstev a chování celého algoritmu, zde se trénuje síť.

Pro Python pak doporučuji SCI-KIT. S dovolením vynechám příklady, ty jsou na webu dostatečně krásné.

A jeden tip nakonec. Instalace Pythonu a balíčků je dost pekelná. Zkuste si stáhnout a nainstalovat Anakondu. Získáte kompletní Python a R s potřebnými data science balíčky a ušetřený den instalace můžete strávit třeba vleže na plovárně.

Zastávka třetí: TensorFlow a využití GPU

Toto je téma na několik článků. Pokud jste se dostali až sem, je vidět, že vás téma zajímá. TensorFlow umožňuje postavit sítě pro deep learning a spouštět je v cloudu, nebo na lokálních GPU. A nově přidali možnost integrace do javascriptových aplikací. Ale o tom až někdy příště.

Zatím si zkuste perfektní vizualizaci toho, jak se síť učí. A sledujte náš blog nebo nás kontaktujte. A nebo se stavte na Future Port Prague.

--

--

Jiri Stepan
Etnetera Activate

Vedu tým skvělých lidí ve firmě Etnetera. A zajímá mne ebusiness, cestování, sci-fi, divadlo, triatlon, ...