云计算百科
云计算领域专业知识百科平台

Baseline 为什么不改策略梯度期望,却不保证每次都降方差

回报与基线修正

给回报减去一个 baseline,经常被解释成“让梯度更稳定”。这句话省略了两个条件:baseline 不能偷偷依赖本次采样动作,而且选得很差时,方差可能更高。

PPO 原论文使用优势估计构造策略更新目标。理解优势之前,可以先把一个更基础的恒等式算清:对固定状态,Σ_a π(a)∇logπ(a)=∇Σ_aπ(a)=0。因此动作无关的 b(s) 在精确期望中不改变策略梯度。

回报减去状态基线的示意

图表给出下述两个动作例子的精确均值与方差;它同时展示了有用与不良 baseline,中心化也不是降方差的充分条件。下面枚举一个 Bernoulli 策略的两个动作,直接算梯度估计的期望和方差。参数是 logit,score 为 a−p。

import math

def moments(p, rewards, baseline):
probabilities = [1-p, p]
gradients = [(rewards[a]-baseline)*(a-p) for a in (0, 1)]
mean = sum(q*g for q, g in zip(probabilities, gradients))
variance = sum(q*(g-mean)**2 for q, g in zip(probabilities, gradients))
return mean, variance

p = 0.5
raw = moments(p, [0.0, 1.0], 0.0)
useful = moments(p, [0.0, 1.0], 0.5)
poor = moments(p, [0.0, 1.0], 10.0)
assert all(math.isclose(x[0], 0.25) for x in (raw, useful, poor))
assert useful[1] < raw[1] < poor[1]
# An action-dependent subtraction need not preserve the mean.
bad_mean = sum(0.5*(a-a)*(a-p) for a in (0, 1))
assert bad_mean != raw[0]
print("raw/useful/poor mean,variance:", raw, useful, poor)

在这个对称例子里 b=0.5 恰好使估计方差为零,b=10 却把方差放大。一般情形下,使方差最小的 baseline 还与 score 的平方权重有关,不能把这里的 0.5 直接推广为所有任务的平均回报。

工程实现还有计算图问题:更新策略时,优势中的 baseline 常作为固定估计使用,避免把其参数依赖引入另一条梯度路径。若同一批数据同时拟合 baseline 与估计梯度,有限样本和数据相关也需要分析;“精确期望不变”不是“每个批次结果相同”。

本文是两个动作的精确枚举,不是 PPO 训练实验,也没有验证 GAE、价值网络或多卡同步。把期望、方差与有限样本误差分开,才能判断一条稳定训练曲线究竟来自哪里。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Baseline 为什么不改策略梯度期望,却不保证每次都降方差
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!