Page 124 - 《软件学报》2026年第6期
P. 124

舒善富 等: 基于自适应知识蒸馏的代码大模型轻量化                                                       2443


                 习、负损失函数和参数重置. 本研究问题分析学习策略中                   3  个方面对  AKD  效果的影响, 论证学习策略设置的合
                 理性.
                    RQ7: AKD  方法的学习策略学习的参数是否优于固定参数? AKD                 方法自适应体现在参数        β 随着知识蒸馏过
                                                            β 对代码生成效果的影响, 并与自适应学习策略对比, 论证
                 程中数据的不同而变化. 本研究问题分析不同固定参数
                 AKD  方法中学习策略的必要性.
                    RQ8: AKD  方法生成代码的质量如何? 本研究问题旨在分析                AKD  和基准方法在代码生成任务的正确性, 论
                 证  AKD  方法能够生成更高质量代码的原因. 与此同时, 本研究问题也分析当前基于知识蒸馏代码大模型的缺点,
                 为将来进一步研究提供依据.
                    RQ9: AKD  方法在不同代码生成模型上的泛化能力如何? AKD               方法以   StarCoder 为代码大模型基座. 本研究
                 问题旨在分析     AKD  方法在其他基座大模型        Code Llama 和  CodeGen  的应用效果, 论证  AKD  方法的泛化能力.
                    RQ10: AKD  在其他数据集上的泛化能力如何? AKD           方法在不同代码生成模型上展现了良好的性能. 本研究
                 问题旨在讨论     AKD  方法在其他的训练数据集         Magicoder 和更具挑战性的评测数据集        HumanEval+上的适应能力.
                  4.4   实验结果与分析
                  4.4.1    RQ1: AKD  方法是否是必要的?
                    为验证这个问题的结果, 本文将          AKD  方法训练的模型与原始学生模型及指令微调后的模型进行了对比实验.
                 如表  4  所示, 本文使用  HumanEval 和  MBPP  数据集作为评测基准, 使用指标为         Pass@1  的通过率和相对于教师模
                 型的精度损失. 教师模型是        StarCoder-7B, 学生模型为  StarCoder-1B, 其中, 教师模型的分别为    29.3%  和  32.0%, 学
                 生模型   HumanEval Pass@1  和  MBPP Pass@1  分别为  13.4%  和  14.0%. 原始学生模型较教师模型在  HumanEval 和
                 MBPP  数据集上的精度损失下降了         54.0%  和  56.0%.

                         表 4 学生模型、教师模型及不同训练方法在               HumanEval 与  MBPP  数据集上的性能对比     (%)

                                                           HumanEval                    MBPP
                        模型              方法
                                                     Pass@1       精度损失           Pass@1       精度损失
                     StarCoder-7B     教师模型            29.3          -             32.0          -
                                      学生模型            13.4          54.0          14.0          56.0
                                        SFT           14.0          52.2          20.2          36.9
                     StarCoder-1B
                                     SFT_LoRA         16.4          44.0          25.8          19.4
                                       AKD            20.7          29.3          30.4          5.0

                    本文首先对原始学生模型进行           SFT (supervised fine-tuning) [53] , 期望直接利用高质量的监督数据提升模型性能.
                 SFT  通常是首选的方法, SFT    技术能让模型在特定任务的数据集上更新所有参数以达到任务适应性.
                    实验所使用的      SFT  代码来自  Gu  等人  [9] 的研究, 本文使用其代码并在其数据集上验证了方法的正确性, 调用
                 该方法对代码大模型进行复现, 其中学习率为               1E–4, 文本输入最大长度      512, 批量大小为    8, 不进行梯度累计, 在
                 CodeAlpaca 数据集训练   10  个  epoch. 模型的准确率降至  0, 无法正确生成代码.
                    为进一步验证      SFT  方法的有效性, 本文尽力优化       SFT  实验参数. 优化后的     SFT  学习率为  1E–5, 文本输入最大
                 长度  1 024, 批量大小为  8, 训练模型   18  轮, 每轮  2 240  步, 每  4  步进行梯度累计. 基于以上参数设置, SFT   训练收敛
                 于  18  轮, 如图  3  所示部分学习率设置下损失值变化. 进一步调整其他参数如批量大小、优化器类型, 未获得更好
                 的准确率, 可能受到数据质量与覆盖面等方面的限制. 实验效果如表                     4  所示, 调参后  SFT  准确率仍然较低, 对小参
                 数模型准确率的提升不到         4%.
                    为进一步探究是否存在其他优化策略能够有效提升                   SFT  的性能, 本文使用    LoRA [54] 技术进行微调, 超参数设
                 置见第   4.2.2  节表  3  所示, 结果表明  SFT  效果有所提升, 验证了所选微调方法的有效性和实现的正确性. 然而, 尽
                 管  LoRA  有所改善, 其提升幅度仍然有限, 且需额外的优化技术支持.
                    鉴于  SFT  方法的局限性无法满足学生模型性能的需求, 本文采用知识蒸馏方式训练模型, 并且提出                            AKD  方
                 法, 成功地将教师模型的知识迁移到了学生模型上. 表                 4  结果显示, AKD  方法使模型的准确率提升至           20.7%  和
   119   120   121   122   123   124   125   126   127   128   129