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

最佳答案

也许违反直觉,这很正常。 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的速度更慢……而且一些结果似乎暗示着,在实践中,额外的“干扰”可能是优化进度的净收益。

08-25 03:26