我正在尝试将神经网络构建为生成模型,以预测一系列向量之后的下一个向量(每个向量是实际长度n
的分布)。
我的想法是采用k
之前的序列并将它们连接起来,以获得k
x n
输入向量。为了训练模型,我将序列中的下一个向量作为输出。当我在寻找非确定性输出时,我将使用低梯度的sigmoid激活函数。
这个程序看起来合理吗?
希望如此,我尝试使用nnet
和neuralnet
库在R中实现它,但是我遇到的文档和示例似乎输入和输出向量必须是长度相同。在这两个模块中训练不同长度的输入/输出向量的语法是什么?
我的输入矢量样本是:
[,1]
[1,] 0
[2,] 0
[3,] 0.6
[4,] 0.4
[5,] 0
[6,] 0
[7,] 0.06666667
[8,] 0.6666667
[9,] 0
[10,] 0.2666667
[11,] 0
[12,] 0.4
[13,] 0
[14,] 0
[15,] 0.6
输出矢量:
[,1]
[1,] 0
[2,] 0
[3,] 0.8571429
[4,] 0
[5,] 0.1428571
N.B。上面的示例包含n=5
,k=3
,但我的实际数据集有n~200
。在这两种情况下,将各个向量标准化为1。
非常感谢任何帮助!
答案 0 :(得分:2)
一般来说,这是一种非常简单和天真的方法,相反不会产生好的结果。您正在尝试执行从时间序列集到时间序列的回归,将所有内容视为简单属性和简单模型。关于时间序列预测已有数千篇论文/研究,代表时间依赖性等。你在这里面临着一种难以预测的问题,找到好的解决方案需要大量的工作,而且提出的模型很少有机会运作良好
从您的文字中我推断,您实际上有一系列时间序列,而对于“时间窗口”[t-k,t-k+1,..,t-1]
,您希望预测t
中的值(时间序列)。如果这是真的,则这是实际时间序列预测问题,其中每个属性本身是时间序列,并且可以在此使用所有时间序列相关技术,例如递归神经网络(如果您真的喜欢NN)或条件RBM(如果你真的想要一个非确定性的生成模型 - 因为它们近年来已成功应用于时间序列预测)。
现在很少有其他疑惑:
当我正在寻找非确定性输出时,我将使用sigmoid激活函数
Sigmoid激活功能不是非确定性。如果您正在寻找非确定性模型,您应该考虑一些RBM等架构,但正如@Ben Allison在评论中提到的那样,传统神经网络也可以通过一些简单的修改以概率方式使用。
低梯度。
低渐变是什么意思?你的激活函数有一个小斜率?在简单的训练程序(如BP算法)的情况下,这将导致有问题的学习
[DATA]
您的数据看起来像是对每个时间序列进行了标准化,因此它总和为1
,这是神经网络中数据范数化的一种非常流行的方法(您更喜欢按列标准化数据,因此每个维度都是标准化的,而不是每个样品)。
标题
您的问题和模型不是“顺序”,并且不包括“变化的矢量长度”,寻找有关此类现象的论文不会引导您回答您的问题。