微软霍强:实现并行训练的线性增长,突破数据处理极限

如何在增加CPU 或 GPU 数量的同时,保证训练的线性加速以及性能?这是并行训练中存在的一个矛盾问题。微软亚洲研究院首席研究员霍强博士的研究团队就较好地解决了这个经典的两难问题,让大规模并行训练在增加GPU的条件下几乎实现了线性加速并保证了模型性能,这一突破对大数据机器学习的效率提升意义重大。机器之心对霍强博士进行了专访。



微软亚洲研究院首席研究员霍强博士


近年来,深度学习的爆发在很大程度上取决于大数据和与之相匹配的计算能力,深度学习的特性决定了它需要更多的数据进行学习,从而得出模型来完成特定任务,比如说用庞大的语料库去训练语音模型;伴随出现的 CPU 和 GPU 集群也保障了计算能力,使得算法和数据能够完美结合起来,从而带来了深度学习的大发展,特别是语音和图像识别精度的显著提升。

 

但是,计算能力和训练速度的提升并非计算资源的简单堆砌,这里有一个「鱼与熊掌不可兼得」的矛盾——如何在增加CPU 或 GPU 数量的同时,保证训练的线性加速以及性能。如果把深度学习的实施比作盖房子的话,那房子是需要建立的模型,工人则可以看做是 CPU 和 GPU,建筑材料就是数据。为保证房子的质量,我们需要保证一定的建筑材料,同时需要组织工人用最高效的方式去完成建造过程。但由于工人之间存在沟通成本和资源浪费,因此无法实现工作成果随工人数量的增多呈线性增长。这对应到机器学习领域就是如何在扩大并行训练(parallel training)规模的情况下,在保证模型性能的同时实现训练速度线性增长。而最近,微软亚洲研究院首席研究员霍强博士的研究团队在 ICASSP 2016 大会上提交的论文《Scalable Training of Deep Learning Machines by Incremental Block Training with Intra-Block Parallel Optimization and Blockwise Model-Update Filtering》就较好地解决了这个经典的两难问题,让大规模并行训练在增加GPU的条件下几乎实现了线性加速并保证了模型性能,这一突破对大数据机器学习的效率提升意义重大。 

 

这篇论文中的实验结果显示,该技术对语音识别中神经网络模型的训练提升十分显著,在保证模型性能的前提下,当使用16 块 GPU 卡时,训练速度提高了 15 倍,而当使用 64 块卡时,训练速度提高到了 56 倍。在对手写识别所采用的双向长短期记忆递归神经网络的 CTC (Connectionist Temporal Classification)训练过程中,该并行训练算法的有效性也得到了证明。霍强及团队也与微软产品部门合作验证了该方案的有效性,霍强表示,正在将该并行训练算法用于卷积神经网络。

 

在霍强的团队提出该方法之前,业内普遍有三种方法来解决并行计算问题:

 

最知名的方法是 ASGD(异步随机梯度下降,Asynchronous stochastic gradient descent),通过大量 GPU 做异步计算,这是 Google 从 2012 年起就在采用的方法。但这个方法的问题在于,增加 GPU 时需要的通信代价很高,增加了系统设计优化和维护成本,同时基于同样数据的两次训练结果也会不同。

 

第二种方法是 ASGD 加模型平均,在对大数据做并行处理时,将数据分配给每块GPU去处理,之后把计算结果取一个平均值生成新的模型,再给GPU分配数据进行处理,以此类推。这种方法很简单,但坏处在于卡数上去时模型性能会下降。

   

第三种方法是1-bit SGD,该方法由微软一位研究员提出,通过梯度量化和压缩技术减少通信代价,实现了 Geoffrey Hinton 30 年前提出的单机训练经典方法 mini-batch SGD 的并行化。它的主要缺点是, 在保证训练模型性能的情况下,卡数增加时无法做到训练线性加速。

 

霍强博士的团队此次提出的解决方案是在模型平均的基础上增加了一个模型更新滤波步骤,将每一轮模型更新的信息收集起来,结合历史信息和当前信息进行学习,这样一来能够保证每一轮的更新更为平滑,不会出现巨大波动,最终生成模型的性能也大大提升。霍强博士认为,和模型平均法相比,这种全新的解决方案有两个优势,第一是将历史信息考虑进来,模型平均方法每一轮迭代只利用当前获得的信息更新模型,历史更新信息被忽略了。「就像我们在学习新东西时,大部分过去的经验教训你都忘掉了,从某一个新的起点开始,有时候是好事情,但更多时候是坏事情,少了吸取经验教训这个环节嘛。」霍强说到。第二个优势是数据块层级的训练,即每个 GPU 处理的是子任务,把所有的子任务数据合在一起就是一个数据块,子任务加起来是更大的任务。整个训练过程称为 Incremental Block Training,每次只关心一个数据块,依次处理。「这样设计的最大好处就是对处理的数据量没有限制,」霍强解释到,「因为不管数据有多少,每次都是看一个数据块,处理完一个数据块以后,看下一个数据块。因此,有多少计算能力,就能处理多大数据。」

 

这次研究突破看似是灵光一现,但实际上是水到渠成的结果,和霍强及研究小组的长期研究积淀密不可分,而更重要的则是他们把过去几种方法研究到极致的理念,「我们觉得每一个优秀的研究人员都能做到这一点,因为他要做创造发明,一定要寻根究底,否则你怎么能想出新方法来,要不然你想出来的方法还不如一个旧方法。」霍强说到。比如说,他发现 Geoffrey Hinton 30 年前的方法有一个细节在很长一段时间内被很多人忽略了,它不是标准的 SGD,而是带有冲量(momentum)的 SGD,即在做 mini-batch SGD 的时候,也会考虑历史信息,基于上一个模型的变动情况去更新新模型。这个冲量让训练过程变得平滑,从而带来了更好的学习效果,其实这是保证这个方法有长久生命力的重要原因之一。

 

正是这种研究理念促使霍强及团队对历史上的各类方法都有透彻了解,弄清楚了各种方法的优缺点,从而提出了完全创新的方法。由于这种新方案能够在保证模型性能的同时实现并行训练的线性加速,而且对处理数据量没有上限,因此具有很强的通用性。除了在微软内部的使用之外,更重要的影响还在于让更多的研究者可以使用。「我觉得这个方法最大的影响就是降低门槛,让中小规模的研究组,或者没有系统专门知识的人也可以利用大数据去做大规模的深度学习,去利用现在越来越便宜的GPU卡。」霍强表示。

 

并行训练效率的提升可以继续提高语音识别和图像识别的精度,或者处理更加复杂的应用场景。比如说远场及噪音环境下的语音识别还是一个没有完全解决的问题,需要开发新模型,而利用大数据的深度学习在其中可以发挥重要作用,这也凸显了并行训练的重要性。


「现在所谓的人工智能,很重要的一个环节,也是进步最快的部分,就是如何用大量有用的数据学到一些比较有价值的信息去解决实际问题。」霍强说到。而实现大规模并行训练的线性加速为我们带来了更好的利用数据的工具。

入门专访微软产业并行计算
返回顶部