(山东大学工程训练中心 山东 济南 250061)
神经网络是由许多神经元构成的,单个神经元与其他神经元互联,形成网状结构,各网状结构相互盘错形成规模巨大的多层次人工模型,长久以来,相关人士一直聚焦于提高神经网络的训练性能。在深度神经网络上,算法的改进和硬件的性能的提高都可以对训练性能起到很好的加速作用。设计更出色的模型进行学习,来降低训练过程中的难度,这是算法优化的主要目的和方法。硬件的优化是利用GPU或其他硬件硬件来进行训练模型的计算。借助硬件的良好性能,以期达到越来越好的加速效果。
深度神经网络模型在网络结构中有非常多隐含单元,这些隐含单元又可以称作隐含层,涉及范围之广层次之深,因此被称为深度神经网络。
神经系统接收某个向量作为输入信号,并且经过一系列的中间加工过程。类似于人类的神经系统,隐含层就像神经纤维束,无数神经纤维缠绕盘旋纠结在一起形成纤维束,但是每个神经元又是独立存在,不与其它神经元共享连接,每个神经元与前面层的隐含层的每个神经元相连接。最终输出层输出所识别对象的类别结果,神经网络模型中的卷积加工过程分两步走,一个是子采样,另一个就是子卷积。在卷积层进行特征提取时,卷积层中的神经元相同层的部分神经元间的链接共享权值,神经元间是非全连接的。得益于有监督的学习,卷积具有两种特性,这种良好的性能不仅使学习过程中神经元间共享权值的数量大幅减少,而且也简化了网络模型训练的复杂过程,降低了数据工作的压力。
卷积神经网络主要由输入层、卷积层、池化层和全连接层构成。卷积神经网络模型的工作过程一般是这样的:首先提取特征,每一次数据训练结束后,每层隐含层会向后层神经元传播,后层神经元接收传播的信息后,提取出局部特征以及每个特征与相邻特征之间的相邻位置关系。其次特征映射,而独立的神经元具有相同的权值,从而在整个过程中,不对物体在图像中的位置产生影响,多个映射结构组成一个模型中的计算层。第二步,进行子采样。任何一个卷积层都包含特征提取、特征映射和子采样三个操作,在网络结构完成卷积计算之后会进行二次采样的处理,这样做是为了减少训练参数的规模。在经过多层卷积之后,最终构成一个完整的网络模型结构。
如果单个GPU的存储内存可以大到存储下所有数据时,就可以在深度神经网络的所有层次中对所有数据进行并行化处理。此时,每个GPU只需要对一个批次的输入数据进行处理,所有GPU同时处理所有数据,数据处理的效率也就得到大幅提升。在神经网络的正向反向传播的过程中,每个层的梯度和参数都会被复制并传递到每个GPU。所有的GPU在本地训练权重及数据指导下重新计算梯度,完成后,新的训练权重会替代之前的,通过交换学习,GPU的本地存储训练权重也就被更新过一次了。
将全部梯度划分K部分,每个GPU负责一个部分,计算完成时,第K个GPU对其他所有GPU上的提督计算进行累计整合,然后发送累计梯度记录给所有GPU。这是第一种实现数据并行的方法。第二种方法是在数据进行反向的传播过程中生成梯度,每一个GPU就进行异步处理,将梯度值传递给对应GPU,在需要对应权重时进行同步处理,这样最大程度的加大计算与通信间的重叠。训练模型的大小直接决定着GPU间通信的开销,而这与GPU的数目一般是没有直接关系的。如果模型存储在GPU上后,如果仍然存在空闲内存,此时空闲内存可用来缓存训练数据,缩短训练时间。
当前深度神经网络模型逐渐增大,单个GPU存储不下,因此数据并行也仅仅适合小模型。此时,模型并行训练机制就派上用场了。在卷积层中使用仍然使用数据并行,在全连接层中,将大模型划分成多个部分分别指派到多个GPU中去,这样就可以实现同时计算。卷积层和全连接层具有不同特性,仅有小部分数据时,所有参数可以同时存储在一个GPU上,每一批需要处理的图像分配给全部GPU,这种方法很有效果。但是,当全连接层的参数较多时,则需要所有的GPU均等的划分这些参数。最后所有的GPU协助彼此工作,以在必要时同步全链路层计算中的参数。
在当前使用的框架中,研发了许多深度学习专用的计算机型号。英伟达公司近年来目光放在深度学习计算机的研发上,软硬件是深度学习的基础,一是硬件开发,更高性能的GPU及其他计算机硬件可以推动深度学习训练的加速。二是设计更加高效的并行处理框架。显然,不同的深度学习算法在不同架构上会体现出不同的性能。GPU在处理庞大而繁重的计算时,单个GPU计算性能是八核CPU的十倍,性能远优于CPU。前面提到还有一种办法是采用多个GPU进行并行协同计算,例如在双GPU上模拟模型并行训练架构,GPU相互交流学习是通过连接线进行的。SGD算法是目前常用的训练算法,该算法有很大的计算密度,在GPU上运行SGD算法可以很好的结合两者计算性能优势。通常当GPU的内存不能存储一个大型模型的数据时,将大型模型扩展到多个GPU上进行训练是完全可行的。结合SGD算法的特点,在模型训练过程中,尽可能多的连接高带宽和低延迟,从而最大限度的减少显卡相互间通信的开销。使用多GPU与使用单GPU的差异在于,当GPU数目为一时,数据必须全部存储在一个GPU上,将数据分批次处理,如今模型愈来愈大,大多数情况下不能存在一个GPU上,这时候就体现出了多GPU的优势,众多GPU协同工作,将大模型择分成小模型,每个GPU的计算压力减小,且同时工作,最后,GPU线程调度程序整合出一个完整模型,这样不仅效率高,而且硬件损耗小。
GPU上的深度神经网络模型并行系统中最主要的问题就是计算和训练的模型越来越大无法将全部数据存储在同一块GPU上,这是深度神经网络模型并行过程中的主要问题,极大的降低了训练效率,它在现实生活中的具体应用就会受到限制,所以此后的研究人员应将部分目光汇聚于此。