宋卓然 王儒 茹栋宇 彭正皓 蒋力作者

上海交大:基于近似随机Dropout的LSTM训练加速

在这篇文章中,作者利用 Dropout 方法在神经网络训练过程中产生大量的稀疏性进行神经网络的训练加速。该论文已经被 Design Automation and Test in Europe Conference 2019 接收。

论文:Approximate Random Dropout for DNN training acceleration in GPGPU

论文链接:https://arxiv.org/abs/1805.08939 

1. 简介

目前,有大量关于深度神经网络压缩的方法,利用神经网络的稀疏性通过如剪枝正则化等方式使网络中的神经突触权值为零。

剪枝(Pruning)[1] 为例,那些零权值经过编码后存在片上存储器中,由于零的位置很随机,需要在神经网络加速器中加入特殊的解码器来跳过那些涉及零操作数的运算。因此剪枝类方法仅使用 ASIC/FPGA 等平台;而且由于编码器解码器设计过于复杂,很少有加速器采用。

一些结构化稀疏性 [2] 的方法通过删除 CNN 中过滤器和通道来获得加速,比上述方法更加容易实现。然而,至今为止,很少有方法能利用神经网络的稀疏性来加速深度神经网络的训练过程。即使在分布式训练场景下,通过梯度压缩等方式可以减少通信带宽,但单 GPU 卡上的训练过程仍然难以有效加速。其主要原因是神经网络的训练过程涉及对权重的更新,不存在大规模的稀疏性。

本文利用了 Dropout 方法在神经网络训练过程中产生大量的稀疏性进行神经网络的训练加速。

Dropout 技术在网络训练中被用来防止过拟合。它会在每轮的训练过程中随机地临时删除部分神经元(30%-70%)及其相关连接。理论上来说,我们理应跳过(省去)Dropout 中被临时删除的神经元和神经突触的相关计算,从而加速训练过程。

然而,所有的训练框架(如 Caffe,Tensorflow,Pytortch 等)不约而同地忽视了这一点,保留了 Dropout 带来的冗余计算,仅仅在训练结果中掩盖(Mask)了被删除的神经元的结果。其主要原因是 Dropout 带来的冗余计算(删除的神经元和突触)的位置完全随机,GPU 这种单指令多线程架构(Single Instruction Multiple Thread)难以进行如此细粒度的控制。

因此,本文提出一种方法,在训练过程中在线产生有规律的结构化的 Dropout pattern,使 GPU 在其控制粒度上可以灵活地跳过 Dropout 带来的冗余计算。进一步,我们提出了一种 Dropout Pattern 的在线生成(搜索)算法,来补偿 Dropout 过程中随机性的损失。

我们在 MLP 及 LSTM 的训练任务中测试了我们的方法,在仅有细微精确度下降的情况下,取得了很高的加速比。具体而言,在 Dropout Rate 为 0.3 至 0.7 的情况下,MLP 训练过程加速了 30% 至 120%,LSTM 训练过程加速了 20% 至 60%。

2. Dropout 原理

目前应用最广泛的 Dropout 技术主要分为两种:Hinton et al. [3] 提出的单元 Dropout 和 Wan et al. [4] 提出的权值 Dropout

单元 Dropout 会在每轮训练过程中随机删除神经元,因此它能降低单元之间的相互依赖关系,从而防止过拟合。权值 Dropout 在每一次更新中都会随机删除权值矩阵中的权值。

对于全连接层,假设输入向量为 I、权值矩阵为 W、输出向量为 Y、Mask 掩码 M 服从伯努利分布,那么可以定义上述两种方法分别为:

  • 单元 Dropout

  • 权值 Dropout

以单元 Dropout 为例,在每轮训练中每个神经元以一定概率被忽略,其实现方式为在矩阵上逐元素地与一个服从 Bernoulli 分布的 0-1 掩码矩阵相乘(如图 1(a)所示)。

如果想真正地跳过 Dropout 引入的冗余运算,就需要额外的 if-else 条件判断细粒度控制 GPU。然而,由于 GPU 的 SIMT(单指令多线程)特性,GPU 中的一些处理单元会处于空闲,GPU 的运算资源无法得到充分利用。

如图 1(b)所示,一条指令将同时控制 32 个线程的数据流,里面可能有判断为真的线程,也有判断为假的线程。一旦 GPU 沿着判断为真的指令流执行,那么所有的线程都会执行乘加运算。那些判断为假的线程的运算结果会被掩盖(masked)而不提交;GPU 会重新执行判断为假的指令流,那么所有线程会执行跳过计算。那些判断为真的线程结果被掩盖。两次执行结果最终通过 Mask 合并,提交给存储器。

