Geek tričko zdarma Geek tričko zdarma
Hledáme grafika na pohodovou brigádu v Blenderu nebo programátora na hry v PyGame. Máš zájem? Napiš nám na redakce [zavináč] itnetwork.cz!
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Lekce 1 - Úvod a motivace do programování neuronových sítí v Pythonu

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u první lekce e-learning kurzu věnovaném deep learningu, tedy strojovému učení. Naučíte se zde vše od čtení dat až po naprogramování vlastní neuronové sítě v Pythonu. U kurzu počítám s tím, že znáte alespoň základy Pythonu (stačí syntaxe) a umíte vytvořit třídu.

Umělá inteligence v Pythonu

Motivace

Jelikož vstupujeme do velmi komplexní problematiky, v dnešní lekci si ji podobně uvedeme a řekneme si co vše tvorba umělé inteligence v Pythonu zahrnuje.

Standardní vs. učící se algoritmy

Standardní algoritmy, které nejsou založené na strojovém učení a práci s daty, excelují na úlohách, které lze snadno definovat. Vezměme si např. úlohu "zpracovat objednávku v internetovém obchodě". Kód takového programu by obsahoval jednoznačné postupy, např. uložení objednávky do databáze, generování údajů do faktury, obsluhu platební brány a další. Zde není moc nad čím přemýšlet, jediný problém snad může být najít v dnešní době schopného programátora :)

Jak definujeme banán?

Definujme ovšem jiný typ úlohy, např. budeme chtít zjistit, zda je na fotografii banán. Tuto úlohu i část textu jsem si vypůjčil ze zdejšího článku Deep learning na 3 řádky. Pokud chcete realističtější úlohu, můžete si představit, že místo banánu detekujeme zbraň a jedná se o analýzu obrazu z bezpečnostní kamery. Jak ale definujeme banán?

Eh... no... Můžeme začít s tím, že banán je žlutý, má jistý tvar, velikost a texturu. Ani jedna z těchto vlastností není u banánu pokaždé stejná a už vůbec není "banánově exkluzivní" (např. jablko může být také žluté). Náš algoritmus se tak může snadno mýlit a označit za banán např. kus žluté zahradní hadice nebo naopak selhat při analýze zhnědlého nebo natočeného banánu. Myslím, že jsme již narazili a to jsme ještě ani nezačali. I v rozpoznávání číslic, kterých je jen 10 a jsou oproti objektům všedního světa jednoduché, jsou klasické algoritmy značně nedokonalé.

Možná vás napadlo zeptat se, jak to vlastně dělá člověk, že bezpečně pozná, co je banán, zbraň, přečte SPZ automobilu a dokáže řešit další úlohy, kde standardní programovací postupy selhávají. Asi bychom spolu došli k úvaze, že člověk se to naučí z dat, která během života získá.

Data

Vědci tedy přišli s nápadem napodobit lidské myšlení a softwarově simulovat síť neuronů, podobnou té, kterou máme v hlavě my lidé, jen samozřejmě mnohem jednodušší. Tuto síť pak lze na základě velkého množství dat (v našem příkladu rozumějte dostatečného počtu fotografií různých banánů) vytrénovat tak, aby dokázala s vysokou úspěšností banán rozpoznat.

Takovouto síť musíme samozřejmě naučit rozpoznat i jiné objekty, aby se mohla rozhodnout mezi banánem a alternativním případem. Při použití klasifikátoru založeném na konvolučních neuronových sítích je přesnost a rychlost algoritmu dokonce lepší než u člověka samotného! Klasifikátorem máme na mysli funkčnost, která dokáže rozpoznat daný objekt a tedy jej klasifikovat. To je ale ovšem stále jen jedna z úloh, které lze strojovým učením řešit.

Kdy použít a nepoužít neuronovou síť

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Důležité je si uvědomi, že neuronové sítě používáme na určité typy úloh a jejich výsledek má vždy nějakou pravděpodobnost, i když velmi vysokou. Pokud bychom je použili na úlohy, které lze jednoduše definovat, bylo by to zas na škodu. Nevýhodou neuronek obecně je potřeba velkého množství dat a výpočetního výkonu pro učící fázi.

