【DeepSeek】Coder:当大型语言模型遇到编程时-代码智能的兴起_23页_2mb
报告摘要
DeepSeek-Coder:当大型语言模型遇到编程时-代码智能的兴起
核心内容
DeepSeek-Coder 是一系列开源代码模型,旨在提升代码智能能力。这些模型的规模从13亿到330亿不等,并且在2万亿个标记上从头开始训练。DeepSeek-Coder 在多个基准测试中表现出色,不仅超越了其他开源模型,还在某些方面超过了闭源模型如 Codex 和 GPT-3.5。此外,DeepSeek-Coder 的许可证允许研究和商业使用,促进了代码智能的广泛应用。
主要观点
- DeepSeek-Coder 通过在项目级代码语料库上训练,增强了模型对代码结构和跨文件依赖关系的理解。
- 采用 Fill-In-The-Middle (FIM) 训练方法,通过打乱代码的顺序并使用特殊标记来训练模型填补空白,从而提高代码生成和补全能力。
- 模型在多个代码相关任务上表现出卓越的性能,包括代码生成、FIM任务、跨文件代码补全和程序辅助数学推理。
- 模型的性能与规模密切相关,更大的模型在大多数任务上表现更优。
- 通过指令微调,DeepSeek-Coder-Instruct 在代码生成任务中表现出更高的准确率。
关键信息
数据收集
- 训练数据集由87%的源代码、10%的英语代码相关自然语言和3%的中文自然语言组成。
- 使用GitHub的Markdown和StackExchange材料作为英语语料库,中文语料库由高质量文章构成。
- 数据创建流程包括数据爬取、基于规则的过滤、依赖解析、仓库级去重和质量筛选。
- 采用n-gram过滤过程,防止训练数据受到测试集信息污染。
模型训练策略
- 使用Next Token Prediction 和 Fill-In-The-Middle (FIM) 作为主要训练目标。
- FIM方法通过将代码分为三部分并随机打乱顺序,使模型能够更好地理解代码结构。
- 通过消融实验确定了FIM率的最佳设置为50%。
- 模型使用了三种哨兵标记来区分代码的前缀、中间和后缀部分。
模型架构
- DeepSeek-Coder 系列包括1.3B、6.7B和33B三种规模的模型。
- 模型基于DeepSeek-AI提出的DeepSeek框架构建,使用解码器型Transformer架构。
- 33B模型集成了分组查询注意力(GQA),分组大小为8,提高了训练和推理效率。
- 使用了FlashAttention v2 来加速注意力机制计算。
优化策略
- 使用AdamW优化器,初始学习率为0.9和0.95。
- 采用三阶段训练策略,包括2000个预热步长,最终学习率设置为10%。
- 通过调整批量大小和学习率来优化训练过程。
实验结果
- DeepSeek-Coder-Base 33B 在HumanEval和MBPP上分别达到了66.0%和60.6%的平均准确率。
- DeepSeek-Coder-Instruct 在LeetCode Contest基准测试中表现优异,6.7B和33B模型分别达到了19.4%和27.8%的Pass@1得分。
- 在跨文件代码完成任务中,DeepSeek-Coder 表现出色,尤其是在Java、JavaScript和C#等语言中。
- 在程序辅助数学推理任务中,DeepSeek-Coder-Base 33B 在所有基准测试中均表现最佳,显示了其在处理复杂计算任务中的潜力。
指令微调
- DeepSeek-Coder-Instruct 通过使用高质量的指令数据进行微调,提高了模型在代码生成任务中的性能。
- 指令微调模型在LeetCode Contest基准测试中表现优于未微调的模型。
- 采用Chain-of-Thought (CoT) 提示策略,显著提升了模型的性能,尤其是在复杂的任务中。
未来展望
- DeepSeek-Coder 的性能在多个任务中优于其他开源模型,尤其是在跨文件代码完成和程序辅助数学推理任务中。
- 未来的研究将继续完善和评估长上下文适应方法,以提高模型在处理复杂代码任务中的效率和用户友好性。
- 建议在代码补全工具中部署DeepSeek-Coder-Base 6.7B模型,以在效率与准确性之间取得平衡。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载