使用TensorFlow进行GPU加速时训练循环神经网络

4
我对并行计算(包括一些CUDA)、前馈神经网络和循环神经网络(以及它们如何使用BPTT)有基本的了解。
例如,当使用TensorFlow时,您可以在网络的训练阶段应用GPU加速。但是,循环神经网络具有时间步骤,其中当前时间步骤依赖于先前的时间步骤,而下一个时间步骤则依赖于当前时间步骤等等。
既然情况是这样,GPU加速是如何起作用的呢?是否所有可以并行计算的部分都是以这种方式计算的,而时间步骤相关的部分则是串行化的呢?
2个回答

4

RNNs使用时间反向传播进行训练。循环网络结构展开成有限长度的有向无环图,看起来就像一个正常的前馈网络。然后使用随机梯度下降进行训练,在每个时间步之间存在一个约束条件,即权重必须相等。

如果您理解它是如何进行训练的,也就是说,它只是给定长度序列上的受限反向传播,那么您会发现,序列性质并没有阻止这个过程并行化。


这是一个非常有趣的答案。在第一个问题中我没有写出来,但是通过阅读关于BPTT的文章(以及RNN),我已经明白它确实可以做到你所说的。因此,如果我只是将网络“折叠”或将同一网络放置在连续的时间步长旁边,并想象未折叠的网络之间存在边缘(表示递归连接),那么这实际上就像常规的反向传播一样了? - Stephen Johnson
1
是的,它只是反向传播,但是权重被限制在层之间相同。因此,在尝试建模长期依赖关系时,您必须小心梯度爆炸或消失的问题。请注意,您还可以在展开过程中以及长度方面定义一些灵活性,而不仅仅是结构方面。因此,网络结构可能看起来不像前馈那样规则。 - convolutionBoy
我也有困难理解“训练RNN本质上是昂贵的,因为它无法并行化”的观点。至于对展开RNN的理解,我认为它不应该比前馈网络更昂贵。也许只有在RNN序列越长、前馈网络层数越深时才会更昂贵。 - Phúc Lê

3

你可以通过使用足够大的批量大小来获得递归神经网络GPU训练的性能,这样单个单元格的正向/反向传递计算将消耗足够的计算量使GPU保持繁忙。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接