【发布时间】:2017-01-20 07:55:02
【问题描述】:
如果我在 Keras 中使用有状态的 RNN 来处理长度为 N 的序列,分为 N 部分(每个时间步单独处理),
- 如何处理反向传播?它只影响最后一个时间步,还是在整个序列中反向传播?
- 如果它没有在整个序列中传播,有没有办法做到这一点?
【问题讨论】:
标签: neural-network keras backpropagation recurrent-neural-network
如果我在 Keras 中使用有状态的 RNN 来处理长度为 N 的序列,分为 N 部分(每个时间步单独处理),
【问题讨论】:
标签: neural-network keras backpropagation recurrent-neural-network
反向传播范围仅限于输入序列的第二维。即,如果您的数据是 (num_sequences, num_time_steps_per_seq, data_dim) 类型,那么 back prop 是在价值 num_time_steps_per_seq 的时间范围内完成的,看看
【讨论】:
关于 Keras 中的 RNN,您需要了解几件事。默认情况下,所有递归神经网络中的参数return_sequences=False。这意味着在默认情况下,只有在处理整个输入序列后 RNN 的激活才会作为输出返回。如果您想在每个时间步都激活并分别优化每个时间步,则需要将return_sequences=True 作为参数传递(https://keras.io/layers/recurrent/#recurrent)。
接下来重要的是要知道,有状态 RNN 所做的就是记住最后一次激活。因此,如果您有一个较大的输入序列并将其分解为较小的序列(我相信您正在这样做),则在处理第一个序列后,网络中的激活会保留在网络中,因此在处理第一个序列时会影响网络中的激活第二序列。这与网络如何优化无关,网络只是将输出与您给出的目标之间的差异最小化。
【讨论】: