基金项目:国家自然科学基金(61432013,61732005,61876035); 中央高校基本科研业务费专项(N161604007); 辽宁省高等学校创新人才支持计划(LR20170606)
通信作者:xiaotong@mail.neu.edu.cn
(Natural Language Processing Laboratory,School of Computer Science and Engineering,Northeastern University,Shenyang 110819,China)
DOI: 10.6043/j.issn.0438-0479.201811032
在自然语言处理中,由于神经网络的结构需要人工设计,容易导致复杂的神经网络结构中存在大量冗余.为了减少冗余,人们常采用剪枝等模型压缩方法,但是这类方法通过一些与训练过程无关的指标直接对模型进行裁剪时往往造成性能损失.因此探索了一种神经网络中神经元连接的自动学习方法,通过在训练中对神经元连接进行动态生长和删除的方法,可以更好地对网络连接进行动态操作,从而得到更紧凑、高效的网络结构.使用该方法在神经语言模型上进行自动生长和消去,在保证网络性能不变的前提下,网络规模可缩小49%.
In the field of natural language processing,the structure of the neural network requires manual design,which leads to a large amount of redundancy in the complex neural network structure.For the purpose of reducing the redundant model parameters,researchers often adopt model compression methods such as pruning.However,these methods directly compress the model by taking some indicators that are not related to the training process,resulting in the performance loss.This paper explores an automatic learning method of neural connection in neural network.This method can dynamically grow and delete the neuron connection during training,which can better operate the network connection dynamically,thus achieving more compact and efficient network structures.Using this method,we perform automatic growth and elimination on the neural language model,and the network scale can be further reduced by 49% while maintaining the original network performance.
基于神经网络的模型是目前自然语言处理中广泛使用的框架,与传统神经网络一样,这类模型的最基本单元是神经元,神经元之间连接组成层,层和层之间连接构成网络.神经网络结构有很多种,大部分是根据先验知识进行人工设计的网络结构(如前馈神经网络和循环神经网络),进而通过训练网络参数来优化整个网络.这些网络结构在很多任务中都取得了很好的效果,如语言模型[1]、机器翻译[2]、语音识别[3]、图像分类[4]等.这得益于其规模庞大的多层神经元结构,层与层之间采用全连接,模型参数量大,模型性能优越.但其网络结构也存在大量冗余[5],而且人工设计的网络结构不容易捕捉神经元之间的关系,未考虑模型训练过程中神经元连接的动态变化过程,网络结构的表示并不高效.一般来说,增加网络结构的复杂度可以有效提升模型本身的表达能力,从而提升神经网络在各种任务中的性能.但许多研究人员也提出,实际上过于复杂的网络结构并不能对模型性能产生实质上的提升,反而会出现训练过程缓慢、计算存储资源消耗大等情况.
为了得到更加紧凑、有效的神经网络,研究人员提出了剪枝等模型压缩方法[6],基本思想是裁剪掉一些不合理、低权重的连接.通过剪枝模型结构,将全连接裁剪为较稀疏结构,可以得到紧凑的网络结构.最初Thodberg等[7]提出了使用剪枝的方法对网络中部分非重要的连接进行删减的策略,其核心思想在于通过网络连接重要性判别、剪枝、重训练3个步骤的结合,在对网络参数进行训练的同时对其中的冗余连接进行合理剔除,在不损伤性能的前提下缩小网络结构.之后Han等[8]、Nabhan等[9]、Kadetotad等[10]又从剪枝模式角度对该方法进行了改进,在原有的剪枝策略基础上融合了哈夫曼编码以及量化的模型压缩策略,最终在AlexNet网络结构上达到了35倍的压缩效果.然而,这类方法与网络的训练无关,不是通过学习得到的,而是通过一些外部指标直接对模型进行裁剪.由于其剪枝方法的操作对象为一个经过训练的网络结构,需要对其中连接的合理性进行探索,所以Mézard等[11]从模型生长的角度使用更小的结构对问题进行建模、求解,其采用一种增量式的方法改进结构,从小模型开始,通过不断尝试逐渐向其中增加能使模型性能提升的新的节点和层结构,最终获得更加紧凑的网络结构.近些年研究人员发现,模型生长和剪枝方式的结合相较于单一使用其中任意一种方法对于网络结构的学习都更有助益.2017年,Dai等[12]提出将生长和剪枝的方式进行结合,同时利用网络训练过程中的梯度信息对其进行指导,使得其所获得的模型参数量更小,并在图像识别任务中相对基线系统取得了更优秀的成绩.
本研究将生长剪枝的结构学习模式应用到自然语言处理任务中来,针对语言建模任务对该方法的有效性以及实现策略进行探索.并在前馈神经语言模型任务中分析了不同的生长剪枝策略对网络结构压缩效果的影响.
神经语言模型最早由Bengio等[1]系统化提出并进行了深入研究,其整体结构和普通的前馈神经网络类似,由输入层、隐藏层和输出层组成,层和层之间存在连接,每一层将本层接收到的向量映射到另一维空间上作为该层的输出.在神经语言模型中,输入层将离散表示的词转化成连续空间上的词向量,不同词之间的向量距离能够反映词之间的相似性; 隐藏层将输入层传递来的词向量进行更深层次的表述; 输出层结合隐藏层传递来的信息对可能出现在下一个位置的词进行预测,输出当前状态下词表中每个词的预测概率.本研究采用在神经网络的训练过程中比较常用的随机梯度下降(stochastic gradient descent)方法,通过反向传播计算得到损失函数L对参数W的导数L/W,之后再根据式(1)对参数W进行更新,
Wk+1=Wk-η(L/Wk),(1)
其中η是学习率.
本研究参考Dai等[12]的工作,采用的生长裁剪模型主要包括从起始的种子结构,依次通过生长阶段和裁剪阶段达到最终的网络结构,转换过程如图1所示.
从种子结构开始,该结构由全连接的网络随机削减而成.第一阶段是生长阶段,这个过程通过构建新的连接使网络结构达到所期待的性能(逼近全连接的性能); 第二阶段是裁剪阶段,在不影响性能或影响较小的情况下,从网络中删减掉部分权重绝对值较小的连接,使网络结构更加紧凑,同时降低模型的存储压力和计算消耗.通过上述两个过程最终得到规模较小的网络结构,达到加速以及压缩模型的目的.整个过程的算法流程如下所示:
A - desired accuracy,Net - neural network
a=test(Net),train(Net)
If a<A then
Repeat
Grow connections
Net <- train(Net)
a=test(Net)
Until a>A
End if
Repeat
Prune connections
a=test(Net)
Until a<A
Return Net
种子结构并非全连接网络,因此本研究采用mask矩阵来对原本的连接状况进行遮盖,如图2所示.mask为0-1矩阵,其中值为1代表两个神经元之间存在连接(激活状态),值为0代表其间不存在连接(未激活状态).具体来说,第l层的种子结构的权重矩阵Wl为该层中的mask矩阵Ml和全连接权重Wl'点乘后的结果,如式(2)所示:
Wl=MlWl'.(2)
图2 神经元连接生长(a)和mask矩阵交换(b)示意图
Fig.2 Schematic diagram of neuronal junction growth(a)and mask matrix transformation(b)
在连接的生长过程中,优先选择能够使模型损失值更快下降的、未激活的连接进行激活,即先对当前状态下的全部连接进行梯度计算(包括被mask矩阵遮盖的连接,其值视为0); 然后根据梯度值的大小对连接重要性进行排序,对于其中重要且未激活的连接执行激活操作,使得网络能够在稀疏网络结构的基础上不断增加新的连接,促进整个模型快速收敛.该过程mask矩阵具体的计算公式如下:
Mlt+1[i][j]=
{Mlt[i][j], |(L)/(Wlt[i][j])|TopK(|(L)/(Wlt)|),
1, |(L)/(Wlt[i][j])|∈TopK(|(L)/(Wlt)|).(3)
其中,TopK表示从一个矩阵中找出最大的前K个元素,Mlt+1[i][j]代表第l层mask矩阵在t+1时刻下第i行、第j列元素的值,Wlt为第l层中权重矩阵W在t时刻下的值.根据式(2)和(3),该模型即可根据权重矩阵每一时刻的梯度在未连接的节点之间构建新的连接,该过程即为连接的生长过程.
虽然使用了连接生长的方式以尽可能减少不必要连接的产生,但由于初始化种子结构以及贪心策略下的连接增长均有可能给最终的网络结构带来部分非重要的连接,所以若要获得更紧凑、精简的网络结构仍需要使用传统的剪枝方法对网络结构中非重要的连接进行删减.本研究通过对mask矩阵进行操作,将权重矩阵中绝对值较小的位置使用mask矩阵进行置0遮盖,以达到剪枝的目的.其中mask矩阵的计算公式如下:
Mlt+1[i][j]={Mlt[i][j], Wlt[i][j](0,θ),
0, Wlt[i][j]∈(0,θ).
其中,θ代表权重的阈值,对权重小于这个阈值但不等于0的连接进行裁剪.根据裁剪和生长操作执行的次序可将裁剪方法分为先生长后裁剪和边生长边裁剪两种.
先生长后裁剪方法的核心思想在于将模型结构的生长和裁剪两个过程完全切分成两个阶段来操作.当网络在种子结构的基础上,通过若干次的迭代训练生长成一个性能稳定的网络结构后,裁剪阶段将根据权重矩阵中数值的大小对连接的重要性进行排序分析,最终对非重要的连接进行删减,通过这种裁剪和重训练相结合的方式达到模型性能和参数规模相互平衡的目的.这种裁剪方式的优势在于实现方式简单,但由于裁剪操作的执行对象已经是一个相对稳定的网络结构,即使使用重训练的方式对裁剪后的结构进行补救也容易在模型性能上造成比较严重的损伤.
针对先生长后裁剪方法中存在的问题,将裁剪的操作次序提前.在原本的连接生长过程中,根据权重矩阵中梯度的大小在稀疏的网络结构中构建新的连接,而边生长边裁剪的方式在这个过程中加入连接删减的操作,即根据当前状态下网络中连接的重要程度进行筛选,剔除掉非重要的网络连接.这样一方面使得在训练过程中网络的规模相对较小,网络结构更易训练; 另一方面使得削减后的网络有更加充分的时间进行重新训练,更易达到较好的网络效果.
本研究相关实验使用自主研发的开源工具包,在NVIDIA TITAN X(Pascal)设备上对前馈神经网络语言模型的网络结构进行学习.根据神经网络语言模型训练过程中的梯度指导网络结构中的连接生长,同时采用裁剪的方式对种子结构以及生长过程中产生的冗余连接进行剔除; 再将得到结果与面向全连接网络的普通裁剪操作进行模型性能和规模的对比分析.
本研究实验数据采用Brown数据集(1 161 169词,57 341句),从中抽取4万句作为训练集,统计16 400词作为词表.在模型参数方面,前馈神经网络的输入层节点数为100,每批次处理数据大小为128,前馈神经网络训练采用5-gram语言模型.实验中,仅对隐藏层和输出层的权重进行连接生长,语言模型的评价采用困惑度作为标准(困惑度越低,模型性能越强).主要对隐藏层和输出层中的连接数进行统计,全连接状态下隐藏层的总连接数为256×400,输出层的总连接数为256×16 400.
主实验中,隐藏层节点数分别设置为256和128; 首先在神经网络语言模型的隐藏层和输出层权重中随机初始化20%的连接,作为种子结构; 每隔10个step新建一次连接,每次选梯度绝对值前200的连接,将它们中未连接在一起的神经元连接在一起; 同时,训练参数设置相同的全连接神经网络语言模型,并将隐藏层和输出层的权重按比例进行剪枝,与后面的实验结果进行对比.
从图3的实验结果可以看出,根据梯度生长连接得到的网络结构在增长到全连接模型规模的50%时就可以达到与其相近的性能.然后对连接生长得到的最终结构与全连接的结构进行对比; 同时对两种结构进行裁剪操作,裁剪掉权重绝对值较低的连接.由于普通的裁剪操作从全连接的结构开始对参数进行削减,而连接生长的结构在开始削减的时候连接数仅为全连接的50%左右,结果发现:全连接的结构在连接数减少40%左右时会出现性能下降的情况; 而通过生长连接得到的结构相比于全连接的网络结构,在保留相同的连接比例时性能要更加稳定,从某种程度说明了通过该方法得到的网络结构更加紧凑.这是由于生长中新建立的连接都是对网络拟合训练目标做出贡献的连接.在全连接的网络中,训练实际上是通过调整网络
图3 3种裁剪方式隐藏层裁剪比例的变化对困惑度的影响
Fig.3 The effect of the pruning ratio of hidden layer of the three cropping methods on the confusion
中的参数让网络预测的结果与目标更加接近.但不是所有的连接都能在训练当中得到有效利用,从而对预测目标做出贡献,即存在网络冗余.这些冗余绝大部分是一些数值非常小的参数.如果在训练过程中只选择梯度下降大的两个神经元进行连接,这就使网络中得到激活的均为有效连接,可大幅度提升模型的紧凑程度.
与先生长后裁剪的方法相比,边生长边裁剪得到的网络性能和规模的效果更好.从表1可以看出,无论是隐藏层还是输出层,在生长过程中增加剪枝的过程会使网络中的连接数变得更少.这是由于边生长边裁剪中剪枝操作的时序提前,使剪枝后的网络结构能够得到更充分的训练,可以在不影响性能的情况下进一步缩小网络的最终结构.当隐藏层节点数为128时,采用边生长边裁剪方式得到的网络规模可缩小49%.
从图3和表1可以发现,当隐藏节点数为256时,仅依靠连接生长就可以达到全连接时网络的效果; 而当隐藏节点数为128时,采用连接生长的方法就无法达到全连接的效果.这是因为隐藏节点数为128时,网络结构相比隐藏层节点数为256的网络要更加紧凑,自身存在的冗余更少.以下实验的隐藏层节点数均采用128.
如表2所示:当先训练5轮和10轮再增加连接时,网络的性能没有一开始就增加连接的效果好.这是因为网络中的参数通过一段时间的训练后将达到一个平衡状态,当加入新的连接时,新的连接很难打破之前的平衡状态,导致新增加的连接不能有效参与到训练中.
在实验中,增加连接的时间间隔和每次增加的连接数也很重要.将增加连接的时间间隔分别设为10,100,1 000 step.为了保证增加的总连接次数相同,设置的时间间隔越大,每次增加的连接数越多.实验结果如表3所示:这3种时间间隔生长的网络性能接近,但是网络最终连接数不同,间隔越短,增加的连接数越少,网络结构就越紧凑.这是因为每次增加的连接数过多时可能会增加网络中的冗余连接.
设置种子结构的初始化连接比例分别为10%,30%,50%.如表4所示,初始化连接比例为10%的种子结构的性能最差,这是因为此时网络太过稀疏,网络中大量的神经元节点被孤立,梯度无法有效传回,导致网络性能偏低.从图4可以看出,当网络中的连接数减少时,初始化10%的网络表现最为稳定,即初
图4 不同初始化种子结构的裁剪比例对困惑度的影响
Fig.4 Impact of pruning ratio of different initialization seed structures on the confusion
始化10%的网络结构最紧凑.这是因为随着初始化连接比例的增大,网络中的冗余随之增多.
由于在训练的过程中加入了连接生长和裁剪的操作,会导致训练时间变长.当隐藏层节点数为128,其他参数与主实验相同时,全连接、先生长后裁剪、边生长边裁剪的实验收敛时间分别为2 335,3 247和4 891 s.时间的增长主要来源于对所有网络连接上的梯度进行排序所需的时间.本研究使用Top K算法对网络连接上的梯度进行排序,如果每次选取前n个梯度最大的连接,那么时间复杂度为O(nlog n).虽然耗时增加,但是整个网络结构的空间表示更加高效,每个连接对模型都是有贡献的.而且可以通过控制连接生长的频率和每次生长的连接数来控制运算时间,还可以通过优化算法来减少时间开销.
为了进一步验证该方法的效果,在1Billionword数据集上选取出100万句进行实验,结果如表5所示.可以看出由于训练的数据增加,需要模型具有较强的抽取信息的能力,所以网络的连接数也相应地需要增加.
本研究主要针对如何让神经网络语言模型能够自动生成更有效、更紧凑的网络结构进行实验,利用训练过程中的梯度指导神经网络中的连接生长,并与传统的剪枝方法进行对比.
实验发现在训练过程中,利用梯度指导一个稀疏的种子结构生长可以得到更紧凑、有效的神经网络结构.在保留相同数量的连接数时,网络性能比全连接网络结构更加稳定.采用先生长后裁剪和边生长边裁剪的裁剪方法均能获得更精简的网络结构.以上实验证明一个更好的网络结构是可以通过网络自身学习得到的,下一步将继续基于神经网络语言模型结构学习方法,尝试在连接生长的基础上对神经元节点生长方法进行探究,进一步提升神经网络语言模型的性能.