1. diel - Úvod a motivácia do programovania neurónových sietí v Pythone
Vitajte u prvej lekcie e-learning kurzu venovanom deep learningu, teda strojovému učenia. Naučíte sa tu všetko od čítania dát až po naprogramovaní vlastnej neurónové siete v Pythone. U kurzu počítam s tým, že poznáte aspoň základy Pythone (stačí syntaxe) a viete vytvoriť triedu.
Motivácia
Keďže vstupujeme do veľmi komplexnej problematiky, v dnešnej lekcii si ju podobne uvedieme a povieme si čo všetko tvorba umelej inteligencie v Pythone zahŕňa.
Štandardné vs. učiaci sa algoritmy
Štandardné algoritmy, ktoré nie sú založené na strojovom učení a prácu s dátami, excelujú na úlohách, ktoré možno ľahko definovať. Zoberme si napr. Úlohu "spracovať objednávku v internetovom obchode". Kód takéhoto programu by obsahoval jednoznačné postupy, napr. Uloženie objednávky do databázy, generovanie údajov do faktúry, obsluhu platobnej brány a ďalšie. Tu nie je moc nad čím premýšľať, jediný problém snáď môže byť nájsť v dnešnej dobe schopného programátora
Ako definujeme banán?
Definujme však iný typ úlohy, napr. Budeme chcieť zistiť, či je na fotografiu banán. Túto úlohu aj časť textu som si vypožičal z tunajšieho článku Deep learning na 3 riadky. Pokiaľ chcete realistickejšie úlohu, môžete si predstaviť, že namiesto banánu detekujeme zbraň a jedná sa o analýzu obrazu z bezpečnostnej kamery. Ako ale definujeme banán?
Eh ... no ... Môžeme začať s tým, že banán je žltý, má istý tvar, veľkosť a textúru. Ani jedna z týchto vlastností sa pre banánu zakaždým rovnaká a už vôbec nie je "banánovo exkluzívne" (napr. Jablko môže byť tiež žlté). Náš algoritmus sa tak môže ľahko mýliť a označiť za banán napr. Kus žltej záhradnej hadice alebo naopak zlyhať pri analýze zhnědlého alebo natočeného banánu. Myslím, že sme už narazili a to sme ešte ani nezačali. Aj v rozpoznávania číslic, ktorých je len 10 a sú oproti objektom všedného sveta jednoduché, sú klasické algoritmy značne nedokonalé.
Možno vás napadlo opýtať sa, ako to vlastne robí človek, že bezpečne pozná, čo je banán, zbraň, prečíta ŠPZ automobilu a dokáže riešiť ďalšie úlohy, kde štandardné programovacie postupy zlyhávajú. Asi by sme spolu došli k úvahe, že človek sa to naučí z dát, ktorá počas života získa.
Dáta
Vedci teda prišli s nápadom napodobniť ľudské myslenie a softvérovo simulovať sieť neurónov, podobnú tej, ktorú máme v hlave my ľudia, len samozrejme oveľa jednoduchšie. Túto sieť potom možno na základe veľkého množstva dát (v našom príklade pochopte dostatočného počtu fotografií rôznych banánov) vytrénovať tak, aby dokázala s vysokou úspešnosťou banán rozpoznať.
Takúto sieť musíme samozrejme naučiť rozpoznať aj iné objekty, aby sa mohla rozhodnúť medzi banánom a alternatívnym prípadom. Pri použití klasifikátora založeného na konvolučná neurónových sieťach je presnosť a rýchlosť algoritmu dokonca lepšie ako u človeka samotného! Klasifikátor máme na mysli funkčnosť, ktorá dokáže rozpoznať daný objekt a teda ho klasifikovať. To je ale však stále len jedna z úloh, ktoré možno strojovým učením riešiť.
Kedy použiť a nepoužiť neurónovou sieť
Dôležité je si uvedomí, že neurónové siete používame na určité typy úloh a ich výsledok má vždy nejakú pravdepodobnosť, aj keď veľmi vysokú. Ak by sme ich použili na úlohy, ktoré je možné jednoducho definovať, bolo by to zas na škodu. Nevýhodou neuronek všeobecne je potreba veľkého množstva dát a výpočtového výkonu pre učiaci fázu.
Dáta sú všetko
V dnešnej dobe sú dáta silným nástrojom, ak sa s nimi naučíme dobre pracovať, dokážeme prakticky všetko. Poďme si vyzdvihnúť ďalšie 2 úspechy AI (umelej inteligencie, anglicky Artifical inteligencia), tentoraz na poli hier:
- Tím OpenAI dokázal poraziť tím profesionálnych hráčov v hre DotA 2 (zápas 5v5)
- Tím DeepMind od Google porazil v hre Go (dosková hra) najlepšieho človeka
"Stroj" porazil človeka, pretože hral toľko hier sám proti sebe a stále sa zlepšovať, že by to človek neodohral ani za niekoľko životov.
Čo všetko AI vie?
To ale stále nie je všetko, ani zďaleka nie! S AI toho možno robiť naozaj veľa a v mnohých odboroch je s týmito algoritmy spojené veľké množstvo peňazí a pozície analytikov big dáta sú veľmi dobre platené, napr. Vo finančníctve.
Uveďme si tu taký zoznam pojmov, stále sa jedná o malý nástrel toho, čo toto mladé a perspektívne odvetvie všetko umožňuje:
- Všeobecné Klasifikácia
predikcia
- Klasifikácia
- predikcia
- Práca s jazykom preklad
Klasifikácia komentárov - pozitívne, neutrálne, negatívne
Klasifikácia udalostí vo svete Na tomto môžeme zarobiť ťažké peniaze, ak budeme vedieť X dní vopred, že nejaké akcie pôjdu dole alebo hore
generovanie textu
- preklad
- Klasifikácia komentárov - pozitívne, neutrálne, negatívne
- Klasifikácia udalostí vo svete Na tomto môžeme zarobiť ťažké peniaze, ak budeme vedieť X dní vopred, že nejaké akcie pôjdu dole alebo hore
- Na tomto môžeme zarobiť ťažké peniaze, ak budeme vedieť X dní vopred, že nejaké akcie pôjdu dole alebo hore
- generovanie textu
- Interakcia s prostredím (napríklad hry) Reinforcement learning Neurónové siete sa učia podobne ako človek, podľa odmeny alebo trestu, príklady úspechov AI v hrách DotA 2 alebo deskovce Go sme si už spomenuli vyššie. odkaz
- Reinforcement learning Neurónové siete sa učia podobne ako človek, podľa odmeny alebo trestu, príklady úspechov AI v hrách DotA 2 alebo deskovce Go sme si už spomenuli vyššie. odkaz
- Neurónové siete sa učia podobne ako človek, podľa odmeny alebo trestu, príklady úspechov AI v hrách DotA 2 alebo deskovce Go sme si už spomenuli vyššie. odkaz
- Práca so zvukom Generovanie hudby a ďalšie
- Generovanie hudby a ďalšie
- Práca s obrazom Klasifikácia obrázku
Detekcia viac objektov na obrázku (+ lokalizácia)
style Transfer Druh umenia, kde sa snažíme ponechať obsah obrázka a zmeniť štýl (napr. Profilovka nakreslená od Picassa) odkaz
Deep Dream Druh umenie, vytvoríme "halucinogénne" obrázok, kde sú zobrazené objekty a vlastnosti, ktoré model pozná, Odkaz
generatívne Model Môžeme vygenerovať unikátny obrázok podobný tým, ktorý chceme. Napr. urobiť z koňa zebru a naopak - Odkaz. Alebo urobiť z letného obrázku zimný.
Text to Image - Odkaz
Rozpoznanie osôb podľa tváre
Detekcia kľúčových bodov na tvári
Odzeranie z pier
Urobiť z low res obrázku high res, Odkaz
odstránenie šumu
- Klasifikácia obrázku
- Detekcia viac objektov na obrázku (+ lokalizácia)
- style Transfer Druh umenia, kde sa snažíme ponechať obsah obrázka a zmeniť štýl (napr. Profilovka nakreslená od Picassa) odkaz
- Druh umenia, kde sa snažíme ponechať obsah obrázka a zmeniť štýl (napr. Profilovka nakreslená od Picassa) odkaz
- odkaz
- Deep Dream Druh umenie, vytvoríme "halucinogénne" obrázok, kde sú zobrazené objekty a vlastnosti, ktoré model pozná, Odkaz
- Druh umenie, vytvoríme "halucinogénne" obrázok, kde sú zobrazené objekty a vlastnosti, ktoré model pozná, Odkaz
- generatívne Model Môžeme vygenerovať unikátny obrázok podobný tým,
ktorý chceme. Napr. urobiť z koňa zebru a naopak - Odkaz.
Alebo urobiť z letného obrázku zimný.
Text to Image - Odkaz
- Môžeme vygenerovať unikátny obrázok podobný tým, ktorý chceme. Napr. urobiť z koňa zebru a naopak - Odkaz. Alebo urobiť z letného obrázku zimný.
- Text to Image - Odkaz
- Rozpoznanie osôb podľa tváre
- Detekcia kľúčových bodov na tvári
- Odzeranie z pier
- Urobiť z low res obrázku high res, Odkaz
- odstránenie šumu
- Dokresľovanie obrázkov / rekonštrukcia
Od každého niečo si tu určite ukážeme, ale najskôr sa musíme ku všetkému postupne dostať. V tomto kurze je (a bude) motivácia extrémne dôležitá, preto sa vás budem snažiť motivovať a čas od času informovať o dianí vo svete AI Mne osobne trvalo viac ako 7 mesiacov, než som pochopil princípy a zvládol vytvoriť niečo, čomu som naozaj rozumel.
Čo máme pred sebou
Máme toho naozaj veľa, je kľúčové vybrať si ten správny začiatok a nikam neponáhľať. Kľúčové body, ktoré máme pred sebou, sú:
- Lineárne a polynomiálnej regresia
- K-Najbližších susedov (K-Nearest neighbours)
- Rozhodovací stromy (Decision Trees), Les rozhodovacích stromov (Random forest)
- K-Means clustering (Rozdelenie dát do K skupín)
- SVM (Support Vector Machine)
- Perceptron
- Multilayer perceptron (Viacvrstvový perceptron)
- neurónové siete
- Reinforcement learning (učenie na základe interakcie s prostredím)
- CNN (Convolutional Neural Network - Konvolučný neurónové siete)
- RNN (Recurrent Neural Network - Opakujúce sa neurónová sieť)
Je tiež dôležité vedieť o novinkách, preto si občas prečítajte / pozrú niečo na nasledujúcich weboch:
- Medium
- Towards Data Science
- YouTube Two Minute Papers - predstavuje novinky (papers, papier je väčšinou PDF popisujúci spôsoby, architektúru modelu / neurónové siete a výsledky práce - niečo ako seminárne práce na univerzite)
- Two Minute Papers - predstavuje novinky (papers, papier je väčšinou PDF popisujúci spôsoby, architektúru modelu / neurónové siete a výsledky práce - niečo ako seminárne práce na univerzite)
- Reddit - súvisiace subreddity (Machine Learning, Data Science, Computer Vision, Deep Learning, ...)
S čím budeme pracovať
Budeme používať pomerne dosť nástrojov, pretože každá činnosť si žiada ten správny. Uveďme si aspoň tie kľúčové, ktoré budú po dobu tohto kurzu náš denný chlieb (samozrejme záleží na činnosti).
- NumPy - knižnica na pre prácu s N-dimenzionálnymi poli - stavia na nej väčšina knižníc z tohto "odboru"
- Pandas - knižnica pre prácu s dátami
- Matplotlib - knižnica pre vizualizáciu
- Scikit-Learn - knižnica pre strojové učenie - obsahuje už implementované algoritmy
- OpenCV - knižnica pre prácu s obrazom
- PyTorch / Tensorflow - framework pre deep learning / neurónové siete Framework budeme používať už z jedného prostého dôvodu a tým je uľahčenie práce, ale tým najdôležitejším dôvodom je optimalizácia. Tieto frameworky sú robené pre obrovské množstvo paralelných výpočtu na Tensor (čo je Tensor sa dozviete až to bude potrebné), teda sú písané v nízkom jazyku ako CUDA (výpočtová framework pre GPU od NVIDIA) a C ++.
- Framework budeme používať už z jedného prostého dôvodu a tým je uľahčenie práce, ale tým najdôležitejším dôvodom je optimalizácia. Tieto frameworky sú robené pre obrovské množstvo paralelných výpočtu na Tensor (čo je Tensor sa dozviete až to bude potrebné), teda sú písané v nízkom jazyku ako CUDA (výpočtová framework pre GPU od NVIDIA) a C ++.
Pracovať s týmito nástrojmi sa budeme učiť podľa potreby v našich projektoch, po pár lekciách sa vám to dostane pod kožu rovnako ako keď som začínal aj ja sám
Inštalácia
Osobne rád používam knižnicu / framework PyTorch (na neurónové siete), ale v produkcii sa väčšinou používa framework Tensorflow od Googlu, ktorý možno bez problémov používať aj na mobile. Vo frameworkoch je rozdiel ako fungujú, ale to nás zatiaľ nemusí trápiť a všetko sa dozviete ďalej v kurze. Až príde čas, bol by som rád, aby ste o frameworku / knižnici, ktorý budeme používať na neurónové siete, rozhodli vy sami
Najskôr je potrebné nainštalovať si Python, silne odporúčam distribúciu MiniConda / Anaconda, pretože nikomu neprajem inštalovať OpenCV ručne. MiniConda je podobná distribúcia ako Anaconda, líšia sa v tom, že Anaconda má predinštalovaných asi 150 knižníc pre prácu s dátami (čo si myslím, že je zbytočné).
Po inštalácii Conda distribúcia spustíme Anaconda prompt
(Kláves Win a použite vyhľadávanie). Unixákům stačí len
otvoriť nový terminál. Cez Anaconda prompt
budeme my Windowsáci
spúšťať naše skripty.
Ak to niekomu nevyhovuje, môže si Python pridať do PATH
a v
príkazovom riadku (CMD) použiť príkaz conda init cmd.exe
. V
novo otvorenom CMD následne použiť conda activate
pre aktiváciu
prostredie (potom už stačí iba tento príkaz pri spustení CMD).
Ďalej nainštalujeme knižnice, ktoré budeme čoskoro potrebovať (zvyšok doinštalujeme podľa potreby) a to nasledujúcimi príkazy:
pip install numpy
pip install matplotlib
pip install pandas
pip install sklearn
- knižnica Scikit-Learn
Ak vám príkazy nefungujú, napr. Používate klasickú
distribúciu Pythone, použite variantu py -m pip install
.
Pokračovať budeme v nasledujúcej lekcii, Neurónové siete v Pythone - Prostredie Jupyter .