强化学习决策环 — 先验资格,再选路线,最后配探索
R — 原文 (Reading)
"当我们执行某个操作(例如,施肥)时,并不能立即获得这个最终奖赏,甚至难以判断当前操作对最终奖赏的影响,仅能得到一个当前反馈(例如,瓜苗看起来更健壮了)。我们需多次种瓜,在种瓜过程中不断摸索,然后才能总结出较好的种瓜策略。"
— 周志华, 《机器学习》第16章 16.1节 "任务与奖赏"
"若学习算法不依赖于环境建模,则称为'免模型学习'(model-free learning),这比有模型学习要困难得多。"
— 周志华, 《机器学习》第16章 16.4节 "免模型学习"
"'探索'和'利用'这两者是矛盾的,因为尝试次数(即总投币数)有限,加强了一方则会自然削弱另一方,这就是强化学习所面临的'探索-利用窘境'(Exploration-Exploitation dilemma)。"
— 周志华, 《机器学习》第16章 16.2.1节 "探索与利用"
I — 方法论骨架 (Interpretation)
强化学习处理的是"没有老师告诉你在某状态下该做什么、只有事后结算的累积奖赏"的学习问题:机器在环境中不断尝试,学得策略 π 使长期累积奖赏最大。形式上是四元组 E=(X,A,P,R)——状态空间、动作空间、转移概率、奖赏函数。它相当于"具有延迟标记信息的监督学习",延迟二字就是一切困难的根源。
方法论是一条三级决策链。
第一级:资格审。 任务必须同时满足两个特征——序贯决策(动作影响后续状态)+ 延迟奖赏(好坏要许多步之后才揭晓)。缺任何一个都别用 RL:有即时标签是监督学习;一步定输赢退化成单步优化。种瓜是好例子:施肥的效果要收获时才知道,当下只有"瓜苗更健壮"这类即时信号。
第二级:路线分岔——环境模型知道吗? 转移概率和奖赏函数已知(或能在机器内可靠模拟)→ 有模型学习,归结为动态规划:策略评估(Bellman 递归展开)与策略改进(换入当前最优动作)交替迭代至收敛,或直接值迭代。未知 → 免模型学习,困难得多:无法全概率展开就只能真实交互采样,且估计对象要从状态值 V 换成状态-动作值 Q。采样后批更新是蒙特卡罗(整条轨迹跑完再平均,简单但慢);每走一步就更新是时序差分 TD(结合 DP 与 MC 的思想,效率更高)——Sarsa 是同策略版本(评估和执行都是 ε-贪心策略),Q-learning 是异策略版本(评估原始策略、执行 ε-贪心)。
第三级:全程配探索纪律。 尝试次数有限,探索(估准各动作)与利用(选当前最优)零和拉扯:仅探索估得准却没机会赢,仅利用会被开局运气锁死。折中的标配是 ε-贪心(ε 按不确定性调、可随时间衰减如 1/√t)或 Softmax(温度 τ 控制软硬);免模型评估时 ε-贪心还兼任"制造轨迹多样性"的职责——确定性策略采一万条轨迹其实是同一条。
边界提醒:以上全部建立在表格值函数上(每个状态一格)。状态空间连续/巨大时表格失效,需离散化(难)或值函数近似(线性起步,可换核方法/神经网络)——这是表格方法到函数逼近的分界线,跨线会引入新的不稳定来源。
A1 — 书中的应用 (Past Application)
案例 1: 种西瓜的 MDP 具象化 (c37)
- 问题: 种瓜从选种到浇水施肥除草杀虫,要等收获才知道瓜好不好——如何把这个过程变成机器能学的形式?
- 方法论的使用: 作者将其映射为 MDP 四元组:状态=瓜苗长势的描述;动作=浇水、施不同的肥、用不同的农药等;转移概率=如缺水状态下浇水,瓜苗有一定概率恢复健康也有一定概率无法恢复;奖赏=健康苗 +1、凋零 -10、最终好瓜 +100。核心困难被点破:执行"施肥"时拿不到最终奖赏,甚至难以判断它对最终奖赏的影响,只有"瓜苗看起来更健壮了"这种即时反馈——所以必须多次种瓜摸索策略。配套最小算例"给西瓜浇水"只有四个状态(健康/缺水/溢水/凋亡)、两个动作(浇水/不浇水),可直接写出最优策略:缺水浇、溢水不浇。
- 结论: 延迟奖赏 + 序贯决策正是 RL 与监督学习的分界;RL 可看作"具有延迟标记信息的监督学习问题"——策略对应分类器,但没有"示例-标记"对可学。
- 结果: 该具象化成为整章的公理级场景,四元组每一项都有瓜田对应物,后续算法(赌博机→动态规划→MC/TD)全部回扣到此。
案例 2: 2-摇臂赌博机的数值对照实验
- 问题: ε-贪心与 Softmax 孰优孰劣?空谈无益,作者给出可复算的对照。
- 方法论的使用: 构造最小实验:摇臂1以 0.4 概率返回奖赏1、0.6 概率返回 0;摇臂2以 0.2 概率返回 1、0.8 概率返回 0。对仅探索、仅利用、不同参数的 ε-贪心与 Softmax 各跑重复 1000 次实验取平均累积奖赏曲线。
- 结论: Softmax(T=0.01) 曲线几乎与仅利用重合;两算法孰优"主要取决于具体应用"——不存在普适赢家,参数(ε 大小/衰减、温度 τ)才是实际杠杆。
- 结果: 确立"折中参数按不确定性调"的操作口径:奖赏分布宽 → 加大 ε 或升温;分布窄且尝试次数极大 → 让 ε 随 t 衰减(如 1/√t)。
A2 — 触发场景 (Future Trigger) ★
用户会在什么情境下需要这个 skill?
- 用户描述的问题里动作会影响后续局面、好坏要很久才揭晓(定价、推荐序列、调度、游戏 AI、机器人调参),但没意识到这和普通预测任务的根本差异。
- 用户想给训练 agent 设计奖励函数,纠结"每步给 0 还是 -1"、"稀疏奖励训不动怎么办"。
- 用户实现了 Q-learning/Sarsa 但 agent 行为怪异:要么从不试新动作(固化),要么全程乱试不收敛,或者采样日志里轨迹一模一样、Q 值从不更新。
- 用户问"我知道环境的模拟器/规则(棋盘规则、仿真器),还要不要免模型算法"。
- 用户的状态是连续向量(传感器读数、图像特征),表格 Q 表存不下,不知道何时及如何过渡到函数逼近。
语言信号 (用户的话里出现这些就应激活)
- "强化学习适不适合" / "RL 能不能做 X" / "reward 怎么设计" / "奖赏函数"
- "Q-learning 和 Sarsa 区别" / "on-policy off-policy 同策略异策略" / "DQN 入门"
- "exploration exploitation" / "探索利用窘境" / "epsilon greedy / ε-贪心 / Softmax 温度"
- "agent 训练不动" / "累积奖赏不涨" / "reward 太稀疏" / "MDP 四元组"
与相邻 skill 的区分
- 与
ml-task-matching的区别: 那边管"监督学习族内部选哪个算法";本 skill 管"要不要进 RL 这个范式"及范式内路线。用户手里是有标签数据集 → 选型;问题是序贯决策且无标签 → 本 skill。 - 与
ml-diagnosis的区别: 训练不动在本 skill 内先按结构性病因排查(探索失衡/确定性策略零信息/奖赏设计缺陷/表格容量爆掉);排除这些后若涉及值函数近似的偏差-方差问题(神经网络逼近引入的不稳定),移交诊断流程深查。 - 与
ml-semisupervised的区别: 都属于"标签稀缺"家族,但半监督靠未标注样本的分布信息提泛化,RL 靠环境交互的延迟奖赏学策略——数据形态完全不同(静态数据集 vs 交互轨迹),别混淆。
E — 可执行步骤 (Execution)
当 skill 被激活后, agent 应按以下步骤执行:
资格审查
- 检查两个必要特征:动作是否影响后续状态(序贯性)?结果好坏是否延迟揭晓(延迟奖赏)?能否定义出状态、动作、奖赏三要素?
- 完成标准: 写出任务的 (X, A, P?, R?) 四元组草稿——P/R 可以先留空但必须确认"存在"。
- 判停条件: 若动作不影响后续状态且奖赏即时 → 不是 RL 问题:有标签走监督学习,无标签走聚类/优化,明确告知用户退出本流程。
奖赏设计审查
- 检查奖赏函数:是否与最终目标一致(避免代理指标劫持)?量级是否合理(正负奖赏比例决定风险偏好)?稀疏程度(只在终点给 vs 全程塑形 shaping)?
- 完成标准: 输出奖赏表(状态/动作 → 数值)及其设计理由一句话;标注已知风险(如"每步 -1 会催促赶路"类副作用)。
路线分岔:模型可知吗
- 有可靠模拟器/已知转移规律 → 有模型:策略迭代或值迭代(动态规划),无需真实试错;未知且难以模拟 → 免模型:继续第 4 步。
- 完成标准: 给出"有模型/免模型"判定及依据(谁能提供 P 和 R?)。
- 判停条件: 有模型 → 直接给动态规划方案(策略评估+改进迭代环,或值迭代),跳过第 4 步。
免模型的算法细分
- 更新粒度选择:允许整轨迹批更新、实现最简 → 蒙特卡罗;需要每步在线更新、样本效率优先 → 时序差分。TD 内部再选:希望最终使用的是探索性策略本身 → Sarsa(同策略);希望学到确定性最优策略、探索只为服务评估 → Q-learning(异策略)。
- 完成标准: 写出所选算法名 + "为什么不是另一个"的一句话理由(更新粒度/策略口径二选一说清)。
配置探索机制
- 为执行策略配 ε-贪心(初值较大逐步衰减,如 ε=1/√t)或 Softmax(温度 τ);免模型评估场景必须保证非零探索概率,否则轨迹无多样性、估计零信息。
- 完成标准: 输出探索参数(ε 初值/衰减计划或 τ 值)及调整依据(奖赏分布的不确定性宽窄)。
容量边界检查
- 状态空间规模估算:|X|×|A| 在万级以内且离散 → 表格法成立;连续/巨大 → 明确警告表格失效,给出升级路径(离散化风险提示 → 线性值函数近似起步 → 必要时核方法/神经网络,并预告近似引入的新不稳定)。
- 完成标准: 输出"表格 vs 函数逼近"判定与容量数字依据。
- 判停条件: 若训练不动且已定位为探索失衡/确定性策略零信息(轨迹完全相同)/奖赏设计缺陷之一 → 先修该项并重跑,不要急于换更复杂算法。
验收口径
- 报告累积奖赏学习曲线(多随机种子平均);声明所用累积奖赏口径(T 步 or γ 折扣)及 γ 取值理由。
- 完成标准: 曲线含方差带、口径声明齐全。
B — 边界 (Boundary) ★
不要在以下情况使用此 skill
- 一次性预测任务(给 X 出 ŷ,动作不改变世界状态):这是监督学习,套 RL 是自找延迟信用分配的苦吃。
- 有即时完整反馈的控制(每步都知道正确动作):直接模仿学习/监督学习更高效——书中明言专家范例可直接构造"状态-动作对"数据集用分类回归求解,不必让 agent 盲试。
- 无法定义合理奖赏且没有专家范例:奖赏是 RL 的燃料,燃料造不出来时逆强化学习(从范例反推奖赏)是前置依赖而非本 skill 能绕开的。
作者在书中警告的失败模式
- 探索-利用两极失败(x50): 仅探索估准了每个摇臂却几乎没机会玩最优臂;仅利用被开局运气无限锁定次优动作。两者皆败是结构性矛盾而非工程瑕疵——任何单边策略都无法最大化累积奖赏,折中参数是必备品而非装饰。
- 确定性策略零信息死局(x51): 免模型情形下用确定性策略采样,"只能得到多条相同的轨迹"——一万条轨迹等于一条,值函数估计毫无统计效力,策略改进链断裂。修复:执行侧加 ε-贪心制造多样性;若要评估的恰是原始策略而非 ε-贪心策略 → 异策略 + 重要性采样加权修正。
- 奖赏设计的坑(习题 16.9 点名): 目标驱动任务中"每步未达目标的奖赏为 0、-1 还是 1"会产生截然不同的行为——0 催促尽快到达、-1 惩罚拖延但也催促赶路、正奖赏可能鼓励原地徘徊刷分;奖赏函数是策略的真正目标,写错一行代码 agent 就在忠实 optimizing 错误的东西。
- 样本效率的现实警告: 免模型学习"比有模型学习要困难得多";蒙特卡罗须完成整条轨迹才能更新、效率低得多;而种瓜式任务每次试验成本高昂(多次种瓜才摸得出策略)——真实交互昂贵时先考虑有模型/模拟器/模仿学习冷启动,别默认裸 RL 划得来。
- 逐状态独立赌博机的天真方案: 把每个状态当独立 K-摇臂赌博机处理忽略了 MDP 结构——"若能有效考虑马尔可夫决策过程的特性,则可有更聪明的办法"。
作者的盲点 / 时代局限 (2016 成书)
- 书中值函数近似止步于线性 + 一句"可换神经网络";DQN 及之后的深度 RL 全部缺位——经验回放、目标网络、策略梯度/PPO 等现代标配不在覆盖范围,深度化后的训练不稳定问题需另行参考专门文献。
- 奖赏设计的系统性方法论(reward hacking、reward modeling)书中仅有习题级提示;当代实践中这是 RL 项目失败的第一大因,本 skill 的审查步骤只是起点不是终点。
- 书中任务均为状态完全可观察的 MDP;部分可观察(POMDP)仅在阅读材料中提及——现实任务中观测不全时,四元组要先扩展再套用。
- 工程视角薄弱:交互数据的日志化、离线 RL(batch RL)、sim-to-real 迁移均未讨论;生产环境落地时这些常比算法选择更致命。
容易混淆的邻近方法论
- 上下文老虎机(contextual bandit): 有状态信息但不影响后续状态的"一步 RL";不需要完整 MDP 机器,别为了"像 RL"上重型武器。
- 最优控制/运筹优化: 模型已知时 RL 退化为动态规划——这正是书中口径(运筹学界称近似动态规划);能写出精确模型时经典优化往往更稳,RL 的独特价值在模型未知。
- 模仿学习: 有专家轨迹时的替代/加速路线——直接模仿(状态作特征动作作标记的监督学习)或逆强化学习(反推奖赏函数);有示范数据时先模仿再 RL 微调远快于从零盲试。
- A/B 测试: 单次分流对比,无序贯自适应;探索-利用的在线分配(bandit 类)是其动态版,两者别混称。
相关 skills
- contrasts-with: ml-task-matching(监督族内选型 vs 进不进 RL 范式)
- composes-with: ml-diagnosis(值函数近似层面的偏差-方差诊断接力)
审计信息
- 验证通过: c37 在阶段1.5 判为"教学演示类(低值降级)"淘汰、f43 判 V3 未过、x50/x51 因当时"无挂靠出口"淘汰——本 skill 属扩充批A·第2组新增(覆盖 ch16),为其提供归属;R 引文已逐字核对章节文本,B 段失败模式均出自原书明言(含习题16.9)
- 测试通过率: 待阶段 3 测试 (详见 test-prompts.json)
- skill_version: 0.0.1
- 蒸馏时间: 2026-08-24