Data jsou všechno

V dnešní době jsou data silným nástrojem, pokud se s nimi naučíme dobře pracovat, dokážeme prakticky všechno. Pojďme si vyzdvihnout další 2 úspěchy AI (umělé inteligence, anglicky Artifical inteligence), tentokrát na poli her:

  • Tým OpenAI dokázal porazit tým profesionálních hráčů ve hře Dota 2 (zápas 5v5)
  • Tým DeepMind od Google porazil ve hře Go (desková hra) nejlepšího člověka
Dota 2

"Stroj" porazil člověka, protože hrál tolik her sám proti sobě a pořád se zlepšovat, že by to člověk neodehrál ani za několik životů.

Co vše AI umí?

To ale stále není všechno, ani zdaleka ne! S AI toho lze dělat opravdu hodně a v mnoha oborech je s těmito algoritmy spojeno velké množství peněz a pozice analytiků big data jsou velmi dobře placené, např. ve finančnictví.

Uveďme si zde takový seznam pojmů, stále se jedná o malý nástřel toho, co toto mladé a perspektivní odvětví vše umožňuje:

  • Obecné
    • Klasifikace
    • Predikce
  • Práce s jazykem
    • Překlad
    • Klasifikace komentářů - pozitivní, neutrální, negativní
    • Klasifikace událostí ve světě
      • Na tomto můžeme vydělat těžké peníze, pokud budeme vědět X dní předem, že nějaké akcie půjdou dolů nebo nahoru :)
    • Generování textu
  • Interakce s prostředím (například hry)
    • Reinforcement learning
      • Neuronová síť se učí podobně jako člověk, podle odměny nebo trestu, příklady úspěchů AI ve hrách Dota 2 nebo deskovce Go jsme si již zmínili výše. Odkaz
  • Práce se zvukem
    • Generování hudby a další
  • Práce s obrazem
    • Klasifikace obrázku
    • Detekce více objektů na obrázku (+ lokalizace)
    • Style Transfer
      • Druh umění, kde se snažíme ponechat obsah obrázku a změnit styl (např. profilovka nakreslená od Picassa)
    • Deep Dream
      • Druh umění, vytvoříme "halucinogenní" obrázek, kde jsou zobrazeny objekty a vlastnosti, které model zná, Odkaz
    • Generativní Model
      • Můžeme vygenerovat unikátní obrázek podobný těm, který chceme. Např. udělat z koňě zebru a naopak - Odkaz. Nebo udělat z letního obrázku zimní.
      • Text to Image - Odkaz
    • Rozpoznání osob podle obličeje
    • Detekce klíčových bodů na obličeji
    • Odezírání ze rtů
    • Udělat z low res obrázku high res, Odkaz
    • Odstranění šumu
    • Dokreslování obrázků / rekonstrukce

Od každého něco si tu určitě ukážeme, ale nejdříve se musíme ke všemu postupně dostat. V tomto kurzu je (a bude) motivace extrémně důležitá, proto se vás budu snažit motivovat a čas od času informovat o dění ve světe AI :) Mně osobně trvalo více než 7 měsíců, než jsem pochopil principy a zvládl vytvořit něco, čemu jsem opravdu rozuměl.

Co máme před sebou

Máme toho opravdu hodně, je klíčové vybrat si ten správný začátek a nikam nespěchat. Klíčové body, které máme před sebou, jsou:

  • Lineární a polynomiální regrese
  • K-Nejbližších sousedů (K-Nearest neighbours)
  • Rozhodovací stromy (Decision Trees), Les rozhodovacích stromů (Random forest)
  • K-Means clustering (Rozdělení dat do K skupin)
  • SVM (Support Vector Machine)
  • Perceptron
  • Multilayer perceptron (Vícevrstvý perceptron)
  • Neuronová síť
  • Reinforcement learning (učení na základě interakce s prostředím)
  • CNN (Convolutional Neural Network - Konvoluční neuronová síť)
  • RNN (Recurrent Neural Network - Opakující se neuronová síť)

