强化学习在算法实现时需要非常注意细节,否则网络很难收敛或没有训练效果。本文主要记录我在实现各种强化学习算法时踩到的一些坑以及需要注意的细节,持续更新…
以及附上我自己实现的RL算法库:https://github.com/KezhiAdore/RL-Algorithm

Common
PyTorch
中的交叉熵损失函数torch.nn.functional.cross_entropy
里面会先计算一次softmax
,在使用策略梯度时要注意[^1]。
REINFORCE
- 计算
loss
时,与discount reward相乘时要注意维度一致。 - 计算完交叉熵之后使用
torch.sum
求和比torch.mean
求平均效果要好[^2]。
DQN系列
- 计算
q_target
时要注意done=1
的情形:即q_target = reward + self._gamma * max_next_q_value * (1 - done)
,否则容易导致训练过程中reward
一直上下大幅震荡。 - 一定要有间隔同步的
target_newok
,否则很难收敛。
Reference
[^1]: PyTorch中的CrossEntropyLoss与交叉熵计算不一致 | Kezhi’s Blog
[^2]: Vanilla Policy Gradient关于loss mean与sum的探讨 | Kezhi’s Blog