পাঠ ২৪ · ৩২-এর মধ্যে · মডিউল ৪

Model-based RL — dynamics শিখে planning

Model-based RL: learn dynamics, then plan
১০ মিনিট পড়া মাঝারি · Intermediate PyTorch + Dyna-Q

এই পাঠে যা শিখবেন

  • Model-free বনাম model-based RL — কখন কোনটি ভালো
  • Dyna-Q architecture — real + simulated experience মিশিয়ে learning
  • PETS-এ probabilistic ensemble ও cross-entropy planning
  • World Models (Ha & Schmidhuber) — "স্বপ্নে" RL train করার শিল্প

১ · Model-free বনাম Model-based — মূল বিভাজন

গত পাঠ পর্যন্ত আমরা মূলত model-free পদ্ধতি দেখেছি — Q-learning, DQN, REINFORCE, PPO, DDPG, TD3 — এরা সবাই environment-কে "black box" ধরে। Action দেয়, reward ও next state পায়, এর বেশি জানে না। ফলে ভালো policy পেতে কোটি কোটি interaction লাগে — Atari-তে DQN-এর ২০০ million frame, OpenAI Five-এর ১৮০ বছরের self-play।

Model-based RL ভিন্ন দার্শনিক অবস্থান নেয়: agent একটি dynamics modelDynamics Model$\hat{P}(s'|s,a)$ ও $\hat{R}(s,a)$ — পরিবেশ কীভাবে আচরণ করে তার শেখা অনুমান। শিখলে এই model দিয়ে imagined rollout করে planning সম্ভব, যা real interaction-এর চেয়ে অনেক সস্তা। $\hat{P}(s'|s,a)$ এবং reward function $\hat{R}(s,a)$ শেখে। তারপর সেই শেখা model-এর ভেতরে simulate ("imagine") করে — কোন action সবচেয়ে ভালো?

কেন model-based?

Sample efficiency। বাস্তব robot-কে ১ million step হাঁটানো ব্যয়বহুল ও বিপজ্জনক। কিন্তু একবার dynamics শিখলে — laptop-এ ১ million imagined step মাত্র কয়েক মিনিট। MuZero, Dreamer, EfficientZero — এই ধারার মডেলগুলো ১০-১০০× কম real sample-এ Atari-পর্যায়ের performance অর্জন করে।

ভাবুন আপনি দাবা শিখছেন। Model-free মানে — হাজার হাজার গেম খেলুন, হেরে যান, ধীরে ধীরে pattern বুঝুন। Model-based মানে — দাবার নিয়ম শিখে নিন, তারপর মাথায় move imagine করে best move বাছুন। দাবার "নিয়ম" হলো dynamics model। মানুষের শেখা প্রায় সবসময়ই model-based — তাই এত efficient।

২ · গাণিতিক formulation

MDP-তে আমরা চাই $\pi^*$ যা $\mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t r_t\right]$ সর্বোচ্চ করে। Model-based RL দু'টি subproblem-এ ভাগ করে:

