Obsah
Autograd (Automatická diferenciace)
Autograd (z anglického Automatic Gradient) je klíčový softwarový engine pro automatickou diferenciaci. Tvoří samotné srdce moderních frameworků pro hluboké učení (deep learning), jako jsou PyTorch, JAX, TensorFlow (kde funguje pod názvem GradientTape) nebo historicky MXNet.
Jeho úkolem je na pozadí sledovat všechny matematické operace prováděné s daty a automaticky vypočítat jejich derivace (gradienty). Bez Autogradu by výzkumníci a programátoři museli složité parciální derivace pro trénování neuronových sítí počítat a programovat ručně.
Proč AI potřebuje Autograd?
Aby se neuronová síť něco naučila (např. generovat vektory pro Weaviate nebo Milvus), musí projít procesem zvaným zpětné šíření chyby (Backpropagation).
Algoritmus potřebuje zjistit, jak moc každý jednotlivý parametr (váha) v síti přispěl k celkové chybě výsledku. K tomu využívá gradient (směrnici tečny), který mu ukáže, jakým směrem a o kolik má váhu upravit, aby příště byla chyba menší.
Historicky se derivace řešily třemi způsoby, než se plně prosadil přístup Autogradu:
- Ruční analytický výpočet: Extrémně náchylné na lidskou chybu a pro moderní sítě s miliardami parametrů naprosto neproveditelné.
- Numerická diferenciace: Zkoušení malých změn (metoda konečných diferencí). Je to velmi pomalé a pro reálné trénování nepoužitelné.
- Symbolická diferenciace: Program se snaží vypsat vzorec derivace (jako Mathematica). U dlouhých algoritmů však vzorce neúměrně narůstají (tzv. expression swell).
Automatická diferenciace (Autograd) to řeší jinak: nesnaží se najít jeden obří matematický vzorec. Místo toho využívá řetízkové pravidlo (Chain rule) z diferenciálního počtu a počítá gradient krok za krokem z elementárních operací (sčítání, násobení, sinus, atd.), které už má předprogramované.
Jak funguje výpočetní graf
Autograd obvykle funguje ve dvou fázích, během kterých dynamicky staví tzv. Orientovaný acyklický graf (DAG):
1. Dopředný průchod (Forward Pass)
Když do neuronové sítě pošlete data (např. obrázek), Autograd bedlivě sleduje každý výpočetní krok. Pro každou operaci si uloží:
- Výstupní hodnotu (výsledek operace).
- Odkaz na funkci, která umí tuto konkrétní operaci derivovat (tzv. grad_fn).
2. Zpětný průchod (Backward Pass)
Jakmile síť vyhodnotí chybu (Loss), vývojář zavolá jedinou metodu (např. v PyTorchu .backward()). Autograd vezme graf, který si během dopředného průchodu postavil, a projde ho pozpátku – od konce (chyby) až na začátek (k vahám). Pomocí řetízkového pravidla bleskově vynásobí lokální derivace a uloží hotové gradienty přímo k parametrům sítě.
Ukázka kódu (PyTorch)
Díky Autogradu je složitá matematika zredukována na pouhé nastavení příznaku requires_grad=True u proměnných, které chceme trénovat. Následující ukázka ukazuje nejjednodušší možný příklad v jazyce Python (za použití frameworku PyTorch):
import torch # 1. Definujeme tenzor (číslo 2.0). # requires_grad=True říká Autogradu: "Sleduj, co se s tímto číslem bude dít." x = torch.tensor(2.0, requires_grad=True) # 2. Provedeme dopředný průchod (matematickou operaci) # Rovnice: y = 3x^2 + x y = 3 * x**2 + x # 3. Spustíme zpětný průchod (Autograd spočítá derivace) y.backward() # 4. Vypíšeme výsledek # Analytická derivace rovnice y = 3x^2 + x je: dy/dx = 6x + 1 # Pro x = 2 je výsledek: 6(2) + 1 = 13. print(x.grad) # Výstup: tensor(13.)
Při pohledu na kód je vidět, že vývojář nemusel rovnici derivovat ručně – Autograd pochopil, že provedl mocninu, násobení a sčítání, zřetězil jejich lokální derivace a vyplivl přesný výsledek.
Dynamický vs. Statický graf
Frameworky se historicky dělily podle toho, jak Autograd graf tvořil:
- Define-and-Run (Statický graf): (např. rané TensorFlow). Graf operací se musel přesně nadefinovat předem a pak do něj jen „tekla“ data. Bylo to rychlejší, ale špatně se ladily chyby.
- Define-by-Run (Dynamický graf): (např. PyTorch). Graf se staví za běhu programu. Pokaždé, když proběhne výpočet, staví se od znova. To dává vývojářům obrovskou flexibilitu používat standardní podmínky (IF) a cykly (FOR) z jazyka Python přímo uvnitř neuronových sítí. Tento přístup v průmyslu nakonec zcela zvítězil.