图 1(a)单元 Dropout 的实现过程;(b)直接避免单元 Dropout 带来的冗余计算时,GPU 出现 divergence 问题

这种现象在 SIMT 架构中被称为 Divergence,会带来额外性能的损失。正因为 SIMT 架构处理分支时的低效率,在主流的深度学习框架中都不对冗余计算进行跳过运算的处理。

3. 方法

本文定义了 Dropout Pattern 的概念。Dropout Pattern 为人为设计的有规律的和结构化的 Mask。若在计算时让 GPU 提前知晓哪些神经元或连接将会被 Drop,在实际计算过程中,我们通过告知 GPU 已经决定好的 Dropout Patten,让其不读取和计算被 Drop 的有关数据。以此来跳过冗余计算而不引起 Divergence。

下面我们先在 3.1 和 3.2 节介绍两类 Dropout Pattern。结构稀疏性必然导致 Dropout 的随机性受损,为此我们在 3.3 节介绍了一种产生关于 Dropout Pattern 的概率分布的算法,以此来保证随机性。在 3.4 节,我们证明了我们提出的近似随机 Dropout 与传统的随机 Dropout 在统计学意义上是等价的。

3.1 基于行的 Dropout Pattern——Row-based Dropout (RBD)

RDB 是近似传统的 Dropout 的一种 Pattern。它有规律的 drop 掉某些神经元,并以行为单位对权值矩阵进行有规律地删除,从而减小参与运算的矩阵大小。

我们定义两个结构参数 dp 和offset 来有规律地进行 Dropout

dp 表示每隔 dp 行保留一行权值(每隔 dp 个神经元保留一个,其余的 drop 掉)。offset 表示当选定了 dp 后,从第 offset 行开始,按照每隔 dp 行保留一行的规律,执行删除权值的操作。

如图 2 所示,dp=3,offset=1,所以该矩阵从第一行开始每隔三行保留一行。在 DRAM 中保存了完整的权值矩阵,片上共享存储(shared memory)可以通过指定取数的规律将未被删除的行被取入,之后运算单元(PE)对取入的数据进行运算,达到加速的目的。从 GPU 的角度,基于行的 dropout pattern 有利于 GPU 索引数据,便于加速优化。值得注意的是,dp 和 offset 在每轮训练时都会变化,详见 3.3 节。

图 2 基于行的 dropout pattern

3.2 基于块的 dropout pattern——Tile-based Dropout (TBD)

TBD 以块为单位对权值矩阵进行删除,对应的神经元间的连接被忽略掉。类似 RBD,我们仍然定义两个结构参数 dp 和 offset。如图 3 所示,dp=4,offset=1,该矩阵从第一个块开始每隔三个块保留一个块。基于块的 dropout pattern 保证了数据的规律性,有助于对 GPU 进行优化加速。

图 3 基于块的 dropout pattern

3.3 基于 SGD 的 Dropout Pattern 查找算法

首先,我们定义了 Global Dropout Rate,它在本文中指的是在一个训练迭代中有多少比例的神经元被 drop 了。其与在随机 Dropout 中指代每个神经元被 drop 的伯努利分布的概率有一些不同,但是我们证明了在我们的方法中 Global Dropout Rate 等价于每个神经元Dropout Rate。

其次,我们定义了一个向量,其中第 i 个元素为结构参数 dp=i 的 Dropout Pattern 中,被 drop 的神经元的比例,即。因为在 Dropout Pattern 中每隔 dp 个神经元(或权重矩阵行向量/权重矩阵的块)保留一个,因此向量 p_u 的第 i 个元素为 (i-1) / i。

为了弥补引入 Dropout Pattern 后对 Dropout 随机性的损失,我们希望每次训练迭代中采用不同的结构参数(dp 和 offset)来产生更多的随机性,并尽可能地使每个神经元/突触被 drop 的概率等于原本随机 Dropout 时的概率。

为此,本文采用 SGD 梯度下降进行局部搜索来获取关于结构参数(dp)的概率密度函数。是一个向量,第 i 个元素表示 dp=i 的 Dropout Pattern 被选中的概率。

因此,为了使得 Global Dropout Rate 逼近随机 dropout 的 Dropout Rate:p,我们设置的 SGD 算法的一个 loss 函数为。式中 p 为算法的传入参数,表示我们希望的 Global Dropout Rate 是多少。

