Baseline、Advantage 与 Entropy
用 baseline 降低方差、advantage 衡量相对好坏、entropy 维持探索。
学习目标
- 把降低方差、比较相对动作价值与鼓励探索三种作用分开。
- 独立复核“优势的策略平均为零,熵则描述分散程度”的输入、计算和解释。
- 优势描述相对价值,熵只描述概率分布。
为什么重要
把降低方差、比较相对动作价值与鼓励探索三种作用分开。
学习前需要掌握
背景与问题
一个任务里所有轨迹奖励都很大,但动作之间只差一点。直接乘原始回报会使梯度波动很强;同时策略过早只选一个动作可能失去探索。baseline、advantage 与 entropy 针对的是不同现象。
概念定义
基线是从回报信号中减去的参考量,典型选择是状态价值;优势 Aπ(s,a)=Qπ(s,a)−Vπ(s) 表示动作相对当前策略平均的好坏。熵衡量动作分布的分散程度,作为奖励或正则鼓励保持多样性。
直观理解
考试总分由题目难度共同影响,比较“比该题平均水平高多少”比只比较原始分数更有针对性。熵则像避免班级所有人过早只押一种答题方式,与扣除平均分是两回事。
核心原理
理想条件下,减去不依赖当前动作的基线不改变 score-function 梯度期望,但可以改变方差。学习出来的基线不一定降低每一批方差;若错误地加入动作依赖或让 actor 路径穿过目标,需重新分析。
优势不是概率,也不要求每个采样批次均值恰好为零。理论上的策略加权优势期望为零;经验标准化是数值处理,会改变有限批次尺度,不等于真实优势被准确估计。
离散分布均匀时熵最大,确定策略熵为零。较大的熵系数会鼓励分散,也可能让策略持续执行低收益动作;熵更高不能直接解读为探索到了有价值的新区域。
数学表达
Advantage
动作相对状态平均水平的优势。
变量含义
G_t从时刻 t 开始的折扣累计回报。R_{t+1}执行动作后收到的下一步奖励。γ折扣因子,通常位于 [0,1)。
计算步骤
- 1优势为 −3 与 1。
- 2策略加权均值为 0.25×(−3)+0.75×1=0。
- 3熵为 −0.25 ln0.25−0.75 ln0.75≈0.562335。
代码对应位置
示例 1优势的策略平均为零,熵则描述分散程度:优势为 −3、1,加权平均为零;该分布熵为 0.562335 nats。
变量解释
| 变量 | 含义 |
|---|---|
G_t | 从时刻 t 开始的折扣累计回报。 |
R_{t+1} | 执行动作后收到的下一步奖励。 |
γ | 折扣因子,通常位于 [0,1)。 |
完整数值示例
优势的策略平均为零,熵则描述分散程度
已知条件
- 动作概率为 0.25、0.75,Q 为 2、6。
- 状态价值按该策略计算为 5,使用自然对数。
计算步骤
- 优势为 −3 与 1。
- 策略加权均值为 0.25×(−3)+0.75×1=0。
- 熵为 −0.25 ln0.25−0.75 ln0.75≈0.562335。
计算结果
优势为 −3、1,加权平均为零;该分布熵为 0.562335 nats。
处理前后对比
- 优势描述相对价值,熵只描述概率分布。
- 非均匀策略下,优势的简单算术均值未必为零。
计算与实现步骤
- 估计 V
- 计算 A
- 标准化可选
- 加入 entropy bonus
代码实现
示例 1
优势的策略平均为零,熵则描述分散程度
example_01.py用途:优势为 −3、1,加权平均为零;该分布熵为 0.562335 nats。
import math
probabilities, q = [0.25, 0.75], [2.0, 6.0]
value = sum(p * x for p, x in zip(probabilities, q))
advantage = [x - value for x in q]
weighted = sum(p * a for p, a in zip(probabilities, advantage))
entropy = -sum(p * math.log(p) for p in probabilities)
print(f"advantages={advantage}, weighted_mean={weighted:.6f}")
print(f"entropy={entropy:.6f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
优势为 −3、1,加权平均为零;该分布熵为 0.562335 nats。
Step 1 · 1–8 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import math
probabilities, q = [0.25, 0.75], [2.0, 6.0]
value = sum(p * x for p, x in zip(probabilities, q))
advantage = [x - value for x in q]
weighted = sum(p * a for p, a in zip(probabilities, advantage))
entropy = -sum(p * math.log(p) for p in probabilities)
print(f"advantages={advantage}, weighted_mean={weighted:.6f}")
print(f"entropy={entropy:.6f}")代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
advantages=[-3.0, 1.0], weighted_mean=0.000000 entropy=0.562335
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 使用动作依赖基线却不考虑梯度偏差。
- 把标准化后的零均值当作 critic 已经准确。
- 把熵系数增大视为无条件的性能改进。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 使用动作依赖基线却不考虑梯度偏差。
- 把标准化后的零均值当作 critic 已经准确。
- 把熵系数增大视为无条件的性能改进。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 13 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 使用动作依赖基线却不考虑梯度偏差。
- 把标准化后的零均值当作 critic 已经准确。
- 把熵系数增大视为无条件的性能改进。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
熵奖励和奖励塑形一样吗?
两者都可能改变优化目标,但熵依赖策略分布,主要调节随机性;势函数塑形依赖状态势差,并在特定条件下保持原任务最优策略。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。