☰
强化学习入门:从奖励假设到MDP,吃透核心概念
2026/10/15 12:47:38 网站建设 项目流程

1. 从“试错”说起:为什么强化学习值得单独拎出来学

很多人第一次接触机器学习,脑子里装的都是“给一堆数据,让模型学会分类或预测”。这套思路叫监督学习,确实好用,但它有个隐含前提——你得先有一批带标签的样本。可现实里大量问题根本给不出标签:下棋时没人告诉你这一步是不是“最优解”,机器人走路时也没人实时标注“这个关节角度对不对”。这时候,强化学习就登场了。

强化学习的核心画面其实特别朴素:一个智能体(Agent)在某个环境(Environment)里不断做动作(Action),环境会返回一个新的状态(State)和一个奖励(Reward),智能体根据奖励调整自己的策略,目标是让长期累积的奖励最大化。听起来像不像训练小狗?做对了给零食,做错了没得吃,久而久之它就学会了哪些行为能换来零食。强化学习就是把这套“试错+奖励”的机制数学化、工程化。

我刚开始看David Silver这门课时,最大的感受是:它不像很多教程一上来就甩公式,而是先把“强化学习到底在解决什么问题”讲透。这门课的第一讲基本概念,看似简单,实则是整个领域的骨架。很多人后面学不下去,不是因为数学太难,而是因为一开始就没把“状态、动作、奖励、策略、价值”这几个词之间的关系理顺。这篇笔记就是围绕这些基本概念展开,把每个术语背后的直觉、数学定义、以及它们在实际问题里怎么对应,一层层拆开。适合刚入门强化学习、或者学了一阵子但总觉得概念模糊的人。

2. 奖励假设:所有目标都能被一个数字概括

2.1 奖励假设到底在假设什么

David Silver在课里反复强调一个东西叫“奖励假设”(Reward Hypothesis)。它的表述是:所有我们关心的目标,都可以被“累积奖励的期望”来形式化描述。换句话说,不管你是想让机器人走得更远、让交易策略赚得更多、还是让游戏角色得分更高,最终都能翻译成一个数字信号——奖励。

这个假设听起来有点霸道,但它其实是强化学习能成立的前提。因为一旦目标不能用奖励表达,整个“最大化累积奖励”的框架就无从谈起。我在实际做项目时踩过一个坑:一开始把“让用户停留时间更长”直接当成奖励,结果模型学会了用各种诱导性内容拖住用户,短期指标好看,长期口碑崩了。后来才明白,奖励设计本身就是强化学习里最考验人的环节,它决定了智能体最终会学成什么样。

提示:奖励假设不是让你随便设一个数字就完事,而是要求你认真思考“我真正想要的是什么”,并把它拆解成可累积、可观测的信号。

2.2 奖励、回报与折扣因子:三个容易混淆的概念

很多人会把“奖励”(Reward)和“回报”(Return)混为一谈。奖励是每一步环境给的即时反馈,记作 ( R_t )。回报是从当前时刻开始,未来所有奖励的累积,记作 ( G_t )。如果任务有明确终点,回报就是:

[ G_t = R_{t+1} + R_{t+2} + \cdots + R_T ]

但很多任务没有终点,或者我们更看重近期奖励,于是引入折扣因子 ( \gamma )(0到1之间):

[ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots ]

折扣因子的作用,用生活化的话说就是“未来的钱不如现在的钱值钱”。( \gamma ) 越接近0,智能体越短视;越接近1,它越有耐心。我一般建议新手从0.9开始试,这个值在多数任务里比较平衡。

概念符号含义常见取值/说明
奖励( R_t )单步即时反馈由环境设计者定义
回报( G_t )从t时刻起的累积奖励带折扣或不带折扣
折扣因子( \gamma )未来奖励的衰减系数通常0.9~0.99

2.3 为什么折扣因子不是可有可无的

