Popis předmětu - B0B36JUL

Přehled studia | Přehled oborů | Všechny skupiny předmětů | Všechny předměty | Seznam rolí | Vysvětlivky               Návod
B0B36JUL Julia pro optimalizaci a učení
Role:  Rozsah výuky:1P+3C
Katedra:13136 Jazyk výuky:CS
Garanti:Adam L. Zakončení:KZ
Přednášející:Adam L., Mácha V. Kreditů:4
Cvičící:Adam L., Mácha V., Mašková M. Semestr:Z

Webová stránka:

https://juliateachingctu.github.io/Julia-for-Optimization-and-Learning/stable/

Anotace:

Programovací jazyk Julia je stále více používán komunitou pro jeho vhodnost v oblasti numerických výpočtů. Předmět se skládá ze dvou částí. První část prezentuje jazyk Julia a ukáže jeho základy. Druhá část nejdřív ukáže základní ideu matematické optimalizace a aplikuje ji ve strojovém učení, statistice a optimálním řízení diferenciálních rovnic. Zatímco první část ukazuje jednotlivé koncepty Julie, druhá část je kombinuje do delších logických sekcí kódu. Jednotlivé aplikace jsou vždy vysvětleny teoreticky, jednoduché funkce jsou naprogramovány ručně a poté se ukážou balíčky, kde je daný kód již hotov. Předmět je zakončen závěrečným projektem. Student si může zvolit téma projektu, případně si vyzkoušet práci s reálnými daty výběrem soutěže z Kaggle. Tento předmět je také součástí meziuniverzitního programu prg.ai Minor. Ten spojuje to nejlepší z výuky AI v Praze s cílem poskytnout studujícím hlubší a širší vhled do oboru umělé inteligence. Více informací je k dispozici na webu https://prg.ai/minor.

Cíle studia:

Cíl předmětu je naučit studenty programovat v Julii. Zároveň ukážeme využití Julie v aplikovaných oborech.

Obsah:

Předmět se skládá ze dvou částí. První část (7 lekcí) prezentuje jazyk Julia, ukáže jeho základy a udělá porovnání s běžně používanými jazyky. Zatímco první část ukazuje samostatně jednotlivé koncepty, druhá část (6 lekcí) kombinuje tyto koncepty dohromady do delších logických sekcí kódu. Příklady jsou postavené na teorii optimalizace, jejíž použití ukazujeme ve strojovém učení, statistice a optimálním řízení diferenciálních rovnic. Jednotlivé aplikace jsou vždy vysvětleny teoreticky, jednoduché funkce jsou naprogramovány ručně a poté se ukážou balíčky, kde je daný kód již hotov. Doufáme, že tento přístup povede nejen k schopnosti pracovat s existujícími balíky, ale i k lepšímu porozumění jak tyto balíky fungují. Ačkoli je druhá část zaměřená na aplikace, v jejím průběhu ukazujeme naprostou většinu věcí probíraných v první části. Tím si studenti procvičí Julii na zajímavých aplikacích. Důraz je též kladen na práci s prostředími. Zároveň se druhá část snaží ukazovat spojitosti mezi aplikacemi. Myslíme, že toto propojení je pro studenty důležité. Ačkoli se kusy druhé části vyučují v mnoha předmětech, jsme přesvědčeni o tom, že v mnoha případech ukazujeme rozšíření, které v přednáškách nezazní. Věříme, že náš kurz bude pro mnohé tyto předměty vhodné doplnění. První lekce je motivační. Ukáže očekávané znalosti po úspěšném absolvování kurzu. Zároveň ukáže výhody a nevýhody Julie a porovná ji s jinými programovacími jazyky jako Python, Matlab, R a C. Následujících šest lekcí prezentuje Julii jakožto programovací jazyk. První tři lekce jsou standardní. Probíraná látka jsou proměnné, datové struktury, podmínky, cykly, funkce či metody. Čtvrtá lekce ukazuje užitečné baličky. Poslední dvě lekce jsou specifické vlastnosti Julie. Jedná se například o typový systém, generické programování či správu prostředí. Posledních šest lekcí jsou aplikační. První lekce ukazuje optimalizační problémy a ukazuje základní gradientní metody pro optimalizaci s i bez omezení. Druhá lekce prezentuje lineární a logistickou regresi jako optimalizační problémy a stejně tak další dvě lekce pro hluboké sítě. Kromě trénování tyto lekce prezentují přípravu dat, jejich rozdělení či vizualizaci. Pátá lekce je věnována statistice a šestá pak diferenciálním rovnicím a roli optimalizace v optimálním řízení diferenciálních rovnic.

