时序差分学习

时序差分学习(TD)是强化学习中关键的方法,融合了蒙特卡洛方法和动态规划的特点。TD方法能从经验中直接学习,无需环境模型,且能以自举方式更新估计值。本文深入讲解了TD预测,包括TD(0)的最优性,Sarsa和Q-learning等在线、离策略TD控制方法,强调了它们在解决强化学习问题中的应用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 时序差分学习

如果非要说一个强化学习中最核心并且新奇的方法,那么时序差分学习毫无疑问就是那种方法。TD方法是蒙特卡洛方法和动态规划思想的结合。所以TD方法有两个特点:一是可以直接从经验中学习,不需要环境模型;二是TD方法根据其他的估计来更新估计,也就是自举。时序差分学习,蒙特卡洛方法和动态规划三者之间关系的比较是强化学习中贯穿始终的主题。

6.1 TD预测

(1)Constant-α MC方法:

特点:1·常量α适合动态性问题 2,必须等到这一幕执行完成(得到Gt)才能进行估计。

(2)最简单的TD方法:

特点:只需要等一步,需要Rt+1 和V(St+1)的数值,Rt+1+rV(St+1)作为target对原有值函数进行更新。

下面是TD(0)程序框架:

从已学知识我们知道:

蒙特卡洛方法之所以是估计值是因为它利用采样的返回作为真实期望返回值。动态规划之所以说是自举方法是因为它利用V(St+1)的现有估计值,而不是真正的V(St+1)。而时序差分方法既有DP方法中的自举,又有蒙特卡洛方法中的采样。

TD error:

TD error 是指估计值和现有值之间的偏差。如果在一个片段中,值函数始终没有发生变化,那么蒙特卡洛误差可以用TD error来表示:

6.2 TD预测方法的优点

相对于DP方法来说,TD方法的优点是它不需要环境模型,不需要回报和下一个状态的可能性分配。

相对于蒙特卡罗方法,TD方法的优点是它能在线,以增量的方式学习。而蒙特卡洛方法只能

### 使用 PyTorch 实现时序差分学习 为了实现时序差分(TD)学习,特别是TD(0),可以构建一个简单的环境模拟器以及智能体来执行动作并接收奖励。下面展示了一个简化版的实现过程,在此过程中,智能体会在一个一维环境中移动,并尝试找到最优策略。 #### 定义环境类 首先创建一个表示简单迷宫的一维环境: ```python import torch import random class SimpleMazeEnv: def __init__(self, size=5, goal_position=None): self.size = size if not goal_position or goal_position >= size: self.goal_position = size - 1 else: self.goal_position = goal_position self.agent_position = 0 def reset(self): """重置环境""" self.agent_position = 0 return self.agent_position def step(self, action): """ 执行一步行动. 参数: action (int): 动作索引(0 表示左移;1 表示右移) 返回: tuple: 下一个状态的位置编号、即时奖励和是否结束标志位 """ done = False reward = -1 # 默认每步都有负回报鼓励快速达到终点 if action == 0 and self.agent_position > 0: self.agent_position -= 1 elif action == 1 and self.agent_position < self.size - 1: self.agent_position += 1 if self.agent_position == self.goal_position: done = True reward = 10 # 到达目标位置给予正向激励 return self.agent_position, reward, done ``` #### 创建智能体类 接着定义智能体,该智能体能够存储其价值函数并通过TD(0)方法对其进行更新: ```python class TDAgent: def __init__(self, env_size, alpha=0.1, gamma=0.9): self.value_function = {state: 0 for state in range(env_size)} self.alpha = alpha # 学习率 self.gamma = gamma # 折扣因子 def update_value(self, current_state, next_state, reward): td_target = reward + self.gamma * self.value_function[next_state] td_error = td_target - self.value_function[current_state] self.value_function[current_state] += self.alpha * td_error ``` #### 训练循环 最后编写一段脚本来运行上述组件,让智能体在这个小型迷宫里进行多次试验直到学会最佳路径[^4]: ```python def train_td_agent(num_episodes=500): env = SimpleMazeEnv() agent = TDAgent(env.size) for episode in range(num_episodes): state = env.reset() while True: action = random.choice([0, 1]) # 随机选择动作 next_state, reward, done = env.step(action) agent.update_value(state, next_state, reward) if done: break state = next_state train_td_agent() print(agent.value_function) ``` 这段代码展示了如何使用Python与PyTorch库之外的基础工具完成一次基础的时间差异学习实验。虽然这里并没有直接涉及神经网络的应用,但是这种方法同样适用于更复杂的场景中,比如当状态空间变得非常大以至于无法显式枚举所有可能的状态时,则可以通过引入深度Q网络(DQN)或其他形式的功能逼近技术来进行改进[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值