千亿规模参数源1.0预训练大模型的知识蒸馏技术( 三 )


关于中英文翻译场景,我们收集了超过 145GB 的英文书籍和百科、新闻等国际官方文档,以及他们对应的中文翻译,期望在后续可以做翻译的模型 。还有一个是问答场景 。我们共收集了超过 3.9G 的公开知识,包括医疗、百科、金融等等多个领域 。期望在后续可以去做问答的模型来匹配这样的一个知识问答场景 。
无论是在做什么样的模型的时候,算法里面叫百算数为先,无论构建什么样的算法,我们都要从应用场景出手,在我们的模型开发实践过程当中都是以场景和场景所需要的数据着手,首先进行数据准备,之后才是相应的模型算法上面的一个开发工作 。
在传统意义上或者是在过去我们的一些算法实践当中,模型压缩一般是压缩到 60%、50%,甚至相对大一点的时候把模型压缩到原有模型的 40%,我们想要把千亿参数模型进行10 倍压缩,然后我们去探索在这个压缩过程当中所使用的方法,从相应的实践当中去积累经验,进一步把百亿参数模型再往亿级参数模型去压缩 。
想要做模型压缩,第一个是需要确定参数的初始化方法:一种是采用 PKD 的 skip 方式,采用跳层的方式去保留其中需要的层数,使得模型宽度保持不变的情况下让深度降低,从而达到减少参数量的目的,这种方式会使模型的抽象表达的能力变弱 。第二种方式是采用 tion,模型的深度不变,而把模型宽度上面进行一个压缩,但模型特征抽取的能力就会变得非常弱,从我们的实践当中也发现采用这样的线性压缩变换都会导致模型在训练过程当中的稳定性变差,模型收敛会呈现一个波动的状态 。第三种方式是基于预训练的方法,根据期望的训练时长和模型推理的延迟等要求,预先设定相应的模型结构,在已有的数据上做预训练,把这个预训练出来的模型当做学生模型,在此基础上再用专业数据集结合千亿参数模型,对这个百亿参数模型进行进一步的知识蒸馏,采用这样的方式降低了模型开发的成本,同时可以很好的保留模型宽度跟深度上的一些结构 。
第二个问题是模型的蒸馏的策略 。蒸馏的时候究竟是以渐进式的知识迁移方式为主还是以辅助式的知识迁移的方式来进行模型蒸馏 。渐进式知识迁移的精度和性能表现是比较好的,但是计算成本很高 。
除了以上,还有一种模型压缩的方式是直接同步的指导里面对应的对应层,在 loss 层面上面做一个加权,采用这样的方式叫AKT 的方式,这两种方式的模型精度表现上面差异不大,但是对于采用 AKT 的方式,在一次训练过程当中可以同步的去更新所有的结构里面所需要的参数,这样它的计算就远比渐进式的方式计算开销要小很多 。所以浪潮信息采用 AKT 的方式来进行模型压缩 。结构里面包含的主要有三个东西:、 还有。如果在跟上面做知识迁移,蒸馏前后的矩阵维度是不匹配的 。因此我们对里面 K、Q、V 三个矩阵做知识蒸馏,可以保证一方面维度不需要去考虑这个问题,另外一方面,在当中,在最上面的内容里其实提到过, 里面的 K、Q、V 矩阵,一方面做了知识的存储,另外一方面,可以最大限度的保留知识跟关系之间的一些信息 。
最终的实验结果,百亿参数的模型在上面与千亿参数模型进行比较,可以看到模型的精度、损失是相对比较小的,是可以接受的 。而计算资源的需求从 8 个 GPU 下降到了 4GPU,推理延迟也从 6 秒一直降至 2 秒,推理性能提升非常显著 。在 webQA 的问答数据集上进行测评,可以看到百亿参数的模型,因为在构建过程当中,经过了知识蒸馏,得到的性能表现甚至优于了原来直接训练出来的千亿参数模型,也是达到了业界领先的程度 。