策略梯度
介绍策略梯度方法的基本原理,REINFORCE 算法以及优势函数等内容
策略梯度方法
-
类似于函数逼近价值函数和动作值函数,可以直接对策略进行逼近,即
-
基于价值的:学习价值函数,隐式的策略 —— 先学 “好不好”,再推 “怎么选”
- 不可微
- 连续动作空间无法枚举
- 随机策略不自然
-
基于策略的:学习参数化策略,没有价值函数 —— 直接学 “怎么选”
- 给定状态 ,策略网络直接输出动作分布
- 更好的收敛性质,但是通常收敛到局部最优解
- 在高维或连续动作空间中更有效
- 可以学习随机策略
- 代价:目标函数复杂,梯度估计方差大,评估策略通常不高效
-
Actor-Critic:学习价值函数和策略
- Actor:学策略
- Critic:学价值 或 ,指导 Actor
-
-
策略目标函数的关键
-
如何评估策略 的质量?什么叫 “一个策略是好的”?
-
是一个标量函数,输入是策略参数 ,输出是 “这个策略有多好”
-
在 Episodic 环境(任务有明确终止,如游戏、对话生成)中,从固定起点 出发,看期望总回报(REINFORCE 方法)
-
在连续环境(连续任务,如机器人控制、推荐系统)中,使用值函数的平均值
-
在连续环境中,使用每个时间步的平均奖励
-
其中, 是 的稳态概率分布,表示 “长期来看,策略的平均表现”
-
-
对策略目标函数 使用梯度上升法
-
如果一个动作导致了高回报,就提高它的概率;如果导致低回报,就降低它的概率
-
因此,我们要做的不是最小化损失,而是最大化收益:
-
工程上一般使用梯度下降方法,因此可以定义损失:
-
策略梯度为
-
通过有限差分计算梯度:对于每个维度 ,估计目标函数的 k 阶偏导数
-
-
策略目标无法直接求解
-
考虑最直观的 Episodic 目标
- 是一条完整轨迹
-
积分得到
-
直接求导
-
问题是轨迹概率是什么?
- :我们控制
- :环境给的,未知、不可导
-
如果强制求导,有
-
环境转移概率不可导,且夹在乘积里,无法直接拿出来
-
同时,状态分布 依赖
-
这里的 等价于 “策略参数变化,未来所有状态分布如何改变”,而这是一个无限时序、递归依赖、不可显式计算的对象
-
因此,直接对策略目标函数求梯度是行不通的
-
-
策略梯度定理(Policy Gradient Theorem)
-
根据上述推导,如果我不知道环境怎么转移,但我知道:在状态 下选了动作 ,最后赢了还是输了,我能不能合理地调整这个动作的概率?
-
似然比(Likelihood ratios)—— 把 “概率的梯度” 变成 “概率 × 可计算的量”
-
Score 函数即为
-
回到刚刚的公式:
-
代入:
-
于是:
-
再看
-
对 求导,得到
-
上式中,初始分布 不依赖 ,环境转移概率不依赖 ,全部消失
-
其本质在于:改变策略,只能通过 “改变动作选择概率” 来影响未来
-
策略不会直接控制环境,只能控制 ,所有未来的改变,都会被 “压缩” 进:
-
-
对于任意可微策略和任意策略目标函数,策略梯度为
- 可以选
- 梯度中没有 ,不需要对状态分布求导,这是策略梯度能成立的关键原因
- 本身不可直接计算,只能用采样估计
- 上式子正是 的蒙特卡洛估计形式
REINFORCE 算法(蒙特卡洛策略梯度)
-
REINFORCE 是策略梯度的最原始实现
-
具体过程,在时间步 :
-
在状态
-
随机选了一个动作
-
整条轨迹结束后,计算整条轨迹的真实总回报 作为 的无偏估计
- “如果这个动作带来了高回报,就提高它被选中的概率”
- 如果 大 → 提高 在 被选中的概率
- 如果 小 → 降低它的概率
-
更新公式:“奖励 × 调整方向”
-
-
REINFORCE 无偏,但是方差极大;收敛慢,对长序列极不稳定
- 用作权重的总回报 同时包含了当前动作 的因果影响,以及大量由未来状态转移和未来随机动作引入、但与 无关的随机性
- 为什么不用 TD?不用 ?—— REINFORCE 的目标是保证无偏
优势函数
-
由于我们不能穷举所有状态 / 动作,通常用采样估计期望值
- 这就是无基线策略梯度估计,但它存在高方差问题
- (奖励总回报)可能受未来长序列动作影响,变动范围大
- 在实际中,使用状态值函数作为采样近似代替
- 的值乘上一个波动剧烈的 会造成不稳定
- 当 本身变动大,梯度估计的方差也大,会导致训练过程不稳定(更新方向不一致,收敛慢或震荡)
-
REINFORCE 存在高方差问题
- 是从整个轨迹累积下来的,它同时包含了 “这个状态下动作的影响”+“后面所有随机性” 的噪声
- 例如,在某个状态 随机选择了动作 ,则 包含了后续奖励的总和;即使 本身并不重要,更新的梯度里也会因为包含后续随机事件带来的波动而无法准确学习到动作 的准确性
- 如,在 选了一个 “无关紧要” 的动作,后面 因为环境随机性中了大奖,那么 REINFORCE 会:把 的动作 狠狠奖励一顿
-
引入基线函数(baseline)
-
有些状态就是 “天生收益高”,比如游戏开始后就得高分,那再高的 也未必说明这个动作好
-
因此需要考虑:这一步选这个动作,是比平常好,还是比平常差?
-
而基线就是用来 “减去平均值”,消除状态本身引起的高回报偏差,即把回报改为:
-
其中 表示 “在这个状态下的平均水平”
-
如此,更新梯度时只依赖相对表现,消除了很多不相关的噪声
-
-
被选择的基线函数 要避免引入额外偏差以保证无偏性,同时减少方差而不改变期望,即满足
-
如果 baseline 只依赖状态,那么最自然的选项便是 ,即 “这一步动作带来的真实收益” 减去 “在当前策略 下对动作分布的期望收益”
-
因此 ,则有优势函数
-
引入优势函数后,REINFORCE → Advantage REINFORCE
-
优势函数(Advantage Function)
-
定义:优势函数 衡量当前动作 相对于当前策略下平均动作的优势
-
实际上表示在状态 下,选取动作 相对于其他情况的优势
-
优势函数可以显著减少策略梯度的方差,在后续 Actor–Critic 框架中,优势函数通常由 Critic 估计
-
-
引入优势函数后,解决了 REINFORCE 算法中的高方差问题
-
但是在 REINFORCE 算法中,必须跑完整条轨迹才能更新,这在长 episode、连续任务、实时系统中几乎不可接受
-
而真 TD 误差 正好是优势函数的无偏估计,因此可以使用 TD 误差替换 REINFORCE 中的回报
- 该等式成立的前提是 为真实价值函数;在实际 Actor–Critic 中,使用 近似,从而引入偏差但换取低方差与在线性
- 因此在实际情况,可以使用估计 TD 误差
- TD 误差本身并不等同于优势函数,而是一个以优势函数为条件期望的随机样本;当 时,该估计在期望意义下趋于无偏
-
广义优势估计(Generalized Advantage Estimation, GAE)
-
公式定义:
-
或递推形式:
-
其中:
- :一步 TD 误差
- :折扣因子,控制未来奖励的重要性
- :平滑参数,控制 TD 误差的加权衰减
- :从当前时间步 开始累积 TD 误差的步数
-
-
从 TD (0) 到 GAE (λ) 的几种不同的优势函数
-
TD (0)
-
一步回报
-
TD 误差
-
最小方差、最大偏差、信用只分配给下一步
-
-
n-step TD:延长信用分配
-
n-step 回报
-
n-step 优势
-
n-step 优势 = n 个 TD 误差的折扣和
-
-
TD 误差展开
-
TD 误差求和
-
从而得到关键恒等式
-
-
TD (0) 的直接推广、n 控制 “向未来看多远”、n 越大 → 偏差 ↓ 方差 ↑
-
-
TD (λ):对所有 n-step 的加权平均
-
λ - 回报
-
λ - 优势
-
TD (λ) 不是一种新回报,而是所有 n-step 的融合
-
-
GAE (λ):把 TD (λ)“改写” 为 TD 误差的折扣和
-
定义 TD 误差
-
广义优势估计
-
等价关系推导
-
将”n-step 优势 = n 个 TD 误差的折扣和 “代入 λ - 优势
-
交换求和顺序,原结构中,外层对 n 求和,内层对 l=0,…,n−1;改为外层对 l 求和,内层对 n ≥ l+1 求和
-
计算内层级数
-
代回去得到
-
由此可得
-
-
GAE (λ) 不是一种 “近似 TD (λ)” 的方法,它就是 TD (λ) 在 Actor–Critic 中的优势形式重写
-
但在实现时
- 由于 GAE (λ) 是无限求和,因此会截断有限 horizon,“截断的 GAE (λ)” ≠ 理论上的无限和
- TD (λ) / GAE (λ) 里的回报,并不是真实 return,而是 “bootstrapping 估计”,包含一定偏差
- λ 一般用于控制是否更信任价值函数,还是更信任真实奖励序列
-
-