知识蒸馏为模型压缩提供了一种有效方法,但将其直接应用于生成模型,特别是大型自回归语言模型时,会带来一系列独特的复杂难题,这些难题在分类或自然语言理解(NLU)任务中通常不会遇到。生成的序列化、开放性特点从根本上改变了知识传递的运作方式。下面我们来分析主要的障碍。暴露偏差与错误传播传统的知识蒸馏通常涉及使用教师强制方法训练学生模型。这意味着在给定前面的真实序列 $y_{<t}$ 的条件下,预测下一个token $y_t$,或者在某些知识蒸馏变体中,基于教师模型之前的输出进行预测。损失函数通常会最小化学生模型和教师模型在给定此理想上下文时,对下一个token预测分布之间的散度:$$ L_{token-KD} = \sum_{t=1}^{T} D_{KL}(p_{teacher}(y_t | y_{<t}) || p_{student}(y_t | y_{<t})) $$然而,在推理过程中,学生模型是自回归运行的:它在步骤 $t$ 的输入是其自身在步骤 $t-1$ 生成的输出,表示为 $\hat{y}_{t-1}$。这导致了训练条件(可访问真实数据或教师上下文)与推理条件(仅可访问可能不完美的自生成上下文)之间的不匹配。这种现象被称为暴露偏差。结果是错误传播。如果学生模型在步骤 $k$ 生成了一个次优的token $\hat{y}_k$,这个错误会影响步骤 $k+1$ 的预测,可能导致进一步的偏离。初始的小错误在生成过程中可能会累积,导致学生模型的输出序列与其训练时基于token级别预测准确性所预期的质量或连贯性大幅偏离。缓解这种情况通常需要考虑序列级别的蒸馏目标(例如,优化序列似然或使用基于强化学习的奖励),这会带来其自身的优化复杂性。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="helvetica"]; edge [fontname="helvetica"]; subgraph cluster_teacher { label = "教师模型 / 训练上下文"; bgcolor="#e9ecef"; T0 -> T1 [label="P(t1|ctx)", color="#1c7ed6"]; T1 -> T2 [label="P(t2|ctx, t1)", color="#1c7ed6"]; T2 -> T3 [label="P(t3|ctx, t1, t2)", color="#1c7ed6"]; T0 [label="上下文", shape=ellipse, style=filled, fillcolor="#ced4da"]; T1 [label="Token 1 (参考)", color="#1c7ed6"]; T2 [label="Token 2 (参考)", color="#1c7ed6"]; T3 [label="Token 3 (参考)", color="#1c7ed6"]; } subgraph cluster_student { label = "学生模型推理"; bgcolor="#ffec99"; S0 -> S1 [label="P(s1|ctx)", color="#f59f00"]; S1 -> S2_err [label="P(s2|ctx, s1)", color="#f03e3e", fontcolor="#f03e3e"]; S2_err -> S3_diverged [label="P(s3|ctx, s1, s2_err)", color="#f03e3e", fontcolor="#f03e3e"]; S0 [label="上下文", shape=ellipse, style=filled, fillcolor="#ced4da"]; S1 [label="Token 1 (学生)", color="#f59f00"]; S2_err [label="Token 2 (错误)", style=filled, fillcolor="#ffc9c9", color="#f03e3e"]; S3_diverged [label="Token 3 (偏离)", style=filled, fillcolor="#ffc9c9", color="#f03e3e"]; } T2 -> S3_diverged [style=dashed, arrowhead=open, constraint=false, label=" 训练目标\n (基于参考Token 2)"]; S2_err -> S3_diverged [style=dotted, arrowhead=open, constraint=false, label=" 推理输入\n (使用错误Token 2)"]; }错误传播的图示。训练时,学生模型预测Token 3的损失可能基于参考Token 2。然而,在推理时,学生模型会基于其自身之前生成的Token 2来预测Token 3,这可能包含错误,从而导致偏离。掌握长期依赖关系与全局连贯性生成模型因其能够在长序列中生成连贯、上下文相关的文本而受到重视。这需要捕捉复杂的长期依赖关系,保持一致的风格或角色,并遵守从训练数据中隐式学到的事实约束。简单的token级别知识蒸馏,若仅仅专注于匹配下一个token的预测概率,通常难以有效传递这些全局属性。学生模型可能擅长在给定前面上下文的情况下预测紧邻的下一个token,但却无法在跨段落或文档时保持连贯性或一致性。教师模型内部状态和注意力模式中包含的细致、高层次知识(正是这些知识实现了连贯生成),可能无法通过仅仅最小化输出层的KL散度而充分获得。涉及中间表示匹配或注意力图迁移的技术旨在解决这个问题,但对齐潜在不同架构(教师模型与学生模型)之间的表示仍然是一项不简单的任务。模式崩溃与多样性丧失大型教师语言模型通常与温度缩放、Top-K或核采样等采样策略结合使用,可以生成多样化和富有创造性的输出。它们隐式地对可能序列的复杂分布进行建模。知识蒸馏中的一个常见问题是,优化学生模型以匹配教师模型的平均预测(软标签)可能会无意中抑制这种多样性。学生模型可能会学会偏好高概率的“安全”token,导致重复或通用的输出。这类似于模式崩溃,即学生模型仅学习捕获教师模型输出分布的主导模式,从而失去原始的广泛性。保留生成多样性需要更高级的知识蒸馏技术,例如在训练期间从教师模型的分布中采样,或采用旨在匹配平均预测分布特性的目标函数(例如,使用对抗训练或矩匹配),这增加了复杂性。{"layout": {"title": "图示:蒸馏对输出多样性的影响", "xaxis": {"title": "可能生成内容的语义空间", "showticklabels": false}, "yaxis": {"title": "概率密度", "showticklabels": false, "range": [0, 1.3]}, "legend": {"title": "模型输出分布", "orientation": "h", "yanchor": "bottom", "y": 1.02, "xanchor": "right", "x": 1}, "font": {"family": "helvetica", "size": 11}, "margin": {"l": 40, "r": 40, "t": 60, "b": 40}}, "data": [{"x": [-2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5], "y": [0.1, 0.4, 0.7, 0.5, 0.2, 0.1, 0.3, 0.8, 1.0, 0.7, 0.3, 0.1, 0.05], "type": "scatter", "mode": "lines", "name": "教师模型 (多样化)", "line": {"color": "#1c7ed6", "width": 2.5, "shape": "spline"}, "fill": "tozeroy", "fillcolor": "rgba(28, 126, 214, 0.15)"}, {"x": [0.8, 1, 1.2, 1.5, 1.8, 2, 2.2], "y": [0.1, 0.3, 0.8, 1.2, 0.7, 0.3, 0.1], "type": "scatter", "mode": "lines", "name": "学生模型 (模式崩溃)", "line": {"color": "#fa5252", "width": 2.5, "shape": "spline"}, "fill": "tozeroy", "fillcolor": "rgba(250, 82, 82, 0.15)"}]}模式崩溃的图示。教师模型呈现更宽泛、可能多峰的输出分布(蓝色)。传统的知识蒸馏可能导致学生模型(红色)将概率质量集中在最主要的模式周围,从而减少输出多样性。生成忠实度评估的困难评估生成模型的蒸馏成功与否,比判别任务远更具挑战性。像困惑度这样的标准指标衡量模型的平均不确定性,但并不总是与人类对质量的判断有很好的相关性。N-gram重叠度指标(BLEU、ROUGE)对摘要或翻译等任务很有用,但在开放式生成中未能捕捉创造性、连贯性或事实准确性。我们如何确定学生模型是否真正掌握了教师模型的生成特性?仅仅将学生模型的输出与教师模型在给定提示下的具体输出进行比较可能会产生误导,因为可能存在多种多样但有效的响应。评估生成内容的分布在统计上要求高且通常不切实际。缺乏直接、可靠的评估指标使得有效调整蒸馏过程并客观比较生成任务的不同知识蒸馏策略变得困难。人工评估通常仍然必要,但成本高且耗时。架构不匹配尽管知识蒸馏通常涉及将模型蒸馏到相同架构的较小版本,但教师模型和学生模型之间差异很大的架构差异(例如,从Transformer到非Transformer,或层数、隐藏层大小或注意力机制差异很大的模型)带来了重大挑战,特别是对于生成任务。当基本组成部分不同时,传递与序列处理、注意力模式和内部状态管理相关的知识会变得复杂。对齐中间层进行特征匹配需要仔细的、通常是启发式的映射策略,这些策略可能无法有效传递支配生成过程的隐式知识。总之,蒸馏生成模型需要超越简单的token级别模仿。解决暴露偏差、保留长期连贯性和多样性、发展合适的评估方法以及处理架构差异是当前研究和工程中的活跃方向。成功通常取决于采用更复杂的序列级别目标,仔细管理训练与推理的不匹配,并可能整合中间特征匹配或强化学习等技术。