我们目前正在使用Deeplearning4j进行机器学习的小实验。
我们有来自不同设备的时序电压测量数据,这些数据我知道是相互依赖的。我们成功地对大量这些数据进行了标记,使用了1和0。
我们的问题是要弄清楚模型中层的使用。
在我们看来,似乎是经验在人们中流传,例子看起来像是随机的。
我们目前使用的是LSTM和RNN
但是,我们如何确定是否有更好的模型呢?
我们希望看到模型是否能通过预测发现我们没有注意到的某些依赖关系。
回答:
解决这个问题的最佳方法是从查看你的数据和你想要从中获得什么开始。然后,你应该先建立一个基线。使用你熟悉的最简单的建模技术,这样你至少有了一个起点。
在你的情况下,看起来每个时间步都有标签。所以,你可以对每个时间步分别使用简单的线性回归,以了解如果你完全不使用任何序列信息会得到什么结果。任何快速工作的方法都是这一步骤的良好候选。
一旦你有了这个基线,你就可以开始构建一个超越这个基线的深度学习模型。
对于时序数据,目前在DL4J中有两个选择,要么使用像LSTM这样的循环层,要么使用时间上的卷积。
如果你希望每个时间步都有输出,那么循环层可能更适合你。卷积方法通常在你希望在读取整个序列后获得单一结果时效果最好。
关于选择这些层的宽度以及你应该使用多少层,你需要进行一些实验。
你首先要实现的目标是构建一个能在你数据的一个子集上过拟合的模型。所以,你从开始时,只反复输入一批例子。如果模型不能在这个上过拟合,你就使层更宽。如果层开始变得太宽,你就在上面添加另一层。
如果你使用deeplearning4j-ui模块,它会告诉你你的模型当前有多少参数。它们通常应该少于你拥有的总示例数,否则你有在整个数据集上过拟合的风险。
一旦你能训练一个模型在你数据的一个小子集上过拟合,你就可以开始使用你所有的数据进行训练。
在那个时候,你就可以开始寻找更好的超参数,并看看你能超越基线多少。