评估 agent 的行为
TD 与蒙特卡洛:从经验中估计策略的价值。
本课把两个挑战结合起来:序列性反馈和评价性反馈。目标是在不知道 MDP 的情况下估计给定策略的价值,即预测问题。
示例在已知真实值的随机游走游戏中比较 TD(0) 与蒙特卡洛方法。
蒙特卡洛(MC)等回合结束后使用真实回报 G。无偏差,但方差大
时序差分(TD)每一步都用下一状态的估计值来更新(自举)。方差小但有偏差
MC : V(s) ← V(s) + α [ Gₜ − V(s) ]
TD : V(s) ← V(s) + α [ rₜ₊₁ + γ·V(sₜ₊₁) − V(s) ]
└──── TD target ────┘
└──────── TD error ─────────┘
- n 步 TD:先用 n 步真实奖励,再自举。n=1 即 TD,n=∞ 即 MC
- TD(λ):用资格迹(eligibility traces)以权重 λ 混合所有 n
要点
- MC 与 TD 是同一条线的两端:低偏差/高方差 ↔ 高偏差/低方差
- TD 误差是后面几乎所有算法的核心
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
- #ບອກຕໍ່ຄວາມຮູ້