据我了解,神经网络的基础是有几个输入、权重和输出。可能有隐藏层增加了整个事物的复杂性。
如果我有 100 个输入、5 个隐藏层和一个输出(是或否),大概会有很多连接。某处的顺序100^5
。通过梯度下降进行反向传播似乎需要很长时间。
如何以并行(并发)的方式设置反向传播以利用多核处理器(或多个处理器)。
这是一个与语言无关的问题,因为我只是想理解结构。
据我了解,神经网络的基础是有几个输入、权重和输出。可能有隐藏层增加了整个事物的复杂性。
如果我有 100 个输入、5 个隐藏层和一个输出(是或否),大概会有很多连接。某处的顺序100^5
。通过梯度下降进行反向传播似乎需要很长时间。
如何以并行(并发)的方式设置反向传播以利用多核处理器(或多个处理器)。
这是一个与语言无关的问题,因为我只是想理解结构。
如果您有 5 个隐藏层(假设每个隐藏层有 100 个节点),那么您有权5 * 100^2
重(假设偏置节点包含在 100 个节点中),而不是100^5
(因为100^2
两个连续层之间有权重)。
如果您使用梯度下降,则必须计算每个训练样本对梯度的贡献,因此将其分布在核心之间的一种自然方法是将训练样本分布在核心之间并将对梯度的贡献相加结尾。
通过反向传播,您可以使用批量反向传播(在更新权重之前累积来自多个训练样本的权重变化,参见例如https://stackoverflow.com/a/11415434/288875)。
我认为第一个选项对缓存更友好(更新只需在每个步骤的处理器之间合并一次)。