AI 科技评论按:如今,基于深度学习的 AI 系统日趋产业化,如何有效地在云端和雾端进行落地成为一个核心问题。相对于传统机器学习,深度学习无论是训练还是部署都对计算和通信等提出了很大的挑战。在云端(如 Google Cloud、Amazon AWS、Microsoft Azure、Facebook Big Basin),深度神经网络的训练依赖于分布式系统,其可扩展性受限于通信带宽。 在雾端(Fog Computing,如移动手机的 Face ID、无人机、去中心化自动驾驶系统等),便携设备的计算等资源有限,深度神经网络的高效部署依赖于模型压缩与加速技术,以完成轻量级部署。
近期,在 GAIR 大讲堂上,来自杜克大学四年级博士生温伟同学分享了云雾深度学习一些最新进展。
温伟,杜克大学四年级博士生,导师是 Hai Helen Li 教授和 Yiran Chen 教授。主要研究方向是机器学习、分布式深度学习、模型压缩与加速、神经形态计算芯片等。其研究工作曾在 NIPS、ICCV、ICLR、CVPR、DAC 等发表,是 ASP-DAC 2017 最佳论文获得者,也是 DAC 2015 和 DAC 2016 最佳论文提名者。温伟是 Microsoft Research、HP Labs 和 Facebook Research 的实习生。
分享主题:
云雾深度学习:RNN 隐藏结构稀疏化和超低精度梯度下降法
分享提纲:
1.云端与雾端 AI 部署的挑战。
2.雾端加速 [ICLR 2018]:结构化稀疏递归神经网络,以提高推理速度。
3.云端优化 [NIPS 2017 oral]:三元化随机梯度下降方法,以降低通信带宽。
分享内容:
我想先介绍一下云端和雾端深度学习的一些挑战,然后针对这些挑战介绍我们的解决方案。方案涉及两个比较重要的方面,一是在雾端部署了神经网络之后如何让他进行高效推演, 二是如何在云端和雾端加速训练。
先来说第一个部分即云雾深度学习大背景和相关挑战。大家很熟悉云计算的概念,云计算就是把数据、计算、服务全部放在中心的服务器上,边缘设备通过网络去访问就可以了。雾计算是个比较新的概念,它和云计算的方式是相反的,所有的数据、计算不再依赖于第三方服务器,而是利用本地设备(手机、平板、电脑)进行协同计算。
云端目前落地的产品有谷歌的 TPU 云,微软、亚马逊、脸书等也有自己的云服务。
在雾端的 AI 落地产品有 iphone X 的人脸识别,无人机等。
那么 AI 在云雾端的落地有什么具体的挑战吗?第一是大量服务器协同计算时的通信瓶颈。
第二个挑战是在雾端的小型终端设备上处理数据有实时性要求。如何在计算量很大、计算能力相对较弱的情况下达到实时性的要求也是一个亟待解决的问题。
针对这些挑战,我们研究了如何在雾端部署又小又快还不影响识别性能的网络。 我着重介绍一下我们在结构化的稀疏神经网络方面相关的工作,还有加速训练方面的相关工作。
首先介绍结构化的稀疏神经网络,在此之前先讲解一下什么是稀疏卷积网络。稀疏卷积网络就是利用学习的方法对原网络进行连接剪枝之后得到的网络。稀疏卷积网络可以明显减少「理论上」的计算量。。
但稀疏卷积网络也存在明显的问题。我们在 AlexNet 上做的实验显示这种方法存在低效计算的问题,加速并不明显,有时甚至会变慢。我们分析这问题的出现是因为剪枝后的网络没有结构化,随机的稀疏数据分布导致了计算时的稀疏存储访问,而现有硬件体系结构是针对密集数据高效定制的,这种随机稀疏性打破了对现有计算硬件的友好性。
非结构化稀疏在 CPU 和 RNN 上同样存在类似问题,但结构化稀疏可以解决这个问题。
讲了非结构化的稀疏卷积网络,那么什么是结构化的稀疏神经网络?结构化的稀疏神经网络并不是一个一个的删去原网络的连接,而是一组一组的删除。
由上可见如何对权重进行分组决定了我们可以得到哪种结构化的稀疏卷积网络。
在递归神经网络里面我们也可以进行分组来得到我们想要的结构化的稀疏网络。
再具体方法方面,我们使用 Group Lasso 来得到结构化的稀疏网络。
上图中的 SSL 方法可以一组一组去掉连接,我接下来解释一下为什么能办到。
然后我们再讲一下怎么在 LSTM 中应用它。
我们希望通过 SSL 的方法对蓝色部分进行稀疏化,实际就是让 LSTM 的隐藏结构变小。
最后我们看一下 LSTM 最后稀疏化的结果。
除了在传统的 LSTM 上测试,我们还在 Recurrent Highway Networks 上也进行了实验。
我们的方法听起来很复杂,其实实现起来很简单,这是我们在 TensorFlow 上的代码。
我为这部分做一个小结,我们的方法在很多的数据集、网络、应用上已经证明是可行的。如果是做 AI 硬件相关我建议先找到合适的结构化稀疏,再用 SSL 去学习该结构化稀疏。
推演部分讲完了,接下来讲如何在训练部分提升速度。前面已经提到处理器进行协同计算时会遇到通信瓶颈,我们就讲怎么解除这样的瓶颈,在此之前先介绍下背景—分布式深度学习。
分布式深度学习就是把训练数据分给不同的设备,训练完再汇总同步,但问题是处理器增加后,通信和同步的压力会使处理速度降低。由于在深度神经网络训练中的通信是梯度的通信,我们可以用量化的方法来处理,我们的量化方法叫 TernGrad 。
然后这是 TensorFlow 上 TernGrad 的代码。
我们看一下 TernGrad 的实验效果,首先是 AlexNet。
然后这是在 AlexNet 上的收敛曲线。
再看在 GoogLeNet 上的实验效果,实际上因为所有超参都是 Google 针对浮点 SGD 调好了的,我们直接用,所以有些精度损失,但平均小于 2%。如果我们有时间针对 TernGrad 调参,精度差异会减小。
还有我们加速的表格,总的来说机器越多,带宽越小,全连接层越多则加速越多。
最后总结一下我今天的分享。一是AI系统已经在云端和雾端开始部署,二是我们使用 TernGrad 减少梯度通信,三是提出结构化的稀疏去压缩模型,使其云雾端推演得更快。我们还有更多的工作,大家有兴趣可以直接去我们的网站上看我们相关的工作。网站链接:http://www.pittnuts.com/#Publications