模型压缩减少了训练好的神经网络中冗余的部分。模型压缩对于像BERT这类复杂模型来说特别有用,因为BERT,特别是BERT-Large需要消耗大量GPU显存,且根本不适用于内存受限的智能手机。当然,提高内存和推理速度也可以大规模节省成本。
在这篇文章中,整理列一些压缩BERT的一些论文,分享给大家。
Bert压缩常用方法
裁剪-训练后移除网络中不必要的部分。这包括weight裁剪、attention head裁剪、layer裁剪等。一些方法还在训练过程中通过正则化,以增加可靠性(layer dropout)。
权值矩阵分解-通过将参数矩阵分解成两个较小矩阵的乘积来逼近原始参数矩阵。这给矩阵施加了低秩约束。权值因子分解既可以应用于输入embedding(这节省了大量磁盘内存),也可以应用于前馈/self-attention层的参数(为了提高速度)。
知识抽取——又名“Student Teacher”。根据预训练/下游数据从头开始训练一个小得多的Transformer。正常情况下,这可能会失败,但是由于未知的原因,利用全尺寸模型中的soft labels可以改进优化。一些方法还使用其他模型架构(LSTM)抽取BERT,这些模型具有更快的推理速度。其他方法则采用更深的teacher,不仅着眼于输出,还着眼于权值矩阵和隐藏的激活。
权值共享-模型中的一些权值与模型中的其他参数共享相同的值。例如,ALBERT对BERT中的每一层self-attention使用相同的权值矩阵。
量化-截断浮点数,使其仅使用几个比特(这会导致舍入误差)。量化值也可以在训练期间或之后学习。
训练前与训练后—一些方法仅通过某些下游任务来压缩BERT。其他方法则以任务无关的方式压缩BERT。