Logo ČVUT
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE
STUDIJNÍ PLÁNY
2024/2025

Julia pro optimalizaci a učení

Přihlášení do KOSu pro zápis předmětu Zobrazit rozvrh
Kód Zakončení Kredity Rozsah Jazyk výuky
B0B36JUL KZ 4 1P+3C česky
Garant předmětu:
Milan Papež
Přednášející:
Václav Mácha, Milan Papež
Cvičící:
Václav Mácha, Michaela Mašková, Milan Papež
Předmět zajišťuje:
katedra počítačů
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.

Požadavky:

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

Osnova 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.

Osnova 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.

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.

Studijní materiály:

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/

Poznámka:
Další informace:
https://juliateachingctu.github.io/Julia-for-Optimization-and-Learning/stable/
Rozvrh na zimní semestr 2024/2025:
06:00–08:0008:00–10:0010:00–12:0012:00–14:0014:00–16:0016:00–18:0018:00–20:0020:00–22:0022:00–24:00
Po
Út
St
Čt
místnost KN:E-328
Mácha V.
09:15–12:30
(přednášková par. 1
paralelka 101)

Karlovo nám.
Bourací učebna
místnost KN:E-310
Mašková M.
09:15–12:30
(přednášková par. 1
paralelka 102)

Karlovo nám.
Lab K310 Linux
místnost KN:E-126
Adam L.
09:15–10:45
(přednášková par. 1)
Karlovo nám.
Trnkova posluchárna K5
místnost KN:E-328
Mácha V.
11:00–12:30
(přednášková par. 1
paralelka 101)

Karlovo nám.
Bourací učebna
místnost KN:E-310
Mašková M.
11:00–12:30
(přednášková par. 1
paralelka 102)

Karlovo nám.
Lab K310 Linux

Rozvrh na letní semestr 2024/2025:
Rozvrh není připraven
Předmět je součástí následujících studijních plánů:
Platnost dat k 21. 11. 2024
Aktualizace výše uvedených informací naleznete na adrese https://bilakniha.cvut.cz/cs/predmet6985806.html