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

Agent, Environment, Reward — মূল অনুঘটক

Agent, environment, action, reward — the core abstractions of RL
৬ মিনিট পড়া উচ্চ · Advanced Python কোডসহ

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

  • 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 করি।

RL-এর চার (+১) অনুঘটক

১) 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)।

Poker খেলায় — state = সব খেলোয়াড়ের কার্ড + deck-এর বাকি। কিন্তু আপনি শুধু আপনার নিজের কার্ড + open cards দেখেন। এই difference-ই poker-কে দাবা থেকে কঠিন করে।

যেখানে $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$ আবশ্যক।

Continuing task-এ discounted return $G_t = \sum_{k=0}^\infty \gamma^k r_{t+k+1}$ — convergent কারণ $\gamma < 1$ এবং reward bounded।

৫ · 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।

এক timestep — কী ঘটে state $s_t$ পরিবেশের অবস্থা action $a_t$ π(a|s) P(s'|s,a), R(s,a) env dynamics $s_{t+1}, r_{t+1}$ নতুন state + reward 🤖 Agent-এর কাজ policy π থেকে action sample policy update (পরের পাঠে) 🌍 Environment-এর কাজ P(s'|s,a) থেকে next state R(s,a,s') থেকে reward এই pattern প্রতি timestep পুনরাবৃত্তি — episode শেষ পর্যন্ত trajectory τ = (s₀, a₀, r₁, s₁, a₁, r₂, ...)
এক timestep — agent ও environment-এর roles আলাদাভাবে। trajectory এই step-গুলোর sequence।

৬ · 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।

বিখ্যাত উদাহরণ — CoastRunners (২০১৬, OpenAI): boat race গেম। Agent শিখলো — race শেষ না করে turbo-power-up গুলো বারবার সংগ্রহ করলে বেশি score। মানুষ চেয়েছিল "race জেতো", agent পেল "score বাড়াও"। reward এক, intent ভিন্ন।

আরও উদাহরণ:

  • 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

Python · Gym-style env
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}")

    
এটাই OpenAI Gym-এর interface — reset(), step(action)। সব RL library এই pattern follow করে। আপনি নিজের custom environment ১০ লাইনে বানাতে পারেন।

৯ · একাধিক episode চালিয়ে statistics

Python · 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 অনেক ভাল করবে।

    
১০০ episode-এ গড় return — random policy-র benchmark। পরের পাঠে Q-learning দিয়ে এই environment-এ ৯+ return পাবেন।

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

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

প্র ০১ 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 করে — যেটা গুরুত্বপূর্ণ।

অনুশীলন

  1. একটি 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 কঠিন।
  2. 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।
  3. 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।

আরও পড়ুন

পূর্ববর্তী পাঠ
পাঠ ০১ · RL কী