ประเมินพฤติกรรมของ agent
TD และ Monte Carlo: ประมาณค่าของ policy จากประสบการณ์
บทนี้รวม 2 ปัญหาเข้าด้วยกัน: feedback ต่อเนื่องและประเมิน เป้าหมายคือประมาณค่าของ policy ที่มี โดยไม่รู้ MDP (prediction problem)
โค้ดตัวอย่างเปรียบเทียบ TD(0) กับ Monte Carlo ในเกม random walk ที่รู้ค่าจริง
Monte Carlo (MC)รอจนจบเกมแล้วใช้ผลตอบแทนจริง G ไม่มี bias แต่ variance สูง
Temporal-Difference (TD)อัปเดตทุกก้าวโดยใช้ค่าประมาณของ state ถัดไป (bootstrapping) variance ต่ำแต่มี bias
MC : V(s) ← V(s) + α [ Gₜ − V(s) ]
TD : V(s) ← V(s) + α [ rₜ₊₁ + γ·V(sₜ₊₁) − V(s) ]
└──── TD target ────┘
└──────── TD error ─────────┘
- n-step TD: ใช้รางวัลจริง n ก้าวแล้วจึง bootstrap n=1 คือ TD, n=∞ คือ MC
- TD(λ): ผสมทุก n เข้าด้วยกันด้วยน้ำหนัก λ โดยใช้ eligibility traces
สิ่งที่ควรจำ
- MC ↔ TD คือสองปลายของเส้นเดียวกัน: bias ต่ำ/variance สูง ↔ bias สูง/variance ต่ำ
- TD error คือหัวใจของเกือบทุก algorithm ในบทต่อไป
import numpy as np
# Random walk 7 ຊ່ອງ: 0 ແລະ 6 ແມ່ນຈຸດຈົບ, ໄປຮອດ 6 ໄດ້ +1
rng = np.random.default_rng(0)
def episode():
s, traj = 3, []
while s not in (0, 6):
s2 = s + rng.choice([-1, 1])
traj.append((s, 1.0 if s2 == 6 else 0.0, s2))
s = s2
return traj
def td0(n_episodes=5000, alpha=0.01, gamma=1.0):
V = np.zeros(7)
for _ in range(n_episodes):
for s, r, s2 in episode():
target = r + gamma * V[s2] # TD target (bootstrap)
V[s] += alpha * (target - V[s]) # TD error × learning rate
return V
def monte_carlo(n_episodes=5000):
V, N = np.zeros(7), np.zeros(7)
for _ in range(n_episodes):
traj = episode()
G = traj[-1][1] # γ=1, ລາງວັນມີແຕ່ຕອນທ້າຍ
for s in {s for s, _, _ in traj}: # first-visit MC
N[s] += 1
V[s] += (G - V[s]) / N[s] # ສະເລ່ຍຜົນຕອບແທນຈິງທັງເກມ
return V
print("ຄ່າຈິງ :", np.round(np.arange(1, 6) / 6, 3))
print("TD(0) :", np.round(td0()[1:6], 3))
print("MC :", np.round(monte_carlo()[1:6], 3))
ผลลัพธ์
ຄ່າຈິງ : [0.167 0.333 0.5 0.667 0.833] TD(0) : [0.183 0.34 0.489 0.657 0.817] MC : [0.161 0.327 0.501 0.666 0.841]
- #DeepRL
- #ReinforcementLearning
- #PythonສຳລັບຄົນLaos
- #AI
- #ບອກຕໍ່ຄວາມຮູ້