Model-based RL — dynamics শিখে planning
এই পাঠে যা শিখবেন
- 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 সবচেয়ে ভালো?
Sample efficiency। বাস্তব robot-কে ১ million step হাঁটানো ব্যয়বহুল ও বিপজ্জনক। কিন্তু একবার dynamics শিখলে — laptop-এ ১ million imagined step মাত্র কয়েক মিনিট। MuZero, Dreamer, EfficientZero — এই ধারার মডেলগুলো ১০-১০০× কম real sample-এ Atari-পর্যায়ের performance অর্জন করে।
২ · গাণিতিক 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।
৩ · Dyna-Q — সবচেয়ে সহজ model-based algorithm
Richard Sutton-এর Dyna-Q (১৯৯০) — model-based RL-এর ফাউন্ডেশনাল architecture। ধারণা সরল: প্রতিটি real step-এর পর $n$টি imagined step করো শেখা model দিয়ে। দু'টোতেই Q-update apply করো।
Algorithm sketch:
- Real environment-এ action $a$ নাও — observe $(s, a, r, s')$
- Q-learning update: $Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s,a)]$
- Model update: $\text{Model}(s,a) \leftarrow (r, s')$ (deterministic — table-based)
- $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 থেকে ৫০× বেশি শেখা।
৪ · Dyna-Q PyTorch implementation
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-এর সাথে মেলায়।
৭ · Probabilistic ensemble — uncertainty-aware planning
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))
৮ · কখন 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-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):
- Step 1: ঐতিহাসিক ৫ বছরের load+weather+grid data দিয়ে CQL/IQL (offline RL) train। কোনো online interaction নাই।
- Step 2: Physics-aware dynamics model fit (residual neural network)। Ensemble ৫টি, uncertainty estimate।
- Step 3: Simulator-এ MPC + শেখা policy combine। CEM ১২-hour horizon, প্রতিটি hourly real action।
- Step 4: "Shadow mode" deployment — agent suggest দেয়, operator decides। কয়েক মাস log।
- 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 জেতে।
অনুশীলন
-
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 শক্ত হয়।
-
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।
-
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-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ২৫ · MCTS ও AlphaZero পরবর্তী পাঠ Tree search + শেখা model-এর সংমিশ্রণ। AlphaGo→MuZero গল্প।
- পাঠ ২৩ · DDPG ও TD3 আগের পাঠ Continuous control-এর model-free standard। তুলনার জন্য।
- পাঠ ৩২ · কোর্সের চূড়ান্ত পর্যালোচনা কোর্স review কখন model-based, কখন model-free — পুরো course timeline-এ।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।