传统知识蒸馏依赖一个独立、预训练的大型教师模型,而自蒸馏提供了一种有趣的替代方案,模型从自身学习。这种方式避免了对一个独立且通常庞大的教师模型的需求,在特定情况下具有显著益处。自蒸馏:从内部学习在自蒸馏中,“教师”模型本质上是从学生模型自身训练过程中得来的。这可以通过几种方式实现:迭代蒸馏: 模型训练一定数量的周期。这种训练好的状态随后作为“教师”,用于对相同模型架构的后续训练阶段,通常从头开始或从更早的检查点初始化。新的学生模型学习模仿其先前版本的输出(软标签)或内部表示。这个过程可以重复,可能带来性能和可靠性的逐步提升。基于集成学习的自蒸馏: 在训练期间,学生模型的多个检查点或轻微扰动版本可以构成一个隐式集成。随后,学生模型被训练以匹配该集成的平均预测(软标签)。这有助于模型收敛到更平坦的局部最小值,这通常与更好的泛化能力相关联。正则化视角: 自蒸馏可以被看作是一种正则化形式。通过鼓励学生模型与其自身的过去或平均预测保持一致,它会惩罚过度自信或不稳定的输出,从而促使决策边界更加平滑。蒸馏损失项,通常是当前学生模型预测与“教师”(先前版本)预测之间的KL散度,与主要任务损失(例如,交叉熵)一同起作用。自蒸馏是一种知识蒸馏方法,其机制是使用诸如将输出概率分布 ($p_{student}$) 与目标分布 ($p_{teacher}$,其来源于学生模型自身) 进行匹配的目标:$$ L_{自蒸馏} = D_{KL}(p_{学生_当前}||p_{学生_先前}) $$或匹配中间表示。digraph Self_Distillation_Comparison { rankdir=LR; node [shape=box, style=rounded, fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; subgraph cluster_0 { label = "标准知识蒸馏"; bgcolor="#e9ecef"; Teacher [label="大型教师模型(固定)", fillcolor="#ffc9c9"]; Student_KD [label="学生模型", fillcolor="#a5d8ff"]; Data [label="训练数据"]; Data -> Teacher [label="输入"]; Data -> Student_KD [label="输入"]; Teacher -> Student_KD [label=" 软目标 / \n 表示 \n (蒸馏损失)"]; Student_KD -> Output_KD [label="预测"]; Output_KD [shape=ellipse, label="输出", fillcolor="#b2f2bb"]; } subgraph cluster_1 { label = "自蒸馏(迭代示例)"; bgcolor="#e9ecef"; Student_t_minus_1 [label="学生(第 t-1 周期) \n “教师”", fillcolor="#a5d8ff"]; Student_t [label="学生(第 t 周期)", fillcolor="#a5d8ff"]; Data_SD [label="训练数据"]; Data_SD -> Student_t_minus_1 [label="输入"]; Data_SD -> Student_t [label="输入"]; Student_t_minus_1 -> Student_t [label=" 软目标 / \n 表示 \n (自蒸馏损失)"]; Student_t -> Output_SD [label="预测"]; Output_SD [shape=ellipse, label="输出", fillcolor="#b2f2bb"]; } }标准知识蒸馏(使用独立教师)与自蒸馏(模型从自身先前版本学习)的对比。尽管看起来有悖常理(“模型如何能通过向自身学习而得到提升?”),自蒸馏通常有效,因为“教师”版本,由于训练进展更远或作为集成平均,与仅使用原始真实标签相比,提供了一个更稳定、平滑或泛化的目标信号。它有助于规范训练过程,特别是对于复杂的大型语言模型。数据增强:丰富知识传递数据增强是一种提升模型泛化能力的有效方法,在知识蒸馏的背景下,其作用得到加强。通过使教师和学生(或者在自蒸馏中只使学生)接触到更多样化的输入变化,我们可以提升所传递知识的质量和可靠性。标准的自然语言处理(NLP)增强方法在这里适用:回译: 将文本翻译成另一种语言再译回原文,以此生成释义版本。同义词替换: 用同义词替换词语,在保留含义的同时改变措辞。词元扰动: 随机插入、删除或交换词元(使用时需谨慎,以保持语义)。句子混排: 在文档中重新排序句子(与文档级任务相关)。然而,在知识蒸馏设置中,我们可以采用更完善、感知蒸馏的增强策略:教师生成伪数据: 使用教师模型自身生成新的无标签数据样本。这可以通过提示教师模型或从其输出分布中采样来实现。接着,将教师模型对这些生成数据的预测(软标签或中间状态)用作对学生的监督。这方法非常有效,因为增强数据直接与教师模型提供的丰富目标信号配对,并根据教师模型的具体理解进行了调整。增强一致性: 对输入样本应用增强,并鼓励学生模型在原始和增强版本上产生与教师模型输出一致的结果。这促使学生模型学习教师模型捕获到的不变性。混合策略: MixUp(插值输入和标签)或CutMix(将一个输入的补丁粘贴到另一个上)等方法可以进行调整。在知识蒸馏中,插值可能涉及混合教师模型提供的软目标,从而生成更复杂的监督信号。为何增强对知识蒸馏尤其有益?更丰富的监督: 增强数据提供了更多样化的输入-输出对,使得学生模型可以从原始训练集中更多样化的教师响应中学习。泛化能力的提升: 通过在多样化输入上训练,学生模型能更好地泛化到未见过的数据,理想情况下是模仿教师模型的泛化能力。弥合容量差距: 当学生模型显著小于教师模型时,增强有助于让学生接触到它可能错过的一些现象,并利用教师模型的输出来指导如何处理这些变化。自蒸馏与数据增强的结合自蒸馏和数据增强可以共同使用。一种常见的模式包括:使用各种方法增强原始训练数据集。在这个增强数据集上,使用自蒸馏方案(例如,迭代式或基于集成学习)训练学生模型。增强数据提供了更丰富的输入信号,而自蒸馏机制提供了正则化以及比单独的真实标签更精炼的目标信号。这种结合可以生成不仅紧凑而且强大有效的学生模型,它们在不依赖外部教师的情况下内化知识。然而,需要仔细实施。过度激进的增强可能引入损害训练的噪声,而配置不当的自蒸馏可能导致不稳定或收敛缓慢。像所有优化方法一样,在相关下游任务上进行经验验证和调整对于取得恰当平衡非常重要。