深度Q学习,LSTM和Q值融合

时间:2019-03-04 21:32:55

标签: python keras deep-learning lstm q-learning

我正在部署一个强化学习代理,该代理在给定价格序列的情况下会采取行动。通常,这些动作是买进卖出或等待。一次输入神经网络作为输入,窗口大小为96步,我有大约80个特征。因此输入类似于1x96x80。该算法是在线的,每隔96个新观测值从一个重播内存中抽取一个随机样本,该记忆可保存最后480个观测值(s,a,r,s')。我为每个时间步长的每个动作都给出了一个奖励信号,买入奖励为+1,卖出奖励为-1,依此类推。因此,我不必费心探索。我使用的是计算损失的标准方法(如Deep Mind DQN原始论文中所述),它有两个网络,一个网络用于估计Q值,另一个网络用作目标并在每一步进行一次软更新。

代理在每个步骤中选择具有最高估计Q值的动作-如下图所示。我的问题是Q值如何取决于模型的体系结构。在标准情况下,我有两个密集的“ elu”层,两个LSTM层和一个最终的带有3个单元的密集“线性”层。使用这种配置,Q值波动太大,几乎每一个步骤我都会获得一个新的最高最大值,而贪婪的策略过于频繁地选择不同的操作,从而导致高交易成本,从而破坏了性能(图1)。在另一种情况下(图2),我仅在最后一个单元之前添加了3个单元的另一个密集线性层,在这种情况下,Q值的变化要慢得多,因为不会导致高成本,所以提高了性能,但是这里需要权衡是我得到了一个效率低得多的学习者,该学习者适应新情况的速度很慢,并且会长时间选择次优动作,从而损害了性能(但仍然比以前更好)。为了完整起见,我尝试了LSTM返回整个序列,并仅在最后一步的情况下,更新了整个序列的梯度。两者之间没有真正的区别。

Without a second linear layer With a double linear layer蓝线是卖出(并保持空头头寸),橙色是等待或平仓头寸,绿色是买入(或保持多头头寸)。因此,如果曲线始终高于其他曲线,则该位置可以保持更长的时间。

理想情况下,我想找到一种在这两个极端之间进行微调的方法,但是,只有在我在最后一个单元之前添加了3个单元的第二个密集层时,第二个行为才会出现(它可以是线性的或正切的) ,因此我无法获得介于两者之间的所有可能性。调整其他参数(例如折现系数,学习率或LSTM的偏差)并没有真正的帮助(将LSTM的偏差增加到5确实有帮助,但仅在第一次迭代中,它可以恢复到相同的性能)。同样,使用GRU代替LSTM不会显着改变Q值的动态。

我是死胡同,有什么建议吗?我也不明白为什么添加一个简单的线性最终层会大大降低Q值的估算速度。

编辑:经过足够的迭代,即使第二种情况(2个线性层)也慢慢收敛到Q值过于不稳定的情况。因此,所需的行为仅持续数万步。

0 个答案:

没有答案