Artificial intelligence 答:我如何跨多台机器训练神经网络?

Artificial intelligence 答:我如何跨多台机器训练神经网络?,artificial-intelligence,cloud,neural-network,distributed-computing,Artificial Intelligence,Cloud,Neural Network,Distributed Computing,因此,对于具有大型数据集的大型网络,它们需要一段时间来训练。如果有一种方法可以在多台机器上共享计算时间,那就太棒了。然而,问题是,当神经网络进行训练时,每次迭代的权重都在不断变化,每次迭代或多或少都是基于最后一次迭代——这使得分布式计算的想法至少是一个挑战 我认为,对于网络的每一部分,服务器可能会发送1000组数据来训练网络。。。但是您的计算时间与我无法同时在不同的数据集上进行训练的时间大致相同(这就是我想要做的) 但是,即使我可以将网络的训练分成不同的数据集块进行训练,我怎么知道我什么时候完成

因此,对于具有大型数据集的大型网络,它们需要一段时间来训练。如果有一种方法可以在多台机器上共享计算时间,那就太棒了。然而,问题是,当神经网络进行训练时,每次迭代的权重都在不断变化,每次迭代或多或少都是基于最后一次迭代——这使得分布式计算的想法至少是一个挑战

我认为,对于网络的每一部分,服务器可能会发送1000组数据来训练网络。。。但是您的计算时间与我无法同时在不同的数据集上进行训练的时间大致相同(这就是我想要做的)

但是,即使我可以将网络的训练分成不同的数据集块进行训练,我怎么知道我什么时候完成了这组数据?尤其是如果发送到客户机的数据量不足以实现所需的错误


我欢迎所有的想法。

如果我理解正确,你是在试图找出一种在机器集群上训练人工神经网络的方法?正如您所说,对网络进行分区不是正确的方法,据我所知,对大多数模型来说似乎不可行。一种可能的方法是对训练集进行分区,运行网络的本地副本,然后合并结果。一个直观的方法是交叉验证,这样做并在过程中获得一些验证。正如你所说的,知道网络何时进行了适当的训练是一个问题,但变异性是神经网络固有的问题,而不是并行工作


如您所述,在每次训练迭代期间发生的更新取决于权重的当前状态,但如果不混合训练集/验证,则可能是过度拟合。这就是为什么CV很好,因为您的培训集都有机会在多个样本的培训和验证中发挥作用

我的假设是,您有不止一套培训,而且您有一个黄金标准。另外,我假设你有某种方法来存储神经网络的状态(无论是每个节点的概率权重列表,还是沿着这些线的某个东西)


使用集群中尽可能多的计算节点,在每个节点上的数据集上启动程序。保存每个测试的结果,并按金标准进行测试。哪种神经网络状态表现最好,作为下一轮训练的输入。根据您的ANN模型,尽可能多地重复

通过在多台机器上使用相同的训练和验证数据运行相同的模型,但设置不同的ANN属性,您可以在多台机器上利用一些并行性;不同运行的初始值、ANN参数、噪声等


我过去经常这样做,以确保我有效地探索了问题空间,没有陷入局部极小值等。这是一种非常简单的方法,可以利用多台机器,而无需重新编码算法。你可能需要考虑的另一种方法。

如果你进行批量训练,那么在整个数据集中,权重只会改变。您可以在单独的机器/核心上计算集合中每个数据点的权重更新向量,并在末尾将它们相加,然后继续下一个历元

链接到有关批量培训的问题。

引用:

当使用多核计算机时,多线程技术可以大大减少反向传播收敛所需的时间。如果使用批处理,则使反向传播算法以多线程方式运行相对简单

对于每个线程,将训练数据分解为同样大的批。每个线程执行向前和向后传播。每个线程的权重增量和阈值增量相加。在每次迭代结束时,所有线程必须短暂暂停,以便对权重和阈值增量求和并应用于神经网络


这基本上就是这里其他答案所描述的。

Epoch培训?同步n组后,训练,做另一个历元。就像使用ANN处理多核处理一样。