ARTICLE DETAIL

资讯详情

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

HER(事后经验回放):从失败中学习,破解强化学习稀疏奖励难题

HER(事后经验回放):从失败中学习,破解强化学习稀疏奖励难题 1. hindsight 这个词在不同语境里指什么先聊个有意思的现象。Hindsight 直译是“后见之明”英文里常跟 hindsight bias 一起出现。这个词翻译成大白话就是“事后诸葛亮”——事情发生之后人总觉得“我早就知道会是这样”可真回到事发之前绝大多数人根本预测不到。行为经济学里有个经典实验让被试预测一场选举的获胜者结果公布后再让他们回忆自己当初的判断大部分人会把预测结果“修正”成与实际一致的方向还自信满满地说自己当时就是这么想的。这就是 hindsight bias也叫“后见之明偏差”。但在技术圈里hindsight 这个词还有另外几层意思。机器人强化学习领域有个重要算法叫 Hindsight Experience Replay缩写是 HER全称里就带 hindsight 这个词中文一般译作“后见经验回放”或“事后经验回放”。它的核心思想很反直觉用失败的轨迹也能学到东西甚至可以说失败的轨迹是比成功轨迹更宝贵的学习素材。这个概念是我今天想重点展开的。它不只是一个算法技巧更是一套看待经验的思维模型对做机器人、做自动控制、做策略优化的人都有直接参考价值。适合读这篇文章的人我大概分三类。第一类是刚接触强化学习的同学对稀疏奖励问题头大想找一个能落地的解决方案HER 恰好是这个领域最实用、最好上手的思路之一。第二类是做机器人操作、路径规划或自动驾驶的工程师任务里常常遇到“目标很难达成、奖励信号很稀疏”的问题HER 能帮你少走大半年弯路。第三类是纯粹对“如何从失败中学习”这个命题感兴趣的产品经理、创业者和终身学习者因为 hindsight 背后的思想迁移到项目复盘和个人成长里也非常好用。我先说明白今天这篇不打算只讲一个算法。我会从技术内核往外延伸把 HER 的数学动机、工程实现、参数细节、常见坑全部过一遍最后聊一聊“事后视角”作为学习信号这件事在算法和真实决策中为什么都如此重要。读完之后你应该能自己实现一个带 HER 的强化学习训练脚本并且对“什么时候该用 HER、什么时候它帮不上忙”有清晰判断。2. 核心拆解HER 到底在解决什么问题2.1 强化学习里的“稀疏奖励”困局先聊一个具体的难题。假设你要训练一个机械臂去抓桌上的杯子。传统强化学习的做法是给一个奖励函数如果机械臂末端执行器最终到达了杯子附近并且成功抓取给一个大奖励比如 1如果没做到奖励为 0。听起来合理但实际一跑就知道问题极其严重。机械臂的动作空间是连续的、高维的比如七自由度机械臂每一时刻要输出 7 个关节力矩值每一步动作稍微偏一点手腕就不知道飘到哪里去了。在完全随机探索的情况下机械臂想抓到一个杯子概率低得跟中彩票差不多。可能跑上一百万步一次成功都没有。这意味着什么意味着经验池里存的所有样本奖励全是 0。强化学习算法本质上靠奖励信号来学习“哪个动作更好”如果所有样本都是“同样差”算法根本区分不出动作的好与坏策略就一直停留在随机状态。这个现象专业上叫稀疏奖励问题sparse reward problem。它是很多真实控制任务、机器人操作任务无法用强化学习直接训练的最大障碍之一。很多人一开始会想到“那我把奖励函数设计得密集一点不就行了”。比如每一步都奖励机械臂靠近杯子一点。实际操作过就会发现这条路有多坑第一需要设计者精确知道什么样的中间状态算是“靠近”这本身就需要大量人工调参而且往往和任务真正目标相悖——机械臂可能学会了把手伸到杯子旁边但就是不会抓取。第二奖励塑形reward shaping很容易产生“钻空子”的投机行为机械臂可能永远停在某一个局部位置拿到固定奖励但任务目标一个都完不成。第三每换一个任务奖励函数就要重新设计工程上根本扛不住。这个问题在 DeepMind 的很多研究里都踩过也是为什么奖励塑形后来渐渐被一些更简洁的机制替代。稀疏奖励困境还有一个很麻烦的表现不是完全零奖励而是“偶尔成功、但极其稀有”。比如训练一个四轴飞行器做特技飞行动作一万次尝试中可能成功一次。这一条成功轨迹放在经验池里被抽样到的概率极低。算法好不容易碰到这条轨迹又因为后续策略变了被其他海量失败样本稀释根本学不到东西。这就是样本效率低下的本质宝贵的正样本没有被人为放大整个学习过程就卡在一个死循环里。2.2 HER 的思路失败也能变成“另一种成功”HER 的出发点特别有意思。它不尝试把奖励函数变密集也不去设计复杂的课程学习而是反过来从“经验”本身动手脚。核心逻辑是这样的传统强化学习里一条轨迹是由状态、动作、奖励组成的序列。如果一条轨迹最终没有达成原定目标那么这整条轨迹对学习来说几乎没用。但在 HER 看来问题不在轨迹而在“你怎么定义目标”。设想一个场景。机械臂的目标是抓取红杯子结果它跑了一整条轨迹最后碰到了旁边的蓝杯子红杯子没抓到。传统做法会认为这条轨迹彻底失败丢掉。HER 做了一件乍一听有点自欺欺人的事它把这条轨迹的“目标”临时改写成“抓取蓝杯子”然后重新计算这条轨迹每一步的奖励。因为最终确实碰到了蓝杯子所以这条轨迹在新目标下是一次“成功”的示范。于是原来的失败轨迹摇身一变成了一个正样本被放进经验池供后续学习。这样做的意义在哪关键在于虽然想抓红杯子很难但抓各种随手碰到的杯子相对容易。算法并不需要一次成功它只需要不断收集“顺带碰到某些东西”的经验。每一段“失败”经验被重新解释之后都变成了一段“成功”经验。经验池里就不再是一片死寂的零奖励而是充满了大量有正负反馈的丰富样本。这就是为什么 HER 能大幅提升样本效率——它让人工智能学会了一种“事后给自己找台阶下”的能力虽然此行的原定目标没达成但从另一个角度看我的行为其实达成了一件有价值的事情。这里面的数学细节也很有意思。HER 依赖强化学习里的 off-policy 更新方式。因为它在训练时用的经验并不是当前策略产生的而是历史经验池中采样出来的、目标被重写过的样本所以算法必须支持 off-policy 学习。最常见的搭配就是 DDPG、TD3 或 SAC 这类基于经验回放的连续控制算法。具体实现时对一条轨迹里的每个状态都要重新计算一个“虚拟目标”然后把这个虚拟目标作为输入重新计算奖励值。由于奖励通常只跟“当前状态是否等于目标”有关这个计算非常高效——只需要比较状态和目标是否匹配即可不用引入复杂的动力学模型。这种重写不是无限随意地重写。工程实践里最常用的是“把轨迹末尾状态当作虚拟目标”因为轨迹末尾状态是实际到达过的真实状态必然能保证新目标已经达成。还有一些变体会从轨迹中间的若干状态中随机选一个作为虚拟目标效果也类似。这里有个很关键的前提你定义的奖励函数必须能轻松地用“状态与目标是否匹配”来表达否则 HER 的优势会被消解。这句话值得反复咀嚼后面我还会专门讲它。2.3 HER 与“结果导向学习”的家族谱系如果把视野拉开一点HER 并不是孤立的技术它背后是一整个“结果导向”的学习思路。在机器人领域类似的思路叫“目标条件强化学习”Goal-Conditioned Reinforcement Learning——所有训练不是单纯学“怎么做动作”而是学“在这个目标的条件下该怎么做动作”。HER 在这个框架里是一个极其有效的经验收集与处理机制。顺着这条线往远处看还有几个相关的方向。一个是课程学习Curriculum Learning通过从容易的目标开始、逐步增加难度来训练但课程学习需要人工设计课程进度HER 相当于自动实现了一种“反向课程”——它不按难度安排目标而是把已经达成的“意外目标”当作学习素材。另一个方向是多目标强化学习比如给模型一个目标分布训练时用统一网络拟合多个目标。HER 天然适合这种多目标设定因为重写目标的过程相当于变相扩充了目标分布。还有一个方向是“示范学习”直接拿专家轨迹做模仿学习。但专家轨迹往往难以获得而 HER 不需要外部专家全靠智能体自产自销这一点在工程上价值极大——毕竟搞不到人类示范数据时HER 依然能work。我在一些社群和邮件列表里看到过有人把 HER 归类为“数据增强”技术这个类比是对的。它没有改变算法本身的参数更新方式只是让每一条经验都发挥更多价值。但这种数据增强和图像领域的随机裁剪、颜色抖动又不太一样因为 HER 不是为了防止过拟合而是为了把稀疏奖励环境里的正样本密度抬高。理解这一点你就明白为什么 HER 在快节奏实验和调参中的表现如此重要——它不是万能药但它在“成功率极低、却存在偶然成功”的场景下几乎是无敌的。3. 实操层面HER 的工程实现与调参经验3.1 从伪代码到第一行代码HER 的完整流程先给出最经典的 HER 算法流程我用的是 OpenAI Baselines 里的版本思路但做了些简化方便理解。假设环境是一个机械臂抓取任务每个 episode 里智能体要达成一个目标 g。通常一条轨迹由 T 步组成观测状态序列 (s_1, s_2, ..., s_T)动作序列 (a_1, a_2, ..., a_T)奖励序列 (r_1, r_2, ..., r_T)。HER 的做法是正常跑一个 episode使用当前的探索策略与环境交互记录完整的轨迹。确认这个 episode 是否达成了原始目标。如果达成了轨迹照常存入经验池。如果没有达成则随机选一个虚拟目标 g最常见的选择方式是“轨迹最后一步的状态”或“轨迹中随机一个状态”。用这个虚拟目标 g 重新计算每个时间步的奖励 rt reward_function(s{t1}, g)。把 (s_t, a_t, rt, s{t1}, g, done) 作为一条独立经验存入经验池。从经验池中采样一个 batch正常做 off-policy 更新比如用 DDPG/TD3/SAC 的更新规则。注意第 5 步里的 done 标志也要重新计算新目标是否达到决定了这个状态是不是终局状态。很多初写者会跳过这一步结果发现训练出来策略奇奇怪怪因为时间边界判断是错的。伪代码版本可以写成这样for episode in 总轮数: 初始化状态 s给定目标 g for t in range(最大步数): a 策略(s, g) 加噪声 s_next, r, done 环境.step(a, g) 存储原始轨迹(s, a, r, s_next, done) for t in range(最大步数): 经验池.add(原始轨迹[t]) if 未达成原目标: g 从轨迹中选取(最后一步状态 或 随机状态) for t in range(最大步数): 计算 r 奖励(s_next[t], g) 计算 done 是否到达(g) 经验池.add(s[t], a[t], r, s_next[t], g, done) 从经验池采样 batch更新 critic、actor 和 target 网络这样写下来代码量其实不大。真正的问题都藏在细节里虚拟目标的选择方式、奖励函数的写法、超参数配比、评价指标的标准化这些才是 HER 工程化的关键。很多人第一次实现 HER 时代码逻辑完全按照论文来但训练就是不收敛八成是在这些细节上出了问题。3.2 影响训练成败的四个关键细节这一节全是我根据实操经验总结出来的文档里通常不会写这么细。第一个是虚拟目标的选择。最稳妥、也最常用的方式是以轨迹最末状态作为虚拟目标。因为它是一个确实到达过的状态拿它当目标必然能够被判为成功学习到的经验天然有正有负信息量充足。但 max 步数太长会带来一个问题末尾状态距离初始状态太远整条轨迹在新目标下“成功得太晚”前期几乎所有步都是负奖励仍然存在奖励稀疏问题。所以还有一个变体不只是用最后一个状态而是从轨迹里随机抽出 k 个状态作为额外虚拟目标每个状态都能造出一条新经验。这样密度就会高很多。OpenAI 的论文里提到 k4 时效果比较好但具体到任务我建议你先做一次小规模扫描k 取 1、2、4、8 各跑几十万步对比一下。第二个是奖励函数的写法。HER 要求奖励函数必须是一个“是否达到目标”的简单判断。比如欧氏距离小于阈值就给 1否则给 0。千万不要用连续距离做奖励比如给个 (1 - distance/max_distance)因为这样会让整个学习信号变成一个回归问题智能体会疯狂优化到目标附近但永远无法精确把握阈值边界。而且判断奖励时一定要把状态和目标放在同一坐标系、同一单位下很多机器人仿真数据的维度都不同关节角 vs 末端位置处理不过来的时候优先统一到末端执行器坐标。第三个是经验池的容量和采样比例。HER 生成的“重写目标经验”和原始经验的混合比例需要控制。建议经验池里 HER 重写经验与原始经验的比例保持在 1:1 到 2:1 之间。如果重写经验太多模型会过度关注那些“意外到达”的目标反而丢了原本任务的目标如果太少又起不到缓解稀疏奖励的作用。实际操作里我习惯在每个 episode 结束时先存原始经验再生成 HER 经验这样天然就维持了接近 1:1 的配比不需要额外维护采样策略。第四个是探索噪声与目标分布。HER 的探索噪声通常要比普通强化学习大一点因为它需要智能体多“瞎碰”出一些有信息量的状态来当虚拟目标。但噪声太大也不行会导致轨迹变成布朗运动末尾状态几乎都在起始点附近没有意义。如果你用的是 OU 噪声强度建议在 0.1 到 0.3 之间调整如果用的是高斯噪声标准差同样在这个区间。至于目标分布要尽量让虚拟目标的采样范围覆盖真实目标分布附近。如果真实目标是随机的HER 的虚拟目标也应该是随机的如果真实目标固定虚拟目标最好也从轨迹里选这两个关系是很多实验结果差异巨大的原因。3.3 代码示例在 OpenAI Gym 的 FetchReach 上跑通 HER要落地验证我建议直接用 OpenAI Gym 里的 FetchReach 环境它的目标空间是三维坐标任务目标是让机械臂末端到达一个指定位置。这个环境自带稀疏奖励默认用 DDPG 配上 HER 就能跑通。下面给一个简化的、用 PyTorch 写的 HER 核心片段方便你移植到自己的项目里。import gym import numpy as np import torch import torch.nn as nn env gym.make(FetchReach-v1) obs env.reset() goal obs[desired_goal] state obs[observation] # 定义奖励函数只在距离小于阈值时给正奖励 def compute_reward(achieved_goal, desired_goal, threshold0.05): dist np.linalg.norm(achieved_goal - desired_goal) return float(dist threshold) # 定义一个简单的策略网络 class Policy(nn.Module): def __init__(self, state_dim, goal_dim, action_dim): super().__init__() self.net nn.Sequential( nn.Linear(state_dim goal_dim, 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, action_dim), nn.Tanh() ) def forward(self, state, goal): return self.net(torch.cat([state, goal], dim-1)) # HER 经验重写 def hindsight_replay(trajectory_states, trajectory_actions, episode_goal): # trajectory_states: [T, state_dim] # 用最后一个状态作为虚拟目标 achieved_goal trajectory_states[-1][:3] new_goal achieved_goal.copy() her_transitions [] for t in range(len(trajectory_states) - 1): s trajectory_states[t] a trajectory_actions[t] s_next trajectory_states[t 1] r_her compute_reward(s_next[:3], new_goal) done_her bool(r_her 0) her_transitions.append((s, a, r_her, s_next, new_goal, done_her)) return her_transitions这段代码里最关键的是compute_reward的写法它只判断s_next的前三个维度末端位置是否与目标足够接近。对于 FetchReach 来说这个简化处理完全够用。如果你用完整版 FetchPush 或 FetchPickAndPlace需要把物体状态、夹爪状态也纳入考虑但奖励函数依然要保持“二进制”的风格否则 HER 的效果会大幅下降。训练循环的框架我就不全部贴出来了简单说一下采样和更新的顺序先跑若干 episode 收集原始轨迹和 HER 轨迹再从经验池随机采 batch分别更新 critic 和 actor。DDPG 的 update 核心逻辑这里不展开网上能找到大量成熟实现。我的建议是先用现成的 stable-baselines3 或 rlkit 里的 HER 实现跑通一遍再自己动手从零写一个简化版因为自己写细节出错的概率确实高。先用成熟框架形成“正确结果”的印象再对比自己代码的偏差会快很多。4. 影响范围不止于机器人hindsight 思维的横向应用HER 这个名字里的 hindsight 不是随便起的它背后其实是人类学习和进化中一种非常核心的机制用“事后倒推”的方式重新解释一段本来没有成功意义的历史经验。这个思维一旦抽象出来适用范围就远超机器人。拿工程领域举例子。我在做自动化设备的故障诊断时经常遇到一类场景设备发生了一次故障事后排查发现某个传感器数据在故障前 10 秒已经出现了异常波动但这个波动和正常噪声高度相似人在当时根本不会注意到。传统做法是记录故障样本等下次再发生时报警。但更好的做法其实是 HER 式的把这次故障当作一次“虚拟目标”——既然事后确认了这段波动是故障前兆我们就可以把“波动超过阈值”重写成一条经验专门用于训练一个预警模型。也就是说不需要等真的故障发生很多次模型就能从一次故障记录中提取出大量有价值的负面样本。这个思路在工业预测性维护中已经被证明非常有效但是真正理解它“重写经验”本质的人并不多。在产品领域也类似。用户的行为轨迹是一条长长的时序数据产品目标可能是“让用户完成转化”。绝大多数用户并没有转化于是这些轨迹在传统漏斗模型里是“失败经验”直接被丢弃。但如果转换一下视角——不把每个用户的轨迹都对齐到“转化”这个目标而是尝试理解每条轨迹实际上完成了什么比如深度阅读、多次访问、投诉反馈那么每条未转化的迹都变成了某种“成功路径”可以用于聚类、推荐或流失预警。这种分析方式本质上就是 HER 的“目标重写”思想重新定义目标让原本稀疏的正例变得稠密让模型有东西可学。再往个人成长层面说hindsight 这个概念的启发就更直接了。很多人复盘失败项目时习惯性聚焦于“我当时哪里做错了”这个视角虽然必要却天然有局限因为“正确决策”的评价标准只挂在最终结果上。HER 给我们的迁移启示是当你定义一个复盘目标时不妨把“失败”经验中的某个局部成功单独拆出来作为一个新的目标重新评判。比如一个产品发布失败但从这次发布中积累了一套用户访谈方法这套方法就把“访谈执行到位”这个子目标达成了。下次回顾时这条轨迹就不是全盘失败而是有过一些值得保留的成果。这个视角不能让你自欺欺人地无视整体失败但能让你从失败中提取出可复用的局部经验这正是人类后见之明的积极面。还有一个很直观的应用是游戏 AI 中的自动对局训练。电子游戏的奖励天然稀疏一场对局 30 分钟只有输赢两个结果。AIRM 里常用的做法是对最终状态做“倒推”式的目标重写比如“如果这一局输了就把局中某个曾占据优势的时间点改写成虚拟目标”让模型学会在类似局面下保持优势。这个技术在 AlphaStar 和 OpenAI Five 的相关方案中都能找到影子——虽然它们不是直接用 HER但“对局部目标重写”其实是同一个思想内核。5. 常见问题与排查技巧实录HER 看起来很美好真正用起来的时候坑非常多。我在多个项目里帮人调过 HER 训练问题五花八门但高频问题高度集中下面按出现的频率整理一份速查表。训练不收敛是最常见的问题但“不收敛”这个描述太笼统需要拆解。第一类是 loss 完全不变说明网络更新无效。先确认奖励函数是否如预期产生正负样本用一个简单脚本统计经验池中正奖励样本的比例。如果正样本比例低于 1%说明 HER 重写没有起作用检查虚拟目标是否真的被用到了采样过程和奖励重计算中。第二类是 critic 的 loss 持续下降但 actor 的收益为零这种情况通常是 reward scale 设置错误。HER 的二进制奖励如果乘以一个过大的系数会让 critic 的梯度爆炸建议先将 reward 保持为 0/1不要为了“放大信号”随意乘系数。第三类是训练后期突然崩溃Q 值爆炸又变负这多半是 target 网络更新频率问题把 target 网络的 tau 从默认值调低比如从 0.005 调到 0.001或者把更新频率从每步一次改为每 10 步一次可以缓解。然后是“虚拟目标过多反而坏事”的情况。k4 是论文里的经验值但实际任务如果状态维度很高k4 意味着每条轨迹多出 4 组经验经验池里虚拟目标经验占比过高导致策略过度过拟合到“容易碰巧到达”的目标上忽略真实目标的达成率。我的排查方式是先统计经验池里虚拟目标经验与原始目标经验的比例。如果比例超过 3:1就把 k 调小或者从随机选 k 个状态改成只选最后一个状态。比例保持在 1:1 到 2:1 之间通常比较健康。还有一类非常隐蔽的问题奖励函数判定“成功”的阈值设置不当。FetchReach 里阈值取 0.05 米没问题但如果你换到高精度装配任务阈值 0.05 可能比任务实际精度要求还大导致策略学了个“差不多先生”根本无法完成真实任务。反过来如果阈值设得太小比如 0.001HER 重写后过度目标也可能永远判不到成功经验池依然稀疏。所以阈值应该根据 env 的 action repeat 频率和传感器精度来定一般取任务要求精度的 1.5 倍左右比较安全。环境 resets 的处理也常被忽略。在机器人仿真里每 episode 结束后物体位置会重新随机如果目标重写时直接复用上一个 episode 的轨迹状态你必须保证这些状态在当前 episode 的环境配置下仍然有意义。否则虚拟目标可能落到一个完全错误的位置算法学到的是“在错误位置寻求成功”导致策略漂移。我的建议是在重写虚拟目标时只重写与当前 episode 相关的目标空间中实际存在的状态不要跨 episode 混淆。还有一个常见问题是评估指标的选择。很多人训练 HER 模型时只盯着“真实目标成功率”这一个指标但 HER 模型训练过程中的成功率波动非常大因为探索噪声大、策略变化快。建议同时记录“虚拟目标成功率”两者的差距能反映策略的泛化能力。如果虚拟目标成功率很高但真实目标成功率低说明模型学会了“追求容易的目标”没有学会“追求任何目标”。如果两个成功率都很低那问题多半出在探索噪声太小或经验池样本质量差。用两个指标交叉定位问题比单看一个指标快得多。我把这些坑整理成了一张速查表贴在这里方便你排查时快速对照问题现象可能原因先试操作训练完全不动loss 恒定经验池中正样本过少或 reward 始终为 0检查虚拟目标是否触发、成功率统计脚本critic loss 降、actor 无收益reward scale 过大或 critic 学习率过高reward 设为 0/1降低 critic 学习率训练后期 Q 值崩溃target 网络更新过快调低 tau 至 0.001 或降低更新频率虚拟目标占比过高k 值过大、重写次数过多将 k 从 4 降到 1 或只保留末尾状态真实目标成功率低但虚拟目标成功率高模型过度过拟合“容易目标”缩小虚拟目标采样范围、减少经验占比换任务后性能骤降奖励阈值与任务精度不匹配调整阈值到任务精度的 1.5 倍左右跨 episode 后出现诡异行为虚拟目标跨 episode 混用只在当前 episode 内采样虚拟目标我再补充一个容易踩的细节HER 类的 off-policy 算法对随机种子极度敏感。同一套代码换一个 random seed可能收敛效果天差地别。这不是玄学而是高维目标空间里的探索随机性导致的。建议在做实验对比时至少跑 4 个种子取中位数不要拿单次实验结果下结论。这点在很多论文复现时被忽视导致“复现不出来”的悲剧频繁发生。6. 一些实操体会与进一步扩展方向我做 HER 相关实验前后折腾了很长时间最深的体会是这个算法的核心难点从来不在数学公式而在对目标空间的直觉。你面对一个稀疏奖励任务时必须问自己这个任务的“意外成功”是否有意义如果任务的“虚拟目标”集合和真实目标分布几乎不重叠HER 就是空转比如机器人走到某个点但真实任务是要抓取物体两者可能离得很远这时候单纯拿“走动位置”当虚拟目标对抓取技能毫无帮助。所以 HER 不是万能药它更适合那些“真实目标可以被分解成一系列可达状态”的任务。如果你想把 HER 用得更深我推荐几个扩展方向。第一是 goal 空间降维不是直接拿原始状态当目标而是在低维潜在空间里做目标重写。机器人抓取任务中物体位姿就是最好的低维目标不要拿全部关节角做目标。第二是结合元学习让模型从多个任务的 HER 经验中学习一个通用的目标表征这样换新任务时可以快速泛化。第三是接入离线强化学习HER 天然适合离线数据因为任何历史轨迹都可以用目标重写方式生成大量正样本这对很多工业场景极其有价值——毕竟工业数据里成功的轨迹往往极少但失败轨迹多的是。最后分享一个我踩过几次坑之后的经验HER 的调试成本其实不高但它最怕的是“想当然”。如果你发现训练效果不如预期先不要急着改网络结构或换算法而是像检查流水线一样把经验池、奖励函数、目标分布、采样比例逐一检查一遍。很多所谓“HER 没用”的结论最后查下来都是这些基础问题。这个道理和 hindsight 本身的含义还挺对应的——很多事后看来的失败经验换个角度重读其实是极其宝贵的学习素材。只不过这次我们不是被动地等事后反思而是主动地、在算法层面去设计一种“事后重写”机制让每一次失败都变成进步的阶梯。
返回列表