Osnovy přednášek:

8. Teoretická příprava na úlohu optimalizace. Podmínky optimality pro optimalizaci s a bez omezení.
9. Teoretická příprava na úlohy lineární regrese a klasifikace. Řešení v uzavřené formě a iterační metody.
10. Teoretická příprava na úlohu neuronových sítí. Typy neuronových sítí. Základní vrstvy. Overfitting.
11. Konvoluční vrstvy, struktura neuronových sítí, stochastický gradient descent.
12. Vybrané partie statistiky. Regularizovaná lineární regrese. Spektrální rozklad. Monte Carlo sampling. Testování hypotéz. Zobecněné lineární modely.
13. Teoretická příprava na úlohu obyčejných diferenciálních rovnic. Souvislost se spektrálním rozkladem. Optimální řízení jakožto spojení ODE a optimalizace.

Osnovy cvičení:

1. Úvod do Julie, výhody a nevýhody oproti jazykům Matlab, Python, R. Deklarace proměnných, základní numerické typy, numerické a logické operátory. Práce s textovými řetězci.
2. Vektory, matice a vícerozměrná pole: základní vlastnosti, indexování, aplikace funkcí po prvcích. Další datové struktury a jejich vlastnosti: Tuple, NamedTuple, Dict.
3. Příkazy if-elseif-else a ternární operátor. Jednoduché a vnořené for/while smyčky. Základní použití iterátorů a generátorů. Přehled nejpoužívanějších iterátorů: zip, eachcol, eachrow, enumerate. Lokální pracovní prostor ve smyčkách (soft local scope).
4. Deklarace funkce, povinné argumenty, poziční argumenty a argumenty klíčových slov. Funkce jako soubor metod. Volání metod podle počtu argumentů a jejich typu (multiple-dispatch). Lokální a globální pracovní prostor.
5. Přehled nejpoužívanějších standardních knihoven: LinearAgebra, Statistics, Random. Užitečné balíčky: Plots.jl pro vytváření grafů, DataFrames.jl pro práci s tabulkovými daty. Balíčky pro interakci s dalšími jazyky: PyCall, RCall.
6. Složené typy a vytváření logické hierarchie pomocí abstraktních typů. Parametrické typy. Vnitřní a vnější konstruktory. Definice specializovaných metod pro složené a abstraktní typy.
7. Organizace kódu do skriptů a modulů. Importování funkcí a rozšiřování již existujícího kódu. Organizace nainstalovaných balíčků do separátních prostředí. Vytvoření Julia balíčku.
8. Vizualizace gradientu. Metoda gradientního sestupu a výběr délky kroku. Projektované gradienty.
9. Příprava a vizualizace dat. Trénování lineární a logistické regrese. Predikce.
10. Příprava dat. Implementace jednoduché neuronové sítě včetně vypočtení gradientu a trénování.
11. Vytvoření neuronových sítí pomocí balíku Flux.jl. Práce na GPU.
12. Implementace LASSO a ridge regrese dle iteračních metod pro optimalizaci. Analýza nutného počtu vzorků pro dobrou kvalitu aproximace. Balíky Distributions.jl, HypothesisTests.jl a GLM.jl.
13. Vlastnoruční implementace vlnové rovnice. Balík ODE.jl.

Literatura:

1. Online skripta https://bit.ly/JuliaML
2. Julia documentation. https://docs.julialang.org/en/v1/manual/documentation/index.html
3. Kochenderfer, M. J. and Wheeler, T. A. Algorithms for optimization. MIT Press, 2019. https://algorithmsbook.com/optimization/
4. Lauwens, B. and Downey, A. B. Think Julia: how to think like a computer scientist. O'Reilly Media, 2019. https://benlauwens.github.io/ThinkJulia.jl/latest/book.html
5. Goodfellow, I. and Bengio, Y. and Courville, A. Deep Learning. MIT Press, 2016. https://www.deeplearningbook.org/

Požadavky:

Předmět předpokládá pouze základy programování a lineární algebry.

Klíčová slova:

Julia, programování, optimalizace, strojové učení.

Předmět je zahrnut do těchto studijních plánů:

Plán Obor Role Dop. semestr


Stránka vytvořena 17.7.2024 15:51:02, semestry: Z/2023-4, L/2024-5, L/2023-4, Z/2024-5, připomínky k informační náplni zasílejte správci studijních plánů Návrh a realizace: I. Halaška (K336), J. Novák (K336)