Skip to content

大模型蒸馏篇

整理自:AiGC面试宝典 作者:宁静致远 日期:2024年01月27日


一、知识蒸馏和无监督样本训练?

知识蒸馏(Knowledge Distillation) 是一种模型压缩技术,利用大模型(Teacher)把知识迁移到小模型(Student)上。具体来说,先在一个训练集上训练得到一个性能优异的大模型,然后将其冻结作为 Teacher 模型,再训练一个较小参数的 Student 模型,使其学习 Teacher 的知识。

知识蒸馏的三种方式:

A. 离线蒸馏(Offline Distillation) Student 在训练时,同时使用真实标签的 loss 和 Teacher 模型的输出 loss 作为总 loss,一起优化。

📝通俗解释:就像一个学生(Student)同时听老师(Teacher)讲课和看标准答案学习,老师教的是解题思路,标准答案给的是最终结果,两者结合让学生学得更好。

B. 半监督蒸馏(Semi-supervised Distillation) 向 Teacher 模型输入一些无标签数据得到软标签,然后把数据和标签一起传给 Student 模型训练。

📝通俗解释:就像老师用自己丰富的知识给一些没有答案的题目给出参考答案,然后让学生根据这些参考答案来学习。

C. 自监督蒸馏(Self-supervised Distillation) 不需要预先准备 Teacher 模型,在训练后期几轮时,将前面训练好的模型作为 Teacher 来监督后续训练。

📝通俗解释:就像一个人训练到一定程度后,自己给自己当老师,查漏补缺继续提升。

目前知识蒸馏的常见应用:

对齐 ChatGPT 等大语言模型。

📝通俗解释:就是用已经训练好的强大模型(如GPT-4)来指导一个小模型学习,让小模型也能具备类似的能力,但参数量少很多。


关于无监督样本训练:

  • 如果指传统的无监督学习:主要包含聚类、主成分分析(PCA)等方法
  • 如果指知识蒸馏中的无监督训练:就是离线蒸馏的方式,只使用与 Teacher 模型的 loss 作为损失函数

📝通俗解释:无监督样本训练就是让模型在没有标准答案的情况下自己学习规律,比如把相似的样本自动归为一类(聚类),或者找出数据最主要的特征(PCA)。


二、对知识蒸馏知道多少,有哪些改进用到了?

知识蒸馏是一种通过将复杂模型的知识转移到简单模型来提高简单模型性能的方法。常见改进包括:

  1. 损失函数和温度参数的优化

    • 使用不同的损失函数(如KL散度、交叉熵等)和温度参数来调节软标签的平滑程度,获得更好的蒸馏效果

    📝通俗解释:温度参数就像调节"软硬度",温度高时Teacher的预测更分散(更软),学生可以学到更多类别间的关系;温度低时预测更集中(更硬),学生更关注最可能的结果。

  2. 引入额外信息

    • 将相似性约束添加到模型训练中,提高蒸馏效果
    • 利用中间层的特征进行蒸馏

    📝通俗解释:不仅让学生学习老师的最终答案,还让学生学习老师思考过程中的中间步骤,就像不仅记住解题结果,还理解解题思路。

  3. 与其他技术结合

    • 多任务学习
    • 迁移学习
    • 对抗训练

    📝通俗解释:把蒸馏和别的技术打包使用,就像用多种方法同时学习,比单一方法效果更好。


三、谈一下对模型量化的了解?

模型量化 是一种将浮点型参数转换为定点型参数的技术,用于减少模型的存储和计算复杂度。

常见的模型量化方法:

  1. 权重量化

    • 将权重和激活值转换为整数或低精度小数
  2. 精度降低

    • 使用更小的数据类型:8位整数(INT8)、16位浮点数(FP16)、4位整数(INT4)等
  3. 压缩算法

    • Huffman 编码
    • 可逆压缩算法

📝通俗解释:就像把一本精装书(32位浮点数)变成简装书(8位整数),内容差不多但占用空间小很多,阅读速度也更快。

模型量化的优势与局限:

  • ✅ 减少存储空间和内存占用
  • ✅ 加速模型推理速度
  • ⚠️ 可能对模型精度造成一定影响,需要权衡精度与效率

📝通俗解释:量化就像把高清照片压缩成低分辨率,文件小了但细节可能丢失,需要在"体积"和"质量"之间找平衡。


四、模型压缩和加速的方法有哪些?

1. 参数剪枝(Parameter Pruning)

删除模型中冗余的参数,减少模型大小。只有少部分参数对模型性能贡献较大,其余参数可以删除。

📝通俗解释:就像修剪树枝,去掉不重要的枝叶,树还是活的,但更精简了。

2. 量化(Quantization)

将浮点型参数转换为更小的整数或定点数,减小模型大小和内存占用。

📝通俗解释:把精确的小数四舍五入成整数,虽然不那么精确,但速度快、占内存少。

3. 知识蒸馏(Knowledge Distillation)

利用大模型(Teacher)的预测结果指导小模型(Student)学习,减小复杂度,提高泛化能力和推理速度。

📝通俗解释:就像让一个学霸教一个学渣学习,把学霸的"考试技巧"传授给学渣。

4. 网络剪枝(Network Pruning)

删除模型中冗余的神经元,减小模型大小。与参数剪枝不同,网络剪枝可以删除整个神经元。

📝通俗解释:就像拆除一栋楼里不承重的柱子,房子结构不受影响但更轻了。

5. 低秩分解(Low-Rank Decomposition)

将大的权重矩阵分解为多个小矩阵,减少计算开销。

📝通俗解释:就像把一个大的乘法运算拆成几个小的乘法运算,结果一样但每次算的少。

6. 卷积分解(Convolution Decomposition)

将卷积层分解为多个更小的卷积层或全连接层,降低计算量。

📝通俗解释:就像把一个复杂的机器拆成几个简单的零件分别制造,然后再组装。

7. 层次化剪枝(Layer-wise Pruning)

对模型不同层进行不同程度剪枝,实现更高效的压缩和加速。

📝通俗解释:就像因材施教,有的楼层需要多拆一点,有的少拆一点,达到整体最优。


五、你了解的知识蒸馏模型有哪些?

1. FitNets

使用大型模型作为教师模型,指导小型模型的训练。特点是可以利用教师模型的中间层特征。

📝通俗解释:让学生不仅学习老师的最终答案,还学习老师解题时的中间思考步骤。

2. Hinton 蒸馏

使用大型模型的输出概率分布作为"软标签"来指导小型模型的训练。

📝通俗解释:老师不仅告诉学生哪个是正确答案,还告诉学生其他选项的可能性,让学生理解"为什么选这个"。

3. Born-Again Network(BAN)

使用已训练好的模型初始化新模型,用少量数据重新训练,实现模型自我进化。

📝通俗解释:像让一个学生毕业后继续深造,用更少的时间达到更高的水平。

4. TinyBERT

使用大型 BERT 模型作为教师,指导小型 BERT 模型的训练,专门针对NLP任务优化。

📝通俗解释:把一个庞大的BERT老师"压缩"成一个轻量级的BERT学生,但保留大部分语言理解能力。


整理自知识星球 AiGC面试宝典

基于 MIT 许可发布