在有状态的RNN中通过时间反向传播

时间:2016-09-12 19:47:50

标签: neural-network keras backpropagation recurrent-neural-network

如果我在Keras中使用有状态RNN来处理长度为N的序列,该序列被分成N个部分(每个时间步骤被单独处理),

  1. 如何处理反向传播?它只影响最后一个时间步,还是反过来传播整个序列?
  2. 如果它没有在整个序列中传播,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:5)

反向传播范围限于输入序列的第二维。即,如果您的数据类型为(num_sequences, num_time_steps_per_seq, data_dim),那么在价值num_time_steps_per_seq的时间范围内进行反向支持请查看

  

https://github.com/fchollet/keras/issues/3669

答案 1 :(得分:3)

在Keras中,您需要了解有关RNN的一些事项。默认情况下,所有递归神经网络中的参数return_sequences=False。这意味着默认情况下,仅处理整个输入序列后的RNN激活将作为输出返回。如果您希望在每个时间步进行激活并单独优化每个时间步,则需要将return_sequences=True作为参数(https://keras.io/layers/recurrent/#recurrent)传递。

接下来需要知道的是,所有有状态的RNN都会记住最后一次激活。因此,如果您有一个较大的输入序列并以较小的序列(我相信您正在这样做)将其分解,则在处理第一个序列后,网络中的激活将保留在网络中,因此在处理时会影响网络中的激活。第二序列。这与网络优化方式无关,网络只是最小化输出和目标之间的差异。