【问题标题】:Backpropagation through time in stateful RNNs有状态 RNN 中随时间的反向传播
【发布时间】:2017-01-20 07:55:02
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    反向传播范围仅限于输入序列的第二维。即,如果您的数据是 (num_sequences, num_time_steps_per_seq, data_dim) 类型,那么 back prop 是在价值 num_time_steps_per_seq 的时间范围内完成的,看看

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

    【讨论】:

      【解决方案2】:

      关于 Keras 中的 RNN,您需要了解几件事。默认情况下,所有递归神经网络中的参数return_sequences=False。这意味着在默认情况下,只有在处理整个输入序列后 RNN 的激活才会作为输出返回。如果您想在每个时间步都激活并分别优化每个时间步,则需要将return_sequences=True 作为参数传递(https://keras.io/layers/recurrent/#recurrent)。

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

      【讨论】:

      • 所以你说将你的序列分成 N 部分并使用有状态的 RNN 会给你带来与不分割序列并使用标准 RNN 相同的反向传播行为?我认为对于 RNN 的反向传播,它们必须展开,所以我不确定这如何与有状态和序列划分一起发挥作用
      猜你喜欢
      • 2017-05-24
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2017-08-01
      • 2011-08-25
      • 1970-01-01
      相关资源
      最近更新 更多