首页 > 解决方案 > 多线程训练神经网络时没有数据访问同步正常吗?

问题描述

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

标签: machine-learningneural-networknlpword2vec

解决方案


也许违反直觉,这很正常。这方面的开创性工作是 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 ......有些结果甚至似乎暗示在实践中,额外的“干扰”可能是优化进程的净收益。


推荐阅读