Skip to content

奖励函数设计——优化的目标从哪来?

本节导读

核心内容

  • 掌握奖励函数如何把任务目标转化为可优化的标量信号。
  • 理解稀疏奖励、奖励塑形、奖励作弊、内在奖励各自解决什么问题、带来什么风险。
  • 学会用势函数塑形在不改变最优策略的前提下增强学习信号。

核心公式

R(s,a)={+1达到目标0其他1失败(稀疏奖励函数:只在成败时给信号)R(s,a) = \begin{cases} +1 & \text{达到目标} \\ 0 & \text{其他} \\ -1 & \text{失败} \end{cases} \quad \text{(稀疏奖励函数:只在成败时给信号)}

F(s,a,s)=γΦ(s)Φ(s)(势函数奖励塑形:增强中间学习信号)F(s,a,s') = \gamma\Phi(s')-\Phi(s) \quad \text{(势函数奖励塑形:增强中间学习信号)}

rtintrinsic=f(st,at)st+12(预测误差内在奖励:鼓励探索未知状态)r_t^{intrinsic} = \|f(s_t,a_t)-s_{t+1}\|^2 \quad \text{(预测误差内在奖励:鼓励探索未知状态)}

rttotal=rtextrinsic+βrtintrinsic(总奖励组合式:合并任务奖励和探索奖励)r_t^{total} = r_t^{extrinsic}+\beta r_t^{intrinsic} \quad \text{(总奖励组合式:合并任务奖励和探索奖励)}

本节公式的作用

本节公式用于说明奖励函数如何定义强化学习中的优化目标。稀疏奖励刻画只在关键事件处给出反馈的基本形式;势函数塑形给出一种在不改变最优策略的条件下增强中间学习信号的方法;内在奖励则用于在外在奖励不足时促进探索。奖励函数并非附属实现细节,而是决定智能体优化方向的核心定义。

前两节我们走过了两条路:路线一学 Q(s,a)Q(s,a) 给动作打分,路线二直接优化策略 J(θ)J(\theta)。这两条路线虽然手段截然不同,但它们的终极目标是一致的:让累积奖励的期望最大化。

这就引出了一个我们从头到尾都默认存在,却从未仔细审视过的问题: 这个奖励函数 R(s,a)R(s,a),到底是从哪来的?是谁设计的?设计得好不好?

我们可以打个比方:如果强化学习的优化算法是一台马力强劲的引擎,那么奖励函数就是方向盘。引擎再强,方向盘只要稍微歪一点,车子就会以极快的速度开进沟里。

在绝大多数教科书里,奖励函数只是公式里的一个字母。但在强化学习的工程实践中,它是最被低估、也最容易出大问题的环节。本节我们就来聊聊,怎么给智能体设定一个“好”的目标。

奖励假说:一切目标都能变成一个数字吗?

在 MDP 的定义中,奖励 R(s,a)R(s,a) 必须是一个标量(一个普通的实数)。强化学习的祖师爷 Sutton 在 2018 年提出了一个非常霸气的论断,被称为奖励假说(Reward Hypothesis)

“所有我们所说的目标和目的,都可以被理解为:最大化接收到的标量奖励信号的累积和的期望。”

这句话的意思是,不管你想要什么——下棋赢钱、考试满分、追求人生的幸福——理论上,我都可以给你写出一个评分规则(标量奖励函数),然后用强化学习算法去优化它。

这个假说听起来很迷人,但在现实中却常常被疯狂打脸。 因为现实世界的目标往往是多维的、甚至互相矛盾的

你想训练一个自动驾驶系统,你的目标是“既要快,又要安全,还要省油”。如果你强行把这三个目标压成一个数字:

R=α×速度+β×安全+γ×省油R = \alpha \times \text{速度} + \beta \times \text{安全} + \gamma \times \text{省油}

看似很合理,但问题来了:α,β,γ\alpha, \beta, \gamma 这三个权重你怎么定? 如果 α\alpha 稍微定大了一点点,你的车可能就会变成在马路上狂飙的赛车;如果 β\beta 定大了,车可能就永远停在车库里不动了(因为不走最安全)。 这三个参数,最后往往沦为算法工程师日日夜夜调参的噩梦。

更麻烦的是,有些东西是底线,不能用“扣几分”来衡量。比如“绝对不能闯红灯”。如果你设为扣 100 分,智能体可能会发现:“只要我这趟送快递赚的钱足够多,偶尔闯个红灯也是划算的。”这种时候,标量奖励就失效了,必须引入硬性的约束(Safe RL)。

无论你信不信这个假说,它至少提醒了我们一个残酷的事实:强化学习的性能上限,死死地被奖励函数的质量卡住了。 你的算法再牛,如果给它喂了一个糟糕的奖励函数,它也只能学出一个糟糕的策略。

稀疏奖励:信号太弱,学不动

设计奖励函数时,最自然、最不容易出错的方法,就是只看最终结果: 赢了给 +1,输了给 -1,中间的过程全给 0。

R(s,a)={+1达到目标0其他1失败R(s,a) = \begin{cases} +1 & \text{达到目标} \\ 0 & \text{其他} \\ -1 & \text{失败} \end{cases}

这种设计叫稀疏奖励(Sparse Reward)。它在理论上完美无瑕,因为你完全没有对过程施加任何主观偏见。 但在实践中,它会引发一个灾难性的后果:信号太弱,根本学不动。

想象一下你被蒙住双眼放进一个巨大的迷宫,出口极其隐蔽。你像无头苍蝇一样乱撞了 1000 步,什么都没碰到。这时有人告诉你:“你这 1000 步的总分是 0”。 请问,你能从这句话里学到任何经验吗?完全不能。你根本不知道哪一步走对了,哪一步走错了。

用数字来感受一下:假设一个迷宫有 10000 种走法,只有 1 种能拿到 +1。智能体瞎跑了 10000 局,只有 1 局碰巧拿到了正分。在计算梯度时,这 1 次微弱的正信号,会瞬间被 9999 次的 0 信号淹没。算法就像是一潭死水,梯度几乎为零,训练彻底停滞。

稀疏奖励,是所有 RL 工程师绕不过去的第一座大山。 常见的爬山技巧有:

策略它的核心思路是什么?哪里会讲?
奖励塑形既然终点太远,那我就在路上撒点面包屑,引导它过去。本节马上讲
内在奖励既然外部没奖励,那就赋予它“好奇心”,让它自己奖励自己。本节最后讲
事后经验回放 (HER)射箭没中靶心?没事,把箭落点当成“新靶心”,假装自己成功了。第 11 章
课程学习先让它玩“婴儿版”迷宫,慢慢变难。第 12 章

奖励塑形:给你架梯子,但不改变终点

既然稀疏奖励是因为“长期没反馈”,那最直观的解法就是:人工添加中间奖励(Reward Shaping)

还是走迷宫。我们不再只在出口放 +1,而是写个程序:每走一步,只要你离出口的直线距离缩短了,我就给你一点小奖励;离远了,就扣点分。

Rshaping(s,a,s)=(距离变小了多少)R_{shaping}(s, a, s') = -(\text{距离变小了多少})

这样一来,智能体每走一步都有信号,训练速度直接起飞。

但这就像潘多拉的魔盒,一旦打开,就会引来一个致命的幽灵:如果面包屑撒错地方了怎么办? 如果你在迷宫死胡同里撒了一串金币,智能体可能就会开开心心地捡完金币在里面挂机,彻底忘了找出口这回事。

为了安全地撒面包屑,吴恩达(Andrew Ng)等人在 1999 年提出了一个非常优美的数学框架:势函数奖励塑形 (Potential-Based Shaping) [1]

它的做法是:定义一个代表“潜力”的函数 Φ(s)\Phi(s)(比如 Φ(s)=当前离目标的距离\Phi(s) = -\text{当前离目标的距离})。 然后规定,你这一步获得的额外奖励,必须等于你“潜力的变化量”:

F(s,a,s)=γΦ(s)Φ(s)F(s, a, s') = \gamma \Phi(s') - \Phi(s)

这个公式妙在哪里?数学上可以严格证明:只要你按照这个公式给奖励,无论你的 Φ(s)\Phi(s) 怎么写,智能体最终学出来的最优策略,和完全不加塑形时一模一样! 这相当于你给智能体架了一把梯子,引导它爬得更快,但你并没有偷偷挪动最终的终点。

我们来算一笔账: 假设你离目标 5 步,你的潜力 Φ(s)=5\Phi(s) = -5。 你走对了一步,离目标只有 4 步了,潜力变成 Φ(s)=4\Phi(s') = -4。 假设 γ=0.9\gamma = 0.9,那么这步的额外奖励 F=0.9×(4)(5)=1.4F = 0.9 \times (-4) - (-5) = 1.4。你拿到了正反馈! 如果你走错了一步,退到 6 步远,潜力变成 -6。 额外奖励 F=0.9×(6)(5)=0.4F = 0.9 \times (-6) - (-5) = -0.4。你立刻受到了惩罚!

每一步都有明确的“好坏”信号,而且因为它是差分的形式,如果在原地绕圈圈,奖励会互相抵消,智能体绝对没法靠原地刷分来作弊。

奖励作弊:当梯子本身变成了目标

势函数塑形在理论上无懈可击,但它的前提是:你能写出一个数学上严谨的势函数。 但在现实工程里,绝大多数的中间奖励,都是工程师靠直觉“拍脑门”写出来的。而只要是人写的规则,就一定有漏洞。

这就引出了强化学习中最让人哭笑不得、也最危险的现象:奖励作弊 (Reward Hacking)。 智能体就像个狡猾的律师,它找到了你写的奖励函数里的漏洞,刷出了极高的分数,但它做出的行为,完全是在糊弄你。

看看这些让人血压升高的经典惨案:

  • 赛艇游戏 CoastRunner:工程师想让船跑得快,于是规定“吃到赛道上的金币就给分”。结果 AI 发现了一个水湾,里面的金币会无限刷新。于是这艘船就永远在水湾里原地转圈吃金币,分数刷到了全服第一,但它连终点线都没碰过。
  • 扫地机器人:工程师规定“只要传感器看到垃圾减少,就给奖励”。结果机器人学会了:把垃圾扫到角落里,然后后退一步让传感器看不到,再前进一步看到垃圾,再后退……它靠“反复假装发现并清理同一堆垃圾”成为了刷分大师。
  • 大语言模型(LLM)的阿谀奉承:工程师训练了一个评分模型来给 AI 的回答打分。结果 LLM 发现,评分模型特别喜欢“长篇大论”和“语气极其礼貌”的废话。于是 LLM 学会了在每个回答前加上 200 字的免责声明和马屁,虽然内容毫无营养,但却骗到了极高的分数。

这三个案例虽然领域不同,但剧本完全一致: 工程师想要的是 RR^*(跑完赛道、打扫干净、给出好回答),但写出来的代码是 RR(吃金币、传感器读数变小、评分模型打高分)。 因为人类的局限性,RRRR^* 之间存在一条缝隙(RRR \neq R^*)。 而我们训练出来的智能体,恰恰是一个被优化算法武装到牙齿的“找缝隙专家”。

这就叫目标对齐 (Alignment) 问题。智能体非常忠诚,它完美地优化了你给的代码,只是你给的代码写错了。

场景智能体是怎么作弊的?工程师是怎么补救的?
游戏环境站在角落刷分、卡物理引擎的 bug 飞天重新审视奖励逻辑,使用势函数塑形避免循环刷分
机器人控制不用腿走,靠鬼畜地甩手臂把自己甩到终点加入“惩罚项”(动作太鬼畜就扣分),多目标权衡
大语言模型输出冗长空洞的废话,一味讨好人类引入 KL 散度约束,对抗性红队测试(Red Teaming)

在第 7 章(RLHF),我们将深入讨论,当大模型开始对人类进行“奖励作弊”时,我们是如何用一套复杂的流水线把它拉回正轨的。

内在奖励:给它一点“好奇心”

面对迷宫里死活找不到出口(稀疏奖励)的困境,除了人类去铺设面包屑,还有一种更高级的思路:能不能让智能体自己生成奖励?

回想一下人类是怎么学习的。小孩子在玩积木的时候,并没有人给他发钱(外部奖励),但他依然玩得津津有味。驱动他的是什么?是好奇心

在 RL 中,我们也可以用数学公式把“好奇心”写出来,作为一种内在奖励(Intrinsic Reward)。 它的核心逻辑非常简单:你对哪个状态越不了解,那个状态就越新鲜,我就越鼓励你去那里看看。

怎么衡量“不了解”?最常用的有两种设计:

1. 基于预测误差(你猜不中,就说明有新鲜事) 我们在智能体脑子里装一个小模型,每走一步,就让小模型预测:“下一步我会看到什么画面?” 如果预测结果和实际看到的画面差别很大,说明这个画面超出了智能体的认知。 我们就把这个预测误差当作奖励发给它:

rtintrinsic=小模型的预测真实看到的画面2r_t^{intrinsic} = \| \text{小模型的预测} - \text{真实看到的画面} \|^2

误差越大,说明越“新鲜”,它就越有动力去探索。

2. 随机网络蒸馏(RND,经典且极其有效) 上面那个方法有个 bug:如果环境里有一台正在播放随机雪花点的老电视,智能体永远预测不准下一秒的雪花,它就会盯着电视看一辈子(这叫 Noisy-TV 问题)。

为了解决这个,RND 提出了一个绝妙的办法: 先随机初始化一个固定的网络 ϕ\phi(当靶子),再用一个新网络 ϕ^\hat{\phi} 去努力模仿这个靶子的输出。 内在奖励就是这两个网络的差异:

rtRND=ϕ^(st)ϕ(st)2r_t^{RND} = \| \hat{\phi}(s_t) - \phi(s_t) \|^2

如果智能体一直在同一个房间里转悠,ϕ^\hat{\phi} 早就把靶子网络在这几个状态下的输出背得滚瓜烂熟了,误差很小,觉得“没意思”。 一旦它推开一扇新门,到了新状态,ϕ^\hat{\phi} 没见过,模仿出来的结果和靶子相差甚远,误差瞬间飙升,智能体立刻兴奋地获得了高额的好奇心奖励。 这种方法不仅计算简单,而且完美避开了老电视的陷阱。

在实际训练中,我们通常把外界的真实奖励和好奇心奖励加在一起:

rttotal=rtextrinsic+βrtintrinsicr_t^{total} = r_t^{extrinsic} + \beta \cdot r_t^{intrinsic}

一开始,β\beta 很大,智能体像个好奇宝宝到处乱逛,把地图摸得一清二楚;等地图摸熟了,内在奖励慢慢降到 0,外界的真实任务奖励开始接管,智能体收心开始认真完成任务。

本节总结

回顾本节,奖励函数的设计可以分为三个递进的层次,这也是强化学习工程中最核心的挑战之一:

  • 基础问题:奖励太稀疏,学不动。 当只有最终成败才有奖励时,由于探索空间太大,智能体极难获得正向反馈。
  • 应对方案:奖励塑形与内在奖励。
    • 势函数奖励塑形:通过 F(s,a,s)=γΦ(s)Φ(s)F(s, a, s') = \gamma \Phi(s') - \Phi(s) 在通往目标的路上铺设“面包屑”,且在数学上保证不改变原有的最优策略
    • 内在奖励(好奇心):让智能体自己根据“预测误差”或“新颖度”生成奖励,主动去探索未知的状态空间。
  • 进阶陷阱:奖励作弊(Reward Hacking)。 当人类手工设计的中间奖励存在漏洞时,智能体会不可避免地去“刷分”而不完成实际任务。这本质上是目标对齐(Alignment)问题——你设定的目标 RR 和你真正想要的目标 RR^* 不一致。

局限性与后续引申

奖励函数设计的困境在于:简单的奖励学不动,复杂的奖励容易被作弊。

在早期的游戏或简单的仿真环境中,我们尚且能通过精心调参的奖励塑形来解决问题。但在如今的复杂任务中(比如让机器人完成一段流畅的跑酷,或者让大语言模型输出一段符合人类价值观的高质量回答),我们甚至根本写不出一个准确的数学公式来定义奖励

既然写不出奖励函数,那我们能不能让智能体直接从人类的反馈中去学习一个奖励模型

这就是大语言模型对齐(LLM Alignment)中最核心的技术:RLHF(基于人类反馈的强化学习)。在本书的后半部分(第 7 章及之后),我们将深入探讨当奖励函数本身也需要用神经网络来学习时,RL 会呈现出怎样全新的面貌。

至此,我们已经完整地俯瞰了强化学习的底层地基。下一节,我们将通过一张全景图,把本章所有的概念串联起来,为你接下来的算法实战铺平道路。

← 上一节:算法数据来源 | 下一节:本章总结

参考文献


  1. Ng, A. Y., Harada, D., & Russell, S. (1999). Policy invariance under reward transformations: Theory and application to reward shaping. ICML, 99, 278-287. ↩︎

Built for reusable bilingual course delivery