【问题标题】:Time Series Prediction using Recurrent Neural Networks使用递归神经网络进行时间序列预测
【发布时间】:2016-05-12 21:27:56
【问题描述】:

在给定输入的情况下,我使用Bike Sharing dataset 来预测一天内的租赁数量。我将使用 2011 年的数据进行训练,使用 2012 年的数据进行验证。我成功地建立了一个线性回归模型,但现在我试图弄清楚如何使用循环神经网络来预测时间序列。

数据集有 10 个属性(例如月份、工作日与否、温度、湿度、风速),虽然属性是天(星期日:0、星期一:1 等),但都是数字的。

我假设有一天可以并且可能会取决于前几天(而且我不需要所有 10 个属性),所以我考虑使用 RNN。我知道的不多,但我读过一些东西,也读过this。我想到了这样的结构。

我将拥有10 input neuronsa hidden layer1 output neuron。我不知道如何决定隐藏层将有多少个神经元。

我想我需要一个矩阵来连接输入层和隐藏层,一个矩阵来连接隐藏层和输出层,以及一个矩阵来连接相邻时间步中的隐藏层,t-1t,@ 987654328@ 至t+1。总共有 3 个矩阵。

在一个教程中,激活函数是sigmoid,虽然我不确定,如果我使用sigmoid函数,我只会得到0到1之间的输出。我应该使用什么作为激活函数?我的计划是重复这个n 次:

  • 对于每个训练数据:
    • 前向传播
      • 将输入传播到隐藏层,将其添加到先前隐藏层到当前隐藏层的传播中。并将其传递给激活函数。
      • 将隐藏层传播到输出。
      • 查找错误及其派生,将其存储在列表中
    • 反向传播
      • 从列表中查找当前层和错误
      • 查找当前隐藏层错误
      • 商店重量更新
    • 通过将权重(矩阵)乘以学习率来更新权重(矩阵)。

这是正确的方法吗?我想要真正的数值作为输出,而不是 0-1 之间的数字。

【问题讨论】:

  • 您是否考虑过为 RNN 使用现成的包,例如Python中的Keras?这可以让您的任务更轻松。

标签: machine-learning neural-network time-series regression recurrent-neural-network


【解决方案1】:

如果您只是想学习基础知识,这似乎是正确的方法。如果你想构建一个实际使用的神经网络,这是一种非常糟糕的方法,正如 Marcin 的评论所说,几乎每个构建实际使用的神经网络的人都是通过使用具有现成可用的神经网络模拟的包来实现的。让我一一回答你的问题……

  1. 我不知道如何决定隐藏层有多少神经元。

没有为您的神经网络选择正确架构的黄金法则。人们根据经验建立了许多经验规则,通过尝试各种组合并比较输出来确定正确的神经元数量。一个好的起点是(输入加输出神经元的 3/2 倍,即 (10+1)*(3/2)...所以您可以从隐藏层中的 15/16 神经元开始,然后继续根据您的输出减少数量。)

  1. 我应该使用什么作为激活函数?

同样,没有“正确”的功能。这完全取决于什么适合您的数据。此外,还有多种类型的 sigmoid 函数,例如双曲正切、逻辑、RBF 等。逻辑函数是一个很好的起点,但同样,您只能通过反复试验找到正确的函数。

  1. 这是正确的方法吗?我想要真正的数值作为输出,而不是 0-1 之间的数字。

所有激活函数(包括分配给输出神经元的激活函数)都会为您提供 0 到 1 的输出,您必须使用乘数将其转换为实际值,或者对多个输出神经元进行某种编码。手动编码会很复杂。

另一个需要考虑的方面是您的训练迭代。这样做'n'次没有帮助。您还需要通过反复试验找到最佳训练迭代,以避免欠拟合和过拟合。

正确的方法是使用 Python 或 R 中的包,这将允许您快速训练具有大量自定义的神经网络,您可以在其中训练和测试具有不同激活函数(甚至不同训练算法)和网络架构,没有太多麻烦。经过一定程度的反复试验,您最终会找到能够为您提供理想输出的网络。

【讨论】:

  • 我的意思是,我可能会使用现成的软件包,但这只是一个作业,我想彻底学习。我可以实现这个并将结果与​​包的结果进行比较。我可以尝试实现,通过更改n隐藏层维度激活函数alpha我可以尝试以优化结果。正如我所说,事情是输出值。在数据集中,输出的平均数是 3405。如果我在从隐藏层传播到输出时不使用 sigmoid 函数怎么办?我可以将权重与隐藏层相乘吗?那么初始神经网络权重呢?
  • 如果您不使用 sigmoid 函数,那么从数学上讲,您的多层网络可以通过将所有权重相乘并最终使其成为一个线性方程来简化为单层网络......结果模型将与回归模型相同,它会破坏神经网络的要点......你当然可以这样做来比较你训练的网络与回归模型的表现......但是隐藏层将完全没有意义。 ..
  • 如果您在 R 中,插入符号包可以让您对一系列网络参数进行网格搜索:神经元数、层数、激活函数、重复次数、学习率。
猜你喜欢
  • 2013-09-11
  • 1970-01-01
  • 2011-05-12
  • 2015-10-12
  • 2017-07-14
  • 2013-02-22
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多