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

2434                                                       软件学报  2026  年第  37  卷第  6  期


                                  [3]
                 护. Meta 发布  LLaMA 以来, 开源社区在开发和微调大型语言模型方面持续活跃, 为研究者提供丰富的资源, 推动
                 技术进步. 开源    LLM [2,3,19,20,34−36] 及开源社区  [37] 的建立, 使研究者能够更便捷地获取和使用这些模型, 显著加速了学
                 术研究和技术创新的进程. 面对代码生成领域日益复杂的需求, 出现了                       3  种开源的主流代码大模型预训练基座,
                 如  Hugging Face 团队研发的  BigCode 预训练基座   [18] 专注于处理多种编程语言, 强调代码生成的准确性和多样性,
                 适合复杂代码生成任务的需求; Meta 的          LLaMA  预训练基座   [38] 提供了扩展能力, 支持多种下游任务的微调和开发,
                 广泛应用于自然语言处理和代码生成领域; Salesforce 的           CodeGen  预训练  [20] 基座致力于优化复杂代码片段的生成,
                 适合多种编程环境. 代码大模型在自动生成函数、代码补全和代码错误修复方面也取得了显著成果, 能提升软件
                 开发效率   [20,34−36] .
                    基于这   3  种预训练大模型基座, 具有代表性的代码大模型有                 StarCoder [34] , Code Llama  [19] 和  CodeGen [20] .
                 StarCoder 是一个基于  BigCode 架构  [18] 的代码大模型. 该模型通过大规模开源的         GitHub  代码数据预训练, 具备多
                 种编程语言的生成能力. 该模型还采用高质量              Python  代码数据微调, 在   Python  编程任务上具有更强竞争性. 此外,
                 其预训练权重已公开发布, 开发者可以进一步微调和优化以满足不同编程任务和环境的需求. Code Llama 是基于
                 LLaMA  架构的代码大模型, 在预训练数据集上新增了大量               Python  代码, 对代码生成任务进行了专门的优化, 增强
                 了解决复杂编程问题的推理能力和生成能力. 该模型能够处理多种编程语言任务, 其预训练模型和微调策略已经
                 公开. CodeGen  采用了大规模的数据集, 包括          THEPILE  自然语言数据集、多语言编程数据集               BIGQUERY
                 以及单一语言数据集        BIGPYTHON  进行训练, 能根据一系列子问题规范生成相应的子程序, 并通过分步骤的逻辑
                 推理提升代码生成的准确性和效率. CodeGen           的预训练权重也已在社区中进行了开源, 供研究人员和开发者进一
                 步探索和应用.
                  1.2   知识蒸馏
                    在实际应用中, 如何将大参数         LLM  部署在计算资源有限的终端设备上是亟待解决的问题. 直接减少模型参数
                 量可以直接部署在这些设备上运行, 但通常相较原参数量大模型存在显著的生成能力下降问题, 即精度损失. 为降
                 低模型参数并减少精度损失, Hinton        等人  [10] 提出了知识蒸馏技术.
                    知识蒸馏技术旨在优化小参数           LLM (学生模型), 使其输出分布概率接近大参数            LLM (教师模型) 的输出分布概
                 率, 达到减少模型参数量并降低精度损失的效果. Hinton             等人  [10] 针对神经网络模型, 提出了一种基于        KL  散度的知
                 识蒸馏方法, 通过度量教师模型和学生模型输出分布之间的差异, 提高学生模型的泛化能力和精度, 减少模型参数
                 规模并降低模型精度损失. 该研究强调了知识蒸馏与迁移学习的区别, 迁移学习能将已学习到的特征从一个任务
                 应用到另一个任务中, 旨在利用现有知识来解决新的问题. 知识蒸馏则由教师模型向学生模型传递输出分布概率,
                 帮助学生模型更好地学习数据的隐含结构. Mirzadeh             等人  [39] 在此基础上, 进一步验证了在更大模型规模差异情况
                 下知识蒸馏方法的可行性. 该研究采用了卷积神经网络                   (convolutional neural network, CNN) 和残差神经网络
                 (residual network, ResNet) 架构作为基座模型, 基于  KL  散度损失函数, 构建优化策略, 调整学生模型与教师模型之
                 间的知识传递方式, 缓解因模型规模差异过大而导致的性能下降问题. Beyer 等人                      [40] 深入探讨了知识蒸馏在模型
                 压缩方面的应用, 并提出了一种稳健且有效的方法, 使得在实践中能够以较小的代价实现与大型模型相当的性能.
                 该研究使用    ResNet-50  作为基座模型, 通过   KL  散度蒸馏, 成功将大型模型压缩到更小的架构, 并保持了较高的准
                 确率, 证明了知识蒸馏方法在实际应用中减少模型规模并降低精度损失的可行性和有效性.
                    Malinin  等人  [17] 发现, 当分布差距大时, KL  散度会导致学生模型对教师模型中趋零概率分布区域分配不合理
                 的高概率值, 造成生成错误. 基于         RKL  散度损失的知识蒸馏技术, 强制学生模型在教师模型低概率预测的输出分
                 布区域也保持低概率, 引导学生模型学习有效的知识表示. Gu                  等人  [9] 提出了  MiniLLM  知识蒸馏技术, 将标准    KD
                 方法中的    KL  散度目标替换为     RKL, 防止学生模型在教师分布的低概率区域过度估计并应用于通用大语言模型.
                 Mirzadeh  等人  [41] 基于  MiniLLM  方法提出了一种更有效的  KD  框架  DistiLLM, 该框架基于  RKL  损失函数, 引入了
                 一种适应性的离线策略方法.
                    上述方法的优化目标是使学生模型与教师模型的生成分布在训练数据集上保持一致. 而                              Kim  等人  [42] 认为, 学
                 生模型应学习教师模型在补全后的生成分布, 而非仅模仿其当前的输出分布. 在某些场景中, 仅匹配训练数据集的
   110   111   112   113   114   115   116   117   118   119   120