有人会问:既然目标是最大化总奖励,为什么还要打折?直接加总不行吗?在有限步任务里确实可以,但在无限步或步数很长的任务里,如果不打折,回报可能发散到无穷大,数学上就没法比较策略优劣了。折扣因子还带来一个实际好处:它让智能体在“眼前利益”和“长远利益”之间做权衡。比如下棋时,为了十步之后将死对方,可以放弃当前吃一个子的即时奖励,这就是 ( \gamma ) 在起作用。

3. 智能体的“记忆”与“决策”:状态、观测与策略

3.1 状态和观测不是一回事

状态(State)是环境的完整描述,观测(Observation)是智能体实际看到的信息。很多教程把这两个词混用,导致后面学部分可观测马尔可夫决策过程(POMDP)时一头雾水。举个直观例子:你在玩一个第一人称射击游戏,游戏内部记录了所有角色的位置、血量、弹药,这是完整状态;但你屏幕上只能看到视野范围内的画面,这是观测。如果观测等于状态,问题就是完全可观测的;否则就是部分可观测的。

David Silver在课里用“环境状态”和“智能体状态”来区分这两者。智能体状态是它自己维护的、用来做决策的信息,可以是最近几帧观测的拼接,也可以是循环神经网络的隐状态。这个区分非常关键,因为现实中几乎所有的强化学习问题都是部分可观测的,你不可能拿到环境的全部信息。

3.2 策略:从状态到动作的映射

策略(Policy)是强化学习里最核心的概念之一,记作 ( \pi )。它定义了智能体在每个状态下该做什么动作。策略分两种:

  • 确定性策略:( a = \pi(s) ),给定状态,动作唯一确定。
  • 随机性策略:( \pi(a|s) = P[A_t = a | S_t = s] ),给定状态,动作是一个概率分布。

随机性策略在实际中更常用,因为它天然带有探索能力。比如在石头剪刀布游戏里,如果你的策略是确定性的,对手很快就能摸清规律;而随机策略让你不可预测。我在训练一个简单的对抗智能体时,一开始用确定性策略,结果它很快被对手针对,后来改成随机策略,表现立刻稳定了很多。

3.3 价值函数:给“好坏”一个可计算的度量

价值函数(Value Function)是对“某个状态或某个状态-动作对有多好”的量化估计。它分两个:

  • 状态价值函数( v_\pi(s) ):从状态s出发,按照策略 ( \pi ) 走下去,能拿到的期望回报。
  • 动作价值函数( q_\pi(s,a) ):从状态s出发,先执行动作a,之后按照策略 ( \pi ) 走下去,能拿到的期望回报。

这两个函数的关系是:

[ v_\pi(s) = \sum_a \pi(a|s) q_\pi(s,a) ]

价值函数的意义在于,它把“长期好坏”压缩成一个数字,让策略比较和优化变得可行。没有价值函数,你只能靠大量采样去估计策略好坏,效率极低。这也是为什么几乎所有强化学习算法都绕不开价值估计。

注意:价值函数是对策略 ( \pi ) 的评估,策略变了,价值函数也要重新估计。这一点在理解策略迭代和价值迭代时特别重要。

4. 马尔可夫决策过程:把问题装进一个标准框架

4.1 马尔可夫性:未来只取决于现在

马尔可夫性(Markov Property)是说:给定当前状态,未来与过去无关。用条件概率写就是:

[ P[S_{t+1} | S_t] = P[S_{t+1} | S_1, S_2, \ldots, S_t] ]

这个假设极大简化了问题。如果没有它,智能体做决策时得记住全部历史,计算量和存储量都爆炸。马尔可夫性让我们只需要关注当前状态,就能做出最优决策。当然,现实中很多问题不满足严格的马尔可夫性,但我们可以通过设计状态表示(比如堆叠最近几帧)来近似满足它。

4.2 MDP的五元组:S、A、P、R、γ

一个马尔可夫决策过程(MDP)由五个元素组成:

