Zadanie 3a

Podúloha: MNIST klasifikátor

Úloha:

Vytvoríte neurónovú sieť na klasifikáciu ručne písaných číslic z dátového súboru MNIST. Súbor údajov pozostáva zo 60 000 obrázkov na trénovanie a 10 000 obrázkov na testovanie, pričom každý obrázok je v odtieňoch sivej, veľkosti 28 x 28 a reprezentuje jednu číslicu od 0 do 9.

Zadanie:

Na riešenie úlohy použite doprednú neurónovú sieť (viacvrstvový perceptrón) a natrénujte ju pomocou algoritmov SGD, SGD s momentom a ADAM. Okrem trénovacej a testovacej chyby odmerajte aj presnosť modelu (t. j. koľkokrát model predikoval správnu triedu na testovacej množine). Model je možné natrénovať s výslednou presnosťou väčšou ako 97%. V úlohe určite použite knižnicu PyTorch (stačí verzia pre CPU), iné knižnice podľa svojho uváženia.

Náčrt modelu:

  1. Načítajte dataset (je voľne dostupný v knižnici PyTorch), rozdeľte ho na trénovaciu a testovaciu množinu.
  2. Dáta je vhodné predspracovať pomocou normalizácie (hodnoty pixelov budú v intervale 0 až 1), cieľové hodnoty môžete zakódovať pomocou one-hot kódu. Záleží akú chybovú funkciu si zvolíte.
  3. Navrhnite hyperparametre modelu - počet vrstiev a ich veľkosti, zvoľte si vhodné aktivačné funkcie, nastavte rýchlosť učenia a veľkosť dávky (batch) pre optimalizačný algoritmus.
  4. Postupne vyskúšajte všetky tri optimalizačné algoritmy spomenuté v zadaní. Trénujte model vždy rovnaký počet epoch, aby ich bolo možné porovnať.

Dokumentácia:

Dokumentácia má obsahovať popis architektúry a tabuľku hyperparametrov (experiment popíšte tak, aby ho bolo na základe textu možné zopakovať), grafy z priebehu tréningu (trénovacia a testovacia chyba) a tiež vývoj presnosti (na testovacej množine) modelu počas tréningu. Vyberte najlepší model a vyhodnoťte ho pomocou confusion matrix pre každé číslo, ktoré pripojíte do dokumentácie. Na záver napíšte stručné zhodnotenie, ako úspešné boli optimalizačné algoritmy a architektúry, ktoré ste vyskúšali.


Podúloha: Backpropagation algoritmus

Úloha:

V tejto úlohe budete implementovať plne funkčný algoritmus backpropagation, ktorý je kľúčovým komponentom tréningu neurónovej siete. Umožňuje jej učiť sa pomocou minimalizácie zadanej chybovej funkcie. Treba implementovať doprednú aj spätnú časť pre jednotlivé operátory a funkcie, ako aj aktualizácie parametrov siete. Algoritmus overíte natrénovaním jednoduchej doprednej neurónovej siete (viacvrstvového perceptrónu).

Zadanie:

Na riešenie úlohy použite knižnicu NumPy pre maticové a vektorové operácie. Použitie knižníc ako PyTorchTensorFlow, ktoré obsahujú autograd je zakázané. Implementujte modulárnu architektúru, v ktorej bude možné jednotlivé moduly reťaziť. Implementácia bude obsahovať lineárnu vrstvu, aktivačnú funkciu sigmoid, tanh, relu a chybovú funkciu MSE (mean squared error).

Náčrt modelu:

  1. Pre validáciu algoritmu použite XOR problém, použite dvojvrstvovú sieť, ktorá bude mať na skrytej vrstve 4 neuróny, na výstupnej vrstve 1 neurón a trénovať sa bude pomocou MSE chybovej funkcie. Rýchlosť učenia môže byť 0.1 až 0.01 a počet epoch by mal stačiť okolo 500.
  2. Najskôr implementujte dopredný smer pre jednotlivé moduly a spojte ich do jedného modelu (zoznam modulov), ktorý vám zo vstupných údajov vráti výstup.
  3. Začnite od MSE funkcie a pre každý modul spočítajte jeho deriváciu a implementujte spätný smer. Dajte si pozor, lebo pri počítaní derivácie je potrebné udržiavať aj niektoré výsledky z dopredného smeru. Moduly môžu mať svoj stav, alebo môžu byť aj bezstavové a výsledky môžu byť odložené niekde inde. To ponechávame na vašej voľbe.
  4. Implementujte pravidlo pre aktualizáciu váh bez momentu a potom aj s momentom.
  5. Volanie modelu by malo byť jednoduché, pre dopredný smer model.forward(vstup) a pre spätný smer model.backward(chyba) a následne volanie aktualizácie parametrov (či už to bude implementovať model, alebo iná samostatná trieda je opäť na vás).

Dokumentácia:

Dokumentácia má obsahovať jednoduchý popis vašej implementácie algoritmu backpropagation. Vyskúšajte sieť s 1 a 2 skrytými vrstvami pre problémy AND, OR a XOR, k dokumentácii priložte grafy z priebehu tréningu (trénovacia chyba). Vyskúšajte rôzne nastavenia tréningu s momentom a bez momentu a aspoň 2 hodnoty rýchlosti učenia pre problém XOR.