想象你要爬一座云雾缭绕的大山。手里的GPS(策略梯度)告诉你“往东北方向走”,可如果你顺着GPS的指引猛地跳出一大步,很可能一脚踩空滑下悬崖;但每次都只挪动一厘米,天黑也到不了山顶。更麻烦的是,这座山雾气太重,你只能看清脚下几米的范围。怎么在“敢走”和“走得稳”之间找到平衡? TRPO(Trust Region Policy Optimization,信任区域策略优化)给出了答案:它像一位谨慎的老向导,每走一步前先在地上画一个“安全圈”——这个圈就是信任区域。在圈内,你可以顺着GPS方向放心前进;一旦要迈出圈外,就立刻停下来重新测算。这套策略让登山者每一步都有数学兜底:要么原地不动,要么一定比刚才站得更高。于是,从山脚到山顶的每一步都“只升不降”。 本文要拆解这只“安全圈”里的机关:用什么尺子丈量一步迈了多远(KL散度)、怎么用旧路径的经验预估新路况(替代目标函数)、以及如何用精算师般的高效算法(共轭梯度)找到最优落脚点。读完你会明白,TRPO为何被称为策略优化中最稳健的基石,以及它和后来更简化的PPO算法是什么关系。
学习TRPO是强化学习进阶的关键一环。掌握信任区域约束、KL散度与共轭梯度求解,能帮你理解PPO、自然梯度等主流算法的设计逻辑,在策略优化项目的落地与调优中做出更专业的判断。
目录
可视化演示
展示TRPO信任区域约束机制:旧策略→KL散度约束→信任区域内搜索→单调改进,直观呈现策略梯度优化的安全更新过程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
旧策略:π_old初始策略分布 当前策略π_old在策略空间中处于某个位置 直接更新可能导致策略退化 TRPO通过信任区域约束保证安全更新
背景痛点:策略梯度为何一步踏空
登山新手拿到GPS,看到屏幕上写着“直线距离500米”,兴奋地一脚蹦过去,结果挂在悬崖边的树枝上。强化学习里的策略梯度方法(Policy Gradient)就像这台GPS:它通过采样的轨迹估计出“哪个方向爬升最快”,然后告诉你“往那边走”。但问题是,它只给了方向,没给出安全的步伐。
策略梯度(Policy Gradient)算法的更新规则长这样:
这里藏着两个痛苦。第一,α是一个拍脑袋定的常数,没有一个值能同时满足“起步时想快”和“山顶附近想稳”两种需求;只要α稍大,性能曲线就会像过山车一样骤降,这叫“性能崩坏”(performance collapse),直观上就是登山者一步冲过头,掉进策略退化(policy degradation)的深谷。第二,更新策略需要重新采样,每次重采都要与环境交互成千上万次,样本效率极低。于是,一个自然的念头浮上来:能不能让算法自己判断“这一步该迈多大、往哪迈才安全”?这正是TRPO要解决的问题。
- 旧参数θ_old是更新前的策略参数,好比登山者现在的站位坐标,是这次出发的起点。
- 性能梯度∇_θJ(θ_old) 是在当前位置算出的最陡上升方向,等价于GPS说“这个方位爬升最快”。
- 学习率α乘以梯度决定实际迈出多远;α太小在原地磨蹭,α太大一步跨过头直接摔下悬崖。
- 新参数θ_new是迈步之后的新坐标,如果α失控,这个坐标可能已经落在山脚的谷底里。
核心思想:信任区域就是安全步幅圈
老向导的做法很朴素:GPS可以照常指方向,但每次迈步前,先在脚下画一个圈——圈内随便试探,一旦要出圈,就收住脚重新定位。这个圈就是“信任区域”。TRPO的数学形式,就是把“在圈内最大化爬升高度”写成一个带约束的优化问题:
为什么把新旧策略“锁得够近”就能保证稳定?直觉上,如果新旧策略产生的行为分布几乎一样,那么用旧数据评估出来的结论对新策略依然大致成立。TRPO论文用数学证明了:在KL散度约束下,策略的性能下界是可控的,每一步更新都不会让表现大幅跳水,这就叫“单调改进”(monotonic improvement)。就像向导保证的:我带你走的路,海拔只会升高,不会让你掉进回头坑。
- 优化目标L(θ)是衡量新策略相对旧策略“提升多少”的替代目标函数,可以理解为GPS报出的“可爬升高度”。
- 平均KL散度\bar{D}_{KL}(π_old ‖ π_θ) 是一把“步幅尺”,度量新策略和旧策略在平均意义下差了多少,这个符号读作“KL散度”。
- 约束符号s.t. 是 subject to 的缩写,意思是“在……的约束下”,它把优化限制在一个安全的圈子里。
- 阈值δδ是信任区域的半径,通常取0.01左右的小值。δ越大,允许策略迈的步子越大;δ越小,登山者越小心翼翼。
KL散度之尺:量一量策略迈出多远
信任区域画好了,但用什么“尺子”去量“这一步迈了多远”呢?老向导的经验是:别看脚抬了多高,要看落地后脚印和原来差了多远。KL散度(Kullback-Leibler divergence)就是用来比较两个概率分布差异的尺子。在TRPO中,它衡量的是“旧策略在状态s下选择动作的概率分布”与“新策略在新状态下的概率分布”之间差了多少:
KL散度有一个重要性格:它不对称。D_KL(P‖Q) 不等于 D_KL(Q‖P)。TRPO选择用旧策略作为参考基准,等于说“我以现在的脚印为圆心来量安全圈”,这比反过来量更符合“保守改进”的直觉。顺带一提,KL散度来自信息论,你可以把它想象成“用旧策略的视角去编码新策略时额外多花的字数”——差异越大,需要额外描述的字数越多。
- 状态期望\mathbb{E}_{s\sim\rho_{old}} 表示对旧策略访问过的状态求平均,就像在山路上每隔一段取一个测量点。
- 动作求和\sum_a 对每个可选择的动作逐一比较,查看新旧策略在同一个路口的选择偏好差多少。
- 对数比值\log(π_old/π_θ) 是“旧策略钟意的程度”与“新策略愿意做的程度”之比取对数;比值越偏离1,说明差异越大。
- 加权平均把每个动作的差异按旧策略的概率加权求和,再对状态求平均,得到平均意义上的策略差异,这就是KL约束中的\bar{D}_{KL}。
替代目标函数:用旧脚印估算新路况
画好了圈,也找到了尺子,下一步是怎么估算“往某个方向探一步能提升多少”。你当然可以走到新位置重新勘探一遍,但那样成本太高。聪明的做法是:站在旧脚印上,借旧路上的经验推断新路况。这就是替代目标函数(surrogate objective)的由来。
TRPO中的 L(θ) 具体展开是这样:
有了替代目标函数,TRPO的更新就变成了“在安全圈内最大化这个替代目标”。因为圈很小,替代目标对真实性能的近似误差也被牢牢控制住——相当于向导心里有数:我虽然没去过前方十几米的路,但在这几步之内,凭旧路况推断是可信的。
- 期望下标\mathbb{E}_{s\sim\rho_{old}, a\sim\pi_{old}} 表示样本全部来自旧策略采集的轨迹,这意味着我们不需要重新探索就能开始估算。
- 重要性权重\frac{\pi_\theta(a|s)}{\pi_{\text{old}}(a|s)} 是“新策略做这个动作的概率”除以“旧策略做这个动作的概率”,它把旧数据重新加权,模拟新策略下的分布。
- 优势函数A_old(s,a) 告诉我们在状态s下选择动作a,比“按旧策略的平均水平”好多少。相当于每一步路的“额外增益评分表”。
- 乘积期望权重乘以优势再求期望,得到“如果沿用旧数据,新策略大概能比旧策略好多少”的预估。这就是替代目标L(θ)。
共轭梯度求解:精算师的高效算法
约束优化问题写出来了,怎么解?如果直接硬解,需要计算一个叫作“Fisher信息矩阵”的大矩阵的逆矩阵,这个矩阵的大小是参数数量的平方。对动辄百万参数的神经网络来说,直接求逆就像试图用一张地图去反向推导整座山的等高线——计算量大到不现实。
TRPO的聪明之处在于两步走。第一步,把目标函数在θ_old附近做一阶泰勒展开、KL约束做二阶泰勒展开,于是原问题变成了“约束条件为二次型、目标为线性函数”的标准子问题。第二步,用共轭梯度法(Conjugate Gradient)迭代求解“Fisher矩阵×方向 = 梯度”这个线性方程组,绕开显式求逆。最终的更新公式长这样:
共轭梯度法之所以高效,是因为它只需要不断计算“Fisher矩阵乘以某个向量”(矩阵-向量乘法),而不用真的把逆矩阵算出来。这就像精算师不需要把每个方向的土方量都挖开看一遍,只要沿着几个“共轭”的方向各试探几次,就能锁定最优落脚点。求解之后还有一道保险——回溯线搜索(backtracking line search):如果迈出去的步子仍然超出了KL安全圈,就按0.5倍、0.25倍逐步收缩,直到重新回到圈内。
- 策略梯度g是替代目标函数对θ的梯度,等价于GPS报出的最陡方向。
- Fisher矩阵F是Fisher信息矩阵,它刻画了策略分布对参数的敏感程度,可以理解为“地形敏感度地图”——参数稍微一动,行为分布会跟着变多少。
- 自然梯度F^{-1}g 是“自然梯度”,它把原始梯度按照地形做了矫正,沿着它走一步,策略分布的变化是均匀的,而不是在参数空间里盲目横冲直撞。
- 更新公式先用共轭梯度解出 Fx=g 中的 x=F^{-1}g,再计算缩放系数 \sqrt{2\delta/(g^T x)},两者相乘就是最终的更新步长向量。
算法流程:登山手册六步走
理论齐了,实操长什么样?老向导把这套经验写成了一本“登山手册”,每一轮迭代都按固定步骤执行:
1. 轨迹采样:用当前策略与环境互动,收集一批轨迹,就像向导先派几个人探一段路况。
2. 优势估计:用广义优势估计(GAE)计算每个动作的A_old(s,a),给每一段路打分。
3. 方向求解:算出梯度g,用共轭梯度解出自然梯度方向Fx=g。
4. 缩放步长:根据KL预算δ计算缩放系数,得到候选更新步长。
5. 回溯校验:检查KL散度是否越界,越界则收缩步长。
6. 更新策略:更新参数,回到第1步重新采样。
其中第2步的GAE公式如下:
这套流程执行下来,每一轮迭代都严格守着安全圈。登山手册的哲学是:宁可多走几轮,也不让一步登天。这也是TRPO在实践中远比朴素策略梯度更少出现“训练到一半突然崩盘”的根本原因。
- 单步误差\delta_t 是时刻t的TD误差——真实奖励 r_t 加上对未来价值的估计 \gamma V(s_{t+1}),减去当前状态的价值估计 V(s_t)。它回答“这一步有没有比预期走得更好”。
- 折扣因子\gamma 是折扣因子,表示未来的奖励值多少钱;\gamma 越接近1,越看重长远收益。
- λ衰减(\gamma\lambda)^l 让越久远的误差贡献越小,λ是GAE特有的参数,控制“目光远近”。λ≈0时只看眼前几步,λ→1时汇总所有时间步。
- 优势估计A_t 把从t时刻开始的全部TD误差加权求和,得到这一步动作相对平均水平的优势。它既是替代目标里的“评分表”,也是策略梯度的加权系数。
与PPO的关系:一脉相承的亲兄弟
TRPO虽然稳健,但每次迭代都要计算Fisher矩阵的向量乘积,还要做回溯线搜索,工程实现比较重。后来学界发现:何必那么精确地丈量安全圈?直接给GPS装一个“限幅器”,把每一步的推进幅度硬性裁剪在一个范围内不就行了?这就是PPO(Proximal Policy Optimization,近端策略优化)的思路。
PPO的裁剪目标函数(这里的“裁剪”指把概率比限制在指定区间内)长这样:
TRPO与PPO的根本区别:TRPO是“硬约束”——KL散度超出δ就强制收缩;PPO是“软约束”——用裁剪或惩罚项软性约束概率比。TRPO约束更精确,理论上单调改进更有保障,但每次迭代计算开销更大;PPO实现简单、超参数少、训练速度快,因此在大多数实际任务中PPO更常用。理解TRPO,就像先学会看等高线地图再学用简化工具,能让你在需要精细又稳健的场景(如机器人控制)中做出正确的算法选型。
- 概率比\rho_t(\theta) 表示新策略与旧策略在动作a_t上的概率比值,是替代目标的“翻译官”。
- 裁剪区间clip(……) 把概率比强行限制在 [1-ε, 1+ε] 内,超出部分一律截断。相当于给装了限位器,不管GPS怎么喊,步子最大就那么长。
- min运算min(原始项,裁剪项) 让算法永远取两者中更保守的那个,既防止激进更新,又保证不会因为裁剪而完全拒绝合理改进。
落地要点:老向导的实战经验
纸上得来终觉浅。真的用TRPO训练自己的智能体时,老向导有几句压箱底的经验。第一,δ不要贪大。δ=0.01是稳妥的起点,它决定了每一轮策略更新的“安全圈半径”。想加速可以逐步调到0.05,但调得过大就和普通策略梯度没有区别,又会回到摔悬崖的老路上。TRPO论文给出的理论下界也印证了这一点:
实战中还有几条纪律。监控KL散度是否始终贴着δ走:如果KL远小于δ,说明每轮改进太小,可以适当增大δ;如果KL频繁超限,说明更新过于激进。优势估计推荐用GAE,λ通常取0.95~0.99。收敛判断不要只看奖励曲线,还要结合策略熵、KL散度一起看,就像老向导既看海拔表也看天气、看体力。TRPO在步态学习、机械臂控制这类“不能摔跤”的场景中尤其可靠;而在游戏、推荐等可以快速试错的场景,轻量的PPO通常更划算。
- 真实性能\eta(π_new) 是新策略在环境中真正拿到的平均回报,对应登山者实际到达的海拔高度。
- 替代估计L_{π_old}(π_new) 是用旧策略数据估算出来的“预期海拔”,它可能偏高也可能偏低。
- 惩罚常数C是一个与折扣因子、状态分布相关的常数,它把“新旧策略差异”换算成“可能的估计误差”。C越大,越要对过于激进的更新保持警惕。
- 最大KL项\max_s D_KL 取所有状态中KL散度最大的那个作为代表,防止某些状态下的策略被改得面目全非——安全圈上最薄弱的一个点决定整体稳固性。
AI 应用场景
机器人双足步态学习
阶段:策略优化 / 策略更新
解决的问题:用普通策略梯度训练双足机器人,学习率稍微调大一点,机器人走几步就会摔倒;摔倒后采集到的样本全是“倒地挣扎”的姿态,策略还会进一步退化。传统方法只能靠反复人工调低学习率,又慢又脆弱。TRPO在每次更新时都用KL散度约束新旧策略的差异,让“步态”逐步微调,而不是突然改变落脚点分布。
具体案例:某实验室用TRPO训练一款双足机器人的行走策略。初始策略只会原地站立,每一轮更新后,新旧策略的KL散度都被压到0.01以内,机器人从“颤颤巍巍迈一步”到“稳定走完五米”只用了不到两小时仿真,全程没有出现一次策略崩坏。相比之前用大学习率策略梯度动不动就“原地转圈摔倒”,训练稳定性明显提升。
自动驾驶决策策略的平滑版本迭代
阶段:离线策略优化 / 仿真到实车迁移
解决的问题:自动驾驶的决策网络在大规模仿真数据上迭代,如果某次更新太激进,新策略可能突然出现激进变道、急刹等危险行为。传统做法是每次更新后人工路测验证,成本极高。TRPO的KL约束从数学上限制了每次更新的行为差异,让新策略与旧策略在行为分布上“可预期地接近”,版本迭代更平滑。
具体案例:某自动驾驶团队在仿真器中训练换道决策模型。每次用TRPO更新完新策略后,他们会在同一批密集车流场景中对比新旧策略的行为分布KL距离,只有当KL距离低于预设阈值时才允许进入实车测试队列,最终将实车路测的“惊吓事件”率降低了约一半。
Python 演示
import numpy as np class TRPOAgent: def __init__(self, dim=2, sigma=0.5, delta=0.05): self.mu = np.zeros(dim) self.sigma = sigma self.delta = delta def sample(self, n): return np.random.normal(self.mu, self.sigma, size=(n, self.mu.size)) def reward(self, a): return -((a[:, 0] - 1.0) ** 2 + (a[:, 1] + 1.0) ** 2) def fisher(self): return np.eye(self.mu.size) / (self.sigma ** 2) def kl(self, step): return np.sum(step ** 2) / (2.0 * self.sigma ** 2) def update(self, n=200, cg_iters=10): a = self.sample(n) r = self.reward(a) adv = r - r.mean() g = np.einsum('i,ij->j', adv, (a - self.mu)) / (n * self.sigma ** 2) F = self.fisher() def matvec(p): return F @ p x = self.conjugate_gradient(matvec, g, cg_iters) scale = np.sqrt(2.0 * self.delta / max(g @ x, 1e-12)) step = scale * x alpha = 1.0 while self.kl(alpha * step) > self.delta and alpha > 1e-4: alpha *= 0.5 self.mu = self.mu + alpha * step return alpha @staticmethod def conjugate_gradient(A_fn, b, iters=10): x = np.zeros_like(b) r = b.copy() p = r.copy() rs_old = r @ r for _ in range(iters): Ap = A_fn(p) alpha = rs_old / (p @ Ap + 1e-12) x = x + alpha * p r = r - alpha * Ap rs_new = r @ r if rs_new < 1e-10: break p = r + (rs_new / rs_old) * p rs_old = rs_new return x def main(): agent = TRPOAgent(dim=2, sigma=0.5, delta=0.05) for i in range(20): step_len = agent.update(n=100) if i % 5 == 0: print("iter", i, "mu", agent.mu, "step", round(float(step_len), 4)) if __name__ == "__main__": main()
np.random.normal(self.mu, self.sigma, size=(n, self.mu.size))从当前高斯策略中采样n个二维动作,相当于登山者按当前策略“探路”。reward(a)模拟环境对动作的打分,离目标点越近分越高。adv = r - r.mean()用样本均值做baseline估计优势函数,降低梯度方差。g = np.einsum('i,ij->j', adv, (a - self.mu)) / (n * self.sigma ** 2)根据REINFORCE推导的策略梯度估计式,用优势加权算出梯度方向。F = self.fisher()对固定方差的高斯策略,Fisher信息矩阵简化为单位阵除以方差,它就是“地形敏感度地图”。self.conjugate_gradient(matvec, g, cg_iters)用共轭梯度迭代求解F x = g,避免显式求逆矩阵。scale = np.sqrt(2.0 * self.delta / max(g @ x, 1e-12))根据KL预算δ计算自然梯度的缩放系数。while self.kl(alpha * step) > self.delta and alpha > 1e-4:回溯线搜索:如果整步跨出安全圈,就按0.5倍逐级收缩,直到KL约束被满足。
常见误区
误区“TRPO的δ就是学习率的另一个名字吧?我把δ从0.01调到0.1,训练速度应该会快10倍。”
正解δ控制的是“新旧策略分布差异的预算”,它量的是策略行为变了多少,而不是参数走了多远。学习率或回溯系数决定“沿方向走多远”;δ决定“允许策略整体变化多大”。两者都会影响实际步长,但它们不是同一个东西。把δ调大确实会让每轮更新更激进,但也更容易逼近“安全性”的边界,甚至失去TRPO的稳健性。
为何常见:TRPO更新公式里δ同时影响缩放系数,很多人从“控制步长的超参数”这个角度去理解,把它和α在功能上等同起来了。
误区“KL散度是'距离',距离当然是对称的。所以TRPO写成D_KL(π_new‖π_old)也无所谓。”
正解KL散度本质上不是距离,它不对称。D_KL(P‖Q) 度量的是“用Q去近似P时损失的编码长度”,反过来通常不等。TRPO选择 D_KL(π_old‖π_new),是以旧策略为基准去度量差异,这符合“保持旧策略已经表现良好的行为”的保守初衷。方向写反会让约束的几何形状发生变化,更新行为也会变。
为何常见:日常语言里“距离”总是对称的,加上很多博客把KL称为“分布距离”,容易让初学者把它和欧氏距离混为一谈。
误区“论文不是证明了单调改进吗?那我挂上训练就跑,肯定不会崩。”
正解单调改进是在“替代目标能准确估计真实性能”的理想假设下成立的。实际中,优势估计有噪声、价值网络近似有误差、采样批次有限,这些都会让理论保证打折扣。TRPO训练中依然要监控KL散度、奖励曲线和策略熵,发现KL频繁贴着δ走或奖励骤降时及时干预。
为何常见:"monotonic improvement"这个理论词汇听起来太强了,读者容易认为它是一条无条件成立的工程事实。
误区“PPO和TRPO都是限制新旧策略差异,随便用哪个都行,PPO还更快,那TRPO是不是该被淘汰了?”
正解两者的机制有本质区别:TRPO使用显式的硬性KL约束,通过共轭梯度精确求解方向;PPO使用裁剪或惩罚项做软约束,实现简单但理论上界较弱。在机器人控制、安全敏感场景中,TRPO的严格约束仍不可替代;在游戏、推荐等快速迭代场景中,PPO的性价比更高。它们是“一脉相承的两兄弟”,不是简单的替代关系。
为何常见:从外部看,两者都围绕“新策略别离旧策略太远”这一思想,加上很多框架里PPO的实现更流行,让人误以为TRPO只是被PPO淘汰的旧版本。
面试题
Q1. TRPO在更新策略时最主要的限制是什么?
- A.新旧策略的KL散度← 正确答案
- B.参数数量的多少
- C.奖励值的上限
- D.神经网络的层数
答案:A。TRPO把“新旧策略的平均KL散度不超过δ”作为硬约束,这个约束直接限制了策略行为的改变幅度。参数数量、奖励上限、网络层数都不是TRPO特有的限制条件。就像安全圈限制的是登山者的落脚范围,而不是他的装备数量。
Q2. 信任区域中的δ代表什么?
- A.允许的最大策略差异← 正确答案
- B.神经网络学习率
- C.采样轨迹的条数
- D.折扣因子的大小
答案:A。δ是KL散度约束的阈值,代表新旧策略之间允许的最大平均差异。学习率、采样条数、折扣因子都是强化学习中的其他超参数。δ好比安全圈的半径,学习率则是圈内迈步的节奏。
Q3. 策略梯度更新时步长过大会导致?
- A.性能出现断崖式下跌← 正确答案
- B.采样速度大幅提升
- C.模型参数完全不变
- D.奖励函数更加平滑
答案:A。步长过大时,新策略会跳到旧数据不再可靠的区域,性能曲线像过山车一样骤降,这叫性能崩坏。采样速度、参数不变、奖励平滑都与步长过大的后果无关,甚至方向相反。就像登山者一步跨出悬崖,高度只会暴跌。
Q4. TRPO为什么要用重要性采样?
- A.复用旧策略的样本← 正确答案
- B.加快神经网络的运算
- C.减少环境的随机噪声
- D.替代KL散度的计算
答案:A。TRPO的替代目标函数用 π_θ/π_old 对旧策略收集的样本重新加权,从而不需要重新采样就能评估新策略。神经网络加速、降噪、替代KL都不是重要性采样的目的。这就是“用旧脚印估算新路况”的精髓。
Q5. 共轭梯度法在TRPO中用于?
- A.避免求逆Fisher矩阵← 正确答案
- B.生成更长的采样轨迹
- C.直接更新神经网络结构
- D.计算奖励的期望值
答案:A。共轭梯度法通过迭代矩阵-向量乘法求解 Fx=g,相当于绕开显式计算F^{-1}。因为Fisher矩阵的维度等于参数数量,直接求逆代价极高。它不负责采样、更新网络结构或计算奖励期望。
Q6. TRPO相对策略梯度的最大优势是?
- A.保证单调的性能改进← 正确答案
- B.完全消除探索的需要
- C.不依赖任何超参数
- D.可以在线学习无需采样
答案:A。TRPO在限制条件满足时可以提供单调改进的理论保证,这是普通策略梯度没有的。它仍然需要探索、仍需设置δ等超参数、也离不开采样。所谓“单调改进”就像向导保证不带你下坡,这是它最核心的卖点。
Q7. 关于KL散度的描述,哪项正确?
- A.它是非对称的度量← 正确答案
- B.它一定是负值
- C.它与概率分布无关
- D.它等价于欧氏距离
答案:A。KL散度以某个分布为基准测量差异,基准不同结果不同,因此不对称;由吉布斯不等式可知它恒非负。它与概率分布强相关,也不等价于欧氏距离。这决定了TRPO中必须以旧策略为基准去定义安全圈。
Q8. TRPO算法流程包含以下哪些步骤?
- A.采样轨迹并估计优势← 正确答案
- B.任意初始化新策略参数
- C.用共轭梯度求解方向← 正确答案
- D.每一步都人为调学习率
答案:AC。TRPO标准流程是“采样轨迹→估计优势→共轭梯度求解方向→回溯搜索→更新策略”。新策略参数由更新公式决定,不能任意初始化;学习率由回溯线搜索自动调节,不是人为每步调整。就像登山手册的步骤固定且闭环。
Q9. 以下哪些是TRPO与PPO的差异?
- A.TRPO使用硬性KL约束← 正确答案
- B.PPO用裁剪代替约束← 正确答案
- C.PPO完全不用旧策略样本
- D.TRPO计算开销通常更大← 正确答案
答案:ABD。TRPO把KL散度作为硬约束直接限制更新;PPO用概率比裁剪作为软约束近似替代。PPO同样依赖旧策略样本,否则无法计算概率比;TRPO需要Fisher矩阵向量乘法和回溯搜索,计算开销通常更大。两兄弟手段不同,目标一致。
Q10. 当回溯线搜索无法满足KL约束时?
- A.缩小步长直到满足约束← 正确答案
- B.强行增大信任区域
- C.直接随机初始化策略
- D.放弃所有收集的样本
答案:A。回溯线搜索的做法是将步长按0.5倍反复收缩,直到KL散度回到δ以内;如果收缩到极小仍然违约,则放弃本次更新。增大信任区域等于放宽安全圈,违背TRPO初衷;随机初始化和丢弃样本都不是TRPO的应对机制。安全圈的红线不容践踏。