「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道( 三 )


「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

如下图 , 在实践中 , 作者发现20 - 40%的注意力头可以修剪 , 且对模型准确性的影响可以忽略不计 。
「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

基于门控的模型修剪
在J.S. McCarley , Rishav Chakravarti和Avirup Sil合著的《Structured Pruning of a BERT-based Question Answering Model》一书中 , 坐着探索了一种更通用的模型剪枝方法 。 不仅关注注意力头 , 还对每一层的输入以及每一BERT层的前馈层的激活值进行了门控 。
他们探索了一些距离度量机制 , 从而有选择的对网络进行修剪 , 这包括Michel等人提出的重要措施 。 但最终确定了一个L0正则化项(添加到损失函数中) , 并且该项可以在超参调优时进行设置(作为超参数之一) , 来提高模型的稀疏性 。 为了使这个L0正则化项可微 , 他们使用了一个类似于在变分自动编码器中使用的重参数化技巧 。
「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

在他们的实验中他们发现通过正则化项进行稀疏惩罚 , 并通过参数调优得到的结果优于“Are 16 Heads Really Better than 1”使用的基于重要性的估计方法 , 并且他们发现可以另外删除近50%的前馈激活值 , 且在基准任务上对最终性能影响微乎其微 。
「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

为了获得更多提升 , 作者还使用了知识蒸馏技术 。
「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

知识蒸馏
1、发展历史
知识蒸馏首先由Geoffrey Hinton, Oriol Vinyals, 和 Jeff Dean 在2015年的工作"Distilling the Knowledge in a Neural Network"中提出 。 知识蒸馏主要通过损失修正的方法 , 将教师模型中包含的知识迁移到学生模型中 。
首先 , 假设我们可以访问大量未标记的样本 。 如果我们相信教师模型的预测结果是足够准确的 , 但是教师模型在实际应用中部署使用太麻烦或计算成本太昂贵 , 我们可以使用教师模型来预测未标记样本池中的目标类 , 并将这些目标作为监督样本用于学生模型的训练 。 如果不是生成与最大可能性类相对应的硬目标 , 而是生成所有可能类的概率分布 , 那么学生模型将获得更多的信息丰富的监督样本 。
直观来讲 , 学生模型的一些预测错误比其他错误更加合理 , 如下图 , 将哈士奇误认为勺子是荒谬的 , 但是将哈士奇误认为雪橇犬则是合理的 。 即设置的损失函数应该反映错误的严重程度 。 通过惩罚教师模型预测结果和学生模型预测之间的差异(即鼓励二者预测结果相同) , 学生网络可以从教师网络给出的预测中学习更多有意义的信息 。 在语音识别任务中 , 教师网络的大部分网络性能可以通过仅约3%的训练数据来重现 。
「GPU」降低预测过程计算成本,这些NLP模型压缩方法要知道
本文插图

有证据表明高参数量可能对样本的有效学习至关重要 , 而且 , 就相同时间而言 , 以一个固定的复杂度训练大型模型可能比训练一个等价的紧凑模型效果更好 。 因此有效地把教师模型学到的知识传递给被压缩的学生模型是很有前途的 。
2、相似模型的知识迁移
在上面讨论文章"Structured Pruning of a BERT-based Question Answering Model"中 , 通过知识蒸馏将未修剪的教师模型中包含的知识传递给修剪过的学生模型 。 在自然问题数据集上 , 教师模型在长答案和短答案问题上的F1分数分别为70.3和58.8 。 随着大约50%的注意力头和前馈激活值的削减 , F1分说分别下降到67.8和55.5 , 即大约有2.5的下降 。 但如果用蒸馏损失来代替超参调优过程中的交叉熵损失 , 那么性能将恢复1.5到2个点 , 达到69.3和58.4 。


推荐阅读