摘要
自动程序修复(APR)采用多种工具与技术帮助开发者更快获得功能完善且无错误的代码。近年来,大语言模型(LLMs)因其卓越性能与灵活性,已成为APR工具链中的热门组件。然而训练此类模型需消耗大量资源。微调技术被开发用于将预训练LLMs适配至特定任务(如APR),并以远低于从头训练的计算成本提升其性能。本研究通过实证方法探究不同微调技术对APR任务中LLMs性能的影响。实验针对一组先进的代码预训练LLMs展开性能分析,评估基于三个主流APR基准(QuixBugs、Defects4J和HumanEval-Java),涵盖六种不同参数规模的模型(包括CodeGen、CodeT5、StarCoder、DeepSeekCoder、Bloom和CodeLlama-2)。研究对比三种训练方案:无微调、全参数微调以及采用LoRA和IA3的参数高效微调(PEFT)。实验发现全参数微调会因数据分布差异和过拟合导致模型基准性能下降,而参数高效微调通过限制可训练参数量取得了更优结果。
关键词
大语言模型、自动程序修复、参数高效微调、AI4Code、AI4SE、ML4SE
研究背景
自动程序修复技术旨在通过自动化手段检测和修复代码缺陷,提升软件开发效率。近年来,基于大语言模型的方法在APR领域展现出强大潜力,但其训练成本高昂。微调技术成为降低适配成本的关键手段,尤其参数高效微调方法在平衡性能与资源消耗方面具有显著优势。
实验设计
模型选择
研究选取六种具有代表性的代码预训练大语言模型:
- CodeGen(16B参数)
- CodeT5(220M-770M参数)
- StarCoder(15.5B参数)
- DeepSeekCoder(1.3B-33B参数)
- Bloom(7.1B参数)
- CodeLlama-2(7B-34B参数)
微调策略
- 无微调:直接使用预训练模型进行零样本评估
- 全参数微调:更新模型所有权重参数
- 参数高效微调:采用LoRA(低秩适应)和IA3(通过抑制和放大进行注入适配)技术
评估基准
- QuixBugs:包含40个经典编程问题的缺陷数据集
- Defects4J:广泛使用的Java程序缺陷基准
- HumanEval-Java:基于人类评估的Java代码生成任务
主要发现
- 全参数微调的局限性:在跨数据集评估中出现性能下降,主要源于训练数据分布差异和过拟合现象
- 参数高效微调的优势:
- LoRA方法在保持模型稳定性的同时提升修复准确率
- IA3技术在低资源场景下表现尤为突出
- 平均可减少70%的训练参数更新量
- 模型规模影响:参数规模超过10B的模型在PEFT中展现出更好的知识保留能力
结论
参数高效微调技术为大语言模型在自动程序修复领域的应用提供了资源友好的解决方案。通过限制可训练参数量,PEFT不仅降低了计算成本,还有效缓解了过拟合问题,为实际工业部署提供了技术可行性。未来研究可进一步探索多任务联合微调与动态参数分配策略。