Je také důležité vědět o novinkách, proto si občas pročtu/zhlédnu něco na následujících webech:

  • Medium
  • Towards Data Science
  • YouTube
    • Two Minute Papers - představuje novinky (papers, papír je většinou PDF popisující způsoby, architekturu modelu / neuronové sítě a výsledky práce - něco jako seminární práce na univerzitě)
  • Reddit - související subreddity (Machine Learning, Data Science, Computer Vision, Deep Learning, ...)

S čím budeme pracovat

Budeme používat poměrně dost nástrojů, jelikož každá činnost si žádá ten správný. Uveďme si alespoň ty klíčové, které budou po dobu tohoto kurzu náš denní chléb (samozřejmě záleží na činnosti).

  • NumPy - knihovna na pro práci s N-dimenzionálními poli - staví na ní většina knihoven z tohoto "oboru"
  • Pandas - knihovna pro práci s daty
  • Matplotlib - knihovna pro vizualizaci
  • Scikit-Learn - knihovna pro strojové učení - obsahuje již implementované algoritmy
  • OpenCV - knihovna pro práci s obrazem
  • PyTorch / Tensorflow - framework pro deep learning / neuronové sítě
    • Framework budeme používat již z jednoho prostého důvodu a tím je ulehčení práce, ale tím nejdůležitějším důvodem je optimalizace. Tyto frameworky jsou dělané pro obrovské množství paralelních výpočtu na Tensorech (co je Tensor se dozvíte až to bude potřeba), tudíž jsou psané v nízkém jazyce jako CUDA (výpočetní framework pro GPU od NVIDIA) a C++.

Pracovat s těmito nástroji se budeme učit podle potřeby v našich projektech, po pár lekcích se vám to dostane pod kůži stejně jako když jsem začínal i já sám :)

Instalace

Osobně rád používám knihovnu/framework PyTorch (na neuronové sítě), ale v produkci se většinou používá framework Tensorflow od Googlu, který lze bez problému používat i na mobilu. Ve frameworcích je rozdíl jak fungují, ale to nás zatím nemusí trápit a vše se dozvíte dále v kurzu. Až nadejde čas, byl bych rád, abyste o frameworku/kni­hovně, který budeme používat na neuronové sítě, rozhodli vy sami :)

Nejdříve je potřeba nainstalovat si Python, silně doporučuji distribuci MiniConda / AnaConda, protože nikomu nepřeji instalovat OpenCV ručně. MiniConda je podobná distribuce jako AnaConda, liší se v tom, že AnaConda má předinstalovaných asi 150 knihoven pro práci s daty (což si myslím, že je zbytečné).

Po instalaci Conda distribuce spustíme Anaconda prompt (Klávesa Win a použijte vyhledávání). Unixákům stačí pouze otevřít nový terminál. Přes Anaconda prompt budeme my Windowsáci spouštět naše skripty.

Pokud to někomu nevyhovuje, může si Python přidat do PATH a v příkazové řádce (CMD) použít příkaz conda init cmd.exe. V nově otevřeném CMD následně použít conda activate pro aktivaci prostředí (poté již stačí pouze tento příkaz při spuštění CMD).

Dále nainstalujeme knihovny, které budeme brzy potřebovat (zbytek doinstalujeme podle potřeby) a to následujícími příkazy:

  • pip install numpy
  • pip install matplotlib
  • pip install pandas
  • pip install sklearn - knihovna Scikit-Learn

Pokud vám příkazy nefungují, např. používáte klasickou distribuci Pythonu, použijte variantu py -m pip install.

Pokračovat budeme v příští lekci, Neuronové sítě v Pythonu - Prostředí Jupyter.


 

 

Aktivity (4)

 

 

Komentáře

Avatar
Petr Jeřábek
Redaktor
Avatar
Petr Jeřábek:10. července 20:07

Super, tohle téma mě zajímá už dlouho ale nikde jsem pořádně nenašel vysvětlení, kterému bych rozuměl. Díky moc, těším se na pokračování :)

