卷积神经网络训练过程中的SGD的并行化设计_第1页
卷积神经网络训练过程中的SGD的并行化设计_第2页
卷积神经网络训练过程中的SGD的并行化设计_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

卷积神经网络训练过程中的SGD的并行化设计前段时间一直在关注CNN的实现,查看了caffe的代码以及convnet2的代码。目前对单机多卡的内容比较感兴趣,因此特别关注convnet2关于multi-GPU的支持。其中cuda-convnet2的项目地址发布在:GoogleCode:cuda-convnet2关于multi-GPU的一篇比较重要的论文就是:Oneweirdtrickforparallelizingconvolutionalneuralnetworks本文也将针对这篇文章给出分析。

1、简介介绍一种卷积神经网络训练过程中的SGD的并行化方法。两个变种模型并行:不同的workers训练模型的不同patrs,比较适合神经元活动比较丰富的计算。数据并行:不同的workers训练不同的数据案例,比较适合weight矩阵比较多的计算。2.观察现代卷积神经网络主要由两种层构成,他们具有不一样的属性和性能:

1)卷积层,占据了90%~95%的计算量,5%的参数,但是对结果具有很大的表达能力。

2)全连接层,占据了5%~10%的计算量,95%的参数,但是对于结果具有相对较小的表达的能力。综上:卷积层计算量大,所需参数系数W少,全连接层计算量小,所需参数系数W多。因此对于卷积层适合使用数据并行,对于全连接层适合使用模型并行。3.推荐的算法前向传播1)Kworkers中的每一个worker都提供不同的128个examples的databatch,也就是每一个worker的数据都是不一样的。

2)每一个worker都在其databatch上计算卷积层。每一个worker的卷积层是按照顺序执行的。

3)全连接层的计算,分为以下三种方式:

(a)每一个worker将其最后阶段的卷积层activities传递给其他的worker。这些workers将这128K个examples配置成一个大的batch,然后在这个batch上计算全连接层。

(b)第一个worker将其最后阶段的卷积层activities传递给其他workers,这些workers计算128个examples配置成的batch并且开始反向传递。(与这一次计算并行的同时,第二个worker将卷积层的activities传递到所有的workers中,即实现了activities传递和计算之间的流水线)。

(c)全部的workers传递128/K个卷积层的activities到其他的workers,计算方式同(b)。对于上述(a~c)三种不同的全连接层实现方式,进行如下的分析:(a)当128Kimages配置到每一个worker的时候,所有有用的work必须要暂停。另外大的batches消耗大量的显存,这对于GPU显存有限制的设备是不希望发生的。另一方面,大的batches有利于GPU性能的发挥。(b)所有的workers轮流将他们的activities传播到所有的workers上面。这里轮流执行得到的最重要的结果是可以将大部分传播通信时间隐藏(因为他可以在上一次计算的时候,与计算一起并行处理,确切是K-1次通信时间可以隐藏)。这样做的意义非常的重大,可以实现一部分流水,使得通信时间隐藏,达到了很好的并行效果。(c)与(b)的方案类似。他的一个优势就是通信与计算的比例是常数K,对于(a)和(b),与K成比例。这是因为(a)和(b)方案经常会受到每一个worker的输出带宽的限制,方案(c)可以利用所有的workers来完成这一任务,对于大的K会有非常大的优势。反向传播1)workers按照通常的方式在全连接层计算梯度。

2)按照前向传播中不同的实现方案,这里会有对应的三种方案:

(a)每一个worker都为整个128Kexamples的batch计算了activities的梯度。所以每一个worker必须将每一个example的梯度传递给前向传播生成这个example的worker上面。这之后,卷积层的反向传播按照常规方式获取。

(b)每一个worker已经为128examples的batch计算了activities的梯度,然后将这些梯度值传递给每一个与这个batch相关的workers上。(在传播的同时,可以进行下一个batch的计算)。在经过K次前向和反向的传播,所有的梯度值都将被传播到卷积层。

(c)与(b)类似。每一个worker计算了128examplesbatch的梯度,这128-examplebatch来自于每一个worker的128/K-examples,所以为了正确的分配每一个梯度,需要安装相反的操作来进行。Weight权值矩阵同步一旦反向传播完成之后,workers就可以更新weight矩阵了。在卷积层,workers也必须同步weight矩阵。最简单的方式可以按如下进行:

1)每一个worker指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论