共计 2081 个字符,预计需要花费 6 分钟才能阅读完成。
问题背景:稀疏奖励的困扰
在机器人控制(如机械臂抓取)、游戏 AI(如《星际争霸》微操)等场景中,智能体常常面临稀疏奖励问题。具体表现为:90% 的 episode 中,智能体因未触发关键事件(如成功抓取物体)而仅获得 0 或恒定负奖励。以机械臂控制为例,只有在夹爪距离目标 5cm 内时才会获得 + 1 奖励,其他时间均为 0。这种信号延迟导致传统 RL 算法难以有效学习。
传统方法的局限性
- DQN 的缺陷:Q-learning 系列算法依赖稠密奖励更新 Q 值,稀疏奖励下会出现梯度消失
- PPO 的困境:尽管策略梯度方法对奖励稀疏性稍强,但实验显示在机械臂任务中,原始 PPO 需要 800 万步训练才能达到 50% 成功率
- 关键发现:Hindsight Experience Replay(HER,后视经验回放)通过重构目标状态,将 ” 失败 ” 轨迹转化为 ” 针对替代目标 ” 的成功经验
HER 核心实现(PyTorch 版)
class HERBuffer:
def __init__(self, capacity, k=4):
# k: 每个 transition 生成 HER 样本的数量
self.capacity = capacity
self.buffer = []
self.k = k
def store(self, transition):
"""
transition 格式: (state, action, reward, next_state, goal, done)
其中 goal 维度需与 state 中的目标描述部分一致
"""
if len(self.buffer) == self.capacity:
self.buffer.pop(0)
self.buffer.append(transition)
def sample(self, batch_size):
indices = np.random.choice(len(self.buffer), batch_size)
batch = [self.buffer[i] for i in indices]
# HER 核心:目标替换逻辑
her_batch = []
for state, action, _, next_state, _, done in batch:
for _ in range(self.k):
# 随机选择后续某状态作为新目标
future_idx = np.random.randint(indices[i], len(self.buffer))
new_goal = self.buffer[future_idx][-2] # 提取 goal 部分
# 重新计算奖励(需自定义奖励函数)new_reward = compute_reward(next_state, new_goal)
her_batch.append((state, action, new_reward, next_state, new_goal, done))
return batch + her_batch
课程学习优化
通过动态调整训练难度加速收敛:
def evaluate_difficulty(episode_returns, window=10):
"""
基于最近 10 幕的平均回报评估当前难度
返回:0- 1 之间的标准化难度值
"""
avg_return = np.mean(episode_returns[-window:])
difficulty = 1 - sigmoid(avg_return) # 回报越高难度越低
return difficulty
# 在采样时应用难度系数
def curriculum_sample(buffer, difficulty):
"""
难度控制逻辑:- 高难度:优先采样接近目标的 transition
- 低难度:均匀采样
"""
if difficulty > 0.7:
# 计算每个 transition 的目标距离
distances = [np.linalg.norm(t[0][-3:] - t[-2]) for t in buffer]
probs = softmax(-np.array(distances))
idx = np.random.choice(len(buffer), p=probs)
else:
idx = np.random.randint(len(buffer))
return buffer[idx]
避坑指南
- 维度不匹配错误
- 现象:HER 采样时出现
ValueError: shapes (3,) and (4,) not aligned -
解决:确保
state中目标描述部分的维度与goal完全一致 -
采样频率过高
- 现象:训练初期出现剧烈震荡
-
解决:调整 HER 的
k参数(建议从 2 开始逐步增加) -
奖励塑形失衡
- 现象:智能体学会 ” 欺骗 ” 奖励函数(如始终靠近目标但不抓取)
- 解决:调整环境原始奖励与 HER 奖励的权重比 $\lambda$
性能验证
实验对比(机械臂 Reach 任务):
| 方法 | 收敛步数 | 最终成功率 |
|---|---|---|
| PPO (原始) | 8.2M | 61% |
| PPO+HER | 3.1M | 78% |
| PPO+HER+ 课程 | 2.7M | 85% |

TensorBoard 显示:添加课程学习后(蓝色曲线),早期训练阶段的回报提升速度显著加快
开放问题
当前方案仍需手动设计课程难度评估指标。更智能的方向可能是:
– 基于策略熵自动调整难度
– 使用元学习优化课程进度
– 结合人类示范数据初始化课程
正文完