Odpovědět  +3 10. července 20:07
Declare variables, not war
Avatar
Alex
Redaktor
Avatar
Alex:10. července 21:42

Tak až se doučím C#, tak hned začínám s pythonem.
Toto je dobrá motivace.

 
Odpovědět 10. července 21:42
Avatar
Filip Němeček
Redaktor
Avatar
Filip Němeček:10. července 21:47

Tak toto vypadá hodně zajímavě a určitě budu sledovat. Jenom mě napadá, nebylo by lepší vysvětlit virtual environment pro lepší organizaci knihoven? :-) Přece jen je to lepší volba než to instalovat přímo do systému.

 
Odpovědět  +2 10. července 21:47
Avatar
tesař.tech
Redaktor
Avatar
tesař.tech:11. července 11:26

Článek je to hezký, jenom mě zaráží, že jsi bez upozornění slovo od slova okopíroval část kapitoly "Jak definujeme banán" z mého článku na podobné téma. Což je vcelku nekorektní přístup ke sdílení informací.

Editováno 11. července 11:26
 
Odpovědět  +3 11. července 11:26
Avatar
MQ .
Překladatel
Avatar
Odpovídá na tesař.tech
MQ .:11. července 20:22

Ahoj, tuto část jsem nekopíroval já, ale byla přidána při schvalování článku :)

Editováno 11. července 20:24
Odpovědět  +1 11. července 20:22
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
MQ .
Překladatel
Avatar
Odpovídá na Filip Němeček
MQ .:11. července 20:36

Není to špatný nápad, ale upřímně já sám virtual environment nepoužívám, jelikož většinou pracuji v IPython (Jupyter) notebooku v cloudu. Na druhou stranu chápu, že někomu se to může hodit, ale teď pro mě priorita tato sekce na kterou jsem se dlouho těšil až s ní začnu :)

Odpovědět 11. července 20:36
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tesař.tech
David Čápka:12. července 22:34

Ahoj, tuto část jsem do článku vložil já a jedná se jen o malý fragment vysvětlující určitý princip, proto jsem to ani necitoval. Kdybych odstavec parafrázoval, bylo by to kontraproduktivní, kdybych tě citoval, vypadalo by to v článku divně, přidat spoluautora systém neumožňuje. Co bych mohl udělat je přidat tuto informaci pod článek, jestli by to pro tebe bylo takhle ok?

Což je vcelku nekorektní přístup ke sdílení informací.

Jsme na znalostní platformě, kde je asi 7 tisíc článků pro širokou veřejnost, které je nutné neustále aktualizovávat, žijeme z podpory českých uživatelů, ehmmm...., a je s tím vážně hodně, hodně práce. Vzhledem ke vzdělávacímu charakteru projektu mi přijde v pohodě používat na různých místech malé fragmenty z jiných článků odsud bez toho, aby se musely všechny citovat, to pak naopak dost ztěžuje tu něco vůbec dělat...

Editováno 12. července 23:18
Odpovědět 12. července 22:34
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
tesař.tech
Redaktor
Avatar
Odpovídá na David Čápka
tesař.tech:13. července 11:11

Vím, že i s jedním článkem je hodně práce, proto mi nepřijde správné, že je za ni "doceněn" někdo jiný.

Tím že jsi to přidal ty to už dává mnohem větší smysl. Ve skutečnosti bys u článků měl spoluautorovat, takže takto zevnitř je to ok. Z vnějšku však méně.

Pochopitelně je nesmysl citovat každou takovou věc.Odkaz pod článkem, v komentáři (teď už tu je), link přes nějaké klíčové slovo ("obrázek banánu", "banánově exkluzivní"), cokoliv co původní text prováže a bude to win-win.

 
Odpovědět 13. července 11:11
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tesař.tech
David Čápka:19. července 17:18

Chápu, dal jsem tam proklik na článek s info, že je část textu převzatá, snad je to teď ok :)

Odpovědět  +1 19. července 17:18
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.