由于观察没有揭示整个状态,我需要用循环神经网络进行强化,以便网络对过去发生的事情有某种记忆。为简单起见,我们假设我们使用 LSTM。
现在内置的 PyTorch LSTM 要求您向其提供形状为
Time x MiniBatch x Input D
的输入,并输出形状为 Time x MiniBatch x Output D
的张量。
然而,在强化学习中,要知道
t+1
时间的输入,我需要知道t
时间的输出,因为我正在环境中执行操作。
那么是否可以使用内置的 PyTorch LSTM 在强化学习设置中进行 BPTT?如果是的话,我该怎么做?
也许您可以将循环中的输入序列提供给 LSTM。一些东西,像这样:
h, c = Variable(torch.zeros()), Variable(torch.zeros())
for i in range(T):
input = Variable(...)
_, (h, c) = lstm(input, (h,c))
例如,每个时间步都可以使用 (h,c) 和输入来评估操作。只要不破坏计算图,您就可以反向传播,因为变量保留所有历史记录。
我花了很多时间让事情运行(模型学习:))并想分享我的发现。通过有效的 LSTM RL 训练检查我的代码 https://github.com/svenkroll/simple_RL-LSTM 并且还有一些更高级的细节我尝试回馈社区 here