⚙️ Ovládání
🦊 Chaser Odměny
🏃 Evader Odměny
🛡️ Interakce se štítem
💡 Chaser se učí pronásledovat a obcházet překážky.
OpenTechLab Jablonec nad Nisou · Science Micro Elementary School
Evader (zelený) se učí unikat Chaserovi (oranžový) pomocí hlubokého Q-learningu. Může chytit a přenášet žlutý štít jako ochranu.
Stavy: Diskrétní (mřížka)
Paměť: Tabulka
Limit: Malé prostředí
Stavy: Spojité (X,Y, rotace)
Paměť: Neuronová síť
Limit: Vyžaduje trénink
Stavy: Komplexní
Paměť: Strategie (Policy)
Limit: Výpočetně náročné
V předchozím bludišti (10×10) jsme měli jen 100 stavů. To se do tabulky vejde. Zde se ale agenti pohybují ve spojitém prostoru. Jejich souřadnice může být 12.543 nebo 3.141.
Počet možných pozic je nekonečný. Tabulka by „vybuchla“. Proto používáme neuronovou síť (již dobře známou MLP), která se neučí nazpaměť každou pozici, ale pochopí obecná pravidla (např. "když je oranžový agent vlevo, utíkej doprava").
💡 Síť funguje jako "komprese" zkušeností. Místo miliard čísel v tabulce máme jen tisíce vah v síti.
DQN kombinuje Q-Learning s hlubokými neuronovými sítěmi. Místo hledání v tabulce se vstup (co agent vidí) pošle do sítě. Síť pak pro každou možnou akci odhadne její kvalitu (Q-hodnotu).
Trénovat síť na datech, jak přicházejí (sekvenčně), je nestabilní, protože spolu souvisí. DQN si ukládá zážitky do "bufferu" a pak z něj náhodně vybírá vzorky. Tím se učí z pestré směsice minulosti i přítomnosti.
Učit se střílet na pohybující se terč je těžké. Target Network je kopie hlavní sítě, která se mění jen pomalu. Poskytuje stabilní cíl pro učení.
V této simulaci se neučí jen jeden agent proti statickému prostředí, ale dva agenti proti sobě. To vytváří fenomén zvaný Self-Play nebo Adversarial Learning.
Když se Chaser naučí lépe chytat, prostředí se pro Evadera stane těžším. Evader se musí zlepšit (např. začít používat štít), aby přežil. Tím se zase prostředí stane těžším pro Chasera. Navzájem se tak "tlačí" k lepším strategiím.
Pro jednoho agenta není svět stabilní – mění se chováním toho druhého. To, co fungovalo včera (běžet rovně), dnes už fungovat nemusí (protože Chaser už umí nadbíhat). To je pro AI mnohem těžší výzva než statické bludiště.
Odměny jsou jediný způsob, jak agentu sdělit, co chceme. Špatně navržené odměny = špatně naučené chování nebo nefunkční projekt!
"Vidím zeď. Myslím, že jít doprava je bezpečné."
"Au! Narazil jsem. Dostal jsem trest."
"Musím přepsat mozek: Jít doprava u zdi = špatně."
Agent se nerozhoduje jen podle momentální nálady. Počítá:
"Stojí mi ten bonbon teď za to, že mě za chvíli chytí?"
Učení nastává jen tehdy, když se agent splete. Pokud čekal odměnu a dostal facku, vznikne velká chyba (Loss). To je impulz ke změně.
Příklad: Agent čekal +10 bodů. Dostal -50 (Láva).
Rozdíl je obrovský (-60). Mozek dostane silný signál: "Tohle už nikdy nedělej!"
Vzpomeňte na perceptron simulátor a jak jsme ho učili nastavením jeho vah. Když agent udělá chybu, algoritmus se vrátí v čase a upraví váhy - tím řekne neuronům: "Ty jsi směru doprava přiřadil největší pravděpodobnost', a byla to chyba. Příště tento směr preferuj méně."
Klíčové části kódu, které dělají z "hloupé" sítě inteligentního agenta.
Agent si ukládá každou zkušenost (Stav, Akce, Odměna, NovýStav) do pole. Netrénuje se hned, ale
později náhodně vybírá vzorky.
class ReplayBuffer {
push(state, action, reward, nextState, done) {
if (this.buffer.length >= this.maxSize) {
this.buffer.shift(); // Zahodit nejstarší
}
this.buffer.push({s, a, r, ns, done});
}
sample(batchSize) {
// Náhodný výběr pro trénink (rozbíjí korelaci)
return randomSubset(this.buffer, batchSize);
}
}
Pro každý vzorek z paměti vypočítáme, jaká měla být Q-hodnota (Target) a upravíme síť tak, aby se k ní přiblížila.
function train(batch) {
batch.forEach(exp => {
// 1. Předpověď sítě (co si myslí teď)
let currentQ = net.forward(exp.state);
// 2. Výpočet cíle (Bellmanova rovnice)
let maxNextQ = targetNet.forward(exp.nextState).max();
let target = exp.reward + GAMMA * maxNextQ;
// 3. Chyba a učení (Backprop)
let loss = Math.pow(target - currentQ[exp.action], 2);
net.backward(target, exp.action);
});
}
Abychom "nestříleli na pohyblivý terč", používáme pro odhad budoucnosti kopii sítě, kterou aktualizujeme jen občas.
// Každých X kroků zkopírujeme mozek do cílové sítě
if (steps % TARGET_UPDATE_FREQ === 0) {
learningNet.copyTo(targetNet);
console.log("Target Network Updated! 🎯");
}
Zatímco klasický Q-Learning řeší "tabulkové problémy", DQN řeší vidění, fyziku a strategii. Zde jsou oblasti, kde hluboké sítě dominují:
Prvním velkým úspěchem DQN bylo hraní Atari her jen z pixelů obrazovky. Bez znalosti pravidel se agent naučil hrát lépe než lidé. (DeepMind, 2013)
Google používá DQN k řízení chlazení v datacentrech. Síť analyzuje tisíce senzorů a snižuje spotřebu energie na chlazení o 40 %.
Trénink robotů ve virtuálním prostředí (jako je toto), kde se naučí chodit a uchopovat, a následný přenos do reality (Sim2Real).
Rozhodování na chaotických křižovatkách, kde je nekonečno možností (pozice aut, chodců). Tabulka by to nezvládla, síť se naučí "intuici".
Stejně jako Google optimalizuje chlazení na základě teploty a zátěže, náš Evader optimalizuje pohyb na základě vzdáleností radarů a úhlů. Princip (Senzory → Síť → Akce) je identický.