元素符号含义
状态集( S )所有可能状态的集合
动作集( A )所有可能动作的集合
转移概率( P )( P(s'
奖励函数( R )( R(s,a) ) 或 ( R(s,a,s') ),执行动作后获得的即时奖励
折扣因子( \gamma )未来奖励的衰减系数

这五个元素一定义,强化学习问题就变成了一个数学上可分析的对象。David Silver在课里反复用这个框架去套各种例子,比如网格世界、机器人控制、棋类游戏。我建议新手也养成这个习惯:拿到一个新问题,先问自己“状态是什么、动作是什么、奖励怎么设、转移是否已知、折扣取多少”。把这五个问题回答清楚,问题就理清了一半。

4.3 从MDP到实际问题的映射练习

拿一个简单的库存管理问题举例。状态可以是当前库存量和最近几天的销量;动作是“补货多少”或“不补货”;奖励是“利润减去库存成本”;转移概率由销量分布决定;折扣因子取0.95表示对未来利润的适度折现。这样一套下来,一个看似模糊的“怎么管理库存”问题就变成了一个可计算的MDP。我在实际做这类建模时,最花时间的往往不是算法选型,而是把业务语言翻译成MDP语言。这个翻译过程做好了,后面的事就顺了。

5. 探索与利用:强化学习里最经典的权衡

5.1 为什么不能只选当前看起来最好的

探索(Exploration)和利用(Exploitation)的权衡,是强化学习区别于监督学习的一个标志性难题。利用是指选当前估计价值最高的动作,探索是指尝试那些还没充分尝试过的动作。如果你只利用,可能会卡在局部最优;如果你只探索,又永远拿不到高奖励。

用一个生活场景解释:你每天中午都去同一家餐厅吃饭,这是利用,因为你知道它味道不错;但如果你偶尔去试试新开的店,这是探索,可能发现更好的,也可能踩雷。强化学习要解决的就是:怎么在两者之间找到平衡,让长期收益最大。

5.2 ε-贪心:最简单也最常用的探索策略

ε-贪心(ε-greedy)是最容易实现的探索策略:以概率 ( \varepsilon ) 随机选一个动作,以概率 ( 1-\varepsilon ) 选当前估计价值最高的动作。( \varepsilon ) 通常取0.1或0.01,也可以随着训练逐渐减小。

import random def epsilon_greedy(q_values, epsilon): if random.random() < epsilon: return random.randint(0, len(q_values) - 1) else: return max(range(len(q_values)), key=lambda i: q_values[i])

这个策略简单到几乎不需要解释,但它在很多任务里表现并不差。我试过在几个小规模问题上用ε-贪心,只要 ( \varepsilon ) 衰减得当,效果和更复杂的探索方法差距不大。它的缺点是探索是“盲目”的,不看历史信息,所以在状态空间很大时效率偏低。

5.3 乐观初始值与UCB:更聪明的探索思路

乐观初始值(Optimistic Initial Values)的思路是:把每个动作的初始价值估计设得偏高,这样智能体一开始会倾向于尝试那些还没试过的动作,因为它们的估计值看起来更高。随着尝试次数增加,估计值回落到真实水平,探索自然减少。

UCB(Upper Confidence Bound)则是在选择动作时,把“估计价值”和“不确定性”结合起来:

[ A_t = \arg\max_a \left[ Q_t(a) + c \sqrt{\frac{\ln t}{N_t(a)}} \right] ]

其中 ( N_t(a) ) 是动作a被选中的次数。这个公式的意思是:一个动作如果被选得少,它的不确定性项就大,就更值得探索。UCB在多臂老虎机问题里表现很好,但在完整MDP里用起来会复杂一些,因为状态之间有关联。

提示:探索策略的选择没有绝对优劣,关键看你的任务规模、状态空间大小和计算预算。小问题用ε-贪心足够,大问题可能需要更精细的探索机制。

6. 动态规划与无模型方法的分水岭

6.1 已知模型时:策略迭代与价值迭代

如果MDP的五元组全都已知,尤其是转移概率 ( P ) 和奖励函数 ( R ) 已知,那问题就变成了一个规划问题,可以用动态规划(Dynamic Programming)求解。两个经典算法是策略迭代和价值迭代。

策略迭代分两步:策略评估(给定策略,计算其价值函数)和策略改进(根据价值函数贪心地更新策略)。反复迭代直到策略不再变化。价值迭代则是把这两步合并,直接迭代贝尔曼最优方程:

[ v_{k+1}(s) = \max_a \left[ R(s,a) + \gamma \sum_{s'} P(s'|s,a) v_k(s') \right] ]

这两个算法在理论上很漂亮,但实际中很少直接用,因为转移概率往往未知,而且状态空间一大,计算量就爆炸。

6.2 模型未知时:从蒙特卡洛到时序差分

当模型未知时,智能体只能通过与环境交互来采样。蒙特卡洛(Monte Carlo)方法是用完整回合的回报来估计价值:

[ V(s) \leftarrow V(s) + \alpha [G_t - V(s)] ]

时序差分(Temporal Difference,TD)则是用一步奖励加下一状态的价值估计来更新:

[ V(s) \leftarrow V(s) + \alpha [R_{t+1} + \gamma V(s') - V(s)] ]

TD结合了蒙特卡洛的采样和动态规划的自举(bootstrapping),是很多现代强化学习算法的基础。David Silver在课里对TD的讲解非常细致,他用了大量例子对比MC和TD的差异。我自己的体会是:MC方差大但无偏,TD方差小但有偏,实际中TD用得更多,因为它能在线学习,不需要等回合结束。

6.3 一张表看清几类方法的区别

方法是否需要模型是否等回合结束偏差与方差典型算法
动态规划需要不需要无采样偏差策略迭代、价值迭代
蒙特卡洛不需要需要无偏但高方差MC控制
时序差分不需要不需要有偏但低方差SARSA、Q-learning

这张表是我在复习时自己整理的,它帮我快速定位一个算法属于哪一类。建议你也动手整理一份,比单纯看课印象深得多。

7. 一些我踩过的概念坑与学习建议

7.1 把“状态”和“观测”混用导致后面全乱

这是我最早踩的坑。刚开始学的时候,看到“状态”就默认是智能体看到的东西,结果学到POMDP时完全转不过弯。后来强迫自己每次写代码时都区分env_state和agent_obs,才慢慢理顺。如果你也在学这门课,建议从第一讲开始就严格区分这两个词,后面会省很多力气。

7.2 折扣因子设成1导致训练不稳定

有一次我做一个回合制任务,想着“反正有终点,折扣因子设1就行”,结果训练过程中回报方差极大,价值函数估计飘得厉害。后来把 ( \gamma ) 改成0.99,训练立刻稳定了很多。折扣因子不只是数学上的衰减,它还在控制价值估计的方差。除非你的任务确实很短且奖励尺度很稳定,否则不建议把 ( \gamma ) 设成1。

7.3 奖励设计不要一步到位,要迭代

很多人一开始就想设计一个完美的奖励函数,结果卡住不动。我的经验是:先设计一个粗糙但能跑的奖励,让智能体先学起来,观察它的行为,再逐步调整。强化学习的奖励设计是一个迭代过程,不是一锤子买卖。David Silver在课里也提到,奖励假设是框架,但具体怎么设,需要结合领域知识反复试验。

7.4 基本概念没吃透,后面算法都是空中楼阁

这门课后面会讲Q-learning、策略梯度、Actor-Critic等算法,但所有这些算法都建立在第一讲的基本概念之上。如果你对价值函数、贝尔曼方程、探索与利用这些概念还模棱两可,后面看算法推导会很痛苦。我的建议是:第一讲至少看两遍,把每个术语用自己的话复述一遍,最好能举出一个自己的例子。这个投入在后面会加倍回报给你。

最后分享一个我自己的学习习惯:每学完一个概念,就试着用三句话向一个完全不懂的人解释它。如果你能解释清楚,说明你真懂了;如果解释到一半卡住,那就是还没吃透。强化学习的基本概念不多,但每一个都值得反复咀嚼。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询