3

我正在尝试构建一个神经网络作为生成模型,以预测一系列向量之后的下一个向量(每个向量都是长度实数的分布n)。

我的想法是获取k先前的序列并将它们连接起来以获得kxn输入向量。为了训练模型,我将序列中的下一个向量作为输出。当我正在寻找非确定性输出时,我将使用具有低梯度的 sigmoid 激活函数。

这个程序看起来合理吗?

希望它确实如此,我尝试在 R 中同时使用nnetneuralnet库来实现它,但是在我遇到的文档和示例中,输入和输出向量的长度似乎必须相同。在这些模块中的任何一个中训练不同长度的输入/输出向量的语法是什么?

我的输入向量的样本是:

      [,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=5, k=3,尽管我的实际数据集有n~200. 在这两种情况下,各个向量都归一化为 1。

任何帮助深表感谢!

4

1 回答 1

2

一般来说,这是一种非常简单和幼稚的方法,而且不会产生好的结果。您正在尝试执行从一组时间序列到时间序列的回归,将所有内容视为简单属性和简单模型。已经有数千篇关于时间序列预测、表示时间依赖性等的论文/研究。您在这里面临着一个困难的预测问题,找到好的解决方案需要大量的工作,而提出的模型运行良好的机会很小.

从你的文字我推断,你实际上有一个时间序列序列,并且对于“时间窗口” [t-k,t-k+1,..,t-1],你想预测t. 如果这是真的,那么这实际上是时间序列预测问题,其中每个属性都是它自己的时间序列,所有时间序列相关的技术都可以在这里使用,例如递归神经网络(如果你真的喜欢 NN)或条件 RBM(如果你真的想要一个非确定性的生成模型——因为它们近年来已成功应用于时间序列预测)。

现在还有几个疑问:

当我正在寻找非确定性输出时,我将使用 sigmoid 激活函数

Sigmoid 激活函数不是非确定性的。如果您正在寻找非确定性模型,您应该考虑一些架构,例如 RBM,但正如 @Ben Allison 在评论中提到的,传统的神经网络也可以通过一些简单的修改以概率方式使用。

梯度低。

低梯度是什么意思?你的激活函数有一个小斜率吗?在简单的训练程序(如 BP 算法)的情况下,这将导致学习出现问题

[数据]

您的数据看起来像您对每个时间序列进行了归一化,因此它总和1不是神经网络中数据归一化的流行方法(您宁愿按列对数据进行归一化,因此每个维度都被归一化,而不是每个样本)。

标题

您的问题和模型不是“顺序的”,也不包括“可变矢量长度”,寻找有关此类现象的论文不会让您回答您的问题。

于 2013-09-18T05:07:45.930 回答