本博客基于西安交通大学强化学习课程 PPT 改编,历经 Gemini 以及本人总结以及整理形成。
之前我们主要学习了基于价值 (Value-Based) 的强化学习方法(如 Q-learning, DQN)。这些方法的核心是学习价值函数(V(s) 或 Q(s,a)),然后根据价值函数间接地导出策略(例如,使用 ϵ-greedy 选择 Q 值最高的动作)。
然而,基于价值的方法在某些情况下存在局限性:
- 难以处理高维或连续动作空间(Q-learning 需要对所有动作计算 max)。
- 无法自然地学习随机性策略,而随机策略在某些场景(如部分可观测环境、需要探索或最优策略本身就是随机的)下是必要的或更优的。
- 价值函数本身可能非常复杂,导致学习困难。
基于策略 (Policy-Based) 的方法提供了一种替代方案:直接参数化并优化策略本身。
- 核心思想:将策略表示为一个以参数 θ 控制的函数 πθ(a∣s)=P[A=a∣S=s,θ]。我们的目标是找到最优的参数 θ∗,使得该策略 πθ∗ 的性能(例如,累积回报)最大化。
- 策略函数近似:为了使用梯度优化,策略函数 πθ(a∣s) 需要对参数 θ 可微。常用的有 Softmax 策略(离散动作)或高斯策略(连续动作)等。
基于策略方法的优劣势:
- 优势:收敛性较好(不易发散);天然适用于连续动作空间;可以学习随机策略;策略本身可能更简单。
- 劣势:通常收敛到局部最优;策略评估(计算梯度)的样本效率可能较低,且方差较高。
策略梯度定理 (Policy Gradient Theorem)#
为了通过梯度上升法 θ←θ+α∇θJ(θ) 来优化策略参数 θ,我们需要计算目标函数 J(θ) (衡量策略性能,如初始状态价值 Vπθ(s0) 或平均奖励)的梯度 ∇θJ(θ),即策略梯度。
策略梯度定理提供了一个计算策略梯度的基础表达式,它将目标函数的梯度与策略 πθ 和动作价值函数 qπθ(s,a) 联系起来,并且(方便地)不依赖于状态分布 dπθ(s) 对参数 θ 的导数。
定理:对于常用的性能目标 J(θ),策略梯度可以表示为:
∇θJ(θ)∝s∈S∑dπθ(s)a∈A∑qπθ(s,a)∇θπθ(a∣s,θ)
或者,更常用的期望形式为:
∇θJ(θ)=Eπθ[qπθ(St,At)∇θlogπθ(At∣St,θ)]
其中,期望 Eπθ[⋅] 是在策略 πθ 下对轨迹 (St,At) 进行的。∇θlogπθ(At∣St,θ) 被称为得分函数 (score function)。
推导概要 (利用对数导数技巧):
∇θJ(θ)∝∑sd∑aq∇π=∑sd∑aπqπ∇π=∑sd∑aπq∇logπ=E[q∇logπ]
这个定理告诉我们,策略梯度的方向是:增加那些具有较高动作价值 qπθ(St,At) 的动作 At 的对数概率 logπθ(At∣St,θ)。
估算策略梯度:REINFORCE 算法#
策略梯度定理给出了梯度的期望形式,我们可以使用蒙特卡洛采样来估计这个期望。
基本思想:
- 根据当前策略 πθ 运行一个完整的 episode,获得一条轨迹 S0,A0,R1,S1,A1,R2,…,ST−1,AT−1,RT。
- 对于轨迹中的每一步 (St,At):
- 使用从 t 时刻开始的完整样本回报 Gt 作为动作价值 qπθ(St,At) 的无偏估计。
Gt≐k=t∑T−1γk−tRk+1
- 计算得分函数 ∇θlogπθ(At∣St,θ)。
- 构造策略梯度的单样本无偏估计:g(t)=Gt∇θlogπθ(At∣St,θ)。
- 使用这个随机梯度来更新策略参数:
θ←θ+αg(t)
(通常在一个 episode 结束后,累积所有时间步的梯度进行一次更新,或者每一步都更新)。
这就是 REINFORCE 算法 (也称 Monte Carlo Policy Gradient)。
算法:REINFORCE (基本形式)
算法参数: 学习率 α > 0
初始化: 策略参数 θ 任意
循环 对每个 episode:
根据当前策略 π_θ 生成一个 episode: S₀, A₀, R₁, ..., S_{T-1}, A_{T-1}, R_T
初始化 G = 0
对于 t = T-1, T-2, ..., 0:
// 计算从时间 t 开始的回报 G_t (这里使用迭代计算)
G ← R_{t+1} + γ * G
// 计算梯度项 g(t) = G_t * ∇logπ
∇logπ ← ∇_θ log π_θ(A_t | S_t, θ)
// 更新策略参数 (可以在循环内每步更新,或累积梯度在 episode 结束后更新)
θ ← θ + α * G * ∇logπ
plaintext
REINFORCE 的主要问题:使用 Gt 作为 qπθ 的估计虽然无偏,但其方差非常高,导致学习过程缓慢且不稳定。
降低方差:引入基线 (Baseline)#
为了解决 REINFORCE 的高方差问题,可以在策略梯度估计中引入一个基线 (Baseline) b(s),它只依赖于状态 s,不依赖于动作 a。
策略梯度(带基线):
∇θJ(θ)=Eπθ[(qπθ(St,At)−b(St))∇θlogπθ(At∣St,θ)]
为何可行:减去基线 b(St) 不会改变梯度的期望值(即梯度估计仍然无偏),因为 EA∼πθ(⋅∣St)[b(St)∇θlogπθ(A∣St,θ)]=0。
基线的作用:选择合适的基线 b(s) 可以显著降低梯度估计的方差。
常用基线:状态价值函数 Vπθ(s)
一个非常自然且常用的选择是使用当前策略下的状态价值函数 Vπθ(s) 作为基线。此时,(qπθ(St,At)−Vπθ(St)) 正是优势函数 (Advantage Function) Aπθ(St,At)。
策略梯度变为:
∇θJ(θ)=Eπθ[Aπθ(St,At)∇θlogπθ(At∣St,θ)]
这使得策略更新更直观:增加具有正优势(比平均好)的动作的概率,减少具有负优势(比平均差)的动作的概率。理论上,选择 Vπθ(s) 作为基线可以(近似地)最小化梯度方差。
带基线的 REINFORCE 算法 (一种简单的 Actor-Critic)#
为了在 REINFORCE 中使用 Vπθ(St) 作为基线,我们需要一个对 Vπθ(St) 的估计。这通常通过引入第二个函数近似器(神经网络)来实现,称为评论家 (Critic),用于学习状态价值函数 v^(s;w)≈Vπθ(s)。原来的策略网络 π(a∣s;θ) 则被称为演员 (Actor)。
算法思想:
- Actor (策略网络 πθ):根据当前策略生成动作,并根据 Critic 提供的优势信号更新参数 θ。
- Critic (价值网络 v^w):评估 Actor 在某个状态下的表现(估计 Vπθ(s)),并为 Actor 提供基线。Critic 自身也需要学习和更新。
训练过程:
- 对于轨迹中的每一步 (St,At):
- 计算蒙特卡洛回报 Gt=∑k=tT−1γk−tRk+1。
- Critic 更新:使用 Gt 作为 Vπθ(St) 的(有噪声的)目标。计算价值估计误差(或称为 TD 误差,尽管这里目标是 MC 回报) δt=Gt−v^(St;w)。通过梯度下降最小化误差(例如均方误差 (Gt−v^(St;w))2):
w←w+αwδt∇wv^(St;w)
- Actor 更新:使用 Critic 计算出的误差 δt(它近似于优势 Aπθ(St,At))来更新策略参数:
θ←θ+αθδt∇θlogπθ(At∣St;θ)
算法:带基线的 REINFORCE
算法参数: 策略学习率 α_θ > 0, 价值学习率 α_w > 0
初始化: 策略网络参数 θ, 价值网络参数 w 任意
循环 对每个 episode:
根据当前策略 π_θ 生成一个 episode: S₀, A₀, R₁, ..., S_{T-1}, A_{T-1}, R_T
初始化 G = 0
对于 t = T-1, T-2, ..., 0:
// 计算从时间 t 开始的回报 G_t
G ← R_{t+1} + γ * G
// 计算优势函数 (TD 误差形式,使用 MC 回报 G 作为目标)
δ ← G - v̂(S_t; w) // v̂ 是价值网络的输出
// 更新价值网络参数 w (Critic Update)
w ← w + α_w * δ * ∇_w v̂(S_t; w)
// 更新策略网络参数 θ (Actor Update)
∇logπ ← ∇_θ log π_θ(A_t | S_t; θ)
θ ← θ + α_θ * δ * ∇logπ
plaintext
特点:
- 同时学习策略和状态价值函数。
- 价值函数主要用作基线来降低策略梯度的方差。
- 这仍然是一种蒙特卡洛方法,因为它依赖于完整的 episode 回报 Gt。因此,更新需要在 episode 结束后进行,并且可能学习较慢。
- 策略梯度方法直接优化参数化的策略 πθ,适用于各种(包括连续)动作空间和随机策略。
- 策略梯度定理 ∇J=E[qπ∇logπ] 是理论基础。
- 直接使用蒙特卡洛估计策略梯度(如 REINFORCE 算法)虽然无偏,但方差很高。
- 引入基线(特别是状态价值函数 Vπ(s),导致使用优势函数 Aπ)是降低方差的关键技术,且不引入偏差。
- 带基线的 REINFORCE 算法通过学习一个价值函数 v^(s;w) (Critic) 来提供基线,形成了简单的 Actor-Critic 结构。
- 虽然 REINFORCE with Baseline 降低了方差,但它仍然基于 MC 回报,效率可能不如使用 TD 误差的 Actor-Critic 方法(将在后续讨论)。