Page 114 - 《软件学报》2026年第6期
P. 114
舒善富 等: 基于自适应知识蒸馏的代码大模型轻量化 2433
效完成代码生成任务, Meta 团队 [19] 研发的 Code Llama 专注于代码补全和错误检测, 帮助开发者快速迭代,
Salesforce 团队 [20] 研发的 CodeGen 在生成复杂代码片段方面表现突出, 适用于大规模项目的开发. 程序员和开发
人员需要这样的工具提高编码效率, 自动化重复性任务, 并在开发过程中获得即时的代码建议和错误检测 [21−25] . 代
码大模型的小参数版本能够在终端设备上应用, 但是小参数版本的精度损失超过了 49.5%. 并且, 现有的知识蒸馏
方法尚未在代码大模型中验证.
本文将知识蒸馏方法应用到代码大模型, 实验发现, RKL 散度的零强迫特性使得学生模型优先学习教师模型
的趋零概率分布区域, 但在主要概率分布区域学习不足; KL 散度在主概率区域表现好, 但在趋零概率分布区域表
现不佳. 当前散度对教师模型或学生模型的趋零概率区域都无法学习. 教师模型的生成质量会影响学生模型知识
蒸馏的训练效果.
本文提出了一种自适应知识蒸馏 (adaptive knowledge distillation, AKD) 方法. 现有方法存在两方面问题, KL
方法无法学习教师模型趋零分布知识, 而 RKL 方法在教师模型主概率分布区域学习不足. 因此, 需要构造一个自
适应方法, 确保学生模型在整个概率分布均具备较强的学习能力; 根据学生模型和教师模型的生成分布差异, 自适
应调整学习的优先级, 避免局部优化造成的偏差问题. 针对教师模型的生成质量不稳定和生成分布差异大问题, 利
用任务提示明确的 prompt 模板, 提升教师模型的指导能力. 基于 AKD 方法, 本文使用 StarCoder-1B 和 StarCoder-
7B 模型作为学生模型和教师模型, 结合 CodeAlpaca 数据集 (https://github.com/sahil280114/codealpaca), 训练出轻
量化的代码大模型. 该模型参数规模较教师模型减少 85.7%, 平均准确率仅降低 5.1%, 平均精度仅损失 17.14%.
实验结果显示, 在 HumanEval 和 MBPP 数据集上, prompt 可以提高教师模型的代码生成质量, 提高知识蒸馏
过程中的学生模型性能, 使训练的学生模型降低 6% 的平均精度损失; KD 和 RKD 方法训练的学生模型较教师模
型 (StarCoder-7B) 在数据集上的平均精度损失分别为 32.40% 和 41.76%. AKD 方法的平均精度损失为 17.14%, 较
KD 和 RKD 方法的精度损失分别降低了 15.26% 和 24.53%, 表明 AKD 在减少生成精度损失方面的优异性. 在推
理显存需求方面, KD 和 RKD 方法需要 54.7 GB, 而 AKD 方法仅增加 3 GB. 关于训练时间方面, AKD 方法所需训
练时间增加 30%; 相较而言, 即使 KD 和 RKD 方法训练至相同时长, 它们的平均效果仅提升 3%, 相比 AKD 方法
低 16.9%. 因此, AKD 方法增加的训练成本是值得的. 此外, 本文将 AKD 方法应用于 Code Llama 和 CodeGen 系列
模型, 相较于前沿的 KD 及 RKD 方法, AKD 方法的精度损失平均降低 17.34% 和 20.95%, 进一步证明了 AKD 方
法的泛化能力. 实验还发现直接指令微调小参数 LLM 的准确率趋于 0, 无法提升小模型的性能, 证明了知识蒸馏
方法的必要性.
本文的主要贡献如下.
(1) 提出了一种自适应的知识蒸馏方法 AKD, 将不同散度的特性相结合, 动态适配不同散度的学习优先级, 降
低学生模型在代码生成任务中的精度损失.
(2) 系统性地研究并选取不同的 prompt, 证明代码生成任务上, 教师模型生成质量对知识蒸馏效果有影响.
(3) 引入新的评估标准对 AKD 及前沿知识蒸馏方法生成的代码进行质量评估, 为大模型代码生成模型的质量
控制提供实证依据.
(4) 将 AKD 方法应用到多个代码大模型上, 包括 Code Llama 和 CodeGen 系列, 验证了该方法的泛化能力.
本文第 1 节介绍代码大模型及知识蒸馏的相关工作及研究现状. 第 2 节给出本文的研究问题定义. 第 3 节提
出本文的自适应知识蒸馏方法并对其详细描述. 第 4 节给出实验结果与对比分析, 证明自适应知识蒸馏方法的有
效性. 第 5 节总结全文并对未来工作进行展望.
1 相关工作
1.1 代码大模型
大语言模型 (LLM) 在自然语言处理 (NLP) 领域取得了许多成就, 近期研究工作 [1−3,26,27] 展示了 LLM 在自然语
言理解、文本生成和对话系统等方面取得的进展. 在软件工程领域应用, 通过指令微调技术 [28−30] 以及人类反馈学
习的方法 [31−33] , 形成代码大模型. 最初这些代码大模型都是闭源的, 如 ChatGPT 和 Copilot, 由私有企业开发并维