其次,为了使结构参数组合尽可能多元化,SGD 算法的另一个优化目标为,即概率分布的负信息熵

为了同时实现上述两个优化目标,我们定义 SGD 的最终损失函数。其中λ为平衡因子。

3.4 统计学意义上的等价性

为了证明近似随机 Dropout 与传统的随机 Dropout 是从统计学的角度上等价的,我们给出了如下证明。

下式是使用近似随机 dropout 方案时,任意神经元被 Drop 的概率(即传统意义上的 Dropout Rate)。给定一个 Dropout Pattern,一个神经元被选中的概率为该 Dropout Pattern 被选中的概率与该神经元在该 Dropout Pattern 下被 Drop 的概率的乘积。根据全概率公式,对于所有的 Dropout Pattern 求和,得到每个神经元被 Drop 的概率:

另一方面,从全体上看被 Drop 的神经元所占的比例(即 Global Dropout Rate)为每个 Dropout Pattern(由结构参数 dp 决定)被选中的概率与该 Dropout Pattern 下被 Drop 的神经元的比例的乘积。由于 Dropout Pattern 分布概率的搜索算法会令,那么有 Global Dropout Rate:

可以看出,Global Dropout Rate 与单个神经元Dropout Rate 相等,且均等于我们 Dropout Pattern 概率分布生成算法的输入参数 p。因此,我们说我们的 Dropout 机制在整个训练过程中,在统计学意义上和随机 Dropout 机制是等价的。

4. 实验

我们将此方法运用在一个四层 MLP 网络的训练中,使用 MNIST 数据集测试该方法的性能。表 1 为实验结果,随着网络尺寸的增大,加速比逐渐提高。与传统方法相比,最高的加速比可达到 2.2X 左右。所有的准确率损失都保持在 0.5% 之内。

表 1 不同网络的准确率及加速比

我们还将此方法运用在 LSTM 的训练中,使用 Penn Treebank 数据集训练语言模型。图 4 为使用三层 LSTM+MLP 的实验结果。在 dropout rate 为 0.7 的情况下,RBD 下的 test perplexity 只增加了 0.04,训练速度加速了 1.6 倍,极大地降低了训练所消耗的时间。

图 4 基于 PTB 数据集,LSTM 网络的准确率及加速比

5. 结语

我们提出了近似随机 Dropout 以替代传统的随机 Dropout。通过减小 DNN 训练中实际参与运算的参数与输入矩阵的尺寸,减少了 GPU 的运算量和数据搬移,从而达到加速 DNN 训练过程的目的。同时我们提出了基于 SGD 的 Dropout Pattern 搜索算法,使每个神经元的 dropout rate 近似的等于预设值,从而保证了准确率收敛性。

Reference

  1. Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding[J]. arXiv preprint arXiv:1510.00149, 2015.

  2. Wen W, Wu C, Wang Y, et al. Learning structured sparsity in deep neural networks[C]. Advances in Neural Information Processing Systems. 2016: 2074-2082.

  3. N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskever, and R. Salakhut- dinov,「Dropout: a simple way to prevent neural networks from overfit- ting,」Journal of Machine Learning Research, vol. 15, no. 1, pp. 1929– 1958, 2014. 

  4. L. Wan, M. D. Zeiler, S. Zhang, Y. Lecun, and R. Fergus,「Regulariza- tion of neural networks using dropconnect,」in International Conference on Machine Learning, pp. 1058–1066, 2013. 

理论LSTMDropout上海交通大学
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

局部搜索技术

在计算机科学中,局部搜索是解决最优化问题的一种元启发式算法。局部搜索从一个初始解出发,然后搜索解的邻域,如有更优的解则移动至该解并继续执行搜索,否则返回当前解。局部搜索的优点是简单、灵活及易于实现,缺点是容易陷入局部最优且解的质量与初始解和邻域的结构密切相关。常见的改进方法有模拟退火、禁忌搜索等。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

Dropout技术

神经网络训练中防止过拟合的一种技术

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

概率分布技术

概率分布(probability distribution)或简称分布,是概率论的一个概念。广义地,它指称随机变量的概率性质--当我们说概率空间中的两个随机变量具有同样的分布(或同分布)时,我们是无法用概率来区别它们的。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

信息熵技术

在信息论中,熵是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。这里,“消息”代表来自分布或数据流中的事件、样本或特征。熵的单位通常为比特,但也用Sh、nat、Hart计量,取决于定义用到对数的底。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
暂无评论
暂无评论~