Zadanie 3
Podúloha: Klasifikácia časových radov
Úloha:
Stiahnite si z odkazu
zdrojový kód. Tento kód obsahuje základné triedy a dáta, s ktorými budete ďalej
pracovať. Dáta sú časové rady cien niektorých crypto symbolov a predikcie o vývoji
ich ceny. Ceny aj predikcie sú vždy pre každý deň od cca 1.10.2023 po 31.10.2025.
Zadanie:
Vašou úlohou je natrénovať agenta (model založený na neurónovej sieti), ktorý
bude riešiť klasifikačnú úlohu, či nasledujúci deň po vstupnej časovej sekvencii
(napr. 7 dní) pôjde cena daného crypto symbolu hore alebo dole. Na riešenie
úlohy použite akýkoľvek model - doprednú sieť, doprednú sieť s reziduálnymi
spojeniami, 1d konvolučnú sieť, LSTM alebo GRU, transformer, atď. Siete nemusia
byť extra veľké a mali by sa dať pohodlne natrénovať aj na CPU. Kto má možnosť
a chce, môže otestovať tréning aj na GPU.
Pokyny:
- V triede Agent budete implementovať funkcie train
a test, ktoré budú obsahovať základný algoritmus pre tréning
a validáciu modelu.
- Do balíka models treba vložiť svoju triedu obsahujúcu model
a ten potom pridať Agentovi.
- Ak chcete pracovať so sekvenčnými dátami, máte pripravený DatasetSequential
prípadne DatasetSequentialAugmented (ktorý robí augmentácie na pôvodnom
datasete a hodí sa na trénovanie). Ak chcete pracovať s dátami ako
s jednorozmerným vstupom, je možné použiť triedu DatasetFlat a jej
augmentovanú verziu. Na prípravu datasetu je už napísaná funkcia
prepare_dataset v triede Agent.
- Dátová množina je rozdelená časovými intervalmi na trénovaciu
(AGENT_TRAIN_INTERVAL) a testovaciu (AGENT_TEST_INTERVAL)
časť, to nemeňte.
- Nemeňte funkciu Agenta (__get_model_state), ktorá vytvára vstupný
vektor pre každý deň.
- V repozitári máte aj súbor requirements.txt, ktorý obsahuje knižnice,
ktoré je nutné nainštalovať k rozbehnutiu zdrojového kódu.
- Navrhnite architektúru a 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.
- Vyhodnoťte model pomocou merania presnosti jeho predikcií na testovacom
intervale. Pokúste sa dosiahnuť čo najlepší výsledok, ideálne nad 60%.
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é opakovať), grafy
z priebehu tréningu (trénovacia a testovacia chyba a presnosť). Na záver
napíšte stručné zhodnotenie, ako úspešné boli 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 PyTorch a TensorFlow, 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).
Pokyny:
- 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.
- 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.
- 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.
- Implementujte pravidlo pre aktualizáciu váh bez momentu a potom aj
s momentom.
- 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.
|