DeepSeek LLM解读
背景:
量化巨头幻方探索AGI(通用人工智能)新组织“深度求索”在成立半年后,发布的第一代大模型DeepSeek试用地址:DeepSeek ,免费商用,完全开源。作为一家隐形的AI巨头,幻方拥有1万枚英伟达A100芯片,有手撸的HAI-LLM训练框架HAI-LLM:高效且轻量的大模型训练工具。
1.摘要:
论文主要讨论了开源大型语言模型(LLMs)的快速发展以及如何通过DeepSeek LLM项目来推进这种发展。
首先,开源大型语言模型的发展非常迅速,但之前的文献中描述的规模定律得出了不同的结论,这给规模化的LLM蒙上了一层阴影。
然后,作者深入研究了规模定律,并提出了自己独特的发现,这些发现有助于在两种流行的开源配置(7B和67B)中扩展大型模型。在规模定律的指导下,作者引入了DeepSeek LLM项目,该项目致力于从长远的角度推进开源语言模型的发展。
为了支持预训练阶段,作者开发了一个目前包含2万亿个tokens(2 trillion tokens)的数据集,并且还在不断扩大。作者还对DeepSeek LLM基础模型进行了SFT和直接偏好优化(DPO),从而创建了DeepSeek Chat模型。
最后,评估结果表明,DeepSeek LLM 67B在各种基准测试中超过了LLaMA-2 70B,特别是在代码、数学和推理领域。此外,开放式评估显示,与GPT-3.5相比,DeepSeek LLM 67B Chat表现出更优越的性能。
2. 结论
论文介绍了DeepSeek LLMs,这是一系列在2万亿标记的英语和中文大型数据集上从头开始训练的开源模型。在本文中,深入解释了超参数选择、扩展定律以及做过的各种微调尝试。校准了先前工作中的扩展定律,并提出了新的最优模型/数据扩展-缩放分配策略。此外,还提出了一种方法,使用给定的计算预算来预测近似的batch-size和learning-rate。进一步得出结论,扩展定律与数据质量有关,这可能是不同工作中不同扩展行为的原因。在扩展定律的指导下,使用最佳超参数进行预训练,并进行全面评估。
DeepSeek Chat与其他LLMs一样存在公认的局限性,包括预训练后缺乏持续的知识更新、可能生成非事实信息以及产生幻觉的倾向。此外,中文数据初始版本并不详尽,这可能导致在某些特定中文主题上的性能不佳。由于数据主要由中文和英文来源组成,因此模型在其他语言的熟练程度不佳。
• 不久后,DeepSeek 将分别发布关于代码方面以及Mixture-of-Experts(MoE)的技术报告。它们将展示如何为预训练创建高质量的代码数据,并设计稀疏模型以实现密集模型的性能。
• 目前,正在为即将到来的DeepSeek LLM版本构建更大、更完善的数据集。希望下一版在推理、中文知识、数学和代码能力方面有显著提升。
• DeepSeek 对齐团队致力于研究如何向公众提供有帮助、诚实和安全的模型。初步实验证明,强化学习可以提升模型的复杂推理能力。
3.预训练
3.1.数据
采用了一种激进的去重策略,扩大了去重的范围。对整个Common Crawl语料库进行去重与在单个转储中进行去重相比,可以移除更多的重复实例。表1说明,在91个转储中进行去重可以消除比单个转储方法多四倍的文档。
表1 | 各种Common Crawl转储的去重比率
在过滤阶段,专注于制定用于文档质量评估的稳健标准。
在混合阶段,调整方法以解决数据不平衡问题,侧重于增加代表性不足领域的数据。
在分词器中,实现了基于Huggingface团队的tokenizers库的BBPE算法。预分词被用于防止来自不同字符类别的标记的合并,如新行、标点符号和中文-日语-韩语(CJK)符号,类似于GPT-2。将数字拆分为单个数字。将词汇表中的传统标记数量设置为10 0000。分词器在大约24GB的多语言语料库上进行训练,我们在最终词汇表中增加了15个特殊标记,使总大小达到100015。为了确保训练期间的计算效率并为将来可能需要的任何其他特殊标记预留空间,将模型词汇表的大小配置为102400用于训练。
3.2.模型结构
表2|deepseek模型结构
llama模型结构
DeepSeek LLM基本上遵循LLaMA的设计,采用Pre-Norm结构,并使用RMSNorm函数和SwiGLU作为Feed-Forward Network(FFN)的激活函数,中间层维度为8/3 。它还集成了RoPE。为了优化推理成本,67B模型使用分组查询注意力(GQA)而不是传统的多头注意力(MHA)。
llama模型结构
MHA,GQA,MQA
在宏观设计方面,DeepSeek LLM略有不同。DeepSeek LLM 7B是一个30层的网络,DeepSeek LLM 67B有95层。这些层调整在保持与其他开源模型参数一致的同时,也有助于优化训练和推理的模型管道划分。
与大多数使用分组查询注意力(GQA)的模型不同,deepseek扩大了67B模型的参数网络深度,而不是常见的拓宽FFN层中间宽度的做法,旨在获得更好的性能。详细的网络规格可以在表2中找到。
3.3.infrastruction
deepseek使用一个高效且轻量级的训练框架,名为HAI-LLM(萤火平台:High-flyer,HAI-LLM:高效且轻量的大模型训练工具),来训练和评估大型语言模型。数据并行、张量并行、序列并行和1F1B流水线并行( 1F1B(One Forward pass followed by One Backward pass)策略就可以解决缓存 activation 的份数问题,使得 activation 的缓存数量只跟阶段(stage)数相关,从而进一步节省显存)等并行策略都集成到了这个框架中。还利用flash attention技术来提高硬件利用率。ZeRO-1被用于分区状态的优化,以减少数据并行级别的通信开销。努力使计算和通信重叠,以最小化额外的等待开销,包括最后一个微批的反向传播过程和ZeRO-1中的reduce-scatter操作,以及序列并行中的GEMM计算和all-gather/reduce-scatter。
一些层操作被融合在一起以加速训练,包括LayerNorm、GEMM(只要可能)和Adam更新。为了提高模型训练的稳定性,使用bf16精度训练模型,但在计算梯度时使用fp32精度。还执行就地交叉熵以减少GPU内存消耗,即:在交叉熵CUDA内核中实时将bf16 logits转换为fp32精度(而不是在HBM中转换),计算相应的bf16梯度,并用其梯度覆盖logits。
模型权重和优化器状态每5分钟异步保存一次,还支持从不同的3D并行配置中恢复训练,以应对计算集群负载的动态变化。
对于评估,在生成任务中采用vLLM(GPU推理加速工具),在非生成任务中采用连续batch处理,以避免手动调整batch大小和减少tokens填充。
4.Scalling lows
关于缩放定律的研究早于大型语言模型的涌现。缩放定律表明,随着计算预算(C)、模型规模(N)和数据规模(D)的增加,模型性能可以得到可预测的改善。当模型规模由模型参数表示,数据规模由token数表示时,C可以近似为 = 6ND。
为了降低实验成本和拟合难度,采用了Chinchilla中的IsoFLOP profile方法来拟合缩放曲线。为了更准确地表示模型规模,我们采用了一种新的模型规模表示方法,即非嵌入FLOPs/token-M,替换了先前使用的模型参数N,并将近似计算预算公式C = 6ND替换为更精确的C = MD。实验结果提供了关于最佳模型/数据扩展分配策略和性能预测的见解,并准确地预测了DeepSeek LLM 7B和67B模型的预期性能。
图4 | IsoFLOP曲线和最优模型/数据分配。IsoFLOP曲线中的度量标准是验证集上的每字节位数。最优模型/数据扩展曲线的虚线表示适合较小模型(灰色圆圈)的幂定律。
论文在缩放定律方面的贡献和发现可以总结如下:
- 建立了超参数的缩放定律,为确定最佳超参数提供了一个经验框架。
- 采用非嵌入FLOPs/token-M来表示模型规模,更精确的最佳模型/数据扩展分配策略和大规模模型的泛化损失的更好预测。
- 提出了一个基于计算预算和数据规模的模型扩展策略,该策略在计算预算有限的情况下提高了模型的泛化能力。
- 证明了缩放定律的普遍适用性,并预测了未来更大规模模型的性能。
- 将继续关注数据质量和其对缩放定律的影响,并进行更深入的分析。
4.1.Scaling Laws for Hyperparameters
论文最初在计算预算为1e17的小规模实验上进行了batch大小和学习率的网格搜索,特定模型大小(177M FLOPs/token)的结果如图2(a)所示。结果表明,泛化误差在batch大小和学习率的各种选择范围内保持稳定。这表明在相对较宽的参数空间内可以实现接近最优的性能。
然后,我们利用上述多步学习率调度器,通过重用第一阶段,有效地训练了不同batch大小、学习率和计算预算(从1e17到2e19)的多个模型。考虑到参数空间中的冗余,我们将泛化误差不超过最小值0.25%的模型参数视为近最优超参数。然后我们拟合batch大小B和学习率 与计算预算 之间的关系。拟合结果如图3所示,表明最优batch大小B随着计算预算C的增加而逐渐增加,而最优学习率 逐渐减小。这与直观的模型扩展时batch大小和学习率的经验设置相一致。此外,所有近最优超参数都落在一个宽的带宽范围内,表明在此区间内选择近最优参数相对容易。我们拟合的最终学习率和batch大小公式如下
学习率和batch大小公式
图3 | batch大小和学习率的缩放曲线。灰色圆圈表示泛化误差不超过最小值0.25%的模型。虚线表示对较小模型进行幂率拟合。蓝色星号表示DeepSeek LLM 7B和67B模型。
我们在具有1e20计算预算的一系列模型上验证了我们的公式,特定模型大小(2.94B FLOPs/token)的结果如图2(b)所示。结果表明,拟合的参数集中在最优参数空间中。后续部分也表明,我们为DeepSeek LLM 7B和67B模型拟合的参数同样取得了良好的性能。
我们尚未考虑计算预算C之外的因素对最优超参数的影响。
4.2.Estimating Optimal Model and Data Scaling
在先前的工作中,模型规模通常由模型参数表示,其中非嵌入参数为N1和完整参数为N)。计算预算 与模型/数据规模之间的关系可以近似描述为C=6ND,这意味着可以使用6N1或6N2来近似模型规模。然而,由于6N1和6N2都没有考虑到注意力操作的计算开销,并且6N2还包括词汇计算,这对模型的容量贡献较小,因此在某些设置下,两者都有显著的近似误差。
为了减小这些误差,论文引入了一种新的模型规模表示:非嵌入FLOPs/token-M。M包括注意力操作的计算开销,但不考虑词汇计算。使用M表示模型规模时,计算预算 可以简化为C=MD。6N1、6N2和M之间的具体差异如下:
M的计算公式
在评估不同规模模型之间的差异时,我们发现6N1和6N2要么高估要么低估了不同规模模型的计算成本。这种差异在小型模型中尤为明显,差异率高达50%。这种不准确性在拟合缩放曲线时会导致较大的统计误差。
表3 | 模型规模表示之间的差异以及非嵌入参数 1和完整参数 2与非嵌入FLOPs/token 之间的差异
在采用M表示模型规模后,我们的目标可以更清晰地描述为:给定计算预算C=MD,找到最优模型规模Mopt和数据规模Dopt,以最小化模型的泛化误差。这个目标可以形式化为:
为了降低实验成本和拟合难度,论文采用了来自Chinchilla的IsoFLOP profile方法来拟合缩放曲线。论文选择了8个不同的计算预算,范围从1e17到3e20,并为每个预算设计了大约10种不同的模型/数据规模分配。每个预算的超参数由公式(1)确定,泛化误差在类似的独立验证集上计算,该验证集的分布与训练集类似,包含1亿个tokens。
图5 | 性能缩放曲线。度量标准是验证集上的字节位。虚线表示对较小模型(灰色圆圈)的幂律拟合。蓝色星号表示DeepSeek LLM 7B和67B。它们的性能被缩放曲线很好地预测。
此外,我们根据计算预算 和最优泛化误差拟合了损失缩放曲线,并预测了DeepSeek LLM 7B和67B的泛化误差,如图5所示。结果表明,使用小规模实验可以准确预测具有1000倍计算预算的模型的性能。
4.3.Scaling Laws with Different Data
在DeepSeek LLM的开发过程中,数据集经过多次迭代优化,调整了不同数据源的比例,同时提高了整体质量。这使我们能够进一步分析不同数据集对缩放定律的影响。
我们使用三种不同的数据集研究了缩放定律:早期的内部数据、当前的内部数据和OpenWebText2(先前用于缩放定律研究的文本数据集)。内部数据评估表明,当前内部数据的数据质量高于早期内部数据。此外,由于其规模较小,OpenWebText2的数据质量甚至超过了当前内部数据,这使其能够进行更加细致的处理。
表4 | 模型扩展和数据扩展的系数随训练数据分布而变化。
分析中的有趣观察是,这三个数据集之间的最优模型/数据扩展分配策略与数据质量一致。如表4所示,随着数据质量的提高,模型扩展指数 逐渐增加,而数据扩展指数 逐渐减少,这表明计算预算的增加应更多地分配给模型而不是数据。这一发现也可能解释了早期规模定律研究中观察到的最优模型/数据扩展分配的显著差异。
对于这一发现的一个直观猜测是,高质量的数据通常意味着逻辑清晰和经过充分训练后预测难度较低。因此,在增加计算预算时,扩展模型大小更有优势。
5.Alignment
收集了约150万条(1.5 million instruction data)英语和中文指令数据实例,涵盖了广泛的帮助和无害主题。我们的有用数据包含120万个实例,其中一般语言任务的分布为31.2%,数学问题的分布为46.6%,编程练习的分布为22.2%。安全数据包含30万个实例,涵盖各种敏感主题。
对齐流程包含两个阶段。
监督微调:对7B模型进行了4个epoch的微调,但对67B模型只进行了2个epoch的微调,因为观察到67B模型存在严重的过拟合问题。GSM8K和HumanEval在7B模型上得到了持续改进,而67B模型很快达到了上限。7B和67B模型的学习率分别为1e-5和5e-6。除了监控基准准确度外,还评估了微调过程中聊天模型的重复率。总共收集了3868个中文和英文提示,并确定了生成响应中无法终止并无限重复文本序列的比例。观察到重复率随着数学SFT数据的数量增加而上升。这可以归因于数学SFT数据偶尔包含类似的推理模式。因此,较弱的模型难以掌握这种推理模式,导致重复性响应。为了解决这个问题,尝试了两阶段微调和DPO,这两种方法都可以保持基准分数并显著减少重复。
DPO:为了进一步提高模型的能力,我们使用了直接偏好优化算法,该算法被证明是一种简单而有效的LLM对齐方法。根据有用性和无害性构建了DPO训练所需的偏好数据。对于有用性数据,收集了多语言提示,涵盖了创意写作、问答、指令跟随等类别。然后,使用DeepSeek Chat模型作为候选响应生成响应。类似的操作也应用于无害性偏好数据构建。
训练了一个DPO epoch,学习率为5e-6,batch_size为512,使用了学习率预热和余弦学习率调度器。发现DPO可以增强模型的开放式生成技能,同时在标准基准测试中的性能差异很小。
6.Evaluation
6.1公开测试集
评估基准包括:
- 多学科多项选择数据集,如MMLU、C-Eval和CMMLU。
- 语言理解和推理数据集,如HellaSwag、PIQA、ARC、OpenBookQA和BBH。
- 闭卷问答数据集,如TriviaQA和NaturalQuestions。
- 阅读理解数据集,如RACE、DROP和C3。
- 参考消歧数据集,如WinoGrande和CLUEWSC。
- 语言建模数据集,如Pile。
- 中文理解和文化数据集,如CHID和CCPM。
- 数学数据集,如GSM8K、MATH和CMath。
- 代码数据集,如HumanEval和MBPP。
- 标准化考试数据集,如AGIEval。
6.1.1 base model
表5展示了评估基准的主要结果。尽管DeepSeek模型是在2T双语语料库上预训练的,但它们在英语语言理解基准上的表现与LLaMA2模型相当,后者也消耗了2T个token,但专注于英语。此外,与LLaMA2 70B相比,DeepSeek 67B在MATH、GSM8K、HumanEval、MBPP、BBH和中文基准上的表现有了显著提升。我们可以看到,随着模型规模的增加,某些任务的表现也有所提升,例如GSM8K和BBH。考虑到deepseek-llm在同一数据集上训练了7B和67B,这种改进的出现可以归因于大型模型强大的few-shot学习能力。随着数学数据比例的增加,小型模型和大型模型之间的差距可能会减小。
DeepSeek 67B相对于LLaMA2 70B的优势大于DeepSeek 7B相对于LLaMA2 7B的优势。这一现象突显了语言冲突对较小模型的影响更大。此外,尽管没有专门针对中文数据进行训练,但LLaMA2在某些中文任务(如CMath)上表现出色。这表明,某些基本能力(如数学推理)可以有效地跨语言转移。然而,像CHID这样的任务需要模型在预训练期间消耗大量中文来提升中文成语的效果,LLaMA2的表现明显低于DeepSeek LLM。
表5 | 评估结果基于内部评估框架。粗体数字表示4个模型中的最佳结果。对于Pile-test,我们报告bits-per-byte(BPB),对于DROP,我们报告F1分数,对于其他任务,我们报告准确率。test-shots是最大值,由于阅读理解任务的上下文长度有限或同一段落中可用的少样本示例有限(如RACE),使用较少数据
6.1.2 chat model
表6展示了DeepSeek Chat模型的结果,展示了大多数任务在经过调整后的整体改进,但有一些情况下某些任务的表现有所下降。
知识:观察到基础模型和聊天模型在知识相关任务(如TriviaQA、MMLU和C-Eval)上的表现存在波动。然而,作者并不认为这些轻微的波动表明在SFT之后获得了或失去了知识。SFT的价值在于它能够在聊天模型的零样本设置中学习达到与基础模型少样本设置相当的分数,这与真实场景是一致的。例如,聊天模型的零样本MMLU性能与基础模型的5样本MMLU性能相当。
推理:由于SFT实例中有很大一部分采用的CoT格式,聊天模型在推理任务(如BBH和NaturalQuestions)上表现出轻微的改进。然而,作者认为SFT阶段并没有学习推理能力,而是学习推理路径的正确格式。
表6 | 基础模型与聊天模型之间的比较。使用0-shot评估聊天模型在MMLU、GSM8K、MATH、C-Eval和CMMLU上的性能,而基础模型的结果仍然在少样本设置下获得。
性能下降的任务:在微调后,某些任务的性能持续下降,无论模型大小或选择的预训练检查点如何。这些特定任务通常涉及cloze(完形填空)任务或句子完成任务,如HellaSwag。可以合理地假设纯语言模型更适合处理此类任务。
数学和代码:模型在数学和编程任务上的表现经过微调后有了显著改善。例如,HumanEval和GSM8K得分提高了20多分。原因可能是,基础模型最初对这些任务进行了欠拟合,而SFT阶段通过广泛的SFT数据学习了编码和数学方面的额外知识。需要注意的是,模型的技能可能主要集中在代码完成和代数问题上。为了全面了解数学和编程,在预训练阶段融入各种数据至关重要,这留作未来的工作。
在7B模型的微调中,最初使用所有数据对模型进行微调,随后引入了第二阶段,排除了数学和代码数据。对于67B模型只进行了一阶段的SFT。
表7|与其他模型的比对,DPO能带来所有场景的提升
6.2 开放式评估
为了评估聊天模型的效果,除了标准基准的评估指标之外,还需要考虑其在开放领域和开放式问题中的表现,因为这直接影响到用户的实际体验。因此,分别测试了中文和英文任务中聊天模型的开放式生成能力。
6.2.1. 中文开放式评估
对于中文开放式评估,在高质量的开放式问题测试集AlignBench上测试了我们的聊天模型在不同领域的表现。AlignBench包含8个主要类别、36个次要类别,共有683个问题。对于每个问题,除了提示外,AlignBench还提供了专业参考答案和评级模板供GPT-4评判回复质量。
利用官方AlignBench的GitHub代码库实现了对模型的评估。严格将关键温度参数与原始设置对齐:对于角色扮演、写作能力和开放式问题,生成温度设置为0.7;而对于其他任务,生成温度设置为0.1。
表7展示了AlignBench的排行榜。DeepSeek 67B Chat模型超越了ChatGPT和其他基准模型,与GPT-3.5相媲美。
6.2.2. 英文开放式评估
对于英文开放式评估,使用了MT-Bench基准,该基准包含8个不同类别的多轮问题。如表8所示,DeepSeek LLM 67B Chat在多轮对话方面超过了其他开源模型,如LLaMA-2-Chat Touvron等、Xwin 70b v0.1和TÜLU 2+DPO 70B,并取得了8.35分的成绩,与GPT-3.5-turbo相当。此外,经过DPO阶段后,DeepSeek LLM 67B Chat DPO进一步提高了平均分数至8.76分,仅次于GPT-4。这些结果表明DeepSeek LLM具有强大的多轮开放式生成能力。
6.3 held-out评估
在评估LLM(大语言模型)时,数据污染和基准过拟合是两个挑战。一种常见的做法是利用最近发布的测试集作为 held-out 测试集来评估模型。
表9 | Held-out Dataset Evaluation.
DeepSeek 7B 和 67B 模型使用相同的训练管道,但它们的性能存在显著差异。通过主观评估,发现在将模型规模扩展到 67B 时,它在各项任务上的智能水平存在明显差异。虽然 DeepSeek 7B 在标准基准测试中落后于其他小型语言模型,但在 held-out 任务上的表现与其他模型相比相对令人满意。
6.4. Safety Evaluation
在整个训练过程中,包括预训练、SFT和DPO阶段,都融入了模型安全性的保障。为了验证模型的安全性,deepseek成立了一个由20人组成的专家团队,他们来自不同的领域和背景,共同负责评估和监测模型的安全性。
在设计问题时,专家团队还注重查询方式的多样性。他们通过诱导、角色扮演、多轮对话、预设立场等方式构建了多样化的安全问题。最终,我们获得了一个包含2400个问题的安全测试集。此外,专家团队还针对每种不同的内容类型和格式类型制定了基本的安全审核准则。
表10 | 2400个问题的安全测试集
标注者对每个问题进行了三个类别的标注:安全、不安全和模型拒绝。作者对DeepSeek 67B Chat模型进行了安全测试,结果如表10所示。表格中列出了每个安全类别的测试问题数量以及模型通过的安全测试数量。我们将安全回答和模型拒绝的测试用例标记为安全响应。结果表明,模型在多个安全测试类别中表现出良好的安全性。
使用“Do-Not-Answer”数据集来评估DeepSeek 67B Chat模型的安全机制。该数据集的939个风险分类提示有助于突出模型的增强能力。如表11所示,DeepSeek 67B Chat模型得分为97.8,高于ChatGPT和GPT-4。
表11| do not answer
6.5.Disscussion
分阶段微调:小型模型在数学和代码数据集上需要更长时间的微调,但这会损害模型的对话能力,例如增加重复行为。为了解决这个问题,deepseek实现了一种分阶段微调的过程。在这种方法中,第一阶段涉及使用所有可用数据来进行微调,而第二阶段则专注于使用对话数据进行微调。
表12 | 两阶段微调结果。重复率是在温度为0时计算的。较低的重复率更好。IFEval结果是提示级别的宽松准确度。
多选题:使用多选择题风格的评估数据来测试模型是一种常见的做法,例如MMLU、AGI Eval和C-Eval。多选题要求模型不仅具备相应的知识,还要理解选项所指的内容。在对齐阶段,测试了添加2000万条中文多选题,并获得了表13所示的性能。对C-Eval验证集和CMMLU测试集进行了去重处理,以防止数据污染。
表13 | 添加多选题数据的影响
额外的2000万条多选题数据被证明不仅对中文多选题基准测试有益,还有助于提高英语基准测试的性能。这表明模型解决多选题问题的能力得到了增强。观察到这一改进并未延伸至模型在其他非多选题格式的评估上的表现,例如TriviaQA和我们内部使用的中文QA测试集,这些是生成性评估基准。这表明用户可能不会认为模型在对话交互中变得更智能,因为这些交互涉及生成响应,而不是解决多选题问题。因此,我们选择在预训练和微调阶段不包括多选题数据,因为包括它会过度拟合基准测试,并且不会有助于实现模型真正的智能。
预训练中的instruction data:人们普遍认为,在预训练阶段的后期阶段整合instruction data可以增强基准任务上基础模型的性能。deepseek在预训练阶段的最后10%阶段整合了500万条instruction data,主要由多选题组成。我们观察到基础模型在基准上的性能确实有所提高。然而,最终结果与在SFT阶段添加相同数据时获得的结果几乎相同。因此得出结论,虽然这种方法加强了基础模型在基准上的性能,但其整体潜力与不整合这些指导数据相同。如果instruction data量很大,将其纳入预训练过程是可以接受的。由于deepseek倾向于排除多选题,并且可用的非多选题有限,决定不在预训练过程中包括instruction data。
系统提示:一个精心设计的系统提示应该有效地指导模型生成既有用又尊重他人的回复。deepseek对LLaMA-2中引入的提示稍作修改,作为其系统提示。小模型在系统提示的适配性上,差于大模型
表14 | 加入system prompt的影响
相关文章:
DeepSeek LLM解读
背景: 量化巨头幻方探索AGI(通用人工智能)新组织“深度求索”在成立半年后,发布的第一代大模型DeepSeek试用地址:DeepSeek ,免费商用,完全开源。作为一家隐形的AI巨头,幻方拥有1万枚…...
如何写美赛(MCM/ICM)论文中的Summary部分
美赛(MCM/ICM)作为一个数学建模竞赛,要求参赛者在有限的时间内解决一个复杂的实际问题,并通过数学建模、数据分析和计算机模拟等手段给出有效的解决方案。在美赛的论文中,Summary部分(通常也称为摘要)是非常关键的,它是整个论文的缩影,能让评审快速了解你解决问题的思…...
C++ 拷贝构造
拷贝构造函数会在以下几种场景中被调用: 1. 用一个对象显式初始化另一个对象。 2. 对象按值传递给函数。 3. 函数按值返回对象。 4. 将对象插入到容器中。 5. 明确调用拷贝构造函数。 1. 当用一个对象显式初始化另一个对象时 MyClass obj1("Hello"); MyClass obj2…...
kotlin内联函数——runCatching
1.runCatching作用 代替try{}catch{}异常处理,用于捕获异常。 2.runCatching函数介绍 参数:上下文引用对象为参数返回值:lamda表达式结果 调用runCatching函数,如果调用成功则返回其封装的结果,并可回调onSuccess函…...
代码随想录算法训练营第三十八天-动态规划-完全背包-322. 零钱兑换
太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j(也就是目标值)的背包最少物品数量递推公式:dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时,要向前找到容量为…...
跨域问题及解决方案
跨域问题不仅影响开发效率,还可能导致项目进度延误。因此,理解和掌握跨域问题的原理及其解决方案对于前端开发者和后端开发者来说都至关重要。本文将详细介绍什么是跨域、跨域产生的原因,以及常见的后端跨域解决方案。 文章目录 一、什么是跨…...
Python Matplotlib库:从入门到精通
Python Matplotlib库:从入门到精通 在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法&…...
相互作用感知的蛋白-小分子对接模型 - Interformer 评测
Interformer 是一个应用于分子对接和亲和力预测的深度学习模型,基于 Graph-Transdormer 架构的模型,利用相互作用(氢键、疏水)感知的混合密度网络(interaction-aware mixture den sity network, MDN&#x…...
力扣【669. 修剪二叉搜索树】Java题解
一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图:如果0节点小于low,那其左子树也都小于low,故可以排除;对于4,其右子树也是可以排除。 代码如下: class Solution {public Tre…...
装机爱好者的纯净工具箱
对于每一位电脑用户来说,新电脑到手后的第一件事通常是检测硬件性能。今天为大家介绍一款开源且无广告的硬件检测工具——入梦工具箱。 主要功能 硬件信息一目了然 打开入梦工具箱,首先看到的是硬件信息概览。这里不仅包含了内存、主板、显卡、硬盘等常…...
Spring Boot 实现文件上传和下载
文章目录 Spring Boot 实现文件上传和下载一、引言二、文件上传1、配置Spring Boot项目2、创建文件上传控制器3、配置文件上传大小限制 三、文件下载1、创建文件下载控制器 四、使用示例1、文件上传2、文件下载 五、总结 Spring Boot 实现文件上传和下载 一、引言 在现代Web应…...
【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)
本文项目编号 T 158 ,文末自助获取源码 \color{red}{T158,文末自助获取源码} T158,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Electron学习笔记,安装环境(1)
1、支持win7的Electron 的版本是18,这里node.js用的是14版本(node-v14.21.3-x86.msi)云盘有安装包 Electron 18.x (截至2023年仍在维护中): Chromium: 96 Node.js: 14.17.0 2、安装node环境,node-v14.21.3-x86.msi双击运行选择安…...
个人通知~~~
因学业问题,作品发布比较【慢】所以将间隔调整为3天一作 另外声明:二月一号正式改名:饼干帅成渣 (谐音) 没关住的快关注,求求了。不求点赞,评论,收藏。 最后祝大家新年快乐&…...
C# 中 [MethodImpl(MethodImplOptions.Synchronized)] 的使用详解
总目录 前言 在C#中,[MethodImpl(MethodImplOptions.Synchronized)] 是一个特性(attribute),用于标记方法,使其在执行时自动获得锁。这类似于Java中的 synchronized 关键字,确保同一时刻只有一个线程可以执…...
盛水最多的容器
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function maxArea(height) {// 初始化最大水量为 0let maxWater 0;// 初始化左指针,指向数组的第一个元素let left 0;// 初始化右指针…...
数据分析系列--①RapidMiner软件安装
目录 一、软件下载及账号注册 1.软件下载 1.1 CSDN下载国内下载,国内镜像相对快,点击下载 1.2 官网软件下载地址:AI Studio 2025.0 ,服务器在国外相对较慢. 2.软件注册 2.1 点击 注册界面 开始注册,如图: 3.邮箱验证 二、软件安装 1. 新年文件夹,名字最好为英文名 2. 双…...
DeepSeek-R1:开源Top推理模型的实现细节、使用与复现
核心观点 ● 直接用强化学习就可以让模型获得显著的推理能力,说明并不一定需要SFT才行。 ● 强化学习并不一定需要复杂的奖励模型,使用简单的规则反而取得意想不到的效果。 ● 通过知识蒸馏让小模型一定程度上也有推理能力,甚至在某些场景下…...
Linux(19)——使用正则表达式匹配文本
新年快乐! 目录 一、正则表达式: 二、通过 grep 匹配正则表达式: 三、查找匹配项: 一、正则表达式: 正则表达式使用模式匹配机制查找特定内容,vim、grep 和 less 命令都可以使用正则表达式,P…...
STM32 对射式红外传感器配置
这次用的是STM32F103的开发板(这里面的exti.c文件没有how to use this driver 配置说明) 对射式红外传感器 由一个红外发光二极管和NPN光电三极管组成,M3固定安装孔,有输出状态指示灯,输出高电平灯灭,输出…...
2025年1月25日(赋值前引用)
pycharm 提示: 局部变量 ‘start_time’ 可能在赋值前引用 局部变量 ‘stop_time’ 可能在赋值前引用 Traceback (most recent call last):File "/home/raspberry/Desktop/python/01_其他/04_超声波/ml_01_超声波测距.py", line 63, in <module>mai…...
C++基础(1)
目录 1. C发展历史 2. C第一个程序 3. 命名空间 3.1 namespace的价值 3.2 命名空间的定义 3.3 命名空间的使用 4. C输入和输出 5. 缺省参数 6. 函数重载 6.1 实现函数重载的条件 6.2 函数重载的应用 1. C发展历史 C的起源可以追溯到1979年,当时Bjarne…...
【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的字符串算法2.字符串算法3.详细的字符串算法1)KMP算法2)Rabin-Karp算法 总结 前言…...
开发者交流平台项目部署到阿里云服务器教程
本文使用PuTTY软件在本地Windows系统远程控制Linux服务器;其中,Windows系统为Windows 10专业版,Linux系统为CentOS 7.6 64位。 1.工具软件的准备 maven:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…...
一次端口监听正常,tcpdump无法监听到指定端口报文问题分析
tcpdump命令: sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释: 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡),即计算机该指定网络接口捕…...
【C++题解】1393. 与7无关的数?
欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1393. 与7无关的数? 类型:简单循环 题目描述: 一个整数,如果这个数能够被 7 整除,或者其中有一位是7,我们称…...
【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】
天气时钟:软硬件准备、串口模块开发 软硬件准备接线及模块划分ESP8266开发板引脚图软件准备 串口模块编写串口介绍Serial库介绍 近期跟着网上一些教学视频,编写了一个天气时钟,本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件…...
高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)…...
Kotlin函数式API
Kotlin函数式API 1.maxBy val list listOf("Apple","Banana", "Orange","pear","Grape","Watermelon") val maxLengthFruit list.maxBy {it.length} println(maxLengthFruit) 2.map 集合中zhi的map函数是最…...
我的2024年终总结和2025年展望
我的2024年终总结和2025年展望 一、前言 目前已经回到家两天了,我相信大部分人已经到家了。明天就是过年了。 没想到匆匆又是一年,这一年怎么说? 似乎并不好说,没有想象中的意气风发,有时候还想摆烂! 但…...
【Unity3D】实现2D角色/怪物死亡消散粒子效果
核心:这是一个Unity粒子系统自带的一种功能,可将粒子生成控制在一个Texture图片网格范围内,并且粒子颜色会自动采样图片的像素点颜色,之后则是粒子编辑出消散效果。 Particle System1物体(爆发式随机速度扩散10000个粒…...
【Docker】Docker入门了解
文章目录 Docker 的核心概念Docker 常用命令示例:构建一个简单的 C 应用容器1. 创建 C 应用2. 创建 Dockerfile3. 构建镜像4. 运行容器 Docker 优势学习 Docker 的下一步 **一、Docker 是什么?****为什么 C 开发者需要 Docker?** **二、核心概…...
threejs实现烟花效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
23【进制的理解】
很多人可能听过计算机的最底层是2进制执行,但是原理并不知道,我们今天先不讨论那么复杂的问题,先讨论什么是进制 1910,10并不是1个字符,而是2个字符,也就是说在10进制里面没有“10”这个字符,1…...
VMware 和本机(Win10)安装共享文件
1. 安装VM-tools, sudo apt-get install open-vm-tools-desktop -y 2. VMware->设置-> 选项中启动共享文件夹. 3. 本机设置共享文件夹(文件目录为data),右键属性设置: VMware, Other Locations->Computer->mnt->data 即可。 ps: 还有个…...
整数转罗马数字
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function intToRoman(num) {// 定义罗马数字符号和对应的整数值,按照从大到小的顺序排列const values [1000, 900, 500, 400, 100, 90, 50, 40,…...
数据结构--树
树的基本概念 树:一个或多个节点的有限集合。 存在一个称为根的特定节点,其余的节点被分为n个互不相交的集合T1,T2,…,Tn,其中的每一个集合都是一棵树。T1,T2,…,Tn称为根…...
Next.js 14 TS 中使用jwt 和 App Router 进行管理
jwt是一个很基础的工作。但是因为架构不一样,就算是相同的架构,版本不一样,加jwt都会有一定的差别。现在我们的项目是Next.js 14 TS 的 App Router项目(就是没有pages那种),添加jwt的步骤: 1、…...
oracle 分区表介绍
oracle 分区表介绍 Oracle 分区表是一个非常强大的数据库功能,可以将一个大的表分割成多个更小、更易管理的块(分区)。这种分区结构在处理大规模数据时非常有用,因为它能改善性能、简化维护和管理,并支持高效的数据存取…...
TypeScript 学习 -类型 - 9
声明合并 成员变量合并:成员变量会合并,但类型必须一致。成员函数合并:如果函数签名不同,合并后的函数会是签名的联合类型。接口声明顺序:在同一个接口内按顺序合并;不同接口时,后声明的会覆盖…...
996引擎 - 前期准备-配置开发环境
996引擎 - 前期准备 官网搭建服务端、客户端单机搭建开发环境配置后端开发环境配置环境前端开发环境配置环境后端简介前端简介GUILayoutGUIExport官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭建服务端、客户端 这个教…...
python-decouple和 django-environ管理 Python/Django 项目中的环境变量
在现代软件开发中,环境变量的管理是一个至关重要的任务。环境变量通常用于存储敏感信息(如 API 密钥、数据库凭据)或配置信息(如调试模式、日志级别)。为了更安全、更方便地管理环境变量,Python 社区提供了许多工具,其中最流行的两个是 python-decouple 和 django-envir…...
FileReader使用
FileReader : 读取文件内容的api,,,在前端处理上传的文件,,比如预览图片 readAsDataURL(file) : 读取为base64编码的 data urlreadAsText() : 读取为文本readAsArrayBuffer() : 读取为二进制 …...
npm cnpm pnpm npx yarn的区别
npm、cnpm、pnpm、npx、yarn 这几个工具都与 Node.js 项目的包管理和命令执行相关,它们的区别具体如下: 本质与功能定位 npm:是 Node.js 官方的包管理工具,提供了安装、卸载、更新、发布等全方位的包管理功能,还能通…...
knots = unique(knots, ‘stable‘);区别引用
【问题】knots unique(knots, stable); 和unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 的区别 【解释】knots unique(knots, stable); 和 unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 两段代码的主要区别在于它们处理重…...
c++ 定点 new
(1) 代码距离: #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…...
无人机如何自主侦察?UEAVAD:基于视觉的无人机主动目标探测与导航数据集
作者:Xinhua Jiang, Tianpeng Liu, Li Liu, Zhen Liu, and Yongxiang Liu 单位:国防科技大学电子科学学院 论文标题:UEVAVD: A Dataset for Developing UAV’s Eye View Active Object Detection 论文链接:https://arxiv.org/p…...
怎样在PPT中启用演讲者视图功能?
怎样在PPT中启用演讲者视图功能? 如果你曾经参加过重要的会议或者演讲,你就会知道,演讲者视图(Presenter View)对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏,还能提供额外的提示和支持&#…...
大语言模型LLM在地理信息GIS中应用场景
AI&地理 AI大语言模型在地理中的应用主要体现在以下几个方面: 一、地理信息检索与查询 AI大语言模型能够理解复杂的自然语言查询,包括地名、地理位置、地理特征等,从而提供更加精准的地理信息检索服务。例如,用户可以通过自…...
AI常见的算法
人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…...