我正在尝试将强化学习应用于一个基于回合的游戏环境中。每回合我都会得到一个(自包含/近似马尔可夫的)状态,并需要提供一个动作来推进游戏。由于存在一些长期策略(开发资源“A”,等待几轮后使用资源“A”),我考虑在神经网络中使用LSTM层。在训练过程中,我可以将回合序列输入到网络中来训练LSTM;然而,在测试阶段,我只能提供当前状态(这是一个硬性要求)。
我想知道在这种情况下LSTM是否是一个可行的选项,或者它们是否不适合这种用途,因为在测试/部署期间我只能提供一个状态。
回答:
是的,LSTM在这里是一个可行的选项。在Keras中,这可以通过将名为“stateful”的字段设置为true来实现。这样做的效果是不会在每个样本之间重置单元的内部状态,这意味着它会一直记住前面的步骤,直到这个单元被重置。
在这种情况下,你只需将LSTM设置为有状态(stateful),每次步骤提供一个样本,并在回合结束后重置。请记住,如果在训练过程中有足够的信号让你能够将寻找长期策略所需的所有时间步都放入一个样本中,你可能不希望在训练时保持有状态,因为你可能会对多个回合进行重放。
如果你使用的是Keras以外的其他框架,搜索“有状态LSTM在xyz框架中”的相关信息应该能进一步帮助你。