引言
- 大数据时代的到来是无可质疑的,但挖掘数据背后的秘密才更具价值。
- 深度学习,受益于大数据的出现和大规模计算能力的提升,它是开启未来的钥匙。
文章简介
- 转载的文章是Keith Adams的一份第八届超大数据库会议(XLDB2015)报告。
- 报告简述了深度学习的所遇到的困难问题与解决方法。
- 转载文章自infoq,作者张天雷,有删改。
正文
前言
近年来,人工智能领域所取得的许多进步都与“深度学习”息息相关。 深度学习的多层非线性结构使其具备强大的特征表达能力和对复杂任务的建模能力。 构建成熟的深度学习模型常常涉及到巨大的训练数据集,大的模型以及超长的计算时间, 因此,深层模型的并行化框架和训练加速方法是深度学习走向实用的重要基石。
随机梯度下降(SGD)
- 深度学习的参数训练过程中,随机梯度下降(SGD)是最常被使用的方法。
- 在这个过程中,通常需要很多的技巧:
- 模型深度的选择
- 神经元个数的设定
- 训练权重的初始化
- 学习率的调整
- Mini-batch的控制等等
- 即便对这些技巧十分精通,实践中也要多次训练,反复摸索尝试。
- 此外,随机梯度下降本质上串行的.
- 深层模型参数多
- 计算量大
- 训练数据的规模更大
- 消耗很多计算资源
- 训练时间会非常长
- 针对深度学习面临的这些挑战,Keith介绍了他们团队在加速深度学习方面所采用几种方法。
GPGPU加速
- GPU(Graphic Process Units)的众核体系包含千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。
- NVIDIA、AMD不断推进GPU大规模并行支持,General-Purposed GPU成为加速并行应用程序的重要手段。
- GPU众核(many-core)体系结构,程序在GPU上相较于单核CPU提升几十倍乃至上千倍。
- 目前GPU已经发展到了较为成熟的阶段。用来训练深度神经网络,可充分发挥其数以千计核心的高效并行计算能力。
- 在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。
- 如果针对适当的深度神经网络进行合理优化,一块GPU卡可相当于数十甚至上百台CPU服务器的计算能力。
- GPU是深度学习模型训练方面的首选解决方案,也是Facebook当前加速深度学习的最重要方式。
数据并行(Data Parallel)
- 数据并行是指将训练数据切分为N份,分配给N个worker对N个分片的数据并行训练。
- 完成数据并行训练之后,模型的梯度是所有分片数据上梯度的平均值,然后使用这个均值对参数进行更新。
- 再将更新的参数返回给N个worker进行下一次的迭代。
- 在训练的过程中,多个训练过程相互独立,每次迭代过程中worker之间的通信等比于参数的数量。
- 数据并行也存在自身的缺点,当训练数据太多时,数据并行不得不减小学习率,以保证训练过程的平稳。
模型并行(Model Parallel)
- 将模型拆分成几个单元,每一层都可以被拆分,由不同的训练单元分别持有,共同协作完成训练。
- 当一个计算单元上的神经元的输入来自另一个训练单元上的神经元的输出时,不同计算单元之间就产生通信开销。
- 拆分单元太多时,神经元输出值的通信量会急剧增加,导致模型的效率大幅下降。
- 多数情况下,模型并行带来的通信开销和同步消耗超过数据并行,因此加速比也不及数据并行。
- 但对于单机内存无法容纳的大模型来说,模型并行提供了一个很好的选择。
- 亦可组合数据并行和模型并行产生混合架构。
基于Torch7的深度学习(Productive Deep Learning with Torch7)
- Torch7是一个为机器学习算法提供广泛支持的科学计算框架。
- 神经网络工具包实现了以下基础模块,可以方便地配置出目标多层神经网络。
- 均方标准差代价函数
- 非线性激活函数
- 梯度下降训练神经网络算法等
- Torch是机器学习和人工智能项目的核心。
- 不仅学术界,连google、Twitter和英特尔等企业也都使用这一架构。
- Facebook开发了一些能够在Torch7上更快速地训练神经网络的模块,加快了基于Torch的深度学习项目的运行速度。
- 允许开发者使用多个GPU进行参数的并行训练。
- 可使卷积神经网络的训练速度提升数十倍以上,而卷积神经网络是很多深度学习系统的核心。
- 另外,Facebook还推出了多款工具,速度常常比Torch默认工具快3至10倍。
参数服务器架构(Parameter Server Architecture)
- CPU集群方案的基本架构包含:
- 用于执行训练任务的Worker
- 用于分布式存储分发模型的参数服务器(Parameter Server)
- 用于协调整体任务的主控程序(Master)
- CPU集群方案适合训练GPU内存难以容纳的大模型,以及稀疏连接神经网络。
- Keith还对Andrew Ng和Jeff Dean提出的参数服务器架构进行了简单介绍。
- 他们在Google用1000台CPU服务器,完成了模型并行和Downpour SGD数据并行的深度神经网络训练。
- Andrew Ng和Jeff Dean的这项成果发表在NIPS2012上。
总结
- 报告中,还提到了Tensor DSM等其他的方式用于加速深度学习。
深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,并展现了强大的学习数据集本质和高度抽象化特征的能力。
但是其面临的最大问题是如何解决其过长的计算时间, 只有强有力的基础设施和定制化的并行计算框架,才能让以往不可想象的训练任务加速完成,为深度学习走向实用奠定坚实的基础。