大规模深度学习

深度学习的基本思想基于联结主义:尽管机器学习模型中单个生物性的神经元或者说是单个特征不是智能的,但是大量的神经元或者特征作用在一起往往能够表现出智能。神经网络的精度以及处理的任务的复杂度的提升,其中一个关键因素就是网络规模的巨大提升,但如今的人工神经网络的规模也仅仅和昆虫的神经系统差不多。

由于规模的大小对于神经网络来说至关重要,因此深度学习需要高性能的硬件设施和软件实现。

快速的 CPU 实现

传统的神经网络是用单台机器的 CPU 来训练的。而现在,我们通常使用 GPU 或者许多机器的 CPU 连接在一起进行计算。在这之前,研究者们想了很多办法来利用 CPU 训练深度学习模型。例如,选择定点运算或者浮点运算、优化数据结构避免高速缓存缺失、使用向量指令等。

GPU 实现

许多现代神经网络的实现基于图形处理器(Graphics Processing Unit, GPU)。图形处理器最初是为图形应用而开发的专用硬件组件,视频游戏系统的消费市场刺激了 GPU 的快速发展。

视频游戏的渲染要求许多操作能够快速并行地执行。环境和角色模型通过一系列顶点的 3D 坐标确定。为了将大量的 3D 坐标转化为 2D 显示器上的坐标,显卡必须并行地对许多顶点执行矩阵乘法与除法。之后,显卡必须并行地在每个像素上执行诸多计算,来确定每个像素点的颜色。在这两种情况下,计算都是非常简单的,并且不涉及CPU 通常遇到的复杂的分支运算。

与实时图形算法相比,神经网络算法所需的性能特性是相同的。神经网络算法通常涉及大量参数、激活值、梯度值的缓冲区,其中每个值在每一次训练迭代中都要被完全更新。这些缓冲太大,会超出传的桌面计算机的高速缓存,所以内存带宽通常会成为主要瓶颈。相比 CPU,GPU 一个显著的优势是其极高的内存带宽。神经网络的训练算法通常并不涉及大量的分支运算与复杂的控制指令,所以更适合在 GPU 硬件上训练。由于神经网络能够被分为多个单独的‘‘神经元’’,并且独立于同一层内其他神经元进行处理,所以神经网络可以从GPU 的并行特性中受益匪浅。

在通用 GPU 上写代码依然是一个难题。基于 CPU 的良好代码通常被设计为尽可能从高速缓存中读取更多的信息。然而在 GPU 中,大多数可写内存位置并不会被高速缓存,所以计算某个值两次往往会比计算一次然后从内存中读取更快。

大规模的分布式实现

在许多情况下,单个机器的计算资源是有限的,因此,我们希望把训练或者推断的任务分摊到多个机器上进行。在深度学习任务中,分布式是容易实现的。

我们既可以实现数据并行(输入的每个样本都可以在单独的机器上运行),也可以实现模型并行(多个机器共同运行一个数据点,每个机器负责模型的一个部分)。

在训练过程中,数据并行某种程度上更加困难。因为对于随机梯度下降来说,它是一个串行的过程,第 t t t 步的梯度是第 t − 1 t-1 t1 步所得参数的函数。这个问题可以使用异步随机梯度下降来解决。在此方法中,几个处理器的核共用存有参数的内存。每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下更新这些参数。由于一些核把其它的核所更新的参数覆盖了,这种方法减少了每一步梯度下降所获得的平均提升。但因为更新步数的速率增加,总体上还是加快了学习过程。

模型压缩

在许多商业应用的机器学习模型中,一个时间和内存开销较小的推断算法比一个时间和内存开销较小的训练算法要更为重要。对于那些不需要个性化设计的应用来说,我们只需要一次性的训练模型,然后它就可以被成千上万的用户使用。在许多情况下,相比开发者,终端用户的可用资源往往更有限。例如,开发者们可以使用巨大的计算机集群训练一个语音识别的网络,然后将其部署到移动手机上。

减少推断所需开销的一个关键策略是模型压缩。模型压缩的基本思想是用一个更小的模型取代原始耗时的模型,从而使得用来存储与评估所需的内存与运行时间更少。

巨大的模型能够学习到某个函数 f ( x ) f(\boldsymbol{x}) f(x),但选用的参数数量超过了任务所需的参数数量。只是因为训练样本数目是有限的,所以模型的规模才变得必要。只要我们拟合了这个函数 f ( x ) f(\boldsymbol{x}) f(x),我们就可以通过将 f f f 作用于随机采样点 x x x 来生成有无穷多训练样本的训练集。然后,我们使用这些样本训练一个新的更小的模型,使其能够在这些点上拟合 f ( x ) f(\boldsymbol{x}) f(x)。为了更加充分地利用这个新的小模型的容量,最好从类似于真实测试数据(之后将提供给模型)的分布中采样 x x x。这个过程可以通过损坏训练样本或者从原始训练数据训练的生成模型中采样完成。


References

I. J. Goodfellow, Y. Bengio, and A. Courville, Deep Learning. Cambridge, MA, USA: MIT Press, 2016, http://www.deeplearningbook.org.

11-29 10:55