1.3 回合与连续任务:终止、持续与探索利用困境


1.3 回合与连续任务:终止、持续与探索利用困境

本节摘要:任务的时间结构分两种:有明确终点的回合式任务(一局棋、一次迷宫),与没有终点的连续式任务(恒温控制、量化交易)。两者在数学处理上的差别集中在终止状态与回报求和的截断方式上;而无论哪种任务,智能体都逃不开同一对矛盾——是利用已知的好动作,还是探索未知可能更优的动作。本节把这两种时间结构讲透,并把探索利用困境正式立为全书线索。

先把问题摆上桌

你已经认识了闭环的五个零件,也知道了优化目标是折扣回报。但还有一个时间维度的问题悬着:这个循环会永远转下去吗?什么时候算"学完了一局"?这不是细节问题——它决定了回报怎么求和、价值函数怎么定义、训练代码里 episode 怎么写。同时,还有一处"看不见的坑"等着每个初学者:智能体选动作时,到底该选当前看起来最好的,还是该试试没试过的?这两件事,一横一纵,共同构成第 1 章的地基。

一、回合式任务:有终点的世界

一局俄罗斯方块终会结束,一次迷宫导航终会到出口。这类任务里,交互被切成一个个回合(episode):从起点状态出发,经过有限步到达终止状态,然后环境重置,开始下一回合。数学上的处理很干净:终止状态的后续回报定义为零——把终止状态记作 s_T,则 G_T = 0,于是 G_t 可以从后往前递推:

G_{T-1} = R_T + γ·G_T = R_T
G_{T-2} = R_{T-1} + γ·G_{T-1}
...一路推回 G_0。

"终止"在智能体的学习里扮演特殊的角色:它是唯一确定无噪声的信息锚点。第 3 章写 Q-Learning 更新时你会看到,终止后的更新要把"未来价值"那一项直接清零——r + γ·max Q(s', ·) 中的 γ·max 项在 done=True 时必须省略。漏写这个判断是初学者实现 TD 类算法的第一大 bug,训练曲线表现为价值一路发散。回合式任务的另一处便利是经验回放的边界清晰:一条完整轨迹就是一条训练样本,第 4 章 DQN 的回放池直接受益。

二、连续式任务:没有终点线的马拉松

恒温器要一直运行,推荐系统没有"打完收工"。连续式任务里没有天然的回合边界,G_t 若不带折扣会无限累加,所以 γ<1 从"可选项"变成"必需品"——它保证 1/(1-γ) 是回报的上界。工程上仍常人为划一个时间窗(比如每 1000 步算一段),但那只是训练上的批处理技巧,不改变任务本质。

两类任务中间还有个有用的观察维度:终止是物理的还是人为的。机械臂把零件碰飞了,这是物理终止(失败);训练代码"500 步强制截断",这是人为终止(time limit)。两者必须区别对待——人为截断时,s' 并不是真正的终止状态,它的价值不该被清零,否则智能体会学到"活得越久越没价值"的荒谬结论。成熟的实现(Gymnasium 的返回值)把这两者分开:done 与 truncated 是两个布尔量,只有前者才清零未来价值。

# Gymnasium 风格的返回值处理:done 与 truncated 要分开结算 result = env.step(action) # CartPole 之类连续式任务 s2, r, terminated, truncated, info = result done = terminated or truncated # 训练循环里的"本段结束" # 但未来价值清零只认 terminated: bootstrap = 0.0 if terminated else gamma * v_est(s2) target = r + bootstrap # truncated 时 s2 的价值仍然有效

三、探索与利用:一个贯穿全书的困境

现在把最后一根地基桩打下去。假设你在一家新公司,楼下有二十家饭馆。第一个月你可能随机挑着吃(探索),摸清了平均水准;之后你大概率固定去那两家合口味的(利用)。但问题来了:那家你只去过一次、恰逢厨师失手的店,真的差吗?**一直利用,你可能永远困在局部最好;一直探索,你把预算浪费在已知不行的选项上。**这就是探索与利用的矛盾(exploration-exploitation dilemma)。

在强化学习里这个矛盾更尖锐,因为智能体的行为决定它收集到什么数据:不探索的状态永远不会有评估数据,价值估计就永远停留在初值。第 1 章 1.1 节那个随机走走廊的代码,本质上是 100% 探索;而一个贪心到只选当前最优 Q 值的策略是 0% 探索——两者都学不好。折中方案 ε-greedy(以小概率 ε 随机、大概率贪心)将在第 3 章成为 Q-Learning 的标配,UCB、Boltzmann、好奇心驱动等更精细的策略放到第 6 章展开。这里只需要立起三个判断:其一,探索需求随训练进程衰减(早期多探,后期多利用);其二,探索的代价要计入回报(试错的罚金是真实成本);其三,稀疏奖励任务里,均匀随机探索几乎必然失败,需要更聪明的探索信号。

用一个小实验把"探索不足"的代价量化。设想十个老虎机,各自奖励均值不同,玩 2000 次:

import random arms = [0.2, 0.35, 0.5, 0.42, 0.28, 0.55, 0.31, 0.48, 0.22, 0.38] # 各臂真实均值 best = max(arms) # 0.55 def play(arm): # 拉一次臂,奖励是均值加噪声 return random.gauss(arms[arm], 0.1) def greedy_run(): est = [0.0] * 10 # 对每臂奖励的估计 cnt = [0] * 10 total = 0.0 for _ in range(2000): a = est.index(max(est)) # 永远选当前最优估计:0% 探索 r = play(a) cnt[a] += 1 est[a] += (r - est[a]) / cnt[a] total += r return total def eps_run(eps): est, cnt, total = [0.0] * 10, [0] * 10, 0.0 for _ in range(2000): a = random.randrange(10) if random.random() < eps else est.index(max(est)) r = play(a) cnt[a] += 1 est[a] += (r - est[a]) / cnt[a] total += r return total print(f"纯贪心 2000 步总奖励约: {greedy_run():.0f}") print(f"ε=0.1 2000 步总奖励约: {eps_run(0.1):.0f}") # 典型输出: 纯贪心约 950;ε=0.1 约 1030 # 纯贪心常被前几次坏运气锁死在中游臂上,10% 的探索足以跳出来

十步的差距乘上 2000 次就是百量级的损失——而这只是最温和的十臂场景。在状态空间巨大的任务里,纯贪心策略连"好区域"的边都摸不到。

收束与展望

回合与连续之分决定了回报求和与终止处理;探索与利用之争决定了行为策略怎么写。两者都不是算法内部细节,而是任务给的约束。往下一步:把闭环、回报、终止、探索这些散装概念装进一个统一的数学容器——马尔可夫决策过程。你会发现第 1 章的每句话在 MDP 里都有一个精确的对应物。

  • 回合式任务用终止状态截断回报递推,终止信息是价值学习里最可靠的锚点。
  • 连续式任务必须靠 γ<1 保证回报有界;人为截断与物理终止要分开结算。
  • 探索不足的代价是"被早期运气锁死",ε-greedy 是最朴素的解,精细方案见第 6 章。
  • ε 的取值是"探索预算"的表态,训练后期应逐步衰减。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U