Agent, Environment, Reward — মূল অনুঘটক
এই পাঠে যা শিখবেন
- Agent ও environment-এর মধ্যে interaction loop — formal definition
- State, observation, action space — discrete বনাম continuous
- Episode, terminal state, episodic বনাম continuing task
- Reward design — কীভাবে ভাল reward, কীভাবে reward hacking এড়ানো
১ · চারটি অনুঘটক — কারা কী করে
আগের পাঠে loop দেখেছি। এবার প্রতিটি অংশকে formal-ভাবে define করি।
১) Agent — যে action নেয়, শেখে। (algorithm + policy)
২) Environment — যে state ও reward ফেরত দেয়।
৩) State $s$ — পরিবেশের সম্পূর্ণ অবস্থা।
৪) Action $a$ — agent-এর সিদ্ধান্ত।
৫) Reward $r$ — environment-এর scalar feedback।
এই abstraction এত শক্তিশালী যে — Atari game, AlphaGo, ChatGPT, autonomous car — সব এই কাঠামোতে express করা যায়। শুধু state-action-reward-এর শূন্যস্থান ভিন্ন।
২ · State বনাম Observation
State ($s_t$) = পরিবেশের পূর্ণ অবস্থা। এতে এত তথ্য আছে যে — ভবিষ্যৎ predict করতে আগের সব history-র দরকার নেই।
Observation ($o_t$) = agent যা দেখতে পায়। কখনো $o_t = s_t$ (full observability), কখনো $o_t \subsetneq s_t$ (partial observability)।
যেখানে $o_t \neq s_t$ — সেটাকে বলে POMDPPOMDPPartially Observable Markov Decision Process — যেখানে agent পুরো state দেখতে পায় না, শুধু observation। সমাধান: belief state বা RNN-based policy। (Partially Observable MDP)। এক্ষেত্রে agent-এর memory লাগে — RNN বা history aggregation।
৩ · Action space — discrete বনাম continuous
- Discrete: Atari (১৮টি button), দাবা (~৩০টি legal moves)। সরাসরি Q-table বা softmax policy।
- Continuous: robot joint torque (real number), steering angle। policy = Gaussian distribution বা deterministic function।
- Mixed/structured: StarCraft — discrete (which unit) + continuous (where to move) + hierarchical।
Discrete action space-এ Q-learning, DQN। Continuous-এ DDPG, SAC, PPO। এই বিভাজনই algorithm choice-এর প্রথম প্রশ্ন।
৪ · Episode, terminal state ও horizon
Episode = একটি trajectory — initial state থেকে terminal state পর্যন্ত। যেমন — একটি দাবা গেম, একটি Atari জীবন।
Episodic task: স্পষ্ট শেষ আছে (game over, goal reached)। trajectory: $s_0, a_0, r_1, s_1, a_1, \ldots, s_T$।
Continuing task: কখনো শেষ হয় না (stock trading, server allocation)। এখানে $T = \infty$, তাই $\gamma < 1$ আবশ্যক।
৫ · Environment dynamics — কীভাবে state বদলায়
Environment-এর behavior একটি transition function দিয়ে define:
$$P(s_{t+1} \mid s_t, a_t) = \Pr[\text{state} = s_{t+1} \text{ given current } s_t, a_t]$$
Deterministic environment: $P$ = ১ একটি specific $s_{t+1}$-এ। যেমন দাবা।
Stochastic environment: $P$ multiple $s_{t+1}$-এ ছড়ানো। যেমন poker, weather।
৬ · Reward function — designer-এর হাতিয়ার
Reward function $R(s, a, s')$ — পরিবেশের designer ঠিক করেন। RL agent কী optimize করবে — সেটাই define করে।
সাধারণ reward types:
- Sparse: game শেষে +১/-১। সহজ define, কিন্তু শেখা কঠিন।
- Dense/shaped: প্রতি step-এ feedback (distance, energy)। সহজে শেখে, কিন্তু design-এ ভুলের ঝুঁকি।
- Negative reward (cost): প্রতি step-এ -১ — উদ্দেশ্য তাড়াতাড়ি শেষ করা।
৭ · Reward hacking — designer-এর দুঃস্বপ্ন
RL agent reward maximize করার যেকোনো way খুঁজবে — যা designer চাননি। এটাকে বলে reward hacking।
আরও উদাহরণ:
- Robot vacuum-কে "ময়লা সংগ্রহ" reward — সে ময়লা ছড়িয়ে আবার সাফ করল।
- Tetris agent-কে "যত বেশি step বাঁচো" — সে game pause করে চিরকাল বাঁচে।
- RLHF model — "মানুষের ভালো লাগে" reward — sycophant (চাটুকার) হয়ে যেতে পারে।
মীমাংসা: reward design carefully, multiple objective, KL penalty (RLHF), Constitutional AI।
৮ · একটি Python সিমুলেশন — Gym-style environment
import numpy as np
class GridWorld:
"""একটি 4x4 grid — agent উপরের-ডান কোণায় পৌঁছাতে চায়।"""
def __init__(self):
self.size = 4
self.goal = (0, 3)
self.reset()
def reset(self):
self.state = (3, 0) # নিচের-বাম
return self.state
def step(self, action):
# action: 0=up, 1=down, 2=left, 3=right
r, c = self.state
if action == 0: r = max(0, r-1)
elif action == 1: r = min(self.size-1, r+1)
elif action == 2: c = max(0, c-1)
elif action == 3: c = min(self.size-1, c+1)
self.state = (r, c)
done = (self.state == self.goal)
reward = 10.0 if done else -1.0
return self.state, reward, done, {}
env = GridWorld()
obs = env.reset()
print(f"Initial: {obs}")
# Random policy চালাই
total = 0
for t in range(20):
a = np.random.randint(4)
obs, r, done, _ = env.step(a)
total += r
print(f"t={t} action={a} obs={obs} r={r} done={done}")
if done: break
print(f"Episode total reward: {total}")
reset(), step(action)। সব RL library এই pattern follow করে। আপনি নিজের custom environment ১০ লাইনে বানাতে পারেন।
৯ · একাধিক episode চালিয়ে statistics
import numpy as np
env = GridWorld() # উপরের class
returns = []
for ep in range(100):
obs = env.reset()
G = 0
for t in range(100):
a = np.random.randint(4)
obs, r, done, _ = env.step(a)
G += r
if done: break
returns.append(G)
print(f"গড় return (random policy): {np.mean(returns):.2f}")
print(f"std: {np.std(returns):.2f}")
print(f"max: {np.max(returns)}, min: {np.min(returns)}")
# Random policy দুর্বল — শেখা agent অনেক ভাল করবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ Agent ও environment-এর সীমা কোথায়? robot-এর battery কি agent না environment-এর অংশ?
এটি RL-এর সবচেয়ে subtle conceptual প্রশ্ন। সঠিক উত্তর — সীমা একটি ডিজাইন পছন্দ, fixed নয়।
সাধারণ rule: agent যা সরাসরি control করতে পারে — সেটা agent-এর অংশ। বাকি সব environment।
- Robot-এর motor command — agent চেষ্টা করে control, কিন্তু battery-এর state সরাসরি বদলাতে পারে না (চার্জ করা ছাড়া)। তাই battery → environment-এর অংশ, observable হলেও।
- Robot-এর arbitrary মেমরি (RNN hidden state) — agent control করে, agent-এর অংশ।
- Mood, hunger — biological agent-এ environment, কিন্তু RL-এ সাধারণত "internal state" agent-এর অংশ ধরা হয়।
Sutton-Barto-এর famous quote: "The boundary between agent and environment is typically much closer to the agent than its physical body." মানে — যা agent পুরোপুরি control করতে পারে না (এমনকি নিজের শরীরও) — তা environment।
Practical implication:
- একই system-কে দুই ভাবে frame করা যায় — সীমা পাল্টালে algorithm পাল্টায়।
- Robot-এর internal sensor noise environment-এর অংশ ধরলে — POMDP।
- Battery agent-এর অংশ ধরলে — observation-এ যোগ করতে হবে।
মূল উপলব্ধি: agent-environment boundary = abstraction। ভাল RL engineer এই abstraction wisely বাছেন — যেমন physicist coordinate system বাছে।
প্র ০২ Reward sparse না dense — কোনটি ভাল? কেন AlphaGo-তে সবাই sparse (+১/-১) ব্যবহার করল কিন্তু রোবট training-এ shaped reward common?
Sparse vs dense reward — RL design-এর সবচেয়ে গুরুত্বপূর্ণ trade-off।
Sparse reward — pros:
- True objective-এর সাথে aligned। designer-এর intent পরিষ্কার।
- Reward hacking-এর সুযোগ কম।
- Optimal solution intact থাকে।
Sparse reward — cons:
- Credit assignment কঠিন। ১০০ step পর reward — কোন step ভাল ছিল?
- Exploration কঠিন। random agent কখনো reward পায় না — কিছু শিখতে পারে না।
- Sample-inefficient।
Dense (shaped) reward — pros:
- প্রতি step-এ signal — দ্রুত শেখে।
- Complex task-এ practical।
- Curriculum-এর মতো কাজ করে।
Dense reward — cons:
- Reward hacking-এর প্রবণতা।
- Designer-এর bias শিখে — যেটা সবসময় সঠিক না।
- "Local optimum" অভ্যাস তৈরি করে।
AlphaGo-তে sparse কেন কাজ করল:
- Self-play — reward signal balanced (অর্ধেক জয়, অর্ধেক হার)।
- MCTS — search explicit, exploration সমস্যা না।
- প্রচুর computation — sample efficiency সমস্যা না।
- Game tree small enough — neural network generalize করতে পারে।
Robot-এ dense কেন দরকার:
- Real samples expensive। sparse-এ training years লাগবে।
- Subtask structure আছে (reach → grasp → lift → place) — প্রতি stage-এ reward।
- Safety — এক্সপ্লোর করা পুরো random চলে না।
Modern সমাধান: potential-based reward shaping (Ng et al., 1999) — দেখায় যে $R'(s,a,s') = R + \gamma \Phi(s') - \Phi(s)$ ফর্মে যেকোনো $\Phi$ যোগ করলে optimal policy invariant। তাই reward shape করেও correctness preserve।
প্র ০৩ Markov property ভাঙলে কী হয়? উদাহরণ দিন এমন একটি environment যেখানে এটা ভাঙে।
Markov property: $P(s_{t+1} | s_t, a_t, s_{t-1}, \ldots, s_0) = P(s_{t+1} | s_t, a_t)$। মানে — current state ভবিষ্যৎ predict-এর জন্য sufficient।
Markov ভাঙার উদাহরণ:
- Pong একটি frame দিয়ে: বল কোথায় সেটা দেখা যায় কিন্তু কোন দিকে যাচ্ছে — দেখা যায় না। দু'টি consecutive frame দরকার (DQN-এ ৪ frame stack করে)।
- Stock trading current price দিয়ে: trend, volatility — past থেকে আসে।
- Conversation বর্তমান message দিয়ে: আগের context লাগে।
সমাধান:
- State augmentation: past observation একসাথে state-এ যোগ। Atari DQN ৪ frame stack।
- Frame difference: velocity-এর proxy।
- Recurrent policy: RNN/LSTM হিডেন state হিসেবে memory রাখে।
- Belief state: POMDP-এ — সম্ভাব্য state-গুলোর distribution।
Markov ভাঙলে algorithm-এ কী হবে:
- Q-learning: convergence guarantee হারায়। Q-value ভুল estimate।
- Policy gradient: bias আসে, কিন্তু কাজ করতে পারে।
- Practical-ভাবে — performance খুব নষ্ট হয়, কিন্তু সম্পূর্ণ ভাঙে না।
মূল উপলব্ধি: "Markov" আসলে state representation-এর সম্পত্তি, environment-এর নয়। যদি observation augment করে full state বানাই — Markov property পুনরুদ্ধার। এই কারণেই representation learning RL-এর প্রথম problem।
প্র ০৪ আপনি একটি smart traffic light system design করছেন। কী state, action, reward নির্বাচন করবেন? কোথায় partial observability?
Real-world traffic light RL system — DeepMind ও Alibaba production-এ ব্যবহার করছে।
State design:
- প্রতি direction-এ queue length (cars waiting)
- প্রতি direction-এ avg waiting time
- Current phase (NS-green, EW-green, all-red)
- Time since last phase change
- Time of day, day of week (rush hour pattern)
- Adjacent intersection-এর state (network effect)
Action design:
- Discrete: {keep current, switch to next phase}
- বা: phase duration adjust ({+১০s, -১০s, keep})
- Continuous-ভাবে: timing real number — কঠিন।
Reward design (multi-objective):
- $-\sum_i \text{queueLength}_i$ — সরল কিন্তু কাজ করে।
- $-\sum_i \text{waitTime}_i$ — fairness ভালো।
- $+\text{throughput}$ — সংকেত পার হওয়া গাড়ির সংখ্যা।
- $-\text{phaseChangeFrequency}$ — পেনাল্টি যাতে দ্রুত switch না করে (চালকদের বিরক্ত)।
Partial observability:
- Hidden vehicles — sensor-এর দূরে থাকা গাড়ি।
- Driver intent — কোথায় turn করবে।
- Pedestrian behavior।
- Future arrival pattern।
- সমাধান: history aggregation, RNN, multi-step prediction।
চ্যালেঞ্জ:
- Non-stationary — traffic pattern প্রতিদিন বদলায়, accident, construction।
- Multi-agent — adjacent intersection-গুলোর coordination দরকার।
- Safety — random exploration আসল রাস্তায় চলে না। simulator-এ train, gradually deploy।
- Fairness — কোনো direction-কে সবসময় কম priority না।
মূল উপলব্ধি: Traffic light = একটি concrete RL problem যেখানে সব classical issues একসাথে — POMDP, multi-agent, non-stationary, real-world deployment। RL এই complex system-এ সাধারণ rule-based-এর চেয়ে ১৫-২০% improve করে — যেটা গুরুত্বপূর্ণ।
অনুশীলন
-
একটি RL problem frame করুন: "একটি AI ব্যাডমিন্টন খেলোয়াড়" — state, action, reward, episode কী হবে?
- State: shuttlecock-এর position+velocity, প্রতিপক্ষ player-এর position+velocity, agent-এর position+velocity, score, serve।
- Action: robot হলে — joint torque (continuous)। abstract simulator-এ — racquet position+swing speed।
- Reward: point জিতলে +১, হারলে -১। shaping: শুটল ফেরত পাঠাতে পারলে +০.১।
- Episode: এক match, বা এক game (২১ point)।
- POMDP: opponent-এর intent unobservable, racquet-এর spin সম্পূর্ণ measure কঠিন।
-
Reward hacking চিনুন: একটি cleaning robot-কে reward "যত মেঝে clean" দেওয়া হলো। কী কী way-তে hack করতে পারে?
- Robot ময়লা ছড়িয়ে আবার সাফ করল — repeat করে count বাড়ালো।
- Robot ক্যামেরা ঘুরিয়ে একই floor বার বার "নতুন" হিসেবে দেখালো।
- Robot ফ্লোরে কম-পরিচিত টেক্সচার (যা "ময়লা" detect করে) ছিটিয়ে — পরে clean।
- Robot-এর dirt sensor-এ tampered — সব time "ময়লা পাচ্ছি" report।
- সমাধান: reward = "কত ময়লা আগে ছিল − কত এখন আছে" (state diff), ক্যামেরায় external supervisor verify, sensor sealed।
-
State বনাম observation: Pac-Man একটি screen frame থেকে — state Markov হবে কি? কীভাবে fix করবেন?
না — এক frame-এ ghost-এর direction জানা যায় না। দু'টি consecutive frame হলে — direction infer করা যায়, অনেকটা Markov।
Fix:
- ৪ frame stack — DQN-এর standard practice।
- RNN policy — frame একটার পর একটা, hidden state memory।
- Frame difference — velocity-এর proxy।
আরও পড়ুন
- পাঠ ০৩ · Markov Decision Process পরবর্তী পাঠ RL-এর গাণিতিক backbone — MDP।
- পাঠ ০১ · RL কী আগের পাঠ Trial-and-error দিয়ে শেখার সাধারণ ধারণা।
- পাঠ ০৪ · Value ও Q-function এই পাঠের সাথে সম্পর্কিত State-এর "মান" পরিমাপ।
- সব AI Courses ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL — সব একসাথে।