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, 由私有企业开发并维
   109   110   111   112   113   114   115   116   117   118   119