并行的随机梯度下降算法

批量梯度下降算法的并行化比较好理解,就是将m个样本点均分到c台机器上,每台机器都计算m/c个样本点对于权重系数向量w的梯度,然后汇总所有机器的结果得到所有样本(m)对于w向量的梯度。

但对于随机梯度下降(SGD)该如何并行?(并行批量梯度下降算法可以直接将样本均分后分别计算来并行,SGD每次只需计算一个样本没法分,怎么并行?)
网上有一个关于随机梯度下降的并行算法(据说来源于2010的NIPS论文),如下:
image

我对这个并行SGD算法还不太理解,似乎在每一轮(第3步 ~ 第4步)这个并行SGD算法在每台机器上都进行了T次权值(w)的更新/迭代后(这里相当于T次SGD?),然后再对所有机器得到的权值向量取平均;看w收敛与否进入下一轮。。。这个算法好像和一般的随机梯度下降算法的计算过程不太一样??这里是否可以近似看做每一轮都进行了对w的T*c次SGD迭代?

这里给你推荐这3篇SGD的 research paper。整体上,虽然SGD是串行算法,但是有一些并行优化的实现,比如一些asynchronous实现,或者 "memory sharing without locking parameters"的实现方法:paper1, paper2, paper3.