ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HER后见经验回放实战指南:从原理到稀疏奖励任务落地

HER后见经验回放实战指南:从原理到稀疏奖励任务落地 “hindsight”这个词直译是“后见之明”。在强化学习这个圈子里它代表一个非常经典的想法——Hindsight Experience Replay也就是后见经验回放HER。我第一次接触它是被一篇2017年的论文《Hindsight Experience Replay》吸引的。当时我被稀疏奖励问题折磨得够呛智能体在一个环境里跑了几百万步奖励还是零这感觉就像教一只猫做数学题你急得满头大汗它连题目都看不懂。这篇文章几乎是救命的稻草它告诉我一个反直觉的思路如果这次没达成目标那就别把之前的目标当目标了把“实际达成的东西”当作目标去学一个成功的经验。这些年我陆续试过把它用在机械臂抓取、导航、策略搜索等场景里也踩过不少坑。这篇文章不是对着论文翻译术语而是从一个实操者的角度把这个算法的原理、实现细节、调参技巧讲透。适合正在研究强化学习、正准备上手稀疏奖励任务的工程师和学生这篇内容可以帮你少走大量弯路。你要明白HER不是万能的银弹但它确实把一个看似无法收敛的稀疏奖励问题变成了可以稳定训练的问题这中间的改造思路值得每一个做RL的人去仔细品味。1. 为什么要“事后诸葛亮”稀疏奖励问题全拆解1.1 一个让无数训练任务失败的“奖励荒漠”先问一个问题在绝大多数真实场景里你给智能体的奖励是什么以机械臂抓取为例常见的设定是如果机械臂最终把物体放到了指定位置奖励为1如果没有奖励为0。也就是说你在一段超过1000步的轨迹中99.99%的步骤没有任何奖励直到最后一步才可能有一个突然的1。这看起来也没问题对吧但实际训练中智能体采样的初始策略几乎不可能命中目标区域所以它几乎永远拿不到那个1整个训练过程就是在一个处处是零、没有方向感的空间里随机游走。它的梯度信号完全消失策略永远不会更新因为在它看来所有动作产生的后果都是一样的没奖励无所谓。这就是稀疏奖励问题也被称为“奖励荒漠”。很多人在初学RL时会觉得只要环境定义正确、奖励给对了算法就能自己找到路。但真实情况是当奖励信号过于稀疏时不管是DQN、DDPG还是PPO统统原地踏步。你可以自己跑一个简单的实验在一个空房间放一个目标点让智能体走过去设置成只有到达目标点才有1其他都是0。你大概率会发现训练曲线从头到尾是一条水平线。问题不是算法不够聪明而是它根本收不到任何“方向性”的信息。1.2 为什么稀疏奖励会彻底“饿死”策略更新进一步拆解这里其实涉及三个层面的困境。第一是“采样效率”层面在稀疏奖励下即使你运气好偶尔拿到一次1这个成功轨迹在整个经验池里占比极低大多数采样到的都是零奖励序列因此梯度方向基本被无意义的样本支配。第二是“探索动力”层面如果智能体感知不到奖励变化它就没有任何动机去尝试新的动作实际上它甚至不会意识到“接近”是有好处的因为“接近”本身没有被值函数表达出来。第三是“目标模糊”层面很多任务的目标是条件性的比如“抓取红色方块放进蓝色盒子里”如果你不告诉智能体目标是什么它连错误都没法比较。在这三个层面里最关键的是第三个。传统的RL框架把目标当成一个固定值从未想过“把这次实际达到的状态当作目标”这一可能性。而HER做的正是从这个“从未想过”入手既然标准目标太难我不能立刻达成那我能不能退而求其次用那些“计划外的但真实发生的状态”来制造学习信号这个思路听起来有点“事后诸葛亮”但实际效果拔群。1.3 HER的核心哲学从结果反推目标让环境进步虽然听到过不少人说“HER就是改一下奖励函数其实不复杂”但真正理解它的人会告诉你这个想法远不止是在代码里多几行替换。它的哲学是与其让智能体对固定目标死磕不如让它学会从失败中总结“如何到达某个潜在的、可达到的状态”。拿抓取任务举例。传统训练中机械臂没抓到物体这一整条轨迹就是废数据。但在HER中这条轨迹依然有效我们观察到机械臂最终停在某个具体位置那个位置虽然不是预定的目标点却是一个“已经达到了的状态”。于是我们把这条轨迹的目标改写成那个实际状态告诉智能体虽然你没抓到红方块但你成功学到了“如何让手爪到这个位置”这回事。一次失败被转化为一次成功的经验训练效率立即从“极低”跳到“可用”。这就像学英语你没背下一个长句子但你把它读出来了这个“读出来”的过程本身就是一个无论如何都要保底的收获。HER告诉你不要浪费任何一段你已经走过的路。2. HER的技术原理与关键机制详解2.1 目标条件化的强化学习框架要完全理解HER首先得知道它建立在“目标条件化”的RL框架下。传统RL任务描述是一个状态S、动作A、概率转移P、奖励函数R的组合智能体在每一时刻根据当前S选择A最大化累计奖励。而目标条件化RLGoal-Conditioned RL引入了额外的一个分量目标G它可以是想要到达的状态、想抓取的物体id也可以是某个属性比如“物体温度超过50度”。奖励函数变为R(s, a, g)读法是在给定目标g的前提下状态s下执行动作a能拿到的奖励。常见的稀疏目标奖励是s满足g的条件奖励是0否则是-1。实际上许多论文喜欢用-1和0因为这样使得每段轨迹的reward都是负值算法会倾向于寻找更短的路径。在HER中训练过程本质上是在拟合一个以s, g为输入的价值函数或者策略。绝大多数实现采用DQN或DDPG这种off-policy算法因为需要把采样到的经验存入经验回放池之后随机采样并训练。在这个框架下经验样本需要额外记录目标一条完整的transition是(s, a, r, s, g)其中r R(s, a, g)。如果沿用“到达目标奖励0未到达奖励-1”的设定那么在没有额外reward shaping的情况下前面成千上万步都是-1价值函数学会的是“离目标越近越好”但也仅此而已直到成功案例出现。2.2 后见经验重放把失败的经历变成成功的教材HER最核心的操作是一个叫“目标重标记Goal Relabeling”的功能。每采样一条轨迹通常是一个episode记录从初始状态s0到终止状态sT的完整历程以及原本的目标g。然后对这段轨迹中随机选定的某些时间点把它对应的某一步状态当作一个新的目标g_hat代入原有的transition序列重新计算一遍奖励生成一条新的训练样本。新样本的格式仍然完全一致只是目标变了、奖励变了。举个具体例子。假设目标是让物体到(A, B)位置但这一回合机械臂把物体推到了(C, D)。标准做法只能存一组样本目标是(A,B)绝大部分奖励是-1只有一步可能是0如果恰好到达的话。HER的做法是额外生成一组样本目标改为(C,D)由于目标点是按状态推出来的在轨迹末尾目标确实被达成了因此这条轨迹的最后几步奖励直接变成0。你再看这条新样本它讲述了“如何从某个起点到达(C,D)”的成功过程。这个成功过程不是凭空捏造的而是真实发生过的。经验池里因此充满了正样本值函数不再饥饿策略网络有据可学。有人可能会问那这样不就把成功定义得很廉价了吗其实不会因为我们仍然保留原始目标下的样本而且重标记的目标也是真实发生过可达的状态。HER是在增加学习的监督信号密度而不是稀释原始目标的意义。可以理解为你虽然没有考上清华但你确实学会了高中数学这个“学会了高中数学”的事实依然是一条有效经验。如果你在之后某个阶段其实需要高中数学能力那么这段经验就已经提前为你准备了一份可复用的策略。2.3 目标重标记的四种策略final、future、episode、random目标重标记本身也很讲究不是随便从轨迹里找一个状态就能当目标。参考OpenAI的论文常见策略有三种实践中还有一种补充策略。我逐一说明并且给你我在具体实现时的经验。第一种是final策略直接拿这段轨迹的最后一个状态sT作为新目标。这是最简单、最常用、效果通常也最稳定的。因为终止状态必然在这一段中被达成过而且它很可能代表了当前策略能够达到的极限状态学习目标非常明确。我的经验是如果任务很简单比如Reacher类的仿真final策略基本就够用。第二种是future策略从当前时间步之后也包含当前时间的状态中随机选择一个作为目标。这种策略允许你利用一条轨迹中的多个潜在目标生成多个重标定样本样本多样性更好更能反映动态过程中的中间状态比如机械臂从前往后移动的某个中间点位也能成为学习目标。future策略在实践中通常比final更稳因为一个episode里可以产生多个目标训练信号密度更高尤其在机械臂任务中会显著提升效果。第三种是episode策略从轨迹中随机选择一个状态不管它是在当前时间之前还是之后只要它在同一段episode内就行。论文里提到这个策略时指出它和future策略的性能差距并不大但如果你要实现多项对比实验有人会选它作为baseline。之所以我们通常优先用future而不是episode是因为“在某个状态出现之后随机选目标”能够更精准地拟合状态转移关系避免时序错位带来的价值高估。第四种是random策略随机从经验池里挑一个状态任何episode的都行。这个策略的效果通常最差因为目标与当前轨迹关系弱产生大量无意义样本不过它很少被真正当成主力使用。你在复现论文时如果实验资源紧张我建议重点对比final和futurerandom和episode可以量力而行。2.4 为什么HER需要搭配off-policy算法你可能会想上了HER是不是用什么RL算法都行理论上是说它可以和任何off-policy算法结合但on-policy算法基本不行——因为HER的核心依赖是从经验池里反复采样重标定样本on-policy策略比如PPO在每次更新后就丢弃旧数据无法形成这种跨episode的重标定训练。所以在实现HER时默认搭配是DDPG连续控制、DQN离散动作或者TD3、SAC这些。我本人用DDPG比较多因为它结构简单、调参度适中尤其适合机械臂这种连续控制的仿真环境。如果你用的是SAC它天然具备更好的探索机制会让HER的上限更高但代价是超参更多、训练更慢。一句话如果你实验周期不紧张直接上SAC加HER如果只想快速验证思路DDPG加HER就够了。3. 亲手实现HER从环境搭建到关键步骤拆解3.1 环境选择与工具链准备我用的是OpenAI Gym里的Fetch系列环境比如FetchReach-v1、FetchPickAndPlace-v1这些环境天然适合HER因为它们的目标是一个四维向量x、y、z坐标加上目标相对位置而且官方对HER的评估就是基于这些环境。本机最好有GPU至少显存4GB以上因为机械臂仿真要高频率渲染训练时网络更新也需要并行矩阵计算。我给你一份我的环境清单做参考操作系统Ubuntu 20.04/22.04或者macOS也能跑但训练速度会慢很多Python版本3.8或3.9核心库gymnasium需要安装mujoco-pynumpypytorchtensorboard版本注意不要直接装最新版gym很多教学代码是gym 0.21的接口装新版本API会报错。我实际项目中用的是gymnasium从0.26版本开始接口差异已经比较大如果你照着旧代码改会非常痛苦建议直接参考官方文档确认接口如果你没有仿真环境也可以自己构造一个简易的二维导航任务目标点是坐标位置智能体用两关节机械臂reacher或者小车的连续位置控制。效果一样好而且调试更方便。我的建议是第一次实验千万别直接上复杂操作场景先把核心机制在简单环境里跑通再逐渐升级。3.2 网络结构和关键参数设定HER本身不是一个完整的算法它是叠加在DDPG等算法之上的“数据增强”策略。所以要先清楚DDPG本身的结构一个Actor网络接收状态和目标拼接向量作为输入输出动作一个Critic网络接收状态、目标、动作拼接向量作为输入输出Q值。注意这里和目标条件化RL对应输入必须把状态和目标拼接到一起才行。如果你在实现时把目标忽略了只输入原始状态那HER的效果会大打折扣。下面是我常用的网络参数可以直接抄作业参数名称推荐值备注Actor网络层数3层隐藏层256,256,256每层之间ReLU激活输出层tanhCritic网络层数3层隐藏层256,256,256每层之间ReLU激活隐藏层维度256优选256过小拟合不足过大训练慢优化器Adam学习率Actor设1e-3Critic设1e-3折扣因子gamma0.98Fetch环境通常设0.98过大易发散软更新系数tau0.05建议从0.05开始调可用0.005经验池容量1e6至少存足够多的重标定样本mini-batch大小256一次性从经验池采样目标重标定次数K4每条轨迹额外产生4份重标定样本策略噪声高斯噪声标准差0.2用于探索需要逐步衰减另外要特别提醒HER生成的样本是独立于原始样本的经验池中会同时存在原始样本和重标定样本。有些工程实现把重标定样本直接混在同一个buffer里有些则分开存放效果差别不大但我习惯分开存方便在tensorboard里查看两类样本的占比。3.3 核心代码实现HER闭环的骨架先给你一个简化但足够清晰的Python伪代码结构它体现了HER与DDPG的主要交互流程。注意这是资料整理与工程实践的混合模式不代表某个开源项目本身但可以直接照着搭建。# 训练循环核心伪代码 # 1. 初始化环境envActor actorCritic critic及它们各自的target网络 # 2. 初始化经验回放池buffer和环境状态s、目标g for episode in range(max_episodes): # 重置环境获得初始状态s和初始目标g s env.reset() g sample_goal() episode_transitions [] # 记录本回合所有交互 for t in range(episode_len): # 策略网络决策动作 探索噪声 a actor(s, g) noise(t) # 把动作送入环境得到next_state和奖励r稀疏0/-1 s_next, r, done, info env.step(a, g) # 把原始样本(s, g, a, r, s_next)存入buffer buffer.store(s, g, a, r, s_next, done) episode_transitions.append((s, a, s_next)) # 状态更新 s s_next if done: break # HER 重标定环节 if use_her: for tran in episode_transitions: # 从当前轨迹随机挑K个潜在目标future策略 g_hat sample_goal_from_episode(episode_transitions, t, K) for g_ in g_hat: r_her compute_reward(s_next, g_) # 如果达到目标则r0否则r-1 buffer.store(s, g_, a, r_her, s_next, done) # 重新构造样本存入buffer # 定期抽样训练通常在每一次environment.step之后或每50步 if training_step: batch buffer.sample(batch_size) # 用TD误差更新critic用DPG更新actor update_actor_critic(batch)这个代码的核心在于两步一是把转移样本加入buffer时目标g是外部传入的二是在一次episode结束后额外遍历一遍轨迹把“在这些时间点之后发生的其他状态”当成新目标生成补充样本。两者缺一不可。你必须在环境返回奖励时特别注意dense reward和sparse reward的区别会影响整个训练。我说的sparse是指“只有到达goal才给你0否则给-1”当你重标定到g_hat时由于g_hat是从s_next中采样得到的未来几步大概率会“自然达成”因此奖励立刻变成0非常适合学习。3.4 训练监视如何提前判断是否学废了开始训练后真正有用的不是看loss下降多少而是密切观察这几个指标。第一个关注“成功成功次数”——就是每一百回合里目标达成次数。以FetchReach为例环境本身简单一般在几万步内能到90%以上成功率。如果你训了50万步成功率还为0得回头检查奖励函数和重标定环节。第二个观察“Q值的合理性”。打印一下Critic预测的Q值同实际回报的差异。经验上如果Q值飙到离谱的高比如比真实奖励高出几十倍一般是Q learning发散的前兆。解决方法是降低gamma、缩小学习率同时检查target网络有没有正确的软更新。第三个观察“探索噪声大小”。如果噪声过大智能体一直在做随机抖动轨迹很难形成稳定的接近目标经验如果噪声过小前期又无法获取足够多外部探索。我建议初始噪声标准差设定在0.2-0.3之间训练到中期之后开始指数衰减到0.05左右这个策略能保证正常探索。3.5 一次完整训练实验的记录下面是我在某次机械臂抓取任务里的真实训练过程的简略记录基于FetchPickAndPlace-v1。环境目标是把物体放到指定位置目标任务难度高于单纯的Reach。我的超参数为K4future策略记忆池容量1e6batch size256Actor/Critic学习率均为1e-3gamma0.98tau0.05噪声标准差0.3。训练步数总共设定了200万步。前面20万步成功率几乎为0。但观察经验池其实里面已有大量重标定样本Critic的loss在缓慢下降。这个阶段最考验耐心千万别改超参数。50万步左右成功率开始抬头到10%说明策略网络逐渐学到了一些东西。100万步成功率在30%-40%区间震荡曲线很毛躁但趋势向上。160万步成功率接近60%中期策略基本稳定。训练到200万步结束时最终成功率大概在68%上下。对比不加HER的对照组相同设置下到200万步时成功率只有不到2%。这里就能看出HER的巨大价值几乎把训练效率提升了一个数量级。当然我也发现同一份代码在另一台没有GPU的台式机上跑相同的训练步数往往要慢一倍以上所以预算允许时务必优先保证机器算力而不是在调参上死磕。4. 复现HER时最常踩的坑和排查技巧4.1 重标定时刻错位为什么“未来状态”不能乱取HER设计的核心是“未来的状态可以当作当前的目标”但这里有个微妙陷阱如果你选取目标时选了当前时间步之前的状态也不一定全错可策略网络要学习的是“从当前状态到达那个状态”的动作序列如果目标是在过去发生那这段轨迹根本不存在“从过去到现在”的转移关系因为动作是因果的。我自己踩过的坑之一就是最初写future策略时随机采样范围内包含了“整条轨迹的所有状态包括过去”结果训练稳定性明显变差成功率迟迟无法上升。排查时才发现future策略应该限定目标必须是在当前时间步之后出现的状态。这是一个藏在细节里的因果逻辑目标必须在未来才存在一条“从此刻出发去那里”的有效轨迹。如果目标在过去那它根本不可能在因果时序上被达成。4.2 奖励函数设计错误统一用等效奖励导致目标被稀释有朋友跟我讨论过一个问题他们实现HER时没有用稀疏奖励而是自己加了一个“距离奖励”即dense reward想着加大梯度信号。但结果训练效率反而下降。原因很简单HER的强项恰恰在于利用“稀疏重标定”制造出的轨迹尾部正样本。如果奖励函数本身稠密了重标定后的样本和原始样本之间的差异变小重标定所提供的信息增量降低最终几乎变成普通的dense reward训练问题全部回到原点。所以我的建议是在HER框架下尽量保持稀疏奖励别自行“好心”加距离惩罚。如果确实需要额外引导最多在重标定后的目标奖励上施以形状塑形但幅度一定要小且需要仔细测试。4.3 经验池过大或过小带来的次生问题经验池的容量直接影响训练效果。容量太小比如10万无法容纳足够多的重标定样本和稀有成功样本每次采样新鲜样本占比高训练变得不稳定。容量太大比如1000万虽然样本丰富但采样的帧数过老策略更新方向可能滞后于当前策略也会让训练原地打转。我的经验值是控制在100万左右环境比较复杂时最多500万。采样的mini-batch中原始样本和重标定样本的比例也要留意一般的实现中因为重标定后样本量是原始样本量的K倍K4所以不必刻意往buffer里堆原始数据。正常流程会自动根据占比调节。但如果你发现策略很快收敛到local optimum且成功率长期低于预期可以尝试把K降低到2让原始目标占比更高一些。4.4 策略网络过拟合与目标崩溃问题在长时间训练中偶尔会发现成功率曾经上升但后期不断下降像是“遗忘”了前面的经验。我分析这种现象常由值函数与策略网络的恶性循环引起Critic高估了某个目标区域Actor便集中输出到达该区域的策略导致该区域样本在buffer中占比极度膨胀其他潜在目标的样本被挤出进一步强化高估。解决手段有三类一是降低tau让target网络更新得更慢二是增大噪声强制探索其他区域三是给Critic加L2正则化。我自己最常见的操作是把tau从0.05降到0.01同时把高斯噪声的标准差从0.2提到0.4训练两万步后观察效果通常能明显回升。4.5 训练时间长但成功率仍然为0调试排查清单如果在正确实现了HER后依然出现极低的成功率我建议你走一遍以下排查流程# 1. 检查重标定样本的奖励分布 # - 打印经验池中r0样本和r-1样本的比例 # - 如果r0样本占比为0重标定逻辑有问题 # 2. 检查Actor输出范围是否匹配环境动作空间 # - 确认输出是tanh激活函数的[-1,1]然后再乘以动作范围上限 # - 有的环境动作空间是[-1,1]乘系数需确认 # 3. 检查网络输入维度是否包含目标 # - print(obs.shape, goal.shape, input_dim) # 4. 检查done条件 # - 如果done在到达目标前就触发比如最大步数限制需合理截断 # - 如果done只标记“目标达成”则训练会更自然 # 5. 检查Critic loss是否降到一个合理值 # - 如果loss在10的8次方量级或有NaN可把学习率降低十倍重试这个清单同样适用于任何基于HER的算法。你把它打印贴在显示器旁边每次复现新环境时都先过一遍能省下大量时间。5. 如何扩展和迁移HER从仿真到现实的一线经验5.1 HER的适用范围与局限工程上最常问HER能用在哪些任务上我的结论是适合一切“目标空间可被明确表示”的任务。比如控制机械臂抓取目标就是末端位置和物体位置导航任务目标是坐标点操作拼图或者倒水虽然复杂一些只要你能把目标定义成向量HER就可以用。但如果是开放式任务比如写一个程序或者生成一段文本这类目标压根没有明确的、可验证的“目标状态向量”HER就失去了抓手。因为你无法对“一段好的文本”这个模糊目标进行重标定——好的文本定义不清楚你没法从失败的输出里随机挑一个状态进行重标定。因此在语言模型、多模态生成这些领域直接套HER是不显灵的需要先做目标分解或状态压码把它变成低维向量空间里的目标条件化问题但对于新手这个迁移成本很高。5.2 与SAC、TD3等算法的组合技巧我在生产环境里做过对比HER与SAC结合尤其有优势。原因是SAC自带熵正则天然在探索和确定性策略之间取得了更好的平衡它在高维连续控制上的稳定性远优于DDPG。HER带着稀疏重标定能够为目标条件化问题提供更密集的真实转移样本两者配合几乎可以算是连续控制任务的黄金搭档。如果你有足够时间我建议你在DDPG跑通之后立刻把base算法切成SAC通常只用调temperature参数和网络尺寸数值结果会好看很多。TD3也能用但它的三份target集成机制和HER的随机重标定存在少量冗余计算不过对实验影响不大。5.3 从仿真到现实域随机化与真实机器人注意事项仿真实验到了成熟阶段很多人想迁移到真实机械臂。此时最大的鸿沟在于“现实目标状态与仿真目标状态的分布差异”。在仿真里你可能用的是mujoco的物理引擎机械臂末端位置读取精确到毫米级但真实系统中相机位姿标定误差、关节角度噪声、物体抓取的摩擦力变化都会导致状态观测不准确。如果你把仿真中训练过的HER策略直接部署到真实机械臂大概率摔得相当难看。我的经验是两个方向一是域随机化。在仿真训练期间为该状态观测、物理参数和目标位置添加随机扰动让策略在分布偏移时依旧鲁棒。二是做真实采集的在线微调。你将仿真策略部署到真实环境用HER重标记的方式加入真实轨迹样本持续在线更新。因为HER本身就是从失败中提取经验这个增量学习过程非常自然。所以我认为HER和真实机器人搭配比传统RL算法更契合它天然能处理“现实世界大量失败、少量成功”的数据结构。5.4 多目标任务中的HER稠密化与结构重标记进阶如果你要处理一个同时包含多个目标的复杂任务比如“抓取红方块放到蓝盒子且不能碰到绿障碍”单一状态向量可能不够常见做法是扩展目标向量把物体ID、颜色属性也编码进去。此时重标定需要更加小心你不能把颜色属性也随意替换。比如这次你抓了红方块把它搬到某个位置你只能把“位置”分量替换成那个位置而“颜色”分量必须保持红色不变。否则你会生成一个“抓红方块得到蓝方块的经验”毫无意义。处理这种结构化目标时我建议把重标定函数写成分量级的也就是逐维度判断哪些分量可以重标定哪些分量必须固定。这一步很容易在代码里被忽略但它决定了任务是否真正收敛。6. 写在最后几个值得反复品味的实操心得我做了两年多的强化学习实验如果要选出一个“性价比”最高的技巧我大概会选HER。很多做RL的朋友手里一堆算法却都栽在奖励稀疏上这非常可惜。稀疏奖励是大多数真实世界任务的默认状态如果你掌握了后见重标定实际上就拥有了从失败中提取教材的能力。有个小技巧再提一句如果你发现经验池里成功样本数量不够可以在重标定时不只选取轨迹中实际达成的状态也可以把“接近目标”的几个状态用一定模糊逻辑改造为成功目标但要非常克制。我在实验中发现这样做15%以内的模糊率可以提升学习速度超过30%则会让策略变得非常奇怪任务几乎不可用。这个边界很难量化每类任务都不同最稳妥的方案还是严格使用论文里的future和final策略。另外HER的很多开源实现都在OpenAI Baseline中但那些代码直接上手有一定门槛。我更推荐自己按上述流程写一遍不要去改现成的代码。你只有自己写过一遍重标定过程才会真正理解经验池里样本分布的意义以及为何HER能大幅提升off-policy算法的收敛效率。哪怕你未来转去做更高级的算法这种“从失败中提取有效经验”的思路也会一直伴随你帮你面对更多看似不可能收敛的任务。
返回列表