Guided Cost Learning每局平均成本不降反升,求原因及合理性判断
Guided Cost Learning算法中平均成本不降反升的问题分析
可能的原因排查方向
- 成本网络输出无约束:你的CostNN最后一层没有激活函数,直接输出线性值。而Guided Cost Learning要求成本函数非负(代价不能为负),无约束的输出可能出现负值,打乱成本计算逻辑。建议给最后一层添加
sigmoid或ReLU,把输出限制在非负区间。 - 算法训练阶段特性:该算法是交替训练成本网络与策略的:先让成本网络区分专家轨迹(低成本)和当前策略轨迹(高成本),再用成本网络优化策略。训练初期策略性能差,成本网络可能先给差轨迹打高分;当策略逐渐接近专家时,成本网络可能调整整体成本尺度,导致短期成本上升,但长期应回落。建议增加训练轮次观察后续趋势。
- 数据分布偏移:若专家数据与当前策略生成的轨迹分布差异过大,成本网络无法有效学习合理的成本函数。需检查两者的状态分布是否有重叠,同时确认成本网络的损失函数是否正确(比如用对比损失:
max(0, cost(策略轨迹) - cost(专家轨迹) + margin),确保专家轨迹成本更低)。 - 策略优化方向错误:如果策略优化时是最大化成本网络输出(而非最小化),必然导致成本上升。需确认策略优化目标是最小化轨迹的期望成本
E[cost(s,a)]。 - 超参数不合理:学习率过高会导致训练不稳定;批次大小过小会让成本网络更新噪声大;交替训练频率不当(比如成本网络训练次数不足就更新策略)也会引发异常。
你的CostNN代码优化点
当前实现缺少输出约束,修改如下:
class CostNN(nn.Module): def __init__( self, state_dim, hidden_dim1 = 128, out_features = 1, ): super(CostNN, self).__init__() self.net = nn.Sequential( nn.Linear(state_dim, hidden_dim1), nn.ReLU(), nn.Linear(hidden_dim1, out_features), nn.Sigmoid() # 添加激活函数约束输出为非负 ) def forward(self, x): return self.net(x)
实验结果判断
从你提供的结果图来看,当前训练轮次较少,短期成本上升可能是初期正常波动。如果后续成本持续上升,则说明存在上述某类问题,建议先调整CostNN并增加训练轮次再观察。
内容的提问来源于stack exchange,提问作者AlgorithmAce
相关产品推荐
相关产品推荐