$$\text{(১) Model learning:} \quad \hat{P}_\phi(s'|s,a), \; \hat{R}_\phi(s,a) \approx P, R$$ $$\text{(২) Planning:} \quad \pi(s) = \arg\max_a Q_{\hat{P}, \hat{R}}(s, a)$$

Model learning সাধারণত supervised regression — collected $(s_t, a_t, s_{t+1}, r_t)$ tuple থেকে $\phi$ fit করা। Planning দু'রকম: (ক) background planning — শেখা model দিয়ে value/policy update, যেমন Dyna; (খ) decision-time planning — প্রতিটি state-এ rollout, যেমন MPC, MCTS।

Model-free vs model-based — formal definition: agent কি action select করার সময় কোনো dynamics model ব্যবহার করে? করলে model-based। PPO, DQN — করে না, তাই model-free। AlphaZero, MuZero — করে, তাই model-based।

৩ · Dyna-Q — সবচেয়ে সহজ model-based algorithm

Richard Sutton-এর Dyna-Q (১৯৯০) — model-based RL-এর ফাউন্ডেশনাল architecture। ধারণা সরল: প্রতিটি real step-এর পর $n$টি imagined step করো শেখা model দিয়ে। দু'টোতেই Q-update apply করো।

Algorithm sketch:

  1. Real environment-এ action $a$ নাও — observe $(s, a, r, s')$
  2. Q-learning update: $Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s,a)]$
  3. Model update: $\text{Model}(s,a) \leftarrow (r, s')$ (deterministic — table-based)
  4. $n$ বার repeat: random previous $(s, a)$ বাছো → model থেকে $(\hat{r}, \hat{s}')$ → আবার Q-update

Sutton-এর mountain car experiment-এ — $n=0$ (pure Q-learning) লাগে ১০০+ episode; $n=50$ Dyna-Q লাগে মাত্র ৫-১০ episode। এটাই "model দিয়ে sample multiply" — একটি real experience থেকে ৫০× বেশি শেখা।

Model bias problem: শেখা model perfect নয়। যদি Q-update imagined experience-এর উপর বেশি ভর দেয় — agent "fake reward"-এ optimize করতে পারে, real environment-এ failure। তাই Dyna-Q দু'টি signal balance করে: real (অল্প কিন্তু সত্য) + imagined (অনেক কিন্তু কোলাহলপূর্ণ)।

৪ · Dyna-Q PyTorch implementation

Python · NumPy · Dyna-Q
import numpy as np
from collections import defaultdict
import gymnasium as gym

env = gym.make("FrozenLake-v1", is_slippery=False)
n_S, n_A = env.observation_space.n, env.action_space.n

Q = np.zeros((n_S, n_A))
model = {}                  # (s, a) -> (r, s')
alpha, gamma, eps = 0.1, 0.95, 0.1
n_planning = 20             # imagined steps per real step

for ep in range(200):
    s, _ = env.reset()
    done = False
    while not done:
        # ε-greedy
        a = env.action_space.sample() if np.random.rand() < eps else int(np.argmax(Q[s]))
        s_next, r, term, trunc, _ = env.step(a)
        done = term or trunc

        # (1) Real Q-update
        Q[s, a] += alpha * (r + gamma * np.max(Q[s_next]) - Q[s, a])

        # (2) Model store
        model[(s, a)] = (r, s_next)

        # (3) Planning: n imagined updates
        keys = list(model.keys())
        for _ in range(n_planning):
            s_p, a_p = keys[np.random.randint(len(keys))]
            r_p, s_p_next = model[(s_p, a_p)]
            Q[s_p, a_p] += alpha * (r_p + gamma * np.max(Q[s_p_next]) - Q[s_p, a_p])

        s = s_next

print("Average Q at start state:", Q[0].mean())

    
n_planning=20 মানে প্রতিটি real step-এ ২০টি imagined update। n_planning=0 করে দেখুন — convergence অনেক ধীর। Dyna-Q deterministic environment-এ চমৎকার, কিন্তু stochastic-এ extension লাগে (Dyna-Q+, prioritized sweeping)।

৫ · PETS — Probabilistic Ensembles + Trajectory Sampling

Continuous control (robot arm, MuJoCo) — Dyna-Q-এর tabular approach কাজ করে না। Chua et al. (২০১৮) প্রস্তাব করেন PETS — দু'টি প্রধান উপাদান:

  • Probabilistic ensemble: $B$টি neural network ($B \approx 5$) প্রতিটি predict করে $\mu(s,a), \sigma(s,a)$ — uncertainty সহ next state। Ensemble disagreement = epistemic uncertainty।
  • CEM planning: প্রতিটি real step-এ Cross-Entropy MethodCEMএকটি stochastic optimization — Gaussian থেকে action sequences sample, top-k বাছাই, mean+std update, পুনরাবৃত্তি। Model-based RL-এ planning-এর জনপ্রিয় হাতিয়ার। দিয়ে $H$-step action sequence optimize — model-এ rollout করে best plan নাও, প্রথম action execute, replan।

Loss: ensemble-এর $b$-th model train হয় Gaussian negative log-likelihood-এ: $$\mathcal{L}_b = \frac{1}{N} \sum_i \frac{(s'_i - \mu_b(s_i, a_i))^2}{2\sigma_b^2(s_i, a_i)} + \frac{1}{2}\log \sigma_b^2(s_i, a_i)$$

MuJoCo-র HalfCheetah-এ PETS মাত্র ২০০K step-এ যা পারে — SAC-এর লাগে ১M+। সেটাই sample efficiency।

৬ · World Models — স্বপ্নে শেখা

২০১৮-তে David Ha ও Jürgen Schmidhuber-এর "World Models" পেপার RL-জগতে চমক তৈরি করে। তিনটি অংশ:

  • V (Vision): VAEVariational Autoencoderএকটি generative model যা input-কে compact latent vector $z$-এ encode করে এবং সেখান থেকে reconstruct করে। Image observation-এর জন্য classic dimensionality reduction। — image observation $o_t$ → latent $z_t$ (~৩২-D)।
  • M (Memory): Mixture-Density RNN (MDN-RNN) — predict $p(z_{t+1} | z_t, a_t, h_t)$।
  • C (Controller): tiny linear policy $a_t = W_c [z_t, h_t] + b_c$ — মাত্র ~৮০০ parameters।

Controller train হয় "dream" environment-এ — V+M একসাথে একটি simulated world তৈরি করে, real game ছাড়াই! CarRacing-v0-তে এই approach SOTA পায়। MuZero (২০২০) এই idea-কেই deep search-এর সাথে মেলায়।

Model-based RL — দু'টি প্যারাডাইম Dyna-Q (background planning) Real env (s,a,r,s′) Q-table update Model P̂(s′|s,a) Imagined ×n updates ১ real → n imagined World Models (Ha & Schmidhuber) V: VAE o → z M: RNN predict z′ C: Policy tiny linear "Dream" environment Controller trained inside V+M only Real game শুধু data সংগ্রহে Sample efficiency: model-based ১০-১০০× এগিয়ে DQN Atari: 200M frames · MuZero: 20M · EfficientZero: 100K Trade-off: model bias, compute-হেভি planning
দু'টি model-based paradigm — Dyna-Q (table-ভিত্তিক, real+imagined মেশানো) ও World Models (latent space-এ "স্বপ্নে" controller train)।

৭ · Probabilistic ensemble — uncertainty-aware planning

Python · PyTorch · PETS-style ensemble
import torch, torch.nn as nn

class GaussianDynamics(nn.Module):
    def __init__(self, s_dim, a_dim, h=256):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(s_dim + a_dim, h), nn.SiLU(),
            nn.Linear(h, h),              nn.SiLU(),
            nn.Linear(h, 2 * s_dim),      # μ, log σ²
        )
        self.s_dim = s_dim

    def forward(self, s, a):
        out = self.net(torch.cat([s, a], -1))
        mu, log_var = out[..., :self.s_dim], out[..., self.s_dim:]
        return mu, log_var.clamp(-10, 2)

# Ensemble of B models
B, s_dim, a_dim = 5, 17, 6
models = nn.ModuleList([GaussianDynamics(s_dim, a_dim) for _ in range(B)])
opt = torch.optim.Adam(models.parameters(), lr=1e-3)

def nll(mu, log_var, target):
    inv_var = torch.exp(-log_var)
    return 0.5 * ((target - mu) ** 2 * inv_var + log_var).sum(-1).mean()

# CEM planning
def cem_plan(s, horizon=15, pop=400, elite=40, iters=5):
    mu  = torch.zeros(horizon, a_dim)
    std = torch.ones(horizon, a_dim)
    for _ in range(iters):
        acts = mu + std * torch.randn(pop, horizon, a_dim)
        rets = torch.zeros(pop)
        st   = s.unsqueeze(0).repeat(pop, 1)
        for t in range(horizon):
            # Trajectory sampling: এক random model পিক
            b = torch.randint(0, B, (1,)).item()
            mn, lv = models[b](st, acts[:, t])
            st = mn + torch.exp(0.5 * lv) * torch.randn_like(mn)
            rets += -(st ** 2).sum(-1)   # toy reward
        idx = rets.topk(elite).indices
        mu, std = acts[idx].mean(0), acts[idx].std(0) + 0.05
    return mu[0]

s0 = torch.randn(s_dim)
print("Best first action:", cem_plan(s0).detach().numpy().round(3))

    
প্রতিটি rollout-এ random ensemble member বাছা — trajectory sampling — epistemic uncertainty propagate করে। Ensemble disagree করলে প্রতিটি sample ভিন্ন result দেয়, CEM সেই uncertainty-aware reward-এ optimize করে।

৮ · কখন model-based ব্যবহার করবেন?

  • Real-world cost বেশি: robotics, healthcare, autonomous driving — sample সাশ্রয়ী হতেই হবে।
  • Smooth dynamics: physics-based environment-এ neural model ভালো fit হয়। Discrete & chaotic (Atari Pong-এর pixel) hard, কিন্তু latent space-এ (Dreamer, MuZero) সম্ভব।
  • Planning compute available: CEM/MCTS প্রতিটি step-এ heavy। Real-time control-এ trade-off ভাবুন।

কখন model-free বেছে নিন?

  • Simulator সস্তা (game, low-cost simulation)।
  • Dynamics মডেল করা কঠিন (high-dimensional, stochastic, partially observable)।
  • Production-grade stability দরকার — PPO/SAC বেশি predictable।
Model exploitation: যদি planner শেখা model-এর "bug"-এ exploit করে — agent fake reward ধাওয়া করবে। সমাধান: ensemble disagreement → conservative bonus, planning horizon সীমিত, real-data দিয়ে ঘন ঘন finetune।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ Model-based RL sample-efficient হলেও production-এ অনেক সময় model-free (PPO, SAC) বেছে নেওয়া হয়। কেন?

চমৎকার প্রশ্ন। কাগজে model-based ১০-১০০× sample efficient — কিন্তু engineering reality আলাদা।

(১) Wall-clock time ≠ sample efficiency: CEM/MCTS প্রতিটি step-এ heavy। Robot-এ sample সস্তা হলে (simulator চলছে) — PPO ১০× বেশি sample নিলেও wall-clock-এ ৫× দ্রুত।

(২) Hyperparameter sensitivity: PETS, Dreamer, MuZero — সব মডেলে অনেক knob: ensemble size, planning horizon, CEM elite ratio, model warm-start। PPO-তে মূলত learning rate ও clip। Production-এ debugging time এর চেয়ে বড় কিছু নেই।

(৩) Model exploitation: শেখা model-এর crack-এ planner exploit করতে পারে। "Reward hacking" model-based-এ আরও তীব্র — planning দিয়ে hack maximize হয়।

(৪) Code complexity: Dreamer-এর reference implementation ৩,০০০+ lines। Stable Baselines-এর PPO ~৩০০। Bug-fix, monitor, deploy — সবই complexity-র সাথে বাড়ে।

(৫) Stability under distribution shift: production-এ data drift আসে। Model-free policy gradually adjust হয়; model-based-এর model fail করলে cascade fail।

মূল উপলব্ধি: Model-based চমকপ্রদ research direction — sample efficiency-র অর্জন বাস্তব। কিন্তু ২০২৪-এও বেশিরভাগ deployed RL system (Bing ranking, ChatGPT RLHF, recommendation) model-free। Industrial AlphaGo/MuZero exception, rule নয়। Dreamer, EfficientZero — research breakthrough, কিন্তু production-grade হতে আরও কয়েক বছর।

প্র ০২ World Models (Ha & Schmidhuber) controller-কে dream-এ train করে। কিন্তু dream perfect না হলে — controller real game-এ fail করার কথা। তবু কেন কাজ করে?

এটি ২০১৮-র সেরা insight-গুলোর একটি। Naive expectation: imperfect simulator-এ trained policy real-এ ভেঙে পড়বে — sim-to-real gap। কিন্তু Ha & Schmidhuber দেখান এটি অনেক ক্ষেত্রে কাজ করে।

(১) Latent-space dynamics easier than pixel-space: পিক্সেল predict করা — অসংখ্য irrelevant detail (পাতার নড়া, light flicker)। কিন্তু VAE-র latent $z$ shape ৩২-D — শুধু task-relevant signal। RNN এই compressed space-এ fairly accurate।

(২) Stochasticity-র সচেতন injection: MDN-RNN mixture-Gaussian output দেয়, এবং sampling-এ temperature τ আছে। τ বাড়ালে — dream "hard"-এর চেয়েও hard। Controller কঠিন dream-এ train হলে real-এ সহজ মনে হয় — domain randomization-এর precursor।

(৩) Tiny controller = generalization: C মাত্র ~৮০০ parameter। এত small policy easily overfit করতে পারে না। বরং only "robust strategy" শেখে।

(৪) Continuous, slow-changing environment: CarRacing, VizDoom — physics smooth। হঠাৎ regime-shift নেই। ফলে dream-এর local accuracy যথেষ্ট।

(৫) Bias-variance trade-off: Real game-এ trial-error variance বিশাল। Dream noisy কিন্তু low variance এ অনেক episode। Controller bias-এ stuck হওয়ার আগেই variance reduction জিতে যায়।

সীমাবদ্ধতা: Atari-র মতো discrete, pixel-precision-নির্ভর game-এ pure World Models কম effective। তাই MuZero (২০২০) latent dynamics-এর সাথে MCTS যোগ করে — search দিয়ে model-error correct। Dreamer-V2/V3 আরও refined: discrete latent + symlog reward + KL balancing — Atari, DMLab, Minecraft সব পার করেছে।

মূল কথা: "Dream" perfect না — কিন্তু এতটুকু perfect যাতে policy gradient meaningful direction পায়। Real environment তারপর fine-tune করে। Sim-to-real-এর mathematical version।

প্র ০৩ Dyna-Q-তে $n=50$ planning step নিলে compute ৫০× বাড়ে কিন্তু sample efficiency-ও ৫০× বাড়ে — তাহলে $n=10000$ কেন বেছে নেই না?

Surface-level যুক্তি ঠিক — কিন্তু diminishing returns আছে।

(১) Stale model problem: Dyna-Q-র model = সর্বশেষ visit-এর memory। যদি environment slightly stochastic বা non-stationary, $n=10000$ মানে — হাজার হাজার update wrong dynamics-এ। Real data-এ ভিত্তি ছাড়া planning হ্যালুসিনেশনে পরিণত হয়।

(২) Q-function over-fits to model: Q-update repeatedly একই (s,a) pair-এ apply করলে — $Q(s,a)$ shrinks to $\hat{r} + \gamma \max_{a'} Q(s', a')$ exactly। কিন্তু $\hat{r}$ যদি biased — Q biased। Real Q-update-এর gradient signal হারিয়ে যায়।

(৩) Computation budget: Real environment fast হলে $n$ ছোট রাখা ভালো — পরবর্তী real step তাড়াতাড়ি নিন। Simulation expensive হলে $n$ বড়।

(৪) Empirical curve: Sutton-এর experiments-এ $n$ vs। convergence একটি knee curve — $n=5$ থেকে $n=50$-এ দ্রুত উন্নতি, $n=50$ থেকে $n=500$ — সামান্য, $n>500$ — প্রায়ই খারাপ।

(৫) Prioritized sweeping: Random replay-এর বদলে বড় TD error যেখানে — সেখানে priority। একই compute-এ অনেক বেশি improvement। Dyna-Q+ এই extension।

(৬) Stochastic environment: Sutton-এর Dyna-Q deterministic ধরে। Slippery FrozenLake-এ — model একটি transition store করে, কিন্তু আসলে multiple আছে। Imagined update biased। সমাধান: count-based model বা neural ensemble।

মূল উপলব্ধি: Sample efficiency = real samples-এর সাথে imagined samples-এর সমন্বয়। Imagined infinite করা মানে model-এ ১০০% trust — যা শেখা model rarely deserves।

প্র ০৪ আপনি Bangladesh-এ ঘরের electricity-load forecast করার জন্য একটি RL agent বানাচ্ছেন। Model-based না model-free? কেন?

চমৎকার applied scenario। বিশ্লেষণ করি।

Setup: State = current load, weather, time-of-day, day-of-week, recent history। Action = কত generation deploy/বন্ধ করা, peak-hour battery discharge, pricing signal পাঠানো। Reward = blackout এড়ানো × cost minimize × renewable usage।

Model-based-এর পক্ষে যুক্তি:

  • Real failure ব্যয়বহুল: blackout = জনগণের ক্ষতি, hospital risk। Trial-error সরাসরি grid-এ অসম্ভব।
  • Strong physical model: grid dynamics — ohm's law, Kirchhoff's law — well-known equations। Pure neural model দরকারও নেই; hybrid model (physics + residual neural) সম্ভব।
  • Forecast historical data প্রচুর: বছরের পর বছর load curve, weather — supervised pretraining সহজ।
  • Planning value high: 24-hour ahead schedule দরকার — single-step myopic decision insufficient।

Model-free-এর পক্ষে যুক্তি:

  • Simulator (Bangladesh Power Development Board-এর digital twin) থাকলে — sample সস্তা।
  • PPO/SAC well-tested, stable, easier to deploy।

আমার সুপারিশ — Hybrid (offline RL + model-based finetune):

  1. Step 1: ঐতিহাসিক ৫ বছরের load+weather+grid data দিয়ে CQL/IQL (offline RL) train। কোনো online interaction নাই।
  2. Step 2: Physics-aware dynamics model fit (residual neural network)। Ensemble ৫টি, uncertainty estimate।
  3. Step 3: Simulator-এ MPC + শেখা policy combine। CEM ১২-hour horizon, প্রতিটি hourly real action।
  4. Step 4: "Shadow mode" deployment — agent suggest দেয়, operator decides। কয়েক মাস log।
  5. Step 5: Confidence-based gradual handover। ensemble disagreement বেশি = human override।

বাংলাদেশ-specific বিবেচনা:

  • Eid, Pohela Boishakh, ramzan-এর peak load — strong seasonality। Model এ encode করুন।
  • Solar penetration বাড়ছে — non-stationary। Online finetune।
  • Frequent grid disturbance — robust to OOD inputs।

মূল কথা: "Model-based vs free" black-and-white না। Real-world infrastructure-এ — domain knowledge + offline data + safe online learning-এর কম্বিনেশন। Pure RL paper-এর বাইরে — engineering pragmatism জেতে।

অনুশীলন

  1. Dyna-Q variant: উপরের code-এ n_planning ০, ৫, ২০, ১০০ চারটি value-তে compare করুন। কোন setting-এ FrozenLake fastest converge করে?

    সাধারণত $n=20$ থেকে $n=50$ sweet spot। $n=0$ pure Q-learning — ধীর। $n=100$ এ marginal gain, কিন্তু compute অপচয়। FrozenLake deterministic হওয়ায় model accurate, কিন্তু large $n$-এ Q-table over-update করে initial bias শক্ত হয়।

  2. Probabilistic model loss: Gaussian NLL formula লিখুন এবং কেন variance term ($\log \sigma^2$) দরকার ব্যাখ্যা করুন।

    $$\mathcal{L} = \frac{(y - \mu)^2}{2\sigma^2} + \frac{1}{2}\log \sigma^2$$

    প্রথম term — squared error, কিন্তু $\sigma$ দিয়ে স্কেল। যদি $\sigma$ বড় ধরে — error penalty কম, কিন্তু $\log \sigma^2$ বড় (penalty)। দু'টি term-এর balance — model নিজেই শেখে কোথায় confident, কোথায় uncertain। শুধু MSE হলে — overconfident estimate।

  3. Real-world design: একটি smart-irrigation RL agent — Bangladeshi কৃষিজমিতে। State, action, reward এবং model-based vs model-free choice — ৫ লাইনে justify করুন।

    State: soil moisture, weather forecast (৭ দিন), crop stage, রিজার্ভ পানির স্তর। Action: কোন valve কত মিনিট খোলা। Reward: yield − water_cost − over-irrigation_penalty।

    Choice: Model-based — water cost বেশি, real-trial মৌসুম একবার (slow feedback), agronomy model (FAO crop-water) আগে থেকে আছে। PETS-style ensemble + 7-day MPC ভালো ফিট।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? Google Colab ব্যবহার করুন।
পূর্ববর্তী পাঠ
পাঠ ২৩ · DDPG ও TD3