Ainsteinx Logo
Ainsteinx
👤
欢迎使用 Ainsteinx
登录

切换语言

货币

首页
博客
服务
第 05 课 · 表格型强化学习

评估 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 误差是后面几乎所有算法的核心
deep-rl-ep05-td-and-monte-carlo.py
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
  • #ບອກຕໍ່ຄວາມຮູ້