如何为神经网络处理添加并发性?

How can I add concurrency to neural network processing?

据我了解,神经网络的基础是有多个输入、权重和输出。可以有隐藏层增加整个事情的复杂性。

如果我有 100 个输入、5 个隐藏层和一个输出(是或否),大概会有很多连接。大约 100^5 的某个位置。通过梯度下降进行反向传播似乎需要很长时间。

如何以并行(并发)的方式设置反向传播以利用多核处理器(或多个处理器)。

这是一个与语言无关的问题,因为我只是想了解结构。

如果你有 5 个隐藏层(假设每个层有 100 个节点),你有 5 * 100^2 个权重(假设偏置节点包含在 100 个节点中),而不是 100^5(因为有 100^2 两个连续层之间的权重)。

如果您使用梯度下降,则必须计算每个训练样本对梯度的贡献,因此跨核心分布梯度的自然方式是将训练样本分布在核心上并对贡献求和到最后的渐变。

通过反向传播,您可以使用批量反向传播(在更新权重之前从多个训练样本中累积权重变化,例如参见 [​​=13=] )。

我认为第一个选项对缓存更友好(更新只需在每个步骤中在处理器之间合并一次)。