我在同一个数据集上训练了 RNN、GRU 和 LSTM,并查看了我观察到的它们各自的预测,它们都显示了它们可以预测的值的上限。我为每个模型附上了一张图表,它非常清楚地显示了上限。每个点都是一个预测,橙色图只是用来说明基本事实(即两个轴上的基本事实)。
我的数据集分为 60% 用于训练,20% 用于测试,20% 用于验证,然后每个拆分都被打乱。所有三个模型的拆分/洗牌都是相同的,因此每个模型也使用完全相同的数据拆分/洗牌进行预测。模型非常简单(2 层,没什么特别的)。我使用网格搜索来找到每个模型的最佳超参数。每个模型都有 20 个连续的输入(特征向量,例如坐标、等待时间等),并产生一个数字作为输出,即预期的剩余等待时间。我知道这种设置比 RNN 更偏向于 LSTM 和 GRU,并且预测的准确性也明确地表明了这一点。
但是,我的问题是为什么每个模型都显示其预测的上限?为什么它看起来像一个硬限制?
我无法弄清楚这是什么原因,因此我无法确定它是否与使用的模型、它们的训练方式或是否与数据有关。非常感谢任何和所有的帮助!
模型的超参数是:
RNN:128 个单位 pr 层,批量大小为 512,tanh 激活函数
GRU:256 个单位 pr 层,批量大小为 512,sigmoid 激活函数
LSTM:256 个单位 pr 层,256 的批量大小,sigmoid 激活函数
所有模型都有 2 层,中间有一个 dropout(概率为 0.2),使用的学习率为, 并接受了 200 多个 epoch 的训练,并以 10 的耐心提前停止。所有模型都使用 SGD,动量为 0.8 ,没有内斯特罗夫和 0.0 衰减。一切都是使用 Tensorflow 2.0 和 Python 3.7 实现的。如果相关,我很乐意分享用于每个模型的代码。
编辑 1 我应该指出这些图表由 463.597 个单独的数据点组成,其中大部分都非常靠近每个图表的橙色线。事实上,对于这三个模型中的每一个,在 463.597 个数据点中,橙色线 30 秒内的数据点数为:
RNN:327.206 个数据点
LSTM:346.601 个数据点
GRU:336.399 个数据点
换句话说,与图的其余部分相比,每张图上显示的预测上限由相当少量的样本组成。
编辑 2 针对Sammy 的评论,我添加了一个图表,显示所有预测在 30 秒间隔内的分布。y 轴表示落入给定 30 秒间隔(x 轴)内的样本数量的以 10 为底的对数。第一个区间 ([0;29]) 由大约 460.000 个预测值总数中的大约 140.000 个预测值组成。