Note:强化学习(七) 完结
2026 | ming
十七. 稀疏奖励的常见应对措施
回想一下,我们之所以觉得 DQN、PPO 这些算法厉害,很大程度上是因为智能体每走一步都能从环境里获得一点“信号”。哪怕奖励有噪声、有延迟,只要密度足够,价值函数总能慢慢拟合出一个靠谱的方向。
但现实中,我们经常遇到另一种剧本:用强化学习训练智能体的时候,多数时候智能体都不能得到奖励。在不能得到奖励的情况下,训练智能体是非常困难的。例如,假设我们要训练一个机器臂,桌上有一个螺丝钉与一个螺丝刀,要训练它用螺丝刀把螺丝钉拧进去很难,因为一开始智能体什么都不知道,它唯一能够做不同的动作的原因是探索。例如,智能体使用Q学习进行训练时会有一些随机性,它会采取一些过去没有采取过的动作。但要智能体把螺丝刀捡起来,再把螺丝拧进去,得到奖励1,这件事是非常困难的。所以不管智能体做了什么事情,它得到的奖励永远都是 0,对它来说不管采取什么样的动作都是一样糟或者是一样好。所以,它最后什么都不会学到。
如果环境中的奖励非常稀疏,强化学习的问题就会变得非常困难,但是人类可以在稀疏奖励的情况下去学习。人生大多数的时候没有奖励或惩罚,但人类还是可以采取各种各样的行为。所以,一个真正厉害的人工智能应该能够在稀疏奖励的情况下学到如何与环境交互。
17.1 奖励塑形
环境本身有一个客观的奖励,它是我们最终想优化的东西。但为了让智能体在“颗粒无收”的阶段也能感受到进步,我们可以额外设计一些引导性奖励。
例如,我们把小孩当成一个智能体,他可以采取两个动作:玩耍或者学习。如果他玩耍,在下一个时间点就会得到奖励 1。但是他在月考的时候,成绩可能会很差,所以在 100 个小时之后,他会得到奖励-100 。他也可以决定要学习,在下一个时间点,因为他没有玩耍,所以觉得很不爽,所以得到奖励 -1 。但是在 100 个小时后,他可以得到奖励 100。对于一个小孩来说,他可能就会想要采取玩耍的动作而不是学习的动作。我们计算的是累积奖励,但也许对小孩来说,折扣因子会很大,所以他就不太在意未来的奖励。而且因为他是一个小孩,还没有很多经验,所以他的Q函数估计是非常不精准的。所以要他去估计很远以后会得到的累积奖励,他是估计不出来的。这时候大人就要引导他,对他说:“如果你学习,我就给你一根棒棒糖。”对小孩来说,下一个时间点他得到的奖励就变成正的,他也许就会认为学习是比玩耍好的。虽然这并不是真正的奖励,而是其他人引导他的奖励。设计奖励的概念是一样的,简单来说,就是我们自己想办法设计一些奖励,这些奖励不是环境真正的奖励。
但如果我们胡乱添加额外奖励,最优策略极可能跑偏。比如在网格世界里,仅仅为了鼓励“往前走”而每步给一个小奖励,智能体可能会在原地转圈来刷分,完全忘记最终目标。
现代强化学习里有一个干净的理论结果:基于势能的奖励塑形(Potential-Based Reward Shaping) 不会改变最优策略。形式化地,我们为每个状态 定义一个势能函数 ,并把原始奖励 替换为:
直观理解:多出来的这一项衡量的是“从 转移到 后,势能提升了多少”。它就像给状态空间铺上了一层平滑的“斜坡”,让智能体在每一步都能感受到哪个方向更接近目标,但整条轨迹上累积的额外奖励总和为零(只差边界项),因此最优策略保持不变。
在实际设计时,我们并不总是严格使用势能函数,很多时候就是凭领域知识加一些稠密的辅助奖励。不过,只要我们有能力把“感觉上更好”的状态映射成一个数值,就可以用基于势能的塑形来安全地引导探索,这是在稀疏奖励环境下最稳妥的人为添加手段。
17.2 课程学习
课程学习不是强化学习独有的概念,在深度学习中,我们都会用到课程学习的概念。具体来说,课程学习是指我们为智能体的学习做规划,给他“喂”的训练数据是有顺序的,通常都是由简单到难的。比如,假设我们要教一个小朋友学微积分,他做错题就惩罚他,这样他很难学会。我们应该先教他乘法,再教他微积分。所以课程学习就是指在训练智能体的时候,训练数据从简单到困难。就算不是强化学习,一般在训练深度网络的时候,我们有时候也会这么做。例如,在训练循环神经网络 的时候,已经有很多的文献都证明,先给智能体看短的序列,再慢慢给它看长的序列,通常它可以学得比较好。在强化学习中,我们就是要帮智能体规划它的课程,课程难度从易到难。
对于 Meta 玩 ViZDoom 的智能体,是有为智能体规划课程的,从课程 0 一直到课程 7。在不同的课程中,怪物的速度与血量是不一样的。所以,在越进阶的课程中,怪物的速度越快,血量越多。如果直接上课程 7,智能体是无法学习的。要从课程 0 开始,一点一点增加难度,这样智能体才学得起来。
手动设计课程依然需要大量领域知识。近年的趋势是让算法自己去决定“下一步该练什么”,这通常通过无监督环境生成或后悔最小化来实现。但无论手动还是自动,课程学习的核心原则始终没变:在能力边界(zone of proximal development)上持续训练,确保每个阶段的成功概率不至于低到让价值函数彻底崩溃。
17.3 行为克隆
行为克隆(Behavioral Cloning, BC)的方法出奇地朴素:直接收集专家数据,将状态 作为特征,动作 作为标签,做标准的监督学习。这就像是让一个新手先通过观看高手录像来“临摹”,而不是在完全盲目的情况下从零开始乱试。
在数据量充足时,BC 可以瞬间把策略拉到一个相当不错的水平——AlphaGo 最初的策略网络就是靠 3000 万人类落子训练出来的,仅靠这一步就已经超越了许多业余棋手。在很多实际工程中,BC 常常作为策略预训练的手段:先让策略学会“看起来像专家”的动作分布,再切换到强化学习微调,这样在早期交互中智能体至少能做出一些合理行为,从而更容易撞见正向奖励。
BC 最大的软肋在于分布偏移。强化学习是序贯决策:一旦策略在某个状态犯了哪怕一丁点错误,它就可能滑入一个专家数据完全没覆盖过的状态区域。在那个陌生状态下,策略因为没有训练过,只能胡猜动作,继而带出更离谱的状态,形成“一步错、步步错”的连锁反应。这就是复合误差,也是为什么单纯靠 BC 很难超越专家,甚至常常远不如专家。因此,BC 的正确定位是加速早期训练,而不是替代强化学习。
十八. 阶段性总结
笔记内容,就先在这里告一段落了。
回望这一路,我们从最朴素的表格型价值迭代和蒙特卡洛方法出发,穿过贝尔曼最优方程,遇见了 Q-learning 和它装入神经网络后的模样——DQN。随后一脚踏入策略梯度,从最纯粹的 REINFORCE,到引入 Actor-Critic 的优雅框架,再到 A2C、GAE,最终驻足在现代策略优化的事实标准——PPO。这一串名字,如果你能清晰地看到每一步背后的“为什么”,那么恭喜你,强化学习最核心的那把钥匙,你已经握在手里了。
这本小册子把大量笔墨留给了离散环境下的经典决策场景。但强化学习的世界远比这辽阔:连续控制、多智能体协同、离线强化学习……这些听起来就让人兴奋的方向,我们还没来得及展开。不过,我想请你回忆一下 2016 年那场震动世界的对弈——AlphaGo 击败李世石,随后又战胜柯洁。如今回头看,那座里程碑的内部其实一点儿也不神秘:蒙特卡洛树搜索是它的前瞻引擎,价值网络负责看清局面,策略网络负责选定方向。而这两个网络的训练,本质上就是我们反复练习的价值回归与策略梯度。把这几块积木搭起来,或许真的花不了一个小时,你就能亲手触及那个曾经遥不可及的时刻。
更不用说当下了。宇树机器人在真实世界中稳稳行走,大语言模型在推理时展现出惊人的思考链,这些令人屏息的突破背后,强化学习都是无可替代的核心引擎。机器人的控制策略用的是 PPO,正是你刚刚学透的 GAE + Actor-Critic + 裁剪目标那一套,只不过策略网络输出的变成了电机力矩的均值和方差。而大语言模型的 RLHF,同样用 PPO 来微调语言策略,只是“环境”换成了一个奖励模型,再加上一串逐 token 生长的文本序列。至于最近让 DeepSeek-R1 火出圈的 GRPO,你完全可以把它看作 PPO 的一次灵巧瘦身:干脆丢掉价值网络,直接拿一组采样结果的平均得分作基线来估计优势。你看,无论外表多么前沿,它们的心跳,依然在咱们这册笔记的框架里。
所以,接下来我可能会再写一个小小的系列——《Note:强化学习进阶》。那里会有连续控制、最大熵 SAC、off-policy 的策略梯度、基于模型的 RL,以及更加错综复杂的多智能体场景。但在那之前,请先把眼前这篇笔记的每一块砖都踩实。因为此刻你搭建起来的知识骨架,已经足以支撑你去读懂 arXiv 上任何一篇崭新的 RL 论文。那种“我居然看得懂”的惊喜,会是你给自己的最好的奖励。
感谢你一字一句读到这里。基础已经打下,下一段冒险就在前方——我们下个系列见 👋
END~