TRPO(2017):稳定策略优化的理论基础
导出时间:2025/12/19 13:30:01
一个完整的故事:
👉《教 AI 学走路,但每一步都不能迈太大》
你可以把 TRPO 理解为:
“给策略梯度加了一条‘安全带’。”
一、研究背景和动机
👉 为什么“普通策略梯度”不靠谱?
🎯 场景设定:教一个人学走钢丝
你现在在教一个人走钢丝:
- 他已经会一点点走了
- 你想让他走得更稳、更快
于是你告诉他:
“哪边感觉好,就往那边多走一点。”
这听起来就是策略梯度。
❌ 问题来了:步子迈太大,会直接掉下去
普通策略梯度的问题是:
- 更新是“朝着更好的方向”
- 但不知道这一步迈得有多大
结果就是:
- 有时候进步
- 有时候一脚踏空,直接回到解放前
论文在一开始就明确指出这一现实问题
实际中,策略梯度方法经常因为更新过猛而导致性能急剧下降
💥 一个新手常见惨案
- 第 100 次训练: 策略已经能走 10 米
- 第 101 次更新: 参数一变
- 结果: 连 1 米都走不了了
👉 不是方向错,而是“走太快”
🎯 TRPO 的核心动机(一句话)
“我不反对你往好的方向走,但你每一步,不能走出‘安全范围’。”
这就是 Trust Region(信任域) 的含义。
二、模型网络结构(其实非常简单)
👉 TRPO 本质上是一个“带安全规则的策略网络”
👤 角色对应表
TRPO 组件
| 故事里的角色
|
Policy Network
| 走钢丝的人
|
Value / Advantage
| 教练的评分
|
KL 约束
| 安全绳 / 护栏
|
🧠 网络长什么样?
TRPO 并不特殊:
- 输入:状态(如位置、速度、图像)
- 输出:动作概率分布(随机策略)
论文里的结构示意图(如第 6 页)显示
- 连续控制: 👉 全连接网络 + 高斯策略
- Atari: 👉 CNN + softmax
👉 TRPO 不靠网络创新,靠“更新规则”取胜
三、TRPO 是如何训练的(核心故事)
🟢 第一步:先照旧“试着走”
就像普通策略梯度一样:
- 用当前策略去环境里跑
- 采集一堆轨迹(怎么走、得了多少分)
- 教练给每个动作打分:
- “这一步好不好?”
🟢 第二步:算“如果我稍微改一下,会不会更好?”
教练开始分析:
“如果你在这些状态下,把动作概率稍微往这边挪一点,总体表现应该会更好。”
这一步就是:
- 计算 优势(advantage)
- 得到“改进方向”
到这里为止,和普通策略梯度完全一样。
🚨 第三步:TRPO 的灵魂出现了 —— 安全检查
在真正更新之前,TRPO 会问一个致命问题:
“新策略和旧策略,差得远不远?”
这个“差得远不远”不是凭感觉,而是用:
KL 散度(行为变化幅度)
你可以把它理解为:
“新走法 vs 老走法,有多不像?”
🛑 TRPO 的硬性规定(非常重要)
只要变化超过安全阈值:这一步更新就不允许。
换成故事语言就是:
- 你可以改动作习惯
- 但走姿不能突然完全变样
🟢 第四步:在“安全范围内”,尽量改得更好
TRPO 真正在做的是:
在“变化不太大”的前提下,找一个“进步最大的更新”。
这就像:
- 护栏已经拉好
- 你在护栏里怎么走都行
- 但不能跨栏
🧠 一个关键直觉(你现在一定要记住)
TRPO 不保证“走得最快”,但几乎保证“不会突然摔死”。
论文的核心理论结论正是这一点
在满足信任域约束的情况下,策略更新具有单调改进趋势
四、TRPO 的缺陷(为什么后来被 PPO 替代)
TRPO 很优雅,但它不是终点。
❌ 缺陷 1:实现非常复杂
TRPO 在工程上很“重”:
- 需要:
- 二阶信息(Fisher Matrix)
- 共轭梯度
- 线搜索
- 调试成本高
- 写代码容易写炸
👉 新手几乎不可能从零实现
❌ 缺陷 2:计算开销大,训练慢
相比 PPO:
- TRPO:
- 一次更新要解一个约束优化问题
- PPO:
- 普通 SGD 就行
所以后来大家会说:
“TRPO 是理论典范,PPO 是工程赢家。”
❌ 缺陷 3:依赖较精确的优势估计
如果:
- Advantage 估得不好
- 轨迹噪声大
那么:
- “理论单调改进”在实践中也会被削弱
五、一句话帮你“定型 TRPO”
如果你只记住一句话,请记住这一句:
TRPO 是第一个认真解决“策略更新不能太激进”这个问题的算法,它用‘信任域’保证稳定性,代价是复杂和笨重。
六、你现在在 Deep RL 历史中的位置
你已经走到这里了:
- DQN: 👉 离散动作,值函数革命
- DDPG: 👉 连续动作,Actor–Critic
- TRPO: 👉 稳定策略更新的理论基石
- PPO(下一步): 👉 把 TRPO “简化成人能用的版本”