RNN与简单神经网络

时间:2020-06-03 13:44:38

标签: lstm recurrent-neural-network

(我从概念上理解RNN的工作原理。在某些用例中,我也使用了RNN / LSTM)

要深入了解RNN和RNN变量模型的工作原理,我想尝试一些实验。

该实验的明显选择是-排序问题。

实验目标: 当我将要用NeuralNet训练一个简单的排序问题时,它的表现应该不佳,但是当我在RNN上进行训练/调谐时,它应该表现得很好(只要我有足够的数据量)

问题模拟: 我已经生成了10,000行序列,每行看起来像这样:

  • 在1-10k之间随机生成一些数字“ num_x”

    x1 = sin(num_x)

    x2 = sin(x1)

    x3 = sin(x1)

    x4 = sin(x1)

    x5 = sin(x1)

    此行的X = = [x1,x2,x3,x4,x5]

    该行的

    y是: y = sin(x6)....因此,通过训练模型,我们需要预测下一个数字是序列。

因此,我们清楚地看到,序列中的每个数字都是非线性的,并且取决于序列中较早的数字。

所以我认为这绝对是一个很好的序列问题,它应该在简单的NN上表现不佳,并且在RNN上表现得很好(调整后)

但是令我惊讶的是,它甚至在没有微调的情况下也能实现非常好的NN。 而且它在RNN模型上的执行效果很差(但我们现在可以忘记这部分)

我想了解一下,为什么它在NN上表现更好?

我使用了RMSE指标,并运行了100 epcoh。 RMSE为2.5,无需调整 (对于RNN,RMSE为37,000)

1 个答案:

答案 0 :(得分:0)

好的。因此,我认为此序列对于NN是非常简单的学习任务。所以我使序列变得有点复杂。

  num_1 = math.sin(i) 
  num_2 = math.sin(num_1) 
  num_3 = math.sin(num_2) + math.cos(num_1) 
  num_4 = math.sin(num_3) + math.cos(num_2) + math.cos(num_1)
  num_5 = math.sin(num_4) + math.cos(num_3) + math.cos(num_2) + math.cos(num_1)

  x = [num_1, num_2,num_3, num_4,num_5]
  y_num = math.sin(num_5) + math.cos(num_4) + math.cos(num_3) + math.cos(num_2) + math.cos(num_1)

但是NN非常聪明,它也学习这种复杂的序列。 所以我问了我的科学家朋友。我在这里引用他的答案:

“首先,您要构建的序列不是复杂的序列。它们是规则的,有界的,确定性的序列,并且您选择的函数是周期的序列。即使周期性地应用这些周期函数,它们的线性叠加也可能具有短范围的顺序。神经网络可以学习任意阶的非线性函数,您正在要求网络将5维空间映射到1d空间,这是大多数神经网络可以做到的。 “

因此从此练习中学到的教训是:

NN模型能够学习简单到半复杂的低维排序问题。但是,与之相比,它会更慢。 因此,我们将它们用于NLP类型的高维且非常复杂的问题。