大模型必知基础知识:11、大模型知识蒸馏原理和过程详解
总目录
- 大模型必知基础知识:1、Transformer架构-QKV自注意力机制
- 大模型必知基础知识:2、Transformer架构-大模型是怎么学习到知识的?
- 大模型必知基础知识:3、Transformer架构-词嵌入原理详解
- 大模型必知基础知识:4、Transformer架构-多头注意力机制原理详解
- 大模型必知基础知识:5、Transformer架构-前馈神经网络(FFN)原理详解
- 大模型必知基础知识:6、Transformer架构-提示词工程调优
- 大模型必知基础知识:7、Transformer架构-大模型微调作用和原理详解
- 大模型必知基础知识:8、Transformer架构-如何理解学习率 Learning Rate
- 大模型必知基础知识:9、MOE多专家大模型底层原理详解
- 大模型必知基础知识:10、大语言模型与多模态融合架构原理详解
- 大模型必知基础知识:11、大模型知识蒸馏原理和过程详解
- 大模型必知基础知识:12、大语言模型能力评估体系
- 大模型必知基础知识:13、大语言模型性能评估方法
目录
- 知识蒸馏概述
- 知识蒸馏的两种方式
- 白盒知识蒸馏详解
- 3.1 基本原理
- 3.2 KL散度优化
- 3.3 正向KLD与反向KLD
- 3.4 MiniLLM方法
- 3.5 其他白盒蒸馏方法
- 黑盒知识蒸馏详解
- 4.1 核心思想
- 4.2 TAPIR框架
- 4.3 Distilling Step-by-Step方法
- 总结
知识蒸馏概述
知识蒸馏(Knowledge Distillation, KD)是深度学习领域中一项重要的模型压缩技术,其核心目标是将大型深度学习模型(称为"教师模型")所学习到的知识和能力,有效地迁移到一个参数规模更小、计算效率更高的模型(称为"学生模型")中。这种技术使得学生模型能够在保持较高性能的同时,大幅降低计算资源消耗和推理延迟。
我们可以将知识蒸馏过程类比为现实生活中的"师徒传承"。经验丰富的教师通过长期训练和学习,已经掌握了解决复杂问题的能力。而学生虽然在规模和容量上不如教师,但通过系统地学习教师的经验和知识,可以快速获得接近教师的表现能力。这种方式不仅能够节省学生模型的训练时间,还能让其在资源受限的环境下高效运行。
知识蒸馏技术的优势体现在多个方面。首先,学生模型的参数量显著减少,这意味着在移动设备、边缘计算设备或嵌入式系统等资源受限的场景中,可以部署性能优异的模型。其次,推理速度大幅提升,能够满足实时性要求高的应用场景。最后,通过学习教师模型的软标签(soft labels)和知识分布,学生模型往往能够获得比直接训练更好的泛化能力。
在大语言模型时代,知识蒸馏的重要性愈发凸显。随着GPT、LLaMA等大型语言模型的参数规模达到数百亿甚至万亿级别,如何将这些模型的能力迁移到更小的模型中,成为了学术界和工业界共同关注的焦点。通过知识蒸馏,我们可以构建既保持强大能力又具备实际部署价值的轻量级语言模型。
知识蒸馏的两种方式
根据学生模型对教师模型信息的访问程度,知识蒸馏技术可以分为两种主要方式:白盒知识蒸馏和黑盒知识蒸馏。这两种方式各有特点,适用于不同的应用场景。

