我目前正在使用Keras(Tensorflow后端)通过使用图像输入数据的异步优势主演(A3C)算法编写增强学习代理。为了测试网络结构和培训过程,我希望代理学习控制OpenAI-Gym环境Pendulum-v0(由于有连续动作空间)。
网络体系结构如下:
输入(钟摆场景)-> CNN-> LSTM层->密集层->策略和值输出
由于当前场景的单个图像没有提供任何时间信息(在这种情况下,摆速度是解决该任务所必需的),因此我在特征提取部分的顶部添加了循环LSTM层。 (CNN)。 由于效率原因,我也不想使用来自先前时间步骤的多个图像作为输入(例如,通过将最后四个场景图像安排为图块),时间相关性应由LSTM层处理。
由于我以前的经验仅限于简单的前馈神经网络, 我通过训练CNN对Cifar10数据集进行分类来做好准备。对于循环部分,我编写了一个LSTM网络以根据WhatsApp聊天记录生成文本。这些都不是我面临的主要问题,但是在我没有得到的强化学习代理中结合这两者似乎有些事情:
LSTM层需要一个序列输入!在生成文本的情况下,这并不是问题,因为我交付了最后100个字符作为序列输入,接收了下一个字符作为输出并将其添加到输入中,同时删除了第一个条目以生成下一个字符。
但是,对于具有策略梯度的强化学习代理,在预测要采取的第一个动作之前,我没有序列(例如100个状态)作为图像。在没有动态输入的情况下处理时间依赖性(在深度强化学习中不一定是)时,通常选择的方法是什么? 我猜必须有一种方法来连接特征提取和循环部分,这样我可以在每个时间步中向网络提供单个输入图片,并通过在特征之后使用循环层来处理时间依赖性提取部分。
关于如何设计这样的网络,是否有任何好的示例,教程或代码片段?我读到有关Keras“ TimeDistributed” -Wrapper的信息,但乍一看它似乎与我的工作背道而驰需要。
将LSTM网络的序列长度定义为1并将CNN的输出重塑为(BatchSize,1,n_out)也似乎是解决此问题的“错误”方法。
最诚挚的问候