问题 A.I。:我如何在多台机器上训练神经网络?


因此,对于拥有大量数据集的大型网络,它们需要一段时间才能进行训练。如果有一种方法可以跨多台机器共享计算时间,那将是非常棒的。然而,问题在于,当神经网络进行训练时,权重会在每次迭代时不断变化,并且每次迭代或多或少都基于最后一次 - 这使得分布式计算的想法至少成为挑战。

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

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

我欢迎所有的想法。


10038
2018-04-15 15:28


起源

大纪元培训? n集后同步,训练,做另一个时代。就像你用ANN处理多核处理一样。 - dcousens


答案:


引用 http://en.wikipedia.org/wiki/Backpropagation#Multithreaded_Backpropagation

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

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

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


5
2018-04-30 17:39





根据您的ANN模型,您可以在多台机器上运行相同的模型,在多台机器上运行相同的训练和验证数据,但可以设置不同的ANN特性;不同运行的初始值,ANN参数,噪声等。

我曾经做过很多工作,以确保我有效地探索了问题空间并且没有停留在局部最小值等。这是一种利用多台机器而不必重新编码算法的简单方法。您可能想要考虑另一种方法。


2
2018-04-24 20:00





我的假设是你有超过1个训练集,并且你有一个金标准。此外,我假设你有一些方法来存储神经网络的状态(无论它是每个节点的概率权重列表,还是沿着这些线路的某些东西)。

尽可能在群集中使用尽可能多的计算节点,在每个节点上的数据集上启动该程序。保存每个结果,并测试黄金标准。哪个神经网络状态执行最佳设置作为下一轮训练的输入。尽可能多地重复


1
2018-04-15 18:18





如果我理解正确,你是想找出一种在一组机器上训练ANN的方法吗?如你所说,划分网络不是正确的方法,据我所知,对于大多数模型来说,似乎是不可行的。一种可能的方法可能是对训练集进行分区并运行网络的本地副本,然后合并结果。一种直观的方法是通过交叉验证来实现这一目标并获得一些验证。正如您所说,了解网络何时进行了适当的培训是一个问题,但这种可变性通常是神经网络固有的问题,而不是并行工作。

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


1
2018-04-15 18:12





如果进行批量训练,则只有在完成整个数据集后才会更改权重。您可以在单独的机器/核心上计算集合中每个数据点的权重更新向量,并在最后添加它们,然后继续下一个时期。

这里 是关于批量培训的问题的链接。


1
2018-04-24 20:09