强化学习最迷人的地方,是它不像监督学习那样拿着一堆标准答案训练,而是让智能体自己去试、去犯错、去获得反馈,然后一点点学会“什么动作更值得做”。
这也是为什么它总让人联想到打游戏、训练机器人、自动驾驶,或者 AlphaGo 这种“会自己变强”的系统。可一旦真正去看论文或教程,很多人很快就会被一连串术语劝退:状态、动作、价值函数、贝尔曼方程、TD 学习、策略梯度、Actor-Critic。
这篇文章想做的事情很简单:不追求面面俱到,而是帮你把强化学习的主线看顺。看完以后,你至少会知道它到底在解决什么问题、常见算法之间是什么关系,以及 DQN 和策略梯度为什么会走出两条不同的路线。
强化学习到底在解决什么问题
可以把强化学习想成一个不断循环的过程:
- 智能体观察当前环境状态
- 根据自己的策略选择一个动作
- 环境返回奖励,并进入下一个状态
- 智能体根据这次结果调整自己的行为
目标不是“这一步拿到最高分”,而是让长期累计回报最大化。
这点非常重要,因为它决定了强化学习和很多直觉式决策的不同。一个动作此刻看起来不赚钱,可能是在为之后的更大奖励铺路;另一个动作现在很爽,却可能让后面一直吃亏。强化学习真正学的是长期决策。
先记住四个最核心的概念
1. 状态 State
状态表示环境在某个时刻的样子,通常记作 s∈S。
如果把问题想成玩游戏,状态可能是角色位置、血量、地图信息;如果是机器人控制,状态可能是关节角度、速度和传感器读数。
2. 动作 Action
动作表示智能体可以做什么,记作 a∈A。
比如向左走、向右走、刹车、加速、抓取、放下,都是动作。
3. 奖励 Reward
奖励是环境对动作的即时反馈,通常记作 r∈R。
拿到金币、赢下一局、走出迷宫,可以给正奖励;撞墙、跌倒、输掉比赛,可以给负奖励。奖励本身不是目标,它只是训练智能体的信号。
4. 策略 Policy
策略是智能体的行为规则,通常写作 π(a∣s),也就是在状态 s 下选择动作 a 的概率分布。
如果策略是确定性的,也会写成 a=π(s);如果策略是可学习的神经网络,则常写成 πθ(a∣s)。
如果你只先记住一句话,那就是:
强化学习的目标,就是学出一个能够最大化长期回报的策略。
为什么大家总在讲“回报”和“价值”
即时奖励还不够,因为很多任务要看长期结果。于是强化学习会定义一个更重要的量:回报(Return)。
Gt=Rt+1+γRt+2+γ2Rt+3+⋯=k=0∑∞γkRt+k+1
这里的 γ∈[0,1] 是折扣因子,用来控制“未来奖励值多少钱”。
- γ 越小,模型越短视,更在意眼前收益
- γ 越大,模型越看重长期回报
有了回报,我们就可以定义“价值”。
状态价值函数
Vπ(s)=Eπ[Gt∣St=s]
它表示:在状态 s 下,如果之后一直按照策略 π 行动,期望能拿到多少长期回报。
动作价值函数
Qπ(s,a)=Eπ[Gt∣St=s,At=a]
它表示:在状态 s 先执行动作 a,再继续按策略 π 行动,最终期望能拿到多少长期回报。
两者之间有一个非常自然的关系:
Vπ(s)=a∑π(a∣s)⋅Qπ(s,a)
也就是说,状态价值就是所有可能动作价值的加权平均,权重由当前策略给出。
从直觉上说:
V 告诉你“这个局面本身值不值钱
Q 告诉你“在这个局面下,某个具体动作值不值钱
贝尔曼方程:为什么它是整个 RL 的地基
有了价值函数的定义,下一个问题自然是:怎么算出它来?
最直接的方法是从状态 s 出发,把未来所有可能轨迹都展开,再求平均回报。但这在实际中几乎不可行,因为状态空间和未来路径都会迅速爆炸。
真正重要的观察是:回报本身就有递归结构
Gt=Rt+1+γGt+1
把这个递归代入价值函数的定义,我们来一步步推导贝尔曼方程。
从价值函数的定义出发:
Vπ(s)=Eπ[Gt∣St=s]
代入 Gt=Rt+1+γGt+1:
Vπ(s)=Eπ[Rt+1+γGt+1∣St=s]
接下来要把期望展开。在状态 s 下,智能体先按策略 π(a∣s) 选动作 a,执行后环境以概率 P(s′∣s,a) 转移到下一状态 s′,并给出即时奖励 R(s,a)。所以期望要对动作和下一状态分别求和:
Vπ(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a)+γEπ[Gt+1∣St+1=s′]]
注意到 Eπ[Gt+1∣St+1=s′] 正好就是 Vπ(s′) 的定义,代入后得到:
Vπ(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a)+γVπ(s′)]
由于 R(s,a) 不依赖 s′,可以把它提出来,最终整理为贝尔曼方程:
Vπ(s)=a∑π(a∣s)[R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)]
它说的是一件很朴素的事:
当前状态的价值 = 当前一步能拿到的奖励 + 下一状态价值的折现期望。
同样地,我们也可以推导出动作价值函数的递归形式。从 Qπ 的定义出发:
Qπ(s,a)=Eπ[Gt∣St=s,At=a]
代入 Gt=Rt+1+γGt+1,注意这里动作 a 已经确定,所以只需对下一状态 s′ 求期望:
Qπ(s,a)=s′∑P(s′∣s,a)[R(s,a)+γEπ[Gt+1∣St+1=s′]]
到了下一状态 s′ 后,智能体重新按策略选择动作 a′,所以 Vπ(s′)=∑a′π(a′∣s′)Qπ(s′,a′)。代入得到:
Qπ(s,a)=R(s,a)+γs′∑P(s′∣s,a)a′∑π(a′∣s′)Qπ(s′,a′)
如果我们关心最优策略,那么递归里不再是期望,而是直接选最优动作:
V∗(s)=amax[R(s,a)+γs′∑P(s′∣s,a)V∗(s′)]
贝尔曼方程真正厉害的地方,在于它把“看完整个未来”的问题,变成了一个“只看一步”的递归关系。后面几乎所有 RL 算法,本质上都在用不同方式逼近这个关系。
常见算法,其实是在回答同一件事
很多人学 RL 时会被一堆算法名词打散。其实可以把它们看成同一条演化路径上的不同阶段。
动态规划:环境模型已知时的理想解法
如果你知道环境转移概率 P(s′∣s,a) 和奖励函数 R(s,a),就能直接用贝尔曼方程反复迭代。
核心流程通常是:
- 策略评估:先算出当前策略的价值
- 策略改进:根据价值函数改进策略
- 反复迭代直到收敛
它很优雅,但现实世界里往往拿不到完整环境模型,所以更多时候它像一个理论起点。
蒙特卡洛方法:等一整局结束再回头总结
蒙特卡洛方法不需要环境模型。它的做法很朴素:先完整跑完一轮 episode,再用最终回报回头估计状态或动作的价值。
优点是直观、无偏;缺点是更新太慢,而且方差通常比较大。你得等游戏打完,才能知道前面每一步大概值多少。
时序差分学习:边走边学
TD(Temporal Difference)学习的核心思想,是不用等整局结束,就在每一步用贝尔曼方程的单步近似来更新价值。
贝尔曼方程告诉我们:
Vπ(s)=E[Rt+1+γVπ(St+1)∣St=s]
于是最基本的 TD 更新式就是:
V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)]
其中
Rt+1+γV(St+1)
通常叫作 TD Target,而
δt=Rt+1+γV(St+1)−V(St)
就是 TD Error。
你可以把它理解成:用“下一步真实看到的反馈 + 对未来的当前估计”,持续修正自己对当前状态的判断。
为什么 SARSA 和 Q-Learning 总被拿来一起讲
这两个算法都属于 TD 家族,也都在学习动作价值函数 Q(s,a),但更新方式略有不同。
SARSA:按照自己真实执行的动作来更新
Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]
因为它使用的是下一时刻真实执行的动作 At+1,所以属于 On-Policy 方法。
Q-Learning:直接朝理论最优动作看齐
Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)]
它不管下一步实际上做了什么,而是直接取下一状态的最大 Q 值,所以属于 Off-Policy。
这也是 Q-Learning 经典且强大的地方:哪怕行为策略还不够好,也能利用这些数据向更优策略逼近。
从表格到神经网络:为什么会出现 DQN
Q-Learning 在状态空间不大时很好用。可一旦状态变成图像、连续传感器信号,或者高维输入,就不可能再给每个状态-动作对维护一张表。
这时就会用神经网络去近似 Q 函数:
Q(s,a;θ)
这就是 DQN(Deep Q-Network)的出发点。
DQN 之所以成为深度强化学习的代表性算法,很大程度上是因为它解决了“神经网络 + 强化学习”不稳定的问题。它主要依赖两个关键技巧:
- 经验回放(Experience Replay):把交互样本存进 buffer,训练时随机采样,打破样本相关性
- 目标网络(Target Network):使用一个延迟更新的旧网络来构造 TD Target,降低训练震荡
这两个技巧让 DQN 在 Atari 游戏上取得了里程碑式的结果,也让深度强化学习真正进入大众视野。
另一条路线:直接学习策略
到这里,前面的算法基本都属于“先学价值,再由价值推出动作”的路线。
但如果动作空间是连续的,或者 argmaxaQ(s,a) 本身就很难求,那么直接学习策略往往更自然。
策略梯度(Policy Gradient)直接参数化策略 πθ(a∣s),并通过梯度上升来最大化期望回报:
J(θ)=Eτ∼πθ[t∑Rt]
策略梯度定理给出了它的核心优化形式。下面来一步步推导。
目标函数可以展开成对所有状态和动作的加权求和:
J(θ)=s∑dπθ(s)a∑πθ(a∣s)Qπθ(s,a)
其中 dπθ(s) 是策略 πθ 下的状态访问分布(stationary distribution),表示智能体在各个状态上待的时间比例。
怎么理解这个分布?想象智能体按照策略 πθ 不断和环境交互,走了非常多步之后,统计它在每个状态出现的频率——这个频率就是 dπθ(s)。比如在一个迷宫里,如果策略总是让智能体在起点附近徘徊,那起点附近状态的 dπθ(s) 就很大;如果策略很高效地穿过迷宫,那沿途各状态会被更均匀地访问。
它在目标函数里的作用也很自然:我们关心的不只是"在某个状态下能拿到多少回报",还要乘以"这个状态实际上会被访问到多少次"。一个状态价值再高,如果策略根本不会走到那里,对总回报也没有贡献。所以 J(θ) 是对所有状态的回报做 dπθ(s) 加权的平均。
对 θ 求梯度。策略梯度定理的一个关键结论是:虽然 dπθ(s) 和 Qπθ(s,a) 都依赖 θ,但我们只需要对 πθ(a∣s) 求导就够了(证明涉及状态分布的递归展开,这里略去):
∇θJ(θ)=s∑dπθ(s)a∑∇θπθ(a∣s)Qπθ(s,a)
接下来用一个叫 log-derivative trick 的恒等式。对任意函数 f(x),有:
∇θf(θ)=f(θ)∇θlogf(θ)
这一点很容易验证:因为 ∇θlogf=f∇θf,两边乘以 f 就回来了。把它用在 πθ(a∣s) 上:
∇θπθ(a∣s)=πθ(a∣s)∇θlogπθ(a∣s)
代入上式:
∇θJ(θ)=s∑dπθ(s)a∑πθ(a∣s)∇θlogπθ(a∣s)Qπθ(s,a)
注意到 ∑sdπθ(s)∑aπθ(a∣s)[⋯] 正好就是在策略 πθ 下对状态和动作求期望,所以最终得到策略梯度定理:
∇θJ(θ)=Eπθ[∇θlogπθ(a∣s)⋅Qπθ(s,a)]
这个公式背后的直觉非常清晰:
- 如果某个动作带来的回报 Q 很高,就增大 logπθ(a∣s),也就是让策略更倾向选这个动作
- 如果某个动作回报很低,梯度方向会让策略降低选它的概率
REINFORCE:最直接的策略梯度算法
策略梯度定理里需要 Qπθ(s,a),但在实际训练中我们并不知道它的真实值。REINFORCE 的做法是最朴素的:直接用蒙特卡洛采样的实际回报 Gt 来替代。
因为 Gt 本身就是 Qπθ(st,at) 的一个无偏估计(Q 的定义就是 Gt 的期望),所以替换后梯度估计仍然是无偏的:
∇θJ(θ)≈t=0∑T∇θlogπθ(at∣st)⋅Gt
对应的参数更新规则就是:
θ←θ+αt=0∑T∇θlogπθ(at∣st)⋅Gt
整个算法流程非常简单:
- 用当前策略 πθ 跑完一整条轨迹 (s0,a0,r1,s1,a1,r2,…)
- 对每个时刻 t,计算从该时刻起的实际回报 Gt=∑k=0T−tγkrt+k+1
- 用上面的公式更新参数 θ
- 重复
REINFORCE 概念清楚,但有一个很大的缺点:方差太大。因为 Gt 是整条轨迹的累计回报,受到很多随机因素影响,不同轨迹之间的 Gt 波动可能非常大,导致梯度估计很不稳定。
一个常见的改进是引入 baseline,通常取状态价值函数 b(s)=V(s):
∇θJ(θ)≈t=0∑T∇θlogπθ(at∣st)⋅(Gt−b(st))
减去 baseline 不会改变梯度的期望(因为 baseline 不依赖动作),但能显著降低方差。直觉上,Gt−V(st) 衡量的是"这个动作比平均水平好多少",而不是"这个动作的绝对回报有多高",信号自然更稳定。
这个思路再往前走一步——用神经网络来学习 baseline V(s)——就自然过渡到了下面的 Actor-Critic 方法。
Actor-Critic:为什么很多现代算法都长这个样子
Actor-Critic 可以理解成把两条路线拼在一起:
- Actor 负责输出策略,决定怎么做
- Critic 负责评估当前状态或动作值,告诉 Actor 做得好不好
写成更新思路,大致就是:
θ←θ+α∇θlogπθ(a∣s)⋅A(s,a)
其中优势函数通常定义为:
A(s,a)=Q(s,a)−V(s)
这样做的好处是:
- 保留了策略梯度对连续动作的友好性
- 又借助价值函数降低了训练方差
很多现代强化学习算法,本质上都能看作 Actor-Critic 框架的变种,比如 A2C、A3C、DDPG、PPO 等。
强化学习里还有一个永恒问题:探索还是利用
如果模型永远只选当前看来最优的动作,它可能会过早陷入局部最优;如果它总在乱试,又永远学不会稳定策略。
这就是强化学习里经典的探索-利用(Exploration vs. Exploitation)问题。
- 利用:选择当前已知最好的动作
- 探索:尝试新的动作,看看会不会更好
最常见的入门策略是 ε-greedy:
- 以概率 ε 随机探索
- 以概率 1−ε 选择当前最优动作
它不一定最优,但足够直观,能帮助你建立对探索机制的第一层理解。
怎么快速记住这些方法的区别
| 方法 | 需不需要环境模型 | 怎么更新 | 代表特点 |
|---|
| 动态规划 | 需要 | 反复迭代贝尔曼方程 | 理论起点,现实里常不适用 |
| 蒙特卡洛 | 不需要 | 等整局结束再更新 | 直观,但方差大 |
| TD 学习 | 不需要 | 每一步都能更新 | 边交互边学习 |
| Q-Learning | 不需要 | 用最大 Q 值更新 | Off-Policy,经典值函数方法 |
| DQN | 不需要 | 神经网络近似 Q 值 | 把 Q-Learning 推到高维输入 |
| 策略梯度 | 不需要 | 直接优化策略 | 更适合连续动作 |
| Actor-Critic | 不需要 | 策略和价值一起学 | 现代 RL 的主流骨架 |
最后总结
如果把强化学习压缩成一条主线,可以这样记:
- 它研究的是如何通过与环境交互,学到长期最优策略
- 价值函数和贝尔曼方程提供了最基本的数学框架
- Q-Learning 和 DQN 代表“基于价值”的路线
- 策略梯度和 Actor-Critic 代表“直接学策略”的路线
- 真正的难点,不只是优化算法,还包括探索、稳定性和样本效率
当你把这条线看顺之后,再去读 PPO、SAC、DDPG 之类的现代算法,会轻松很多,因为你知道它们不是凭空冒出来的,而是在前面这些基本思想上的继续发展。
参考阅读:Lilian Weng 的 A (Long) Peek into Reinforcement Learning 依然是一篇非常值得反复回看的经典综述。