通过 TensorFlow 使用 GPU 加速时训练递归神经网络
Training recurrent neural network when using GPU acceleration by TensorFlow
我对并行计算(包括一些 CUDA)、前馈神经网络和递归神经网络(以及它们如何使用 BPTT)有基本的了解。
例如使用 TensorFlow 时,您可以在网络的训练阶段应用 GPU 加速。但是递归神经网络本质上是顺序的,具有时间步长,其中当前时间步长取决于前一个时间步长,下一个时间步长取决于当前时间步长等。
GPU加速是这样的,怎么会起作用呢?是否所有可以并行计算的东西都以这种方式计算,而时间步长相关部分是序列化的?
获得递归神经网络 GPU 训练性能的方法是使用足够大的批大小,计算单个单元格的 forward/backward 遍会消耗足够的计算量以使 GPU 忙碌。
RNN 使用时间反向传播进行训练。循环网络结构展开为有限长度的有向无环图,看起来就像普通的前馈网络一样。然后它使用随机梯度下降进行训练,其中在每个时间步之间有一个限制,即权重必须相等。
如果您理解它是这样训练的,因为它只是对给定长度的序列进行约束反向传播,您就会发现没有任何关于阻止此过程并行化的顺序性质。
我对并行计算(包括一些 CUDA)、前馈神经网络和递归神经网络(以及它们如何使用 BPTT)有基本的了解。
例如使用 TensorFlow 时,您可以在网络的训练阶段应用 GPU 加速。但是递归神经网络本质上是顺序的,具有时间步长,其中当前时间步长取决于前一个时间步长,下一个时间步长取决于当前时间步长等。
GPU加速是这样的,怎么会起作用呢?是否所有可以并行计算的东西都以这种方式计算,而时间步长相关部分是序列化的?
获得递归神经网络 GPU 训练性能的方法是使用足够大的批大小,计算单个单元格的 forward/backward 遍会消耗足够的计算量以使 GPU 忙碌。
RNN 使用时间反向传播进行训练。循环网络结构展开为有限长度的有向无环图,看起来就像普通的前馈网络一样。然后它使用随机梯度下降进行训练,其中在每个时间步之间有一个限制,即权重必须相等。
如果您理解它是这样训练的,因为它只是对给定长度的序列进行约束反向传播,您就会发现没有任何关于阻止此过程并行化的顺序性质。