2.3 策略、价值与回报
本节导读
核心内容
- 理解策略 如何与环境交互并产生一条轨迹。
- 区分一条实际轨迹的回报 与多次可能结果的期望价值。
- 理解状态价值 、动作价值 和优势函数 分别回答什么问题。
上一节用 MDP 五元组描述了环境规则。环境怎样运行已经清楚,但智能体怎样行动、连续行动的长期结果怎样评价,还没有说明。
现在加入策略 。智能体根据当前状态选择动作,环境返回奖励并进入下一状态;不断重复,就得到一条轨迹,沿着轨迹可以算出每个时刻的回报 。但真正做决策时,智能体不能等轨迹结束再判断——同一个状态在不同尝试中可能产生不同的动作、转移和回报,因此在行动之前,还需要对这些可能的未来取平均。
具体来说,本节回答三个问题:每一步怎么选(策略 )、一条轨迹总共得到多少(回报 )、行动之前怎样评价状态和动作(、 和 )。
核心概念
策略决定智能体怎样行动,回报衡量一条实际轨迹的长期收益,价值函数则对尚未发生的未来回报取期望。同一个状态可能产生多条不同轨迹,因此 描述一次具体结果, 和 描述多次可能结果的平均水平。
核心公式
确定性策略与随机策略:描述每一步怎样选择动作。
策略(Policy):
- :智能体的决策规则,读作“派”。
- :确定性策略,在状态 下直接输出一个动作。
- :随机策略,在状态 下输出所有动作的概率分布。
折扣累积回报:衡量从时刻 开始的一条实际轨迹。
回报(Return):
- :从时刻 开始,未来奖励经过折扣后的总和。
- :向后第 步收到的单步奖励。
- :这份未来奖励在当前回报中的权重。
状态价值与动作价值:估计行动之前的长期收益。
价值函数(Value Function):
- :从状态 出发并按照策略 行动时,未来回报的平均值。
- :在状态 先执行动作 ,随后按照策略 行动时,未来回报的平均值。
- :动作 相对当前策略平均水平好多少。
策略与决策规则
上一节把 CartPole 的所有可能状态记作 ,全部可选动作记作 。现在从状态集合中取出一个具体状态。环境每一步返回四个数字,依次是小车位置、小车速度、杆子角度和杆子角速度。假设某一时刻读到
这个四维向量就是一个具体状态:小车位于中央附近,位置和速度暂时接近 ;杆子向一侧倾斜了 弧度,并且还在以每秒 弧度的角速度继续转动。
另一次运行中,环境可能返回
CartPole 运行过程中还会出现许多其他四维向量。把它们全部放在一起,就是 ;花体大写表示整个集合,小写 表示从中取出的一个具体状态,因此 。状态连续变化,所以 中包含大量可能的四维向量,不只有这两个例子。
现在,智能体拿到了一个具体状态 ,需要从动作集合 中选出一个动作 。这条“看到什么状态,就怎样选择动作”的规则就是策略(policy),记作 ,读作“派”。
策略分为两种形式。先看确定性策略。
确定性策略在每个状态下直接给出一个动作:
符号 表示“从左边得到右边”。因此, 的意思是:策略接收状态集合中的一个状态,输出动作集合中的一个动作。
为了看清这条映射,可以暂时只取三个具体状态。下面是一条用于讲解的简单策略,它不代表 CartPole 的最优控制方法:
| 输入状态 | 状态中的杆子运动 | 策略输出 |
|---|---|---|
| 向右倾,并继续向右转动 | 向右推 | |
| 向左倾,并继续向左转动 | 向左推 | |
| 接近直立 | 向右推 |
第一行可以写成
左边的 是输入,右边的“向右推”是输出。同一个 再次输入这条确定性策略时,输出仍然是“向右推”。对状态集合中的每个状态都规定一个动作,就得到完整的确定性策略。
随机策略在每个状态下给出一组动作概率:
表示“动作集合 上所有可能的概率分布”。CartPole 只有左推和右推两个动作,因此一个动作概率分布可以写成
例如, 表示向左推的概率为 ,向右推的概率为 。、 和 也都是动作集合 上的概率分布。所有这样的概率分布合在一起,就是 。
随机策略会为不同状态输出不同的动作概率。仍然使用前面的三个状态,可以得到下面这张表:
| 输入状态 | 向左推的概率 | 向右推的概率 | 策略输出 |
|---|---|---|---|
当输入为 时,策略没有直接指定一个动作,而是输出 。如果重复遇到 很多次,实际选择会大约有 是向左推, 是向右推。
在 中,竖线 读作“在……条件下”,所以它表示“已知当前状态是 时,各个动作的概率”。圆点 代表所有候选动作。符号 表示“按照右边的概率分布进行采样”,因此 的意思是:按照策略给出的动作概率,随机选出实际动作 。
把整条过程连起来看: 是 中的一个具体状态;随机策略把 变成 中的一个具体概率分布 ;最后再按这个分布采样,得到 中的一个具体动作,例如“向右推”。
随机策略也包含确定性策略这个特殊情况。例如,概率分布 表示向左推的概率为 、向右推的概率为 ,所以实际每次都会向右推。策略梯度方法通常直接学习随机策略;DQN 等价值型方法则常从动作价值中导出确定性的贪心策略。
# CartPole 的一个简单随机策略示例
import torch
import torch.nn as nn
class CartPolePolicy(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(4, 32), nn.Tanh(),
nn.Linear(32, 2) # 2 个动作的 logits
)
def forward(self, state):
logits = self.net(state)
return torch.distributions.Categorical(logits=logits)
def act(self, state):
dist = self.forward(state)
action = dist.sample()
return action.item(), dist.log_prob(action)把一个具体状态 torch.tensor([0.00, 0.00, 0.08, 0.15]) 交给这段网络时,第一层接收 个状态数字,最后一层输出 个 logits,分别对应向左推和向右推。Categorical 把这两个分数转换成动作概率,sample() 再按概率抽出动作 或 。log_prob(action) 记录这次动作的对数概率,后面的策略梯度会用它调整网络参数。
最优策略
有了策略以后,还需要比较哪一条策略更好。假设策略 A 控制 CartPole 运行 次,平均坚持 步;策略 B 同样运行 次,平均坚持 步。由于 CartPole 每坚持一步就得到 ,策略 B 的平均长期回报更高。
把所有候选策略都这样比较,期望长期回报最高的那一条称为最优策略,记作 :
这里的 读作“星号”,表示最优; 表示“在所有策略 中,找出让右侧数值最大的那一条”; 表示对策略可能产生的多次结果取平均。DQN、PPO、SAC 采用不同的策略表示和更新方法,但最终都希望提高这个期望回报。
回报与轨迹衡量
先看一条只有三步的轨迹。智能体从 出发选择 ,得到奖励 并到达 ;随后选择 ,得到 ;最后选择 ,得到 ,任务结束。把这段经历按发生顺序写下来,就是一条轨迹(trajectory):
读作 tau,近似“套”,表示整条轨迹;状态和动作的下标 表示作出选择的时间步,奖励 则是在第 步动作之后收到的反馈。一次完整任务通常称为一个 episode,也就是从开始状态走到终止状态的一轮交互。
一条轨迹里有多个单步奖励。为了评价从某个时刻开始的整段未来,需要把这些奖励合在一起,这个量称为回报(return):
表示从时刻 开始的回报。大写 表示下一步收到的奖励, 表示从当前时刻向后数了多少步, 表示把这些项相加。
折扣因子 的作用
是折扣因子,它规定远期奖励在当前回报中的权重。 越小,权重衰减越快; 越接近 1,远期奖励保留的权重越大。
仍看刚才的三步轨迹。如果 ,那么从开头计算的回报是
三个奖励本来都是 ,但第二个奖励的权重是 ,第三个奖励的权重是 。如果改用 ,同一条轨迹的回报会变成 ,说明更远的奖励被看得更轻。
对于奖励有界的无限时域任务, 还能使折扣回报保持有限。对于有明确终点的有限时域任务,可以根据目标采用 ,让各时刻的奖励等权相加。 是任务目标的一部分,不能仅根据算法名称决定。
CartPole 中的回报
CartPole 中,只要杆子仍然立着,每一步就得到奖励 ;杆子倒下或小车越界时,这一轮结束。假设一共坚持了 步,从第 步计算的回报为:
其中 是这一轮交互包含的步数。当 、 时,。如果只坚持 步,则 。在奖励规则相同的情况下,坚持时间更长,回报也更高。
价值函数与长期收益
同一个状态可能产生不同结果。假设 CartPole 在状态 下重复运行三次,按照同一策略继续行动,最后得到的回报分别是 、 和 。单次运行的回报会变化,但三次的平均值是
如果重复次数足够多,这个平均值会逐渐接近该状态在当前策略下的期望回报。价值函数衡量的就是这种“还没有真正走完时,对未来平均回报的估计”。
状态价值
是 value 的首字母,表示价值;右上角的 提醒我们,这个价值取决于后续采用哪条策略。竖线 表示“在……条件下”。因此, 的意思是:已知当前状态 ,之后按照策略 行动时,回报 的平均值。
动作价值
比 多固定了第一步动作。假设在同一个状态 下,先向左推的多次平均回报是 ,先向右推的多次平均回报是 ,那么
这两个数都假设第一步之后继续按照策略 行动。它们把“状态整体上好不好”细分成“在这个状态先做某个动作好不好”。
V 与 Q 的关系
这条公式表示: 是各动作价值按照动作概率算出的加权平均。继续使用上面的数字,如果策略在 下有 的概率向左推、 的概率向右推,那么
符号 表示遍历动作集合中的每个动作并相加, 是动作 的概率, 是先做该动作的长期价值。
补充:这条公式怎样从定义得到
两个定义的差别在于:求平均时,第一步动作有没有被固定下来。状态价值只以当前状态为条件:
动作价值还固定了第一步动作:
在策略 下,第一步动作 仍是随机的,它从 中采样。因此, 的期望可以按“第一步选了哪个动作”分组再平均。这就是第 2.1 节用过的全期望公式:总体平均等于各组概率乘以组内平均。
第一行是 的定义。第二行把同一个期望按可能的第一步动作展开。第三行把内层条件期望换成 。
两个 CartPole 动作时,就是上文的算术:
其中 和 是 与 , 和 是两个动作价值。若策略是确定性的,某个动作的概率为 ,其余为 ,则 就等于那个动作的 。
GridWorld 数值示例
考虑一条只有三个非终止状态的走廊。策略始终向右走,进入终点时获得 ,其他转移奖励为 ,并取 :
S0 ──→ S1 ──→ S2 ──→ 终点
0.81 0.90 1.00 0从 出发,下一步就得到 ,所以 。从 出发,奖励晚一步到达,因此 ;同理,。这里距离终点越近,价值越高,是因为同一份终点奖励经历的折扣次数更少。
优势函数与动作评价
优势函数(advantage function)衡量动作 相对于当前策略在状态 下平均选择的动作好多少:
- :动作 比平均好
- :动作 比平均差
- :动作 是平均水平
继续使用 的例子。向右推的动作价值是 ,所以
这个正数表示向右推比当前策略的平均选择高 分。向左推的优势是 ,负数表示它比平均选择低 分。优势比较的是相对好坏,因此同一状态下会同时出现正优势和负优势。
优势函数在策略梯度(第 6 章)和 Actor-Critic(第 7 章)中是核心概念。
贝尔曼方程的预告
价值函数的定义已经清楚,但计算仍然困难。 是从状态 出发的期望回报;如果同一个状态可能产生大量不同轨迹,直接计算就要运行许多次,再对所有回报求平均。
价值函数满足一个可以利用的递归关系——贝尔曼方程,把 写成 的函数:
先只看方括号中的一项。假设在状态 做动作 后立即得到奖励 ,到达下一状态 ;已知 ,并取 ,那么这一步加上后续价值就是
完整公式还要考虑策略可能选择的所有动作,以及环境可能到达的所有下一状态。外层的 按策略的动作概率求平均,内层的 按环境的转移概率求平均。
第 3.1 节 状态价值与贝尔曼期望方程 将正式推导这个方程,并给出利用它计算价值的方法。
本节总结
第 2.1 节从老虎机出发,说明智能体为什么需要在探索与利用之间取舍。第 2.2 节加入会随动作变化的状态,用 MDP 描述环境规则。本节再加入策略与回报,说明智能体怎样产生一条轨迹,以及怎样衡量这条轨迹的长期收益。
到这里,第 2 章已经建立了描述强化学习问题所需的基本对象:
- 策略 :agent 的决策规则,随机策略 是最一般形式
- 回报 :从 起的折扣累积奖励
- 价值函数: 状态价值, 动作价值;优势 衡量相对好坏
第 2 章到这里结束,下一章进入第 3 章:价值函数与贝尔曼方程。