🧠 DQN – Deep Q-Network

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.

🔗 Reinforcement Learning – Evoluce

📚 Q-Table (Klasika)

Stavy: Diskrétní (mřížka)
Paměť: Tabulka
Limit: Malé prostředí

🧠 Deep Q-Network (DQN)

Stavy: Spojité (X,Y, rotace)
Paměť: Neuronová síť
Limit: Vyžaduje trénink

🤖 Policy Gradient (PPO)

Stavy: Komplexní
Paměť: Strategie (Policy)
Limit: Výpočetně náročné

📊 Proč neuronová síť, ne tabulka?

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").

Srovnání přístupů
Tabulka
Přesná pro malé světy
Neuronová síť
Aproximace pro velké světy

💡 Síť funguje jako "komprese" zkušeností. Místo miliard čísel v tabulce máme jen tisíce vah v síti.

Zde zkoumáme Deep Q-Learning – mozek, který zobecňuje.

⚙️ Ovládání


Neural Net: 12→64→32→8

🦊 Chaser Odměny

🏃 Evader Odměny

🛡️ Interakce se štítem

🛡️ Štít: volný
Evader se učí unikat a používat štít.
💡 Chaser se učí pronásledovat a obcházet překážky.

🧠 DQN Architektura

Chaser: 12 → 64 → 32 → 8 ● kladná váha ● záporná váha

🎮 3D Prostředí

Chaser (pronásledovatel)
Evader (únikář)
Štít (přenositelný)

📊 Statistiky

Epizoda
0
Chyceno
0
Celk. čas
0s
Použití štítu
0
📉 Training Loss
Chaser
0.000
Evader
0.000
Avg Loss
0.00

🧠 Co je Deep Q-Network (DQN)?

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

👁️
Senzory
Vzdálenost, úhel...
🧠
Neuronová síť
Zpracování
📊
Q-hodnoty
Predikce pro každou akci

Stabilizační triky DQN

📼 Experience Replay (Paměť)

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.

🎯 Target Network (Cílová síť)

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

⚔️ Multi-Agentní Dynamika (MARL)

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.

🔄 Závody ve zbrojení

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.

🌊 Nestacionární prostředí

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

💰 Návrh systému odměn (Reward Shaping)

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!

✓ Dobře navržené
  • Chycení (Catch) – jasný a silný signál úspěchu.
  • Přiblížení (Distance) – "hustá" odměna, která vede agenta krok za krokem.
  • Bonus za štít – motivuje k používání nástrojů.
✗ Špatně navržené (Příklady)
  • Příliš velké penále za smrt – Evader se bude bát pohnout (freezing).
  • Konfliktní odměny – např. odměna za rychlost i za stání na místě.
  • Řídké odměny (Sparse) – odměna jen na konci (agent bloudí a neví, co dělat).

� Jak agent rozhoduje (Matematika podrobně v předchozích lekcích)

KROK 1
🔭

Odhad (Prediction)

"Vidím zeď. Myslím, že jít doprava je bezpečné."

KROK 2
💥

Realita (Target)

"Au! Narazil jsem. Dostal jsem trest."

KROK 3
🔧

Poučení (Update)

"Musím přepsat mozek: Jít doprava u zdi = špatně."

Co z toho budu mít? (Bellman)

Agent se nerozhoduje jen podle momentální nálady. Počítá:
"Stojí mi ten bonbon teď za to, že mě za chvíli chytí?"

Hodnota kroku = Okamžitá odměna + (Trpělivost × Budoucí vyhlídky)
Target = R + γ · max Q
0.95 (Šachista)
Ovlivní, jak moc agent plánuje dopředu.

Moment překvapení (Loss)

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řekvapení = (Realita - Očekávání
Loss = (Target - Prediction)²

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!"

Ladění sítě (Backprop)

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ě."

🎛️
Každý krok učení jemně psouvá váhy v síti, aby příště byla chyba menší.

💻 Implementační průvodce (DQN)

Klíčové části kódu, které dělají z "hloupé" sítě inteligentního agenta.

1. Paměť (Experience Replay)

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);

  }

}
2. Tréninkový krok (Train Step)

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); 

  });

}
3. Stabilita (Target Network)

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! 🎯");

}

🚀 Praktické využití Deep Q-Networks (DQN)

Zatímco klasický Q-Learning řeší "tabulkové problémy", DQN řeší vidění, fyziku a strategii. Zde jsou oblasti, kde hluboké sítě dominují:

🎮 Hry z pixelů

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)

Energetika a Chlazení

Google používá DQN k řízení chlazení v datacentrech. Síť analyzuje tisíce senzorů a snižuje spotřebu energie na chlazení o 40 %.

🤖 Adaptivní Robotika

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

🚗 Složité dopravní situace

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

🔗
Spojení s naší simulací:

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

🎯 Shrnutí klíčových konceptů DQN

Experience Replay
Paměť pro stabilní trénink z minulosti
Target Network
Pevný cíl pro výpočet chyby (Loss)
Reward Shaping
Design odměn pro rychlejší učení
Kontinuální Stav
Schopnost zvládnout nekonečně stavů