我正在寻找创造性的方法来加快我的神经网络的训练时间,也可能减少消失的梯度。我正在考虑将网络拆分到不同的节点上,使用每个节点上的分类器作为backprop“boosters”,然后使用每个节点之间的稀疏连接将节点堆叠在彼此之上(尽可能多的我没有以太网网络饱和使它毫无意义)。如果我这样做,我不确定是否必须在节点之间保持某种状态并同步训练同一个例子(可能会破坏加速过程的目的),或者我可以简单地训练相同的数据但是异步。我想我可以,重量空间仍然可以更新并传播到节点之间的稀疏连接,即使它们正在训练不同的例子,但不确定。有人可以证实这是可能的或解释原因吗?
答案 0 :(得分:2)
可以按照你的建议行事,但对一个人来说,这是一项艰巨的工作。我所知道的最新例子是" DistBelief"框架由Google的一个大型研究/工程团队开发 - 请参阅http://static.googleusercontent.com/media/research.google.com/en//archive/large_deep_networks_nips2012.pdf上的2012年NIPS论文。
简而言之,DistBelief方法对神经网络中的单元进行分区,以便集群中的每个工作机器负责整个架构的某些不相交的子集。理想情况下,选择分区以最小化所需的跨机器通信量(即通过网络图的最小切割)。
工作人员在本地为其网络部分执行计算,然后根据需要将更新发送给跨越机器边界的链接。
参数更新由单独的"参数服务器处理。"工作人员将梯度计算发送到参数服务器,并定期从服务器接收更新的参数值。
整个设置以异步方式运行并且运行良好。由于计算的异步性质,给定计算的参数值可能是“陈旧的”,#34;但他们通常不会太离谱。而且加速非常好。