核心内容
- 掌握参数化策略
$\pi_\theta(a\mid s)$ 如何直接表示"看到什么做什么"。 - 理解策略目标
$J(\theta)$ 如何衡量一个策略的平均长期回报。 - 知道策略梯度的直觉:提高带来高回报动作的概率,降低带来低回报动作的概率。
核心公式
参数化随机策略 (Parameterized Stochastic Policy):
$\pi_\theta$ :带参数$\theta$ 的策略函数(比如一个神经网络)。$P_\theta$ :由参数$\theta$ 决定的概率分布。这个公式说明,策略本质上就是一个输出“在状态$s$ 下选动作$a$ 的概率”的模型。
策略目标函数 (Policy Objective Function):
$J(\theta)$ :目标函数(Objective Function),衡量当前这套参数$\theta$ 打出的总成绩。- $\mathbb{E}{\pi\theta}$:在策略
$\pi_\theta$ 控制下,跑出各种可能轨迹的平均期望。$G_0$ :从初始状态开始的整局游戏总回报。
最优策略参数 (Optimal Policy Parameters):
$\theta^*$ :最优参数,能让总成绩$J(\theta)$ 达到最大值的那组神经网络权重。
策略梯度估计式 (Policy Gradient Estimator):
$\nabla_\theta$ :对参数$\theta$ 求梯度(求导),指明了参数应该往哪个方向调整。$\propto$ :正比于,表示等式两边虽然不完全相等(差个常数项),但方向是一致的。$\log\pi_\theta$ :对数概率,求导后用来表示“增加选这个动作的概率”的方向。
为什么需要这些公式
上一节的 Q 路线很直观:给每个动作打分,选最高的。但如果动作不是"左/右"两个按钮,而是机械臂每个关节的连续力矩呢?动作太多了,根本没法一个个打分。于是第二条路线出现了:不先做完整打分表,而是直接训练一个会行动的策略
控制一个机械臂需要给 6 个关节各施加一个力矩。力矩可以是 0 到 10 牛顿米之间的任何实数——动作空间是一个 6 维连续空间,包含无穷多个可能的动作。路线一的思路是给每个动作打分再选最高的,但无穷多个动作意味着无穷多次打分,$\arg\max$ 彻底失灵。
路线二提供了一种完全不同的思路:跳过打分,直接学"在什么情况下该做什么"。
还是拿走迷宫来举例。 路线一的做法是:给每条岔路挂个牌子打个分,然后智能体每次走到岔路口,都停下来看看所有的牌子,挑分数最高的走。 路线二的做法是:我不挂牌子了,我直接反复走这个迷宫。 如果这次走到了终点拿了高分,我就把刚才沿途做过的每一个选择的“信心”都增强一点;如果这次掉进了陷阱,我就把刚才沿途的选择的“信心”都削弱一点。走得多了,在某个岔路口往右走的“直觉”(概率)自然就上升了,往左走的概率自然就下降了。
这两种做法可以用一个更日常的类比来理解。想象你去一家有几百道菜的餐厅:
- 路线一就像是你必须先给每道菜打分——“宫保鸡丁 8 分,麻婆豆腐 7.5 分,红烧肉 9 分”——然后你每次都点分数最高的那道。打分系统越准确,你吃得越爽。但问题是:如果菜单上有几万道菜呢?你不可能每道菜都尝过,你永远建不完这张打分表。
- 路线二就像是凭直觉点菜——每次随机点几道,如果吃得开心,你的大脑就会留下一个印象:“下次来我还点这个”;如果难吃,就记住“下次避开”。你脑子里根本没有一张写着分数的表格,你只是形成了一种条件反射(策略)。
路线一的核心操作是
但如果动作空间变成了连续的呢? 假设你要控制一个 6 个自由度的机械臂。你需要同时给 6 个关节发送力矩指令,每个力矩可以是 0 到 10 牛顿米之间的任何带小数点的实数。这就意味着,动作空间是一个 6 维的连续空间,包含无穷多个可能的动作。
在这种情况下,你想用
路线二完美绕过了这个硬伤:它不计算
在前面 3.2 节中,我们定义过策略
刚开始训练时,这组参数
把策略参数化,带来了一个巨大的认知视角的转变:我们不再需要在庞大的动作空间里大海捞针,而是直接在参数空间
既然策略是由参数
你可能会疑惑:我们之前不是已经有了
-
$V(s)$ 是“裁判”:它评估的是一个固定不变的策略。它只负责打分,不管怎么改进。 -
$J(\theta)$ 是“教练”:它是以参数$\theta$ 为自变量的函数。只要有了这个函数,我们就可以对它求导(求梯度),从而知道“我该把$\theta$ 往哪个方向调,才能让总分变高”。
所以,路线二的终极目标,就是找到能让总成绩
这和路线一的逻辑形成鲜明对比:
| 路线一(Value-Based) | 路线二(Policy-Based) | |
|---|---|---|
| 学什么 |
|
|
| 怎么决策 |
|
从 |
| 优化目标 | 找到最优 |
找到最优 |
| 动作空间 | 只能处理离散动作 | 天然支持连续动作 |
| 探索机制 | 需要人工补丁(ε-贪婪) | 随机性策略天然探索 |
怎么求这个梯度
我们先回忆一下目标函数
如果把这个期望($\mathbb{E}$)拆开,其实就是在算所有可能跑出来的轨迹的加权平均。
什么是轨迹?就是从游戏开始到结束,你走过的每一个状态和动作。我们可以把它记为一个序列
对于任意一条轨迹
-
它的总得分
$G(\tau)$ :这取决于环境的奖励规则(你一路拿了多少金币,扣了多少血)。 -
它发生的概率
$P_\theta(\tau)$ :这取决于你的策略$\pi_\theta$ (你越喜欢选某个动作,包含这个动作的轨迹发生的概率就越高)和环境的物理法则。
既然期望就是“把每种可能的结果乘以它发生的概率,然后全加起来”,那么目标函数就可以直白地写成:
我们的目标是找到能让
我们直接对上面的公式两边求梯度:
这里有一个非常关键的观察:得分
上面的公式虽然严谨,但在计算机里没法算。因为这里有个
要把
怎么办?这里我们要借用高中数学里的复合函数求导公式(链式法则):
我们知道,$\log(x)$ 的导数是
我们把
你看,式子里又出现了
这意味这什么?意味着我们不需要穷举所有轨迹了!我们只需要用当前的策略去游戏里玩几局(采样几条轨迹
最后一步,也是最符合直觉的一步。
一条轨迹
在任意一步
- 智能体根据策略,决定做一个动作,概率是
$\pi_\theta(a_t|s_t)$ 。 - 环境根据物理法则,跳到下一个状态,概率是
$P(s_{t+1}|s_t, a_t)$ 。
所以,整条轨迹的概率就是:
回忆一下高中的对数运算:连乘取对数,就变成了连加。
所以,$\log P_\theta(\tau)$ 就变成了一大串东西的相加:
当我们对这串式子求梯度
只剩下与你的策略有关的那一项。最终,整个轨迹的梯度,就极度清爽地化简成了每一步动作梯度的累加。
把它代回我们上面的期望公式,就得到了大名鼎鼎的策略梯度(Policy Gradient)估计式的基本形态:
别被上面的一堆符号吓到,这个公式如果翻译成大白话,不仅极度优雅,而且完全符合人类的常识。
括号里有两个关键部分:
-
$\nabla_\theta \log \pi_\theta(a_t|s_t)$ :它告诉你:“如果我想让当前这个动作的概率变大,我该往哪个方向调参数$\theta$ ”。 -
$G(\tau)$ :它告诉你:“你刚跑完的这一整局,到底拿了多大的总分(这就是调节的力道)”。
两者一乘,意思就是:如果这局拿了高分,就用力把沿途做过的所有动作的概率推上去;如果这局拿了低分(负分),就把沿途做过的所有动作的概率拉下来。
想象你是个傻瓜机器人,正在玩 10 局老虎机。你脑子里的策略是“70% 选 A,30% 选 B”。 其中有 3 局你运气好,拿到了正分(比如 +3);有 7 局运气差,拿到了负分(比如 -1)。
策略梯度的逻辑非常公平: 在拿正分的 3 局里,你选了 A,那我就把选 A 的概率往上推一点; 在拿负分的 7 局里,你选了 A,那我就把选 A 的概率往下压一点。 因为正分的力度(+3)大于负分的力度(-1),经过这两股力量的拉扯,最终净效果是:选 A 的概率略微上升了。 跑上几千局后,你的策略就会慢慢收敛到“几乎只选 A”。
整个过程里,你根本没有去算“选 A 到底得多少分”,你只是在反复的尝试中,顺着得分的力道,慢慢调整了你的偏好。这就是第 5 章我们要深入研究的核心武器。
沿着“直接优化策略”这条路,诞生了另一批同样如雷贯耳的算法:
| 算法 | 核心思路 | 特点 |
|---|---|---|
| REINFORCE | 跑完一整局,用真实总分 |
最纯粹的策略梯度,但因为用的是 MC 估算,方差极大,很难训练 |
| Actor-Critic | 找个“裁判”(Critic)来给动作打分,降低方差 | 把路线一(Value)和路线二(Policy)缝合在一起的经典架构,见第 6 章 |
| PPO | 限制每次调整参数的幅度,别让步子迈太大 | 稳定,好调参,目前工业界和 大模型对齐(RLHF) 的绝对主力算法 |
这条路线的优势是天然支持连续动作空间和擅长探索(随机性策略总有概率尝试新动作)。但它的短板是打分不够准——策略梯度方法的方差很大,同一种策略跑两次,梯度估计可能差异显著,就像同一个学生两次考试分数波动很大一样。
第 5 章将深入这条路线,从最基础的 REINFORCE 开始,亲手体验策略梯度的工作方式和高方差问题。
至此,你掌握了两套完全不同的工具,本节的核心收获可以归纳为以下几点:
-
从“打分”到“直接行动”。 当面对连续或极大的动作空间时(如机械臂控制、大模型生成),无法枚举所有动作并计算
$Q$ 值。参数化策略$\pi_\theta(a|s)$ 直接学习输出动作的概率分布。 -
优化目标
$J(\theta)$ 。 策略好不好,看平均得分。$J(\theta)$ 就是策略的平均长期回报,找到最优策略变成了寻找让$J(\theta)$ 最大的参数$\theta^*$ 。 -
策略梯度的推导与直觉。 通过 Log-Derivative Trick,我们将目标函数的梯度转化为轨迹概率和得分的期望。它在物理意义上非常朴素:“好结果
$\rightarrow$ 提高沿途动作概率”,“坏结果$\rightarrow$ 降低沿途动作概率”。这通过$\nabla_\theta \log \pi_\theta \cdot G_t$ 在数学上得到了严谨的体现。 -
两条路线的互补性。
- 路线一(Value-Based):先搞清楚每个动作值多少分,再选最高分。打分准(低方差),但不擅长探索、无法处理连续动作。
- 路线二(Policy-Based):直接学“该做什么”。天然支持连续动作空间、擅长探索,但方差大、数据效率低。
路线二(Policy-Based)虽然解决了连续动作空间的问题,但它的短板是打分不够准(高方差)——策略梯度方法的方差很大。同一种策略跑两次,梯度估计可能差异显著,就像同一个学生两次考试分数波动很大一样。
一个自然的想法是:能不能把两条路线的优点拼在一起?用路线一的方法打分,用路线二的方法选动作?这正是 Actor-Critic 架构的核心思想(我们将在第 6 章详细介绍)。
无论是学
下一节,我们将讨论这个在强化学习中最容易被忽视、却至关重要的环节:
← 上一节:路线一:Q(s,a)——给每个动作打分 | 下一节:算法数据来源