Policy-based Methods
直接参数化并优化策略,适合随机和连续动作。
学习目标
- 直接参数化动作分布,理解策略参数如何改变行为。
- 独立复核“相同偏移不改变 softmax 策略”的输入、计算和解释。
- 策略参数不是动作价值。
为什么重要
直接参数化动作分布,理解策略参数如何改变行为。
学习前需要掌握
背景与问题
机械臂动作是连续力矩,直接枚举所有动作不现实;而在不完全信息游戏中,随机行动本身也可能必要。直接输出动作分布的策略网络,可以表达这些控制方式,并按回报改善分布参数。
概念定义
策略方法直接学习带参数的随机策略 πθ 或确定性动作映射 μθ。策略可由 logits、Gaussian 均值与尺度等表示;学习目标是提高期望回报。critic 可以辅助估计梯度信号,所以“policy-based”与“actor-critic”不是互斥概念。
直观理解
价值方法像先给所有菜评分再点菜,策略方法像直接调整点单偏好。偏好参数本身不是概率,必须经 softmax 等变换形成满足约束的分布。
核心原理
离散策略通常用 softmax 把 logits 转为概率;所有 logits 加上同一常数不改变分布。连续策略需明确密度、动作边界与变换修正,简单截断动作会影响概率计算。
策略梯度利用被采样动作的对数概率导数乘以回报或优势。好于预期的动作概率上升,差于预期的动作概率下降;并不是让所有高原始奖励动作一律上升。
随机梯度方差可能很大,因此使用基线、critic 和批量采样。策略直接更新也可能过快失去探索,通常要监测熵、概率比率和 KL;这些诊断不保证得到全局最优。
数学表达
离散 softmax 策略
logits 的相对差异决定动作分布,稳定实现会先减去最大 logit。
变量含义
z网络输出的未归一化 logitπ动作概率分布
计算步骤
- 1指数比例为 1∶3,归一化概率为 0.25 和 0.75。
- 2共同平移会给分子分母乘同一常数,概率不变。
- 3只有相对 logits 改变才影响离散策略。
代码对应位置
示例 1相同偏移不改变 softmax 策略:原 logits 和共同平移后的概率均为 0.2500、0.7500。
变量解释
| 变量 | 含义 |
|---|---|
z | 网络输出的未归一化 logit |
π | 动作概率分布 |
完整数值示例
相同偏移不改变 softmax 策略
已知条件
- 两动作 logits 为 0 与 log 3。
- 给两个 logits 同时加 5。
计算步骤
- 指数比例为 1∶3,归一化概率为 0.25 和 0.75。
- 共同平移会给分子分母乘同一常数,概率不变。
- 只有相对 logits 改变才影响离散策略。
计算结果
原 logits 和共同平移后的概率均为 0.2500、0.7500。
处理前后对比
- 策略参数不是动作价值。
- 给所有 logits 同时加常数不能提高任何动作的相对概率。
计算与实现步骤
- 采样策略轨迹
- 估计回报/advantage
- 构造策略目标
- 梯度更新
代码实现
示例 1
相同偏移不改变 softmax 策略
example_01.py用途:原 logits 和共同平移后的概率均为 0.2500、0.7500。
import math
def softmax(logits):
maximum = max(logits)
weights = [math.exp(x - maximum) for x in logits]
return [x / sum(weights) for x in weights]
for shift in [0.0, 5.0]:
probs = softmax([shift, math.log(3) + shift])
print("probabilities=" + ",".join(f"{p:.4f}" for p in probs))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
原 logits 和共同平移后的概率均为 0.2500、0.7500。
Step 1 · 1–8 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import math
def softmax(logits):
maximum = max(logits)
weights = [math.exp(x - maximum) for x in logits]
return [x / sum(weights) for x in weights]
for shift in [0.0, 5.0]:
probs = softmax([shift, math.log(3) + shift])
print("probabilities=" + ",".join(f"{p:.4f}" for p in probs))预期输出或运行结果
probabilities=0.2500,0.7500 probabilities=0.2500,0.7500
常见错误 · 3 条
- 把 logits 当作已经归一化的动作概率。
- 把动作裁剪后仍用裁剪前密度当真实动作概率。
- 认为直接优化策略就不需要价值估计或探索诊断。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 把 logits 当作已经归一化的动作概率。
- 把动作裁剪后仍用裁剪前密度当真实动作概率。
- 认为直接优化策略就不需要价值估计或探索诊断。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 13 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 把 logits 当作已经归一化的动作概率。
- 把动作裁剪后仍用裁剪前密度当真实动作概率。
- 认为直接优化策略就不需要价值估计或探索诊断。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
有 actor 就一定是 on-policy 吗?
不是。PPO 常按 on-policy 数据组织,DDPG、TD3、SAC 则使用 replay 做 off-policy actor-critic 学习。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。