白盒知识蒸馏
白盒知识蒸馏是一种深度学习的方式,要求学生模型能够完全访问教师模型的内部结构和参数信息。在这种方式下,学生模型不仅可以学习教师模型的最终输出,还能够深入了解教师模型的中间层特征、注意力权重、参数梯度等内部表示。
白盒蒸馏的主要优势在于学习的全面性和深度。通过访问教师模型的内部信息,学生模型可以更精确地模仿教师模型的学习过程和决策机制。例如,学生模型可以学习教师模型在每一层网络中提取的特征表示,或者学习教师模型的注意力机制如何分配权重。这种深层次的知识迁移往往能够带来更好的蒸馏效果。
然而,白盒蒸馏也存在一定的局限性。首先,它要求对教师模型有完全的访问权限,这在某些商业化的大模型场景下可能难以实现。其次,白盒蒸馏的实现通常较为复杂,需要设计专门的损失函数来对齐学生模型和教师模型在多个层次上的表示。
黑盒知识蒸馏
黑盒知识蒸馏则采用了一种更加灵活的方式。在这种方式下,学生模型无法直接访问教师模型的内部结构和参数,只能通过观察教师模型的输入输出行为来进行学习。具体而言,学生模型通过向教师模型提供输入,观察其输出的概率分布或生成的文本,然后学习模仿这种输入输出映射关系。
尽管学生模型无法了解教师模型的"内部思考过程",但通过大量的输入输出样本,学生模型仍然可以学习到教师模型的行为模式和决策边界。这种方式的最大优势在于其通用性和灵活性。即使教师模型是一个通过API访问的黑盒服务(如GPT-4的API),我们仍然可以通过收集其输出来训练学生模型。
黑盒蒸馏特别适用于以下场景:教师模型是商业化的闭源模型,开发者无法获取其内部参数;教师模型和学生模型的架构差异较大,难以进行中间层对齐;需要从多个不同的教师模型中提取知识,构建一个集成的学生模型。
通过合理选择白盒或黑盒蒸馏方式,我们可以在不同的应用场景下实现高效的知识迁移。在许多实际应用中,研究者也会结合两种方式的优点,设计混合的蒸馏策略,以获得更好的效果。
白盒知识蒸馏详解
基本原理
白盒知识蒸馏的基本原理是通过深入了解教师模型的内部机制,引导学生模型的学习过程。与传统的监督学习不同,知识蒸馏不仅让学生模型学习正确的标签,更重要的是学习教师模型对所有可能输出的概率分布。这种"软标签"(soft labels)包含了更丰富的信息。
在传统的分类任务中,硬标签只告诉模型某个样本属于哪一类,而软标签则提供了该样本属于各个类别的概率分布。例如,在图像分类任务中,教师模型可能认为某张图片有80%的概率是猫,15%的概率是狗,5%的概率是其他动物。这种概率分布揭示了不同类别之间的相似性关系,为学生模型提供了额外的监督信息。
在大语言模型的场景下,白盒蒸馏还可以利用教师模型的中间层表示。例如,TED方法提出在每一层添加任务相关的投影层,使学生模型在每一层都尝试对齐教师模型的特征表示。这种逐层对齐的方式能够帮助学生模型学习到更深层次的语义信息。
KL散度优化
在知识蒸馏的标准方法中,核心目标函数是最小化教师模型和学生模型输出分布之间的差异。常用的度量方式是Kullback-Leibler散度(KL散度),记为KL[pT∥pS],其中pT表示教师模型的输出分布,pS表示学生模型的输出分布。
KL散度的数学定义为:
K L ( P T ∥ P S ) = ∑ i P T ( y i ∣ x ) log P T ( y i ∣ x ) P S ( y i ∣ x ) KL(P_T \| P_S) = \sum_{i} P_T(y_i|x) \log \frac{P_T(y_i|x)}{P_S(y_i|x)} KL(PT∥PS)=i∑PT(yi∣x)logPS(yi∣x)PT(yi∣x)
其中x表示输入,yi表示第i个可能的输出。KL散度衡量了两个概率分布之间的"距离",当两个分布完全相同时,KL散度为0。通过最小化KL散度,我们促使学生模型的输出分布尽可能接近教师模型。
在实际训练中,知识蒸馏的损失函数通常包含两部分:蒸馏损失和任务损失。蒸馏损失用于让学生模型学习教师模型的输出分布,任务损失则用于让学生模型学习真实的标签。最终的损失函数可以表示为:
L t o t a l = α L d i s t i l l + ( 1 − α ) L t a s k L_{total} = \alpha L_{distill} + (1-\alpha) L_{task} Ltotal=αLdistill+(1−α)Ltask
其中α是平衡两种损失的超参数。通过调整α的值,我们可以控制学生模型在学习教师知识和学习真实标签之间的权衡。
正向KLD与反向KLD
在文本生成等开放式任务中,传统的正向KL散度优化存在一个重要问题,即"空白区域问题"(void region problem)。正向KLD的定义是KL[pT∥pS],它要求学生模型的高概率区域尽可能覆盖教师模型的高概率区域。
然而,在大语言模型的生成任务中,输出空间极其庞大(词汇表通常包含数万个词汇,序列长度可能达到数千),教师模型的高概率区域往往远远超出学生模型的容量。这导致学生模型在尝试覆盖所有教师高概率区域时,不得不在某些区域分配过高的概率,这些区域可能是教师模型实际上很少生成的内容。结果就是学生模型可能生成一些质量较差或不符合预期的文本。
为了解决这个问题,一些研究提出使用反向KLD,即KL[pS∥pT]。反向KLD的优化目标是让学生模型避免在教师模型概率较低的区域分配过高的概率。换句话说,反向KLD引导学生模型专注于学习教师模型最核心的高概率区域,而不是试图覆盖所有可能的区域。
反向KLD的数学表达为:
K L ( P S ∥ P T ) = ∑ i P S ( y i ∣ x ) log P S ( y i ∣ x ) P T ( y i ∣ x ) KL(P_S \| P_T) = \sum_{i} P_S(y_i|x) \log \frac{P_S(y_i|x)}{P_T(y_i|x)} KL(PS∥PT)=i∑PS(yi∣x)logPT(yi∣x)PS(yi∣x)
这种方式更适合于生成式任务,因为它确保学生模型生成的内容基本都在教师模型的高概率区域内,从而提高生成质量的稳定性。
MiniLLM方法
MiniLLM是一种专门针对大语言模型设计的知识蒸馏方法,它采用反向KLD作为优化目标,并结合了策略梯度法(Policy Gradient)来进行训练。策略梯度法原本是强化学习中的一种方法,MiniLLM将其引入到知识蒸馏中,将文本生成视为一个序列决策过程。
MiniLLM的训练过程包含以下关键技术:
首先是单步分解策略。在标准的策略梯度法中,需要对整个生成序列计算梯度,这会导致较大的方差。MiniLLM将序列生成分解为单步预测,在每一步都计算梯度并更新参数,从而降低方差,提高训练稳定性。
其次是教师混合采样(Teacher-Mixed Sampling)。在训练过程中,完全依赖学生模型自己的采样可能导致奖励操控问题,即学生模型可能学会生成某些能获得高奖励但质量并不好的样本。为了缓解这个问题,MiniLLM在采样时混合使用教师模型和学生模型的输出,确保采样的多样性和质量。
第三是长度归一化(Length Normalization)。在文本生成中,较长的序列往往有较低的整体概率,因为每一步都要乘以一个小于1的概率值。如果不进行归一化,模型可能倾向于生成较短的文本。MiniLLM通过对序列概率按长度进行归一化,消除这种长度偏差,使得不同长度的生成结果可以公平比较。
通过这些技术的组合,MiniLLM能够在保持生成质量的同时,有效地将大语言模型的能力蒸馏到更小的模型中。实验表明,使用MiniLLM蒸馏得到的学生模型在多项文本生成任务上都能达到接近教师模型的性能。
其他白盒蒸馏方法
除了MiniLLM,研究社区还提出了多种创新的白盒蒸馏方法,每种方法都从不同的角度优化知识迁移过程。
Generalized KD(GKD)提出了一个更加通用和灵活的蒸馏框架。GKD的核心思想是允许根据具体任务灵活选择优化目标和数据来源。它不局限于单一的蒸馏损失函数,而是可以结合多种损失函数,包括正向KLD、反向KLD以及任务特定的损失。在数据来源方面,GKD既可以使用固定的数据集(如教师生成的文本或人工标注的数据),也可以使用学生模型在线生成的同策略数据(on-policy data)。这种灵活性使得GKD能够适应不同的应用场景和任务需求。
on-policy KD(同策略知识蒸馏)是一种将知识蒸馏与模仿学习相结合的方法。在这种方法中,学生模型不仅学习教师模型在固定数据集上的输出,还要学习在自己生成的数据上如何更好地模仿教师。具体而言,学生模型基于当前的策略生成一批文本,然后将这些文本输入教师模型获取反馈,最后根据反馈调整自己的生成策略。这种方式类似于强化学习中的策略优化,有助于减少训练分布和推理分布之间的不匹配,提高模型在实际应用中的表现。
TED(Task-aware Early-exit Distillation)方法提出了一种任务感知的逐层蒸馏策略。TED的创新之处在于为每一层添加特定任务的投影层(projection layer),这些投影层在教师模型上先进行预训练,学习如何将中间层的表示映射到任务相关的输出空间。在蒸馏阶段,教师模型的投影层被冻结,学生模型通过学习对齐这些投影层的输出来获取教师的知识。这种方法特别适合于需要多任务学习的场景,因为不同的投影层可以捕获不同任务的特征。
MiniMoE将专家混合(Mixture-of-Experts, MoE)架构引入到学生模型中。MoE模型通过引入多个专家网络和门控机制,能够在保持参数量相对较小的同时,显著提升模型的容量和表达能力。每个专家网络负责处理特定类型的输入,门控机制则根据输入特征动态选择激活哪些专家。通过这种方式,MiniMoE能够更好地缩小学生模型和教师模型之间的能力差距,同时保持推理效率。
KPTD(Knowledge-Prompt Task Distillation)提出了一种基于实体定义的知识迁移方法。在大语言模型中,许多知识以实体和关系的形式存储在参数中。KPTD首先为目标领域的重要实体生成详细的定义和描述,然后基于这些定义构建转移数据集。在蒸馏过程中,学生模型不仅学习教师模型的输出分布,还要学习如何利用这些实体定义来增强自己的知识库。这种方法特别适合于知识密集型任务,如问答系统和事实验证。
这些方法各有特点,在实际应用中可以根据具体需求选择合适的方法,或者将多种方法结合使用,以获得更好的蒸馏效果。
黑盒知识蒸馏详解
核心思想
黑盒知识蒸馏的核心思想是在无法访问教师模型内部参数和结构的情况下,仅通过观察教师模型的输入输出行为来训练学生模型。这种方法的实用性在于它不受教师模型实现细节的限制,可以从任何能够提供输入输出接口的模型中提取知识。
在大语言模型的背景下,黑盒蒸馏通常采用以下流程:首先,准备一个包含多样化查询的数据集,这些查询可以是用户实际提出的问题,也可以是为了覆盖不同任务类型而精心设计的提示;然后,将这些查询输入教师模型,收集教师模型生成的响应;最后,使用查询-响应对作为训练数据,让学生模型学习模仿教师的行为模式。

黑盒蒸馏的关键挑战在于如何选择合适的训练数据和设计有效的训练策略。由于无法访问教师模型的内部信息,学生模型只能从有限的输入输出样本中归纳学习,因此数据的质量和多样性至关重要。如果训练数据覆盖不全面,学生模型可能无法学习到教师模型的全部能力;如果训练数据质量不高,学生模型可能学到错误的行为模式。
TAPIR框架
TAPIR(Task-Aware Curriculum Planning for Instruction Refinement)是一个系统化的黑盒知识蒸馏框架,专门设计用于提升小型语言模型的指令跟随能力。TAPIR的创新之处在于引入了课程学习(curriculum learning)的思想,通过精心设计的训练课程,逐步提升学生模型的能力。
TAPIR的工作流程可以分为以下几个关键阶段:
第一阶段是种子数据集构建。TAPIR从大规模开源指令数据集(如Alpaca、ShareGPT等)中筛选出对学生模型来说具有挑战性的指令。这个筛选过程基于模型拟合难度(Model Fitting Difficulty, MFD)指标。MFD通过评估学生模型在特定指令上的表现来量化学习难度,计算方式通常是比较学生模型生成的响应与参考答案之间的差异。只有那些MFD分数超过一定阈值的样本才会被选入种子数据集,确保训练重点放在学生模型的薄弱环节上。
第二阶段是任务感知的数据增强。TAPIR分析种子数据集中指令的任务类型分布,识别出学生模型表现较差的任务类别(如数学推理、代码生成、常识推理等)。然后,利用教师模型生成更多属于这些困难任务类别的指令-响应对。这个过程不是随机生成,而是有针对性地增强特定任务类型的训练样本,使得数据分布更适合学生模型的学习需求。
第三阶段是多样化回答风格学习。TAPIR不仅让学生模型学习教师的最终答案,还让学生学习不同的推理风格。例如,对于数学问题,教师模型可以提供思维链(Chain-of-Thought)式的逐步推理过程;对于代码生成任务,教师模型可以提供详细的代码注释和解释。通过学习这些多样化的回答风格,学生模型不仅能够给出正确答案,还能提供有助于理解的中间步骤。
第四阶段是迭代优化循环。在初步训练后,TAPIR评估学生模型在各个任务上的表现,识别出仍然存在的薄弱环节。然后,重新进行难度筛选和数据增强,生成新一轮的训练数据。这个迭代过程可以重复多次,每次都针对当前学生模型的具体问题进行调整,实现持续改进。
TAPIR还引入了裁判模型(Judge Model)来评估生成质量。裁判模型通常是一个强大的语言模型(可以是教师模型本身),它对学生模型的输出进行打分,提供质量反馈。这种反馈信息可以用于调整训练策略,例如增加某些类型样本的权重,或者过滤掉质量不佳的训练样本。
通过这些精心设计的机制,TAPIR能够在黑盒条件下实现高效的知识蒸馏,显著提升学生模型的指令跟随能力和任务泛化能力。
Distilling Step-by-Step方法
Distilling Step-by-Step是另一种创新的黑盒蒸馏方法,它的核心理念是不仅让学生模型学习最终答案,还要学习得出答案的推理过程。这种方法特别适合于需要复杂推理的任务,如数学问题求解、逻辑推理、多步骤规划等。
Distilling Step-by-Step的实施分为两个紧密相关的步骤:
第一步是生成标签和推理依据。给定一个无标签的输入样本,首先让教师模型生成预测标签。例如,对于一个数学应用题,教师模型给出最终答案。更重要的是,教师模型还要生成推理依据(rationale),即解释为什么这个答案是正确的。推理依据是对解题过程的自然语言描述,它揭示了从问题陈述到最终答案的逻辑链条。
推理依据的生成可以通过提示工程(prompt engineering)来实现。例如,在提示中明确要求教师模型"一步一步思考并解释你的推理过程"。教师模型会生成类似于"首先,我们需要计算总数量。已知每个盒子有5个苹果,共有3个盒子,所以总数量是5乘以3等于15。然后,如果吃掉了2个,剩余的苹果数量就是15减2等于13"这样的推理依据。
第二步是多任务学习。学生模型被训练去完成两个相关但不同的任务:一是预测最终标签,二是生成推理依据。这种多任务学习的设置有几个重要优势。首先,生成推理依据的任务迫使学生模型学习中间推理步骤,而不仅仅是记忆输入输出的映射关系。其次,推理依据作为一种辅助监督信号,提供了比单一标签更丰富的学习信息。最后,在推理阶段,学生模型生成的推理依据可以增强其输出的可解释性,用户可以理解模型是如何得出结论的。
在训练过程中,Distilling Step-by-Step使用联合损失函数,同时优化标签预测的准确性和推理依据的质量。损失函数可以表示为:
L t o t a l = L l a b e l + λ L r a t i o n a l e L_{total} = L_{label} + \lambda L_{rationale} Ltotal=Llabel+λLrationale
其中Llabel是标签预测损失(通常是交叉熵损失),Lrationale是推理依据生成损失(通常是语言模型的负对数似然),λ是平衡两个损失的超参数。
实验表明,Distilling Step-by-Step方法能够显著提升学生模型在复杂推理任务上的表现。更重要的是,这种方法具有很好的数据效率,即使使用较少的训练样本,也能取得不错的效果。这是因为每个训练样本不仅提供了一个标签,还提供了一个完整的推理过程,包含了更多的学习信号。
此外,Distilling Step-by-Step还可以与其他技术结合使用。例如,可以引入自一致性(self-consistency)机制,让教师模型对同一个问题生成多个推理路径,然后通过投票选择最可靠的答案和推理依据。这种方式可以进一步提高训练数据的质量和鲁棒性。
总结
知识蒸馏为大语言模型的压缩和部署提供了有效方案。通过将教师模型的知识迁移到参数更小的学生模型中,可以在保持模型性能的同时,大幅提升计算效率和降低推理延迟。白盒蒸馏利用教师模型内部信息,采用输出分布对齐、逐层表示蒸馏等技术,适合开源或架构相似场景,代表方法包括MiniLLM、GKD和TED。
黑盒蒸馏则通过模仿教师模型的输入输出行为实现知识迁移,适用于只能通过API访问教师模型或学生模型与教师模型架构差异较大的场景。方法如TAPIR和Distilling Step-by-Step可有效提升学生模型的指令跟随能力和复杂推理表现。实际应用中,可根据教师模型访问权限、任务需求和模型架构选择适合方法,或结合两种策略形成混合蒸馏方案。

22万+

被折叠的 条评论
为什么被折叠?



