路线二:J(θ)——直接优化策略
本节导读
核心内容
- 掌握参数化策略 如何直接表示"看到什么做什么"。
- 理解策略目标 如何衡量一个策略的平均长期回报。
- 知道策略梯度的直觉:提高带来高回报动作的概率,降低带来低回报动作的概率。
核心公式
参数化随机策略 (Parameterized Stochastic Policy):
- :带参数 的策略函数(比如一个神经网络)。
- :由参数 决定的概率分布。这个公式说明,策略本质上就是一个输出“在状态 下选动作 的概率”的模型。
策略目标函数 (Policy Objective Function):
- :目标函数(Objective Function),衡量当前这套参数 打出的总成绩。
- :在策略 控制下,跑出各种可能轨迹的平均期望。
- :从初始状态开始的整局游戏总回报。
最优策略参数 (Optimal Policy Parameters):
- :最优参数,能让总成绩 达到最大值的那组神经网络权重。
策略梯度估计式 (Policy Gradient Estimator):
- :对参数 求梯度(求导),指明了参数应该往哪个方向调整。
- :正比于,表示等式两边虽然不完全相等(差个常数项),但方向是一致的。
- :对数概率,求导后用来表示“增加选这个动作的概率”的方向。
为什么需要这些公式
上一节的 Q 路线很直观:给每个动作打分,选最高的。但如果动作不是"左/右"两个按钮,而是机械臂每个关节的连续力矩呢?动作太多了,根本没法一个个打分。于是第二条路线出现了:不先做完整打分表,而是直接训练一个会行动的策略 。 就像这套策略的总成绩, 表示我们要找到成绩最高的那组参数,策略梯度告诉我们怎么把带来高分的动作概率调大。读到这里会发现:Policy-based 方法不是比 Q 更玄,而是在动作太多、没法枚举时,换了一种更合适的学习方式。
控制一个机械臂需要给 6 个关节各施加一个力矩。力矩可以是 0 到 10 牛顿米之间的任何实数——动作空间是一个 6 维连续空间,包含无穷多个可能的动作。路线一的思路是给每个动作打分再选最高的,但无穷多个动作意味着无穷多次打分, 彻底失灵。
路线二提供了一种完全不同的思路:跳过打分,直接学"在什么情况下该做什么"。
从“打分再选”到“直接学行为”
还是拿走迷宫来举例。 路线一的做法是:给每条岔路挂个牌子打个分,然后智能体每次走到岔路口,都停下来看看所有的牌子,挑分数最高的走。 路线二的做法是:我不挂牌子了,我直接反复走这个迷宫。 如果这次走到了终点拿了高分,我就把刚才沿途做过的每一个选择的“信心”都增强一点;如果这次掉进了陷阱,我就把刚才沿途的选择的“信心”都削弱一点。走得多了,在某个岔路口往右走的“直觉”(概率)自然就上升了,往左走的概率自然就下降了。
这两种做法可以用一个更日常的类比来理解。想象你去一家有几百道菜的餐厅:
- 路线一就像是你必须先给每道菜打分——“宫保鸡丁 8 分,麻婆豆腐 7.5 分,红烧肉 9 分”——然后你每次都点分数最高的那道。打分系统越准确,你吃得越爽。但问题是:如果菜单上有几万道菜呢?你不可能每道菜都尝过,你永远建不完这张打分表。
- 路线二就像是凭直觉点菜——每次随机点几道,如果吃得开心,你的大脑就会留下一个印象:“下次来我还点这个”;如果难吃,就记住“下次避开”。你脑子里根本没有一张写着分数的表格,你只是形成了一种条件反射(策略)。
为什么需要路线二:面对无尽的连续空间
路线一的核心操作是 ——把所有动作的分数算出来,挑最大的。这在动作只有“左、右、上、下”这几个离散按钮时,完全没问题。
但如果动作空间变成了连续的呢? 假设你要控制一个 6 个自由度的机械臂。你需要同时给 6 个关节发送力矩指令,每个力矩可以是 0 到 10 牛顿米之间的任何带小数点的实数。这就意味着,动作空间是一个 6 维的连续空间,包含无穷多个可能的动作。
在这种情况下,你想用 把所有动作都打个分再挑最大值?这在数学上相当于对一个 6 维连续函数求全局最大值,在计算上几乎是不可能的。 更不用说现在火热的大语言模型(LLM)了:每一步它都要从几万个词(token)组成的词表中采样,它的动作本身就是一个连续的概率分布。
路线二完美绕过了这个硬伤:它不计算 。它直接训练一个神经网络,输入当前的局面,输出“该采取每个动作的概率分布” 。然后你直接根据这个概率分布扔骰子(采样)就行了。
策略 :参数化的“行为手册”
在前面 3.2 节中,我们定义过策略 :它就是一个函数,输入状态,输出动作。 现在,我们要让这个函数变得可学习:我们用一组参数 (比如神经网络的几百万个权重)来代表这个函数,写成 。
刚开始训练时,这组参数 是随机的,智能体就像个婴儿,动作完全混乱。但随着训练的进行,我们不断调整 ,让这本“行为手册”越来越完善——导致好结果的动作概率上升,导致坏结果的动作概率下降。
把策略参数化,带来了一个巨大的认知视角的转变:我们不再需要在庞大的动作空间里大海捞针,而是直接在参数空间 里,顺着梯度的方向往上爬。
:这本手册的总成绩
既然策略是由参数 决定的,那我们怎么衡量这套参数 到底好不好? 我们需要一个目标函数 :
的物理意义非常直白:如果智能体按照当前这套参数 去行动,平均能拿多少总分。 越高,说明这套参数越好。
你可能会疑惑:我们之前不是已经有了 来给策略打分吗?为什么又搞出一个 ? 其实它们的角色不同:
- 是“裁判”:它评估的是一个固定不变的策略。它只负责打分,不管怎么改进。
- 是“教练”:它是以参数 为自变量的函数。只要有了这个函数,我们就可以对它求导(求梯度),从而知道“我该把 往哪个方向调,才能让总分变高”。
所以,路线二的终极目标,就是找到能让总成绩 达到最大的那组参数:
这和路线一的逻辑形成鲜明对比:
| 路线一(Value-Based) | 路线二(Policy-Based) | |
|---|---|---|
| 学什么 | :每个动作值多少分 | :看到什么做什么 |
| 怎么决策 | (选最高分) | 从 采样 |
| 优化目标 | 找到最优 | 找到最优 |
| 动作空间 | 只能处理离散动作 | 天然支持连续动作 |
| 探索机制 | 需要人工补丁(ε-贪婪) | 随机性策略天然探索 |
策略梯度的直觉:好就多做,坏就少做
怎么求这个梯度 呢?在第 5 章,我们会带你从头推导这个公式。但在这里,为了让你更直观地理解路线二在干什么,我们先用一个极其平缓的坡度,把推导过程过一遍。不需要任何高深微积分,只要高中的概率知识就够了。
1. 什么是轨迹(Trajectory)?
我们先回忆一下目标函数 ,它的物理意义是“在当前策略 下,你能拿到的平均总分”:
如果把这个期望()拆开,其实就是在算所有可能跑出来的轨迹的加权平均。 什么是轨迹?就是从游戏开始到结束,你走过的每一个状态和动作。我们可以把它记为一个序列 (Trajectory):
对于任意一条轨迹 ,它有两个最重要的属性:
- 它的总得分 :这取决于环境的奖励规则(你一路拿了多少金币,扣了多少血)。
- 它发生的概率 :这取决于你的策略 (你越喜欢选某个动作,包含这个动作的轨迹发生的概率就越高)和环境的物理法则。
既然期望就是“把每种可能的结果乘以它发生的概率,然后全加起来”,那么目标函数就可以直白地写成:
2. 对参数求导
我们的目标是找到能让 达到最大的参数 。怎么找最大值?当然是对 求导(求梯度),然后顺着梯度的方向去更新参数。
我们直接对上面的公式两边求梯度:
这里有一个非常关键的观察:得分 是环境给的,它只跟这条轨迹本身有关,完全不依赖于你脑子里的神经网络参数 。 所以,对 来说, 就像个常数。求导符号可以直接穿过求和号和常数,只作用在概率 上:
3. Log-Derivative Trick(对数求导技巧)
上面的公式虽然严谨,但在计算机里没法算。因为这里有个 ,也就是要把宇宙中所有可能的轨迹都穷举一遍,这显然不可能。我们真正想要的是一个能用采样(蒙特卡洛方法)来估算的期望形式 。
要把 变回 ,公式里必须有一个概率项 作为权重。但现在的公式里,概率项被求导符号包裹着(),没办法直接提出来。
怎么办?这里我们要借用高中数学里的复合函数求导公式(链式法则): 我们知道, 的导数是 。所以,如果对 求导,结果是 。 把这个公式稍微变一下形,把分母乘过去,就得到了机器学习里大名鼎鼎的对数求导技巧:
我们把 当作这里的 ,代入到上面的梯度公式里,奇迹发生了:
你看,式子里又出现了 ,这不正是求期望的标准定义吗! 于是,我们可以名正言顺地把它变回期望的写法:
这意味这什么?意味着我们不需要穷举所有轨迹了!我们只需要用当前的策略去游戏里玩几局(采样几条轨迹 ),算一下中括号里的值求个平均,就能得到梯度的近似值。
4. 拆解轨迹概率
最后一步,也是最符合直觉的一步。 一条轨迹 发生的概率 到底是怎么算出来的? 它其实就是从头到尾,每一步发生概率的连乘。
在任意一步 ,发生两件事:
- 智能体根据策略,决定做一个动作,概率是 。
- 环境根据物理法则,跳到下一个状态,概率是 。
所以,整条轨迹的概率就是:
回忆一下高中的对数运算:连乘取对数,就变成了连加。
所以, 就变成了一大串东西的相加:
当我们对这串式子求梯度 时,最爽的事情发生了:环境的初始状态概率 和转移概率 ,它们都是环境自己的物理法则,完全不包含你的神经网络参数 。 所以对 求导后,它们全变成了 0!
只剩下与你的策略有关的那一项。最终,整个轨迹的梯度,就极度清爽地化简成了每一步动作梯度的累加。
把它代回我们上面的期望公式,就得到了大名鼎鼎的策略梯度(Policy Gradient)估计式的基本形态:
5. 公式背后的直觉
别被上面的一堆符号吓到,这个公式如果翻译成大白话,不仅极度优雅,而且完全符合人类的常识。
括号里有两个关键部分:
- :它告诉你:“如果我想让当前这个动作的概率变大,我该往哪个方向调参数 ”。
- :它告诉你:“你刚跑完的这一整局,到底拿了多大的总分(这就是调节的力道)”。
两者一乘,意思就是:如果这局拿了高分,就用力把沿途做过的所有动作的概率推上去;如果这局拿了低分(负分),就把沿途做过的所有动作的概率拉下来。
想象你是个傻瓜机器人,正在玩 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 开始,亲手体验策略梯度的工作方式和高方差问题。
本节总结
至此,你掌握了两套完全不同的工具,本节的核心收获可以归纳为以下几点:
- 从“打分”到“直接行动”。 当面对连续或极大的动作空间时(如机械臂控制、大模型生成),无法枚举所有动作并计算 值。参数化策略 直接学习输出动作的概率分布。
- 优化目标 。 策略好不好,看平均得分。 就是策略的平均长期回报,找到最优策略变成了寻找让 最大的参数 。
- 策略梯度的推导与直觉。 通过 Log-Derivative Trick,我们将目标函数的梯度转化为轨迹概率和得分的期望。它在物理意义上非常朴素:“好结果 提高沿途动作概率”,“坏结果 降低沿途动作概率”。这通过 在数学上得到了严谨的体现。
- 两条路线的互补性。
- 路线一(Value-Based):先搞清楚每个动作值多少分,再选最高分。打分准(低方差),但不擅长探索、无法处理连续动作。
- 路线二(Policy-Based):直接学“该做什么”。天然支持连续动作空间、擅长探索,但方差大、数据效率低。
局限性与后续引申
路线二(Policy-Based)虽然解决了连续动作空间的问题,但它的短板是打分不够准(高方差)——策略梯度方法的方差很大。同一种策略跑两次,梯度估计可能差异显著,就像同一个学生两次考试分数波动很大一样。
一个自然的想法是:能不能把两条路线的优点拼在一起?用路线一的方法打分,用路线二的方法选动作?这正是 Actor-Critic 架构的核心思想(我们将在第 6 章详细介绍)。
无论是学 还是优化 ,所有算法的根本驱动力都来自同一个信号:奖励(Reward)。但这个决定智能体行为方向的奖励是从哪里来的?如果我们设计得不好,会发生什么灾难性的后果?
下一节,我们将讨论这个在强化学习中最容易被忽视、却至关重要的环节:
← 上一节:路线一:Q(s,a)——给每个动作打分 | 下一节:算法数据来源