Učení zesílení vs. diferencovatelné programování

Diskutovali jsme o myšlence odlišného programování, kde začleňujeme stávající programy do hlubokých modelů učení. Ale pokud jste výzkumný pracovník, řekněme, auto s vlastním pohonem, co v praxi znamená odlišné programování? Jak to ovlivňuje způsob, jakým vyjadřujeme náš problém, trénujeme náš model, spravujeme náš dataset a v konečném důsledku výsledky, kterých dosahujeme?

Tento článek ukazuje, co může DP přinést k některým jednoduchým, ale klasickým problémům s ovládáním, kde bychom normálně používali Reinforcement Learning (RL). Modely založené na DP se nejen naučí mnohem účinnější strategie řízení než RL, ale také rychleji vycvičí řádové objednávky. Tento kód je k dispozici pro spuštění pro sebe - většinou budou trénovat během několika sekund na jakémkoli notebooku.

Postupujte podle přechodu

Diferenciace způsobuje hluboké učení; vzhledem k funkci y = f (x) y = f (x) použijeme gradient \ frac {dy} {dx} dxdy, abychom zjistili, jak změna xx ovlivní yy. Přes matematické oblečení jsou přechody ve skutečnosti velmi obecným a intuitivním pojmem. Zapomeňte na vzorce, na které jste se museli dívat ve škole; udělejme něco zábavnějšího, jako je házení věcí.

Když házíme věci trebuchetem, naše xx představuje nastavení (řekněme, velikost protiváhy nebo úhel uvolnění) a yy je vzdálenost, kterou projektil urazí před přistáním. Pokud se snažíte zaměřit, gradient vám řekne něco velmi užitečného - zda změna cíle zvětší nebo zmenší vzdálenost. Chcete-li maximalizovat vzdálenost, postupujte podle přechodu.

Dobře, ale jak můžeme získat toto magické číslo? Trik je proces nazývaný algoritmická diferenciace, který dokáže rozlišit nejen jednoduché vzorce, jaké jste se naučili ve škole, ale také programy jakékoli složitosti - jako je náš simulátor trebuchetu. Výsledkem je, že můžeme vzít jednoduchý simulátor, napsaný v Julii a DiffEq, bez hlubokého učení, a získat pro něj gradienty v jediném volání funkce.

# co jsi dělal ve škole
gradient (x -> 3x ^ 2 + 2x + 1, 5) # (32,)
# něco trochu pokročilejšího
gradient ((vítr, úhel, hmotnost) -> Trebuchet.shoot (vítr, úhel, hmotnost),
         -2, 45, 200) # (4,02, -0,99, 0,051)

Teď to máme, udělejme s tím něco zajímavého.

Házení věci

Jednoduchý způsob, jak toho dosáhnout, je zaměřit trebuchet na cíl pomocí gradientů pro jemné doladění úhlu uvolnění; tato věc je běžná pod názvem odhadu parametrů a my jsme se zabývali příklady jako předtím. Můžeme dělat věci zajímavějšími tím, že půjdeme na meta: namísto toho, abychom zaměřili trebuchet na jediný cíl, optimalizujeme neuronovou síť, která může cílit na jakýkoli cíl. Funguje to takto: neuronová síť vyžaduje dva vstupy, cílovou vzdálenost v metrech a aktuální rychlost větru. Síť vyplivne nastavení trebuchetu (hmotnost protiváhy a úhel uvolnění), které se dostanou do simulátoru, který vypočítá dosaženou vzdálenost. Potom porovnáme s naším cílem a backpropagate přes celý řetězec, od začátku do konce, k úpravám hmotnosti sítě. Náš „dataset“ je náhodně vybraná sada cílů a rychlosti větru.

Pěknou vlastností tohoto jednoduchého modelu je, že trénink je rychlý, protože jsme přesně vyjádřili to, co od modelu chceme, zcela odlišným způsobem. Zpočátku to vypadá takto:

Asi po pěti minutách tréninku (na jednom jádru CPU mého notebooku) to vypadá takto:

Pokud to chcete zkusit, zrychlete rychlost větru:

Je to jen o 16 cm, což je asi 0,3%.

Jedná se o nejjednodušší možný kontrolní problém, který používáme hlavně pro ilustrativní účely. Stejné techniky však můžeme aplikovat i pokročilejšími způsoby na klasické problémy RL.

Košíku, setkej se s Polem

Rozeznatelnějším problémem s ovládáním je CartPole, „ahoj svět“ pro učení o posílení. Úkolem je naučit se vyvažovat vzpřímený pól tím, že jeho základnu zasunete doleva nebo doprava. Naše nastavení je velmi podobné případu trebuchet: implementace Julia znamená, že můžeme odměnu získanou prostředím přímo zacházet jako se ztrátou. DP nám umožňuje bezproblémový přechod z modelu bez modelu na model založený na modelu.

Astrutý čtenář si může všimnout zaseknutí. Akční prostor pro cartpole - šťouchnout doleva nebo doprava - je diskrétní, a proto není rozlišitelný. Řešíme to zavedením diferencovatelné diskretizace, definované takto:

\ begin {zarovnané} f (x) & amp; = \ begin {cases} 1 & amp; x \ ge 0 \\ -1 & amp; x < 0 \ end {případech} \\ \ frac {df} {dx} & amp; = 1 \ end {zarovnaný} f (x) dxdf = {1−1 x≥0x <0 = 1

Jinými slovy, donutíme přechod, aby se choval, jako by ff byla identitní funkce. Vzhledem k tomu, jak moc se matematická představa o odlišnosti v ML zneužívá, možná není divu, že zde můžeme podvádět; pro výcvik vše, co potřebujeme, je signál informující náš pseudonáhodný chod kolem parametrového prostoru a zbytek jsou detaily.

Výsledky hovoří samy za sebe. Tam, kde metody RL potřebují trénovat stovky epizod před vyřešením problému, potřebuje model DP pouze 5 epizod, aby bylo možné přesvědčivě zvítězit.

Kyvadlo a pozadí časem

Důležitým cílem RL je zvládnout zpožděnou odměnu, když nám akce nepomůže až do několika kroků v budoucnosti. DP to také umožňuje a velmi známým způsobem: když je prostředí proměnlivé, můžeme agenta skutečně trénovat pomocí backpropagation v čase, stejně jako opakující se síť! V tomto případě se stav prostředí stává „skrytým stavem“, který se mění mezi časovými kroky.

Abychom předvedli tuto techniku, podívali jsme se na prostředí kyvadla, kde je úkolem kyvadlo otáčet, dokud nebude stát vzpřímeně, a udržovat ho vyvážené s minimálním úsilím. To je těžké u modelů RL; po asi 20 epizodách tréninku je problém vyřešen, ale často je cesta k řešení viditelně suboptimální. Naproti tomu BPTT může porazit leaderboard RL v jediné epizodě tréninku. Je poučné sledovat, jak se tato epizoda odehrává; na začátku záznamu je strategie náhodná a model se postupem času zlepšuje. Tempo učení je téměř alarmující.

Přestože model prožívá pouze jednu epizodu, zevšeobecňuje se dobře, aby zvládl jakýkoli počáteční úhel, a má něco docela podobného optimální strategii. Po restartu vypadá model více takto.

To je jen začátek; dostaneme skutečné výhry při použití DP v prostředích, která jsou příliš těžká na to, aby RL vůbec pracovala.

Mapa není teritoriem

Omezení těchto modelů hraček spočívá v tom, že porovnávají simulované tréninkové prostředí s testovacím prostředím; skutečný svět se samozřejmě neliší. V realističtějším modelu nám simulace dává hrubý nástin chování, které je vylepšeno údaji. Tato data informují (řekněme) simulovaný účinek větru, což zase zlepšuje kvalitu gradientů, které simulátor předává ovladači. Modely mohou být dokonce součástí dopředného průchodu řadiče, což mu umožňuje upřesnit jeho předpovědi, aniž by se muselo učit dynamiku systému od nuly. Prozkoumání těchto nových architektur přispěje k vzrušující budoucí práci.

Coda

Hlavní myšlenkou je, že diferencovatelné programování, ve kterém jednoduše píšeme libovolný numerický program a optimalizujeme jej pomocí gradientů, je mocným způsobem, jak přijít s lepšími hlubšími modely a architekturami podobnými učení - zejména pokud máme velkou knihovnu odlišitelných kódů ruka. Popsané modely hraček jsou ve skutečnosti pouze náhledy, ale doufáme, že poskytují intuici pro to, jak lze tyto myšlenky aplikovat realističtěji.

Stejně jako funkční programování zahrnuje uvažování a vyjadřování algoritmů pomocí funkčních vzorů, diferencovatelné programování zahrnuje vyjadřování algoritmů pomocí rozlišitelných vzorců. Mnoho takovýchto návrhových vzorů již bylo vyvinuto komunitou pro hluboké učení, jako například pro řešení problémů s kontrolou nebo sekvencí a strukturovaných dat. Tento příspěvek představil několik nových, a jak pole dozrává, mnoho dalších bude vynalezeno. Výsledné programy pravděpodobně způsobí, že i ty nejpokročilejší současné architektury hlubokého učení budou ve srovnání vypadat hrubě.

Podívejte se na účty githubu pro všechny autory:
Mike Innes - https://github.com/MikeInnes
Neethu Maria Joy - https://github.com/Roboneet
Tejan Karmali - https://github.com/tejank10

Původně zde zveřejněno.

Přečtěte si další články o vědeckých údajích na OpenDataScience.com, včetně výukových programů a průvodců od začátečníků po pokročilé! Přihlaste se k odběru našeho týdenního zpravodaje a každý čtvrtek dostávejte nejnovější zprávy.