通过多个线程训练神经网络时,没有数据访问同步是正常的吗?

时间:2019-04-15 11:16:54

标签: machine-learning neural-network nlp word2vec

我看了classic word2vec sources,如果我正确理解的话,通过多个线程训练神经网络(矩阵syn0,syn1,syn1neg的同步)时,没有数据访问同步。这是培训的正常做法,还是错误?

1 个答案:

答案 0 :(得分:1)

也许违反直觉,这很正常。 2011年的“ Hogwild”论文是对此的开创性工作:

https://papers.nips.cc/paper/4390-hogwild-a-lock-free-approach-to-parallelizing-stochastic-gradient-descent

其摘要:

  

随机梯度下降(SGD)是一种流行的算法,可以   在各种机器学习中达到最先进的性能   任务。最近有几位研究人员提出了方案   并行化SGD,但是所有这些都需要破坏性能的内存锁定   和同步。这项工作旨在展示使用新颖的理论   可以实施SGD的分析,算法和实施   没有任何锁定。我们提出了一种称为Hogwild的更新方案,该方案允许处理器访问共享内存(可能)   覆盖彼此的工作。我们证明当关联   优化问题稀疏,这意味着大多数梯度更新仅   修改决策变量的一小部分,然后Hogwild实现   接近最佳收敛速度。我们通过实验证明   Hogwild优于使用按订单锁定的替代方案   数量级。

事实证明,同步访问比线程重写彼此的工作要慢得多,SGD的速度……而且一些结果似乎暗示着,实际上,额外的“干扰”可能是优化进度的净收益。