Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

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áme s tím, že znáte alespoň základy Pythonu (stačí syntaxe) a umíte vytvořit třídu.

Umělá inteligence v Pythonu - Neuronové sítě - Základy

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íť

Důležité je si uvědomit, ž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 - Neuronové sítě - Základy

"Stroj" porazil člověka, protože hrál tolik her sám proti sobě a pořád se zlepšoval, ž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). Odkaz
    • 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 koně 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.

V další lekci, Neuronové sítě v Pythonu - Prostředí Jupyter, si představíme prostředí Jupyter notebook pro Python, ve kterém budeme naše neuronové sítě programovat.


 

Všechny články v sekci
Neuronové sítě - Základy
Přeskočit článek
(nedoporučujeme)
Neuronové sítě v Pythonu - Prostředí Jupyter
Článek pro vás napsal MQ .
Avatar
Uživatelské hodnocení:
92 hlasů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity