我看了classic word2vec sources,如果我正确理解的话,通过多个线程训练神经网络(矩阵syn0,syn1,syn1neg的同步)时,没有数据访问同步。这是培训的正常做法,还是错误?
答案 0 :(得分:1)
也许违反直觉,这很正常。 2011年的“ Hogwild”论文是对此的开创性工作:
其摘要:
随机梯度下降(SGD)是一种流行的算法,可以 在各种机器学习中达到最先进的性能 任务。最近有几位研究人员提出了方案 并行化SGD,但是所有这些都需要破坏性能的内存锁定 和同步。这项工作旨在展示使用新颖的理论 可以实施SGD的分析,算法和实施 没有任何锁定。我们提出了一种称为Hogwild的更新方案,该方案允许处理器访问共享内存(可能) 覆盖彼此的工作。我们证明当关联 优化问题稀疏,这意味着大多数梯度更新仅 修改决策变量的一小部分,然后Hogwild实现 接近最佳收敛速度。我们通过实验证明 Hogwild优于使用按订单锁定的替代方案 数量级。
事实证明,同步访问比线程重写彼此的工作要慢得多,SGD的速度……而且一些结果似乎暗示着,实际上,额外的“干扰”可能是优化进度的净收益。