当前位置: 首页 > news >正文

读 DeepSeek-R1 论文笔记

DeepSeek-R1:通过强化学习激发大语言模型的推理能力

DeepSeek-AI

摘要

我们推出第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero作为无需监督微调(SFT)预训练阶段、直接通过大规模强化学习(RL)训练的基础模型,展现出卓越的推理能力。通过RL训练,该模型自然涌现出大量强大且有趣的推理行为,但也面临可读性差、语言混杂等问题。为解决这些问题并进一步提升推理性能,我们引入DeepSeek-R1模型,该模型在RL训练前融合了多阶段训练和冷启动数据策略。DeepSeek-R1在推理任务中达到与OpenAI-o1-1217相媲美的性能。为支持研究社区,我们开源了DeepSeek-R1-Zero、DeepSeek-R1以及基于Qwen和Llama架构从DeepSeek-R1蒸馏的六个密集模型(1.5B、7B、8B、14B、32B、70B)。

1. 引言

近年来,大型语言模型(LLMs)经历了快速迭代与进化(Anthropic, 2024; Google, 2024; OpenAI, 2024a),逐步缩小了与通用人工智能(AGI)的差距。

后训练(post-training)已成为完整训练流程中的重要组成部分。研究表明,该技术能以相对预训练更低的计算资源成本,提升推理任务的准确性,实现社会价值观对齐,并适应用户偏好。在推理能力提升方面,OpenAI的o1系列模型(OpenAI, 2024b)率先通过扩展思维链推理过程的长度实现推理时延展,在数学、编程和科学推理等任务中取得显著进步。然而,有效的测试时延展仍是研究界待解决的开放性问题。已有研究探索了多种方法,包括基于过程的奖励模型(Lightman et al., 2023; Uesato et al., 2022; Wang et al., 2023)、强化学习(Kumar et al., 2024)以及蒙特卡洛树搜索和束搜索等算法(Feng et al., 2024; Trinh et al., 2024; Xin et al., 2024),但尚未有方法能达到与OpenAI o1系列模型相匹敌的通用推理性能。

  • 测试时延展(test-time extension) 是指在模型推理阶段,通过扩展其生成过程或改进其决策机制,以提升模型在复杂任务上的表现——也就是说推理过程(Reasoning)有利于提高答案准确性。
  • 基于过程的奖励,传统强化学习用的多,能减小训练波动,但奖励值不好设置,算法复杂。
  • 蒙特卡洛树搜索和束搜索,为了让 LLM 学习推理的最优路径。

在这里插入图片描述
图1. DeepSeek-R1基准测试性能

本文首次尝试通过纯强化学习(RL)提升语言模型的推理能力。我们以DeepSeek-V3-Base为基础模型,采用GRPO框架(Shao et al., 2024)进行强化学习,探索LLM在无监督数据条件下通过纯RL过程实现自我进化的潜力。在训练过程中,DeepSeek-R1-Zero自然涌现出大量强大的推理行为。经过数千步RL训练后,该模型在推理基准测试中展现出卓越性能:例如在AIME 2024测试中,pass@1分数从15.6%提升至71.0%,多数投票后更达86.7%,与OpenAI-o1-0912性能相当。

这部分指出:强化学习对 LLM 的推理性能有很大影响
训练方法 GRPO 出自于DeepSeekMath论文。

为解决DeepSeek-R1-Zero存在的可读性差、语言混杂等问题并进一步提升推理性能,我们开发了DeepSeek-R1模型。该模型采用冷启动数据与多阶段训练流程:首先收集数千条冷启动数据对基础模型进行微调,随后实施类似DeepSeek-R1-Zero的推理导向RL训练。当RL过程接近收敛时,通过拒绝采样生成新SFT数据,结合DeepSeek-V3在写作、事实问答和自我认知等领域的监督数据,对基础模型进行再训练。最后进行全场景提示的附加RL过程,最终获得性能与OpenAI-o1-1217相当的DeepSeek-R1。

这部分指出:冷启动(在 RL 前进行高质量的 SFT )进一步提高推理能力,且规范回答格式(可读性好,语言一致)

  • 拒绝采样:生成多个回答,挑最好的(按照正确性、逻辑性、规范性)。

我们进一步探索了从DeepSeek-R1到小型密集模型的蒸馏技术。以Qwen2.5-32B(Qwen, 2024b)为基础模型时,直接蒸馏DeepSeek-R1的效果优于对其应用RL训练,这表明大基座模型发现的推理模式对提升推理能力至关重要。我们开源了基于Qwen和Llama(Dubey et al., 2024)架构的蒸馏模型系列。值得注意的是,蒸馏后的14B模型显著超越当前最优开源模型QwQ-32B-Preview(Qwen, 2024a),而32B和70B版本则在密集模型推理基准测试中创下新纪录。

这部分指出:对于参数量小的模型,用蒸馏出来的推理数据(带思考过程的数据)做 SFT,比应用 RL 更有效。

  • 蒸馏:用参数量大的模型生成回答数据,再用这些数据指导(训练)小模型。

1. 贡献

1.1 基础模型上的大规模强化学习(Post-Training)

  • 我们直接在基础模型上应用强化学习(Reinforcement Learning, RL),而无需依赖监督微调(Supervised Fine-Tuning, SFT)作为预处理步骤。这种创新方法使模型能够探索链式思维(Chain-of-Thought, CoT),从而解决复杂问题。由此开发的DeepSeek-R1-Zero展示了自验证、自省以及生成长链式思维的能力,标志着研究领域的重要里程碑。值得注意的是,这是首个公开研究,验证了通过纯强化学习激励大型语言模型(LLMs)的推理能力,无需监督微调。这一突破为未来在该领域的进一步发展铺平了道路。
  • 我们介绍了开发DeepSeek-R1的工作流。该工作流包含两个强化学习阶段,旨在发现改进的推理模式并使其与人类偏好对齐,以及两个监督微调阶段,作为模型推理能力和非推理能力的种子。我们相信,这一管道将为行业创建更优秀的模型提供重要参考。

1.2 小型模型的蒸馏(Distillation)

  • 我们证明了将大型模型的推理模式蒸馏到小型模型中是可行的,并且与直接在小型模型上通过强化学习发现的推理模式相比,性能更优。开源的DeepSeek-R1及其API将为研究社区提供宝贵的资源,用于未来蒸馏更强大的小型模型。
  • 利用DeepSeek-R1生成的推理数据,我们对一系列在研究社区广泛使用的密集模型进行了微调。评估结果显示,蒸馏后的小型密集模型在基准测试中表现卓越。具体而言,DeepSeek-R1-Distill-Qwen-7B在AIME 2024上达到了55.5%的准确率,超越了QwQ-32B-Preview。此外,DeepSeek-R1-Distill-Qwen-32B在AIME 2024上达到了72.6%,在MATH-500上达到了94.3%,在LiveCodeBench上达到了57.2%。这些成绩不仅显著优于开源模型,还与o1-mini相媲美。我们向社区开源了基于Qwen2.5和Llama3系列的1.5B、7B、8B、14B、32B和70B检查点,以促进进一步的研究。

1.2 评估结果摘要

  • 推理任务:(1)DeepSeek-R1在AIME 2024上实现了79.8%的Pass@1准确率,略高于OpenAI-o1-1217。在MATH-500上,它取得了97.3%的优异成绩,与OpenAI-o1-1217持平,并显著超越了其他模型。(2)在与代码相关的任务中,DeepSeek-R1展现了专家级的竞赛能力,Codeforces上的Elo评分为2,029,超越了96.3%的人类参赛者。对于工程相关任务,DeepSeek-R1的表现略优于DeepSeek-V3,这将有助于开发者在实际任务中更高效地工作。
  • 知识任务:在MMLU、MMLU-Pro和GPQA Diamond等基准测试中,DeepSeek-R1取得了出色的成绩,显著优于DeepSeek-V3。具体表现为:在MMLU上达到90.8%,在MMLU-Pro上达到84.0%,在GPQA Diamond上达到71.5%。尽管在这些基准上其性能略低于OpenAI-o1-1217,但DeepSeek-R1仍优于其他闭源模型,展现了其在教育任务中的强大竞争力。在事实基准SimpleQA上,DeepSeek-R1的表现优于DeepSeek-V3,进一步证明了其在处理事实性查询方面的能力。与之类似,OpenAI-o1在该基准上也表现优异。
  • 其他任务:DeepSeek-R1在创意写作、通用问答、编辑、总结等广泛任务中也表现出色。在AlpacaEval 2.0上,其长度控制的胜率达到了87.6%,在ArenaHard上胜率高达92.3%,充分展现了其在处理非考试导向型查询时的智能能力。此外,DeepSeek-R1在需要长上下文理解的任务中表现尤为突出,显著优于DeepSeek-V3在长上下文基准上的表现。

2. 方法

2.1 概述

以往的研究 heavily 依赖于大量监督数据来提升模型性能。在本研究中,我们展示了通过大规模强化学习(Reinforcement Learning, RL)可以显著提升推理能力,即使不使用监督微调(Supervised Fine-Tuning, SFT)作为冷启动。此外,加入少量冷启动数据可以进一步提升性能。在以下部分,我们将介绍:(1)DeepSeek-R1-Zero,该模型直接在基础模型上应用强化学习,无需任何SFT数据;(2)DeepSeek-R1,该模型从包含数千个长链式思维(Chain-of-Thought, CoT)示例的检查点开始,应用强化学习;(3)将DeepSeek-R1的推理能力蒸馏到小型密集模型中。

2.2 DeepSeek-R1-Zero:基础模型上的强化学习

强化学习在推理任务中已经展示了显著的有效性,如我们之前的研究所示(Shao et al., 2024; Wang et al., 2023)。然而,这些工作 heavily 依赖于监督数据,而这些数据的收集需要大量时间和资源。在本节中,我们探索了大型语言模型(LLMs)在没有任何监督数据的情况下发展推理能力的潜力,重点在于通过纯强化学习过程实现模型的自我进化。我们从简要概述我们的强化学习算法开始,随后展示一些令人兴奋的结果,并希望这能为社区提供有价值的见解。

参考了一些文章,DS R1训练过程中有从 Checkpoint (断点保存)模型生成数据……这在实际应用很常见,但一方面从 DS R1 的工作流来看,不可完全借鉴,需要随机应变。
倘若搞懂 DS R1 的 Pipeline ,不妨看看 Open R1项目的 Pipeline 。

  • Step1 讲了蒸馏模型是怎么来的——对应了贡献1.2。相对于模型蒸馏,业内还是更关注强化学习训练阶段——毕竟大部人不会真的对 R1 提问几百万次蒸馏出来一个数据集。
  • Step2 是直接用 GRPO 对模型进行强化学习得到 R1-Zero,缺点是输出格式杂乱。
  • Step3 使用 R1-Zero 蒸馏出来推理数据,先做一次 SFT ,再用 RL 强化,得到 R1
    在这里插入图片描述

2.2.1 强化学习算法

组相对策略优化(Group Relative Policy Optimization)
为了节省强化学习的训练成本,我们采用了组相对策略优化(GRPO)(Shao et al., 2024)。与通常与策略模型大小相同的评论模型不同,GRPO通过组得分估计基线。具体来说,对于每个问题 q q q,GRPO从旧策略 π θ o l d \pi_{\theta}^{old} πθold中采样一组输出 { o 1 , o 2 , … , o G } \{o_1, o_2, \dots, o_G\} {o1,o2,,oG},然后通过最大化以下目标来优化策略模型 π θ \pi_{\theta} πθ

J G R P O ( θ ) = E [ ∑ q ∼ P ( Q ) ∑ { o i } G ∼ π θ o l d ( O ∣ q ) min ⁡ ( π θ ( o i ∣ q ) π θ o l d ( o i ∣ q ) A i , clip ( π θ ( o i ∣ q ) π θ o l d ( o i ∣ q ) , 1 − ϵ , 1 + ϵ ) A i ) ] J_{GRPO}(\theta) = \mathbb{E}\left[ \sum_{q \sim P(Q)} \sum_{\{o_i\}_G \sim \pi_{\theta}^{old}(O|q)} \min\left( \frac{\pi_{\theta}(o_i|q)}{\pi_{\theta}^{old}(o_i|q)} A_i, \text{clip}\left( \frac{\pi_{\theta}(o_i|q)}{\pi_{\theta}^{old}(o_i|q)}, 1-\epsilon, 1+\epsilon \right) A_i \right) \right] JGRPO(θ)=E qP(Q){oi}Gπθold(Oq)min(πθold(oiq)πθ(oiq)Ai,clip(πθold(oiq)πθ(oiq),1ϵ,1+ϵ)Ai)

β D K L ( π ∣ ∣ π r e f ) \beta D_{KL}(\pi || \pi_{ref}) βDKL(π∣∣πref)

其中, ϵ \epsilon ϵ β \beta β 是超参数, A i A_i Ai 是优势,通过每个组的奖励 { r 1 , r 2 , … , r G } \{r_1, r_2, \dots, r_G\} {r1,r2,,rG}计算:

A i = r i − mean ( { r 1 , r 2 , … , r G } ) std ( { r 1 , r 2 , … , r G } ) A_i = \frac{r_i - \text{mean}(\{r_1, r_2, \dots, r_G\})}{\text{std}(\{r_1, r_2, \dots, r_G\})} Ai=std({r1,r2,,rG})rimean({r1,r2,,rG})

D K L ( π ∣ ∣ π r e f ) D_{KL}(\pi || \pi_{ref}) DKL(π∣∣πref) 是策略 π \pi π与参考策略 π r e f \pi_{ref} πref之间的KL散度,定义为:

D K L ( π ∣ ∣ π r e f ) = ∑ o i ( π r e f ( o i ∣ q ) π θ ( o i ∣ q ) − log ⁡ π r e f ( o i ∣ q ) π θ ( o i ∣ q ) − 1 ) D_{KL}(\pi || \pi_{ref}) = \sum_{o_i} \left( \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - \log \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - 1 \right) DKL(π∣∣πref)=oi(πθ(oiq)πref(oiq)logπθ(oiq)πref(oiq)1)

GRPO通过组得分估计基线,避免了维护一个与策略模型大小相同的评论模型,从而显著降低了训练成本。此外,通过使用组内的相对奖励,算法能够更好地捕捉策略的改进方向,从而提升学习效率。

这一部分不再赘述了,笔者前些日子发了一篇 GRPO 的解读:
【DeepSeek】一文详解GRPO算法——为什么能减少大模型训练资源?
【DeepSeek】GRPO论文译文 - DeepSeekMath: 推动开放语言模型在数学推理能力上的极限

2.2.2 奖励建模

奖励是训练信号的来源,决定了强化学习的优化方向。为训练DeepSeek-R1-Zero,我们采用基于规则的奖励系统,主要包括两类奖励:

  • 准确性奖励:准确性奖励模型评估响应是否正确。例如,对于结果确定的数学问题,模型需要以指定格式(如方框内)提供最终答案,从而支持可靠的基于规则的正确性验证。类似地,对于LeetCode问题,可以使用编译器根据预定义测试用例生成反馈。

给一段代码就懂了,提取回答中的答案,根据正确率来计算奖励值:

# 奖励函数:判断生成结果是否与期望答案一致,返回相应的奖励分数 def correctness_reward_func(prompts, completions, answer, **kwargs) -> list[float]:"""正确性奖励函数参数说明:prompts: 包含提示信息的列表,其中每个元素为对话轮次,最后一个通常是最后user的提问;completions: 模型生成的回复列表,每个回复为一个列表,列表中的第一个元素包含回复内容;answer: 真实答案的列表;**kwargs: 其它可选参数。功能:从completions中提取出回复文本,通过extract_xml_answer函数抽取XML格式中的答案,并将抽取后的答案与真实答案进行比较,若相同则奖励2.0分,否则奖励0.0分。同时打印中间调试信息。"""# 从每个生成结果中取出第一个回复的内容,构成responses列表responses = [completion[0]['content'] for completion in completions]# 从prompts中取出最后一轮用户提问的内容(假设最后一轮为用户提问)q = prompts[0][-1]['content']# 对每个回复使用extract_xml_answer函数提取XML格式封装的答案,形成抽取后的答案列表extracted_responses = [extract_xml_answer(r) for r in responses]# 打印调试信息,包括题目、真实答案、模型原始回复和抽取后的答案,便于调试时观察中间结果print('-' * 20, f"Question:\n{q}", f"\nAnswer:\n{answer[0]}", f"\nResponse:\n{responses[0]}",
f"\nExtracted:\n{extracted_responses[0]}")# 比较每个抽取的答案与真实答案,若相等则奖励2.0分,否则奖励0.0分,并返回奖励列表return [2.0 if r == a else 0.0 for r, a in zip(extracted_responses, answer)]  ```
  • 格式奖励:除准确性奖励模型外,我们还采用格式奖励模型,强制模型将思考过程置于<reasoning></reasoning>标签之间。

同理,通过正则表达式解析标签,计算奖励

# 严格格式奖励函数:检查生成回复是否严格符合预定的XML格式要求
def strict_format_reward_func(completions, **kwargs) -> list[float]:"""严格格式奖励函数参数说明:completions: 模型生成的回复列表,每个回复为一个列表,列表中的第一个元素包含回复内容;**kwargs: 其它可选参数。功能:定义一个正则表达式模式,要求回复必须严格符合如下格式:<reasoning>...(任意内容)...</reasoning><answer>...(任意内容)...</answer>如果回复匹配该严格格式,则奖励0.5分,否则奖励0.0分。"""# 定义正则表达式模式,要求每个部分必须为单独的一行,并且整个回复必须严格匹配整个格式(从开头到结尾)pattern = r"^<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>\n$"# 提取每个生成结果的文本内容responses = [completion[0]["content"] for completion in completions]# 使用正则表达式匹配每个回复,检查是否严格符合预定格式matches = [re.match(pattern, r) for r in responses]# 如果匹配成功,则给予0.5分奖励;否则奖励0.0分return [0.5 if match else 0.0 for match in matches]```

在开发DeepSeek-R1-Zero时,我们未使用基于结果的神经奖励模型或过程神经奖励模型。这是因为我们发现神经奖励模型在大规模强化学习过程中可能遭遇奖励劫持(reward hacking)问题,且重新训练奖励模型需要额外资源,并会使整个训练流程复杂化。

奖励劫持是强化学习中难以解决的问题,指因为奖励函数(模型)设置的不精细导致优化目的和根本目的出现了偏差。
如:在一个足球游戏中,智能体每次触球都会获得奖励,结果智能体学会一直站在球旁高频触球,像振动一样。
推荐你看一下这篇文章:
【Lilian Weng’s blog】强化学习中的奖励黑客(奖励劫持)问题
附上鄙人的一篇,【强化学习】如何设计一个好的奖励函数?

2.2.3 训练模板

为训练DeepSeek-R1-Zero,我们设计了一个简洁的模板来引导基础模型遵循指定指令。如表1所示,该模板要求DeepSeek-R1-Zero先生成推理过程,再输出最终答案。我们有意将约束限制在结构格式层面,避免引入内容特定偏见(例如强制反思性推理或特定解题策略),以确保能准确观察模型在强化学习过程中的自然进化。

表1. DeepSeek-R1-Zero模板(训练时prompt会被具体推理问题替换)

用户与助手的对话。用户提出问题,助手解决问题。
助手首先在脑海中思考推理过程,然后向用户提供答案。
推理过程和答案分别用<reasoning></reasoning>和<answer></answer>标签包裹,
即:<reasoning> 此处为推理过程 </reasoning> <answer> 此处为答案 </answer>。
用户:prompt
助手:

鄙人不才,但可以放一段示例模板——不要在意内容哈哈(自己训练的 3B 模型不怎么聪明的亚子——鲁智深怎么能是《红楼梦》中的人物呢)
在这里插入图片描述

2.2.4 DeepSeek-R1-Zero的性能、自进化过程与顿悟时刻

DeepSeek-R1-Zero的性能表现
图2展示了DeepSeek-R1-Zero在AIME 2024基准测试上的性能随强化学习训练推进的变化轨迹。如图所示,随着强化学习训练的深入,DeepSeek-R1-Zero表现出持续稳定的性能提升。值得注意的是,AIME 2024的平均Pass@1分数从初始的15.6%显著跃升至71.0%,达到与OpenAI-o1-0912相当的水平。这一显著改进凸显了我们强化学习算法在持续优化模型性能方面的有效性。

表2. DeepSeek-R1-Zero与OpenAI o1模型在推理相关基准上的比较。
在这里插入图片描述

在这里插入图片描述
图2. DeepSeek-R1-Zero在AIME 2024上的性能提升曲线

无需监督数据的稳健推理能力
DeepSeek-R1-Zero无需任何监督微调数据即可获得稳健的推理能力,这一成就值得关注,因为它突显了模型仅通过强化学习就能有效学习和泛化的能力。此外,通过应用多数投票(majority voting)可进一步提升DeepSeek-R1-Zero的性能。例如,在AIME基准测试中采用多数投票时,其性能从71.0%提升至86.7%,从而超越OpenAI-o1-0912的表现。无论是否使用多数投票,DeepSeek-R1-Zero均能实现如此竞争力的性能,这彰显了其强大的基础能力及在推理任务中进一步发展的潜力。

DeepSeek-R1-Zero的自进化过程
DeepSeek-R1-Zero的自进化过程生动展示了强化学习如何驱动模型自主提升推理能力。通过直接从基础模型启动强化学习,我们能够在不受监督微调阶段影响的情况下密切观察模型的进化轨迹。这种方法清晰地展现了模型随时间推移的演变过程,特别是在处理复杂推理任务方面的能力提升。

在这里插入图片描述图3. 强化学习过程中DeepSeek-R1-Zero在训练集上的平均响应长度。模型自然地学会通过延长思考时间解决推理任务。

如图3所示,DeepSeek-R1-Zero的思考时间在整个训练过程中持续改善。这种改进并非来自外部调整,而是模型内在能力的自然发展。通过扩展测试时计算(从生成数百到数千个推理token),DeepSeek-R1-Zero自然地获得了解决日益复杂推理任务的能力,使其能够更深入地探索和优化思维过程。

这种自进化最显著的特征是随着测试时计算的增加,模型涌现出复杂行为。例如反思行为(模型重新审视并评估先前步骤)和多路径问题求解探索会自发产生。这些行为并非显式编程实现,而是模型与强化学习环境交互的自然结果。这种自发演化显著增强了DeepSeek-R1-Zero的推理能力,使其能以更高效率和准确率应对更具挑战性的任务。

还记得引言部分么?作者说:
“已有研究探索了多种方法,包括……以及蒙特卡洛树搜索和束搜索等算法(Feng et al., 2024; Trinh et al., 2024; Xin et al., 2024),但尚未有方法能达到与OpenAI o1系列模型相匹敌的通用推理性能。”
这里又仿佛在说:
“我们没有拿很复杂的方法来教 LLM,只用了强化学习,LLM 就自己学会了反思、多方面思考问题。”
“这是是模型与强化学习环境交互的自然结果。”

DeepSeek-R1-Zero的"顿悟时刻"
在DeepSeek-R1-Zero训练过程中观察到一个特别有趣的现象——"顿悟时刻"的出现。如表3所示,这一现象发生在模型的中间版本阶段。在此阶段,DeepSeek-R1-Zero通过重新评估初始方法,学会为问题分配更多思考时间。这种行为不仅证明了模型推理能力的增长,也生动展示了强化学习如何产生出人意料的复杂结果。

这个时刻不仅是模型的"顿悟时刻",对观察其行为的研究人员而言同样意义重大。它突显了强化学习的强大与精妙:我们无需显式教导模型如何解决问题,只需提供适当激励,模型就能自主发展出高级解题策略。"顿悟时刻"有力证明了强化学习在解锁人工智能系统新智能层级方面的潜力,为未来开发更自主、更具适应性的模型铺平道路。

表3. DeepSeek-R1-Zero中间版本的有趣"顿悟时刻"(模型以拟人化语气进行反思,这也是研究者的顿悟时刻)

问题:当𝑎 > 1时,方程 a − a + x = x \sqrt{a - \sqrt{a + x}} = x aa+x =x的实根之和等于?
( a − a + x ) 2 = x 2 ⟹ a − a + x = x 2 \left( \sqrt{a - \sqrt{a + x}} \right)^2 = x^2 \implies a - \sqrt{a + x} = x^2 (aa+x )2=x2aa+x =x2
整理方程以分离内部平方根项:
( a − x 2 ) 2 = a + x ⟹ a 2 − 2 a x 2 + x 4 = a + x ⟹ x 4 − 2 a x 2 − x + ( a 2 − a ) = 0 (a - x^2)^2 = a + x \implies a^2 - 2a x^2 + x^4 = a + x \implies x^4 - 2a x^2 - x + (a^2 - a) = 0 (ax2)2=a+xa22ax2+x4=a+xx42ax2x+(a2a)=0
等等,这里需要标记一个顿悟时刻
让我们逐步重新评估以确定正确解的和…
原始方程:
a − a + x = x \sqrt{a - \sqrt{a + x}} = x aa+x =x
第一次平方后:
a − a + x = x 2 ⟹ a + x = a − x 2 a - \sqrt{a + x} = x^2 \implies \sqrt{a + x} = a - x^2 aa+x =x2a+x =ax2
接下来可再次平方处理:

也许就像教孩子,付诸心血——他现在无师自通(反思与纠错),出人意料。

DeepSeek-R1-Zero的局限性
尽管DeepSeek-R1-Zero展现出强大的推理能力并自主发展出意外的高级行为,但仍面临若干问题。例如,该模型存在可读性差、语言混杂等挑战。为提升推理过程的可读性并与开源社区共享,我们进一步探索了DeepSeek-R1方法——通过结合人类友好型冷启动数据应用强化学习。

2.3 DeepSeek-R1:冷启动强化学习

受DeepSeek-R1-Zero优异表现的启发,我们提出两个关键问题:(1)通过引入少量高质量冷启动数据能否进一步提升推理性能或加速收敛?(2)如何训练既生成清晰连贯思维链(CoT)又具备强大通用能力的用户友好型模型?为此,我们设计了包含四个阶段的DeepSeek-R1训练流程。

这一步是因为 R1-Zero 聪明,但输出格式杂乱,研究者做的尝试。
我能感受到,DS R1 比 DS V3 虽聪明,但有时候对格式的把控不完美(比如让他不遗漏地翻译,几轮对话后他还是会遗漏、概括性的翻译)。

2.3.1 冷启动

为避免基础模型直接进行强化学习时的不稳定冷启动阶段,DeepSeek-R1通过构建少量长链式思维(CoT)数据对模型进行微调,作为强化学习的初始策略。数据收集方法包括:

  • 使用长CoT示例进行少样本提示
  • 直接提示模型生成含反思与验证的详细答案
  • 收集DeepSeek-R1-Zero的可读格式输出
  • 通过人工标注后处理优化结果

在本工作中,我们收集数千条冷启动数据对DeepSeek-V3-Base进行微调。相较于DeepSeek-R1-Zero,冷启动数据的优势体现在:

可读性优势
针对DeepSeek-R1-Zero存在的多语言混杂、答案高亮缺失等问题,我们设计了结构化输出格式:

|special_token|<reasoning_process>|special_token|<summary>

其中<reasoning_process>为问题推理过程,<summary>为推理结果总结。该模式通过末端总结和可读性过滤机制提升用户友好性。

性能潜力
通过结合人类先验知识精心设计冷启动数据模式,我们观察到其性能优于DeepSeek-R1-Zero。这表明迭代式训练对推理模型更具优势。

2.3.2 面向推理的强化学习

在冷启动微调后,我们采用与DeepSeek-R1-Zero相同的大规模强化学习流程,重点提升模型在编程、数学、科学和逻辑推理等任务中的表现。为应对多语言混杂问题,引入语言一致性奖励
语言一致性奖励 = 目标语言词汇数 CoT总词汇数 \text{语言一致性奖励} = \frac{\text{目标语言词汇数}}{\text{CoT总词汇数}} 语言一致性奖励=CoT总词汇数目标语言词汇数
尽管消融实验显示该奖励会轻微降低模型性能(约0.5%),但其显著提升了人类可读性。最终奖励由推理准确性和语言一致性线性组合构成:
奖 励 最终 = 奖 励 准确性 + λ 奖 励 语言一致性 奖励_{最终} = 奖励_{准确性} + \lambda 奖励_{语言一致性} 最终=准确性+λ语言一致性
其中 λ \lambda λ为平衡系数。模型在此混合奖励驱动下进行强化学习直至收敛。

2.3.3 拒绝采样与监督微调

当推理导向的强化学习收敛后,我们通过以下两阶段扩展模型能力:

推理数据增强

  1. 使用强化学习检查点(Checkpoint)进行拒绝采样,收集约60万条推理相关训练样本
  2. 引入生成式奖励模型(DeepSeek-V3)评估预测与真实结果
  3. 过滤多语言混杂、冗长段落和代码块
  4. 对每个提示采样多个响应,仅保留正确答案

非推理能力扩展

  1. 复用DeepSeek-V3的20万条SFT数据集
  2. 覆盖写作、事实问答、自我认知、翻译等任务
  3. 对复杂查询添加潜在思维链,简单查询(如"你好")直接响应

最终组合80万条训练样本(60万推理+20万非推理),对DeepSeek-V3-Base进行两轮微调。该流程使模型在保持推理优势的同时,获得通用任务处理能力。

这部分的目的还是为了校正语言杂乱的问题,用 V3 模型挑选出多条回答中最好的。再加上监督微调的数据(增大知识量),对一些基础提问进行刻画——总不能“你是谁?我是 ChatGPT”吧😂

2.3.4 全场景强化学习

为进一步对齐人类偏好,我们实施第二阶段强化学习,旨在提升模型的帮助性(helpfulness)与无害性(harmlessness),同时优化其推理能力。具体而言,我们通过组合奖励信号与多样化提示分布来训练模型:

  • 推理数据:沿用DeepSeek-R1-Zero的方法,在数学、代码和逻辑推理领域使用基于规则的奖励指导学习过程
  • 通用数据:采用奖励模型捕捉复杂场景下的人类偏好。基于DeepSeek-V3流程,采用相似的偏好对分布和训练提示:
    • 帮助性:仅关注最终总结,确保评估聚焦于响应对用户的实用性和相关性,同时最小化对底层推理过程的干扰
    • 无害性:评估模型的完整响应(包括推理过程和总结),识别并缓解生成过程中可能出现的风险、偏见或有害内容

通过整合奖励信号与多样化数据分布,我们最终训练出在保持推理优势的同时优先满足帮助性与无害性的模型。

读这几段的感觉是,SFT 和 RL 反复横跳。
现阶段,SFT 一定会降低思考能力;RL 一定会让输出不符合人类偏好(这也就是OpenAI一直在搞 RL,偏爱 RLHF,最终效果倒也没有很大进展的原因吧)。

2.4 蒸馏:为小模型赋予推理能力

为使更高效的小型模型(如Qwen和Llama)获得类似DeepSeek-R1的推理能力,我们直接使用§2.3.3节所述的80万条精选样本进行监督微调。实验表明,这种简单蒸馏方法能显著提升小模型推理能力。具体使用的基础模型包括:

  • Qwen系列:Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B
  • Llama系列:Llama-3.1-8B、Llama-3.3-70B-Instruct(选择Llama-3.3因其推理能力略优于Llama-3.1)

尽管引入强化学习可大幅提升性能,但蒸馏模型仅应用监督微调(SFT)阶段。我们的核心目标是验证蒸馏技术的有效性,将强化学习阶段的探索留给更广泛的研究社区。

3. 实验

这部分笔者略过了,实际效果好也好,不好也不好,实际上手用一用便知。

基准测试

我们在以下基准集评估模型性能:

  • 知识评估:MMLU、MMLU-Redux、MMLU-Pro、C-Eval、CMMLU
  • 指令遵循:IFEval、FRAMES
  • 复杂推理:GPQA Diamond、SimpleQA、C-SimpleQA
  • 代码能力:SWE-Bench Verified、Aider、LiveCodeBench(2024-08 – 2025-01)、Codeforces
  • 数学竞赛:中国高中数学联赛(CNMO 2024)、美国数学邀请赛(AIME 2024)

除标准基准外,我们还使用LLM作为评判者评估开放生成任务:

  • AlpacaEval 2.0Arena-Hard:采用GPT-4-Turbo-1106进行成对比较(仅输入最终总结以避免长度偏差)
  • 蒸馏模型:重点报告AIME 2024、MATH-500、GPQA Diamond、Codeforces和LiveCodeBench结果

评估提示

  • 标准基准(MMLU、DROP等):使用simple-evals框架的提示
  • MMLU-Redux:零样本设置下采用Zero-Eval提示格式
  • MMLU-Pro、C-Eval、CLUE-WSC:将原始少样本提示调整为零样本(因少样本CoT可能损害DeepSeek-R1性能)
  • 代码/数学基准
    • HumanEval-Mul覆盖8种编程语言(Python、Java等)
    • LiveCodeBench使用CoT格式评估(数据采集时间:2024-08至2025-01)
    • Codeforces采用10场Div.2竞赛题目及专家设计测试用例
  • 生成限制:所有基准测试输出最大长度限制为32,768 tokens

基线模型

对比包括:

  • 自研模型:DeepSeek-V3系列
  • 商业模型:Claude-Sonnet-3.5-1022、GPT-4o-0513、OpenAI-o1-mini、OpenAI-o1-1217(基于官方报告)
  • 开源模型:QwQ-32B-Preview

评估设置

  • 生成长度:最大32,768 tokens
  • 解码策略:默认使用pass@k评估(非零温度采样)
    • 采样温度:0.6
    • Top-p值:0.95
    • 生成响应数k:4-64(根据测试集规模调整)
  • pass@1计算
    pass@1 = 1 k ∑ i = 1 k p i \text{pass@1} = \frac{1}{k} \sum_{i=1}^{k} p_i pass@1=k1i=1kpi
    其中 p i p_i pi表示第 i i i个响应的正确性
  • AIME 2024共识结果:使用64样本多数投票(cons@64)

3.1 DeepSeek-R1评估

表4. DeepSeek-R1与其他代表性模型的对比
在这里插入图片描述

在教育导向的知识基准测试(如MMLU、MMLU-Pro和GPQA Diamond)中,DeepSeek-R1展现出优于DeepSeek-V3的性能。这一改进主要归因于STEM相关题目准确率的提升——通过大规模强化学习实现了显著增益。此外,DeepSeek-R1在长上下文依赖的QA任务FRAMES上表现优异,展示了其强大的文档分析能力,凸显了推理模型在AI驱动搜索与数据分析任务中的潜力。

在事实性基准测试SimpleQA中,DeepSeek-R1超越DeepSeek-V3,证明其处理事实查询的能力。类似趋势也体现在OpenAI-o1在该基准上优于GPT-4o。然而,由于安全强化学习后模型倾向于拒绝回答部分查询,DeepSeek-R1在中文SimpleQA基准上的表现略逊于DeepSeek-V3。若关闭安全强化学习,其准确率可超过70%。

DeepSeek-R1在评估格式指令遵循能力的IF-Eval基准上也取得亮眼成绩。这些改进与监督微调(SFT)和强化学习最终阶段引入的指令遵循数据密切相关。此外,在AlpacaEval2.0和ArenaHard上的卓越表现表明DeepSeek-R1在写作任务和开放域问答中的优势。其显著超越DeepSeek-V3的结果印证了大规模强化学习的泛化效益——不仅增强推理能力,还提升跨领域性能。模型生成的总结长度保持简洁(ArenaHard平均689 tokens,AlpacaEval 2.0平均2,218字符),表明其避免了基于GPT评估时的长度偏差,进一步巩固了多任务鲁棒性。

在数学任务中,DeepSeek-R1达到与OpenAI-o1-1217相当的水平,大幅领先其他模型。类似优势体现在代码算法任务(如LiveCodeBench和Codeforces)上,推理导向模型主导了这些基准。在工程导向的编码任务中,OpenAI-o1-1217在Aider上优于DeepSeek-R1,但在SWE Verified上两者表现相当。由于当前相关强化学习训练数据量有限,我们预计DeepSeek-R1的工程性能将在下一版本中提升。

3.2 蒸馏模型评估

表5. DeepSeek-R1蒸馏模型与其他可比模型在推理相关基准上的对比
在这里插入图片描述

如表5所示,仅通过蒸馏DeepSeek-R1的输出,高效模型DeepSeek-R1-7B(即DeepSeek-R1-Distill-Qwen-7B,下同)即可全面超越GPT-4o-0513等非推理模型。DeepSeek-R1-14B在所有评估指标上超越QwQ-32B-Preview,而DeepSeek-R1-32B和DeepSeek-R1-70B在多数基准上显著优于o1-mini。这些结果验证了蒸馏技术的强大潜力。此外,我们发现对蒸馏模型应用强化学习可带来进一步显著增益。由于此方向值得深入探索,本文仅展示简单SFT蒸馏模型的结果。

4. 讨论

4.1 蒸馏 vs. 强化学习

在3.2节中,我们可以看到通过蒸馏DeepSeek-R1,小型模型能够取得令人印象深刻的结果。然而,仍有一个问题:模型是否能够通过本文讨论的大规模强化学习训练(无需蒸馏)实现可比性能?

为回答这一问题,我们在Qwen-32B-Base上使用数学、代码和STEM数据进行了大规模强化学习训练,训练超过10K步,得到了DeepSeek-R1-Zero-Qwen-32B。实验结果如表6所示,表明32B基础模型经过大规模强化学习训练后,其性能与QwQ-32B-Preview相当。然而,从DeepSeek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B在所有基准测试中均显著优于DeepSeek-R1-Zero-Qwen-32B。

因此,我们可以得出两个结论:首先,将更强大的模型蒸馏到小型模型中能够取得优异结果,而依赖本文提到的大规模强化学习的小型模型需要巨大的计算资源,且可能无法达到蒸馏的性能。其次,尽管蒸馏策略既经济又有效,但突破智能边界可能仍需要更强大的基础模型和更大规模的强化学习

表6. 蒸馏模型与强化学习模型在推理相关基准测试上的对比
在这里插入图片描述

4.2 失败的尝试

在开发DeepSeek-R1的早期阶段,我们也经历了一些失败和挫折。我们在此分享这些失败经验以提供见解,但这并不意味着这些方法无法开发出有效的推理模型。

引入 PRM 会不可避免的被劫持,导致优化方向不如意,且数据难标注,有一定的开销;自然语言中的 MCTS 因为可能性非常多(耗费资源)、容易陷入局部最优,试验并没有得出好结果。

过程奖励模型(PRM)
PRM是一种合理的方法,可以引导模型采用更好的方式解决推理任务(Lightman et al., 2023; Uesato et al., 2022; Wang et al., 2023)。然而,在实践中,PRM存在三个主要限制,可能阻碍其最终成功。首先,在通用推理中明确定义细粒度步骤具有挑战性。其次,判断当前中间步骤是否正确是一项困难的任务。使用模型进行自动标注可能无法获得令人满意的结果,而手动标注则不利于规模化。第三,一旦引入基于模型的PRM,不可避免地会导致奖励劫持(Gao et al., 2022),且重新训练奖励模型需要额外的训练资源,并使整个训练流程复杂化。总之,尽管PRM在重排模型生成的前N个响应或辅助引导搜索方面表现出良好的能力(Snell et al., 2024),但在我们实验中的大规模强化学习过程中,其优势相比引入的额外计算开销有限。

蒙特卡洛树搜索(MCTS)
受AlphaGo(Silver et al., 2017b)和AlphaZero(Silver et al., 2017a)的启发,我们探索了使用蒙特卡洛树搜索(MCTS)来增强测试时计算的可扩展性。这种方法将答案分解为更小的部分,使模型能够系统地探索解空间。为此,我们提示模型生成多个标签,这些标签对应于搜索所需的特定推理步骤。在训练中,我们首先使用收集的提示通过MCTS在预训练值模型的指导下找到答案。随后,我们使用生成的问题-答案对训练演员模型和值模型,并迭代优化这一过程。

然而,这种方法在扩展训练规模时遇到了几个挑战。首先,与象棋中相对明确的搜索空间不同,token生成呈现指数级更大的搜索空间。为解决这一问题,我们为每个节点设置了最大扩展限制,但这可能导致模型陷入局部最优。其次,值模型直接影响生成质量,因为它指导搜索过程的每一步。训练细粒度的值模型本身就很困难,这使得模型难以迭代改进。尽管AlphaGo的核心成功依赖于训练值模型以逐步提升性能,但由于token生成的复杂性,这一原则在我们的设置中难以复制。

总之,尽管MCTS在与预训练值模型配对时可以在推理过程中提升性能,但通过自搜索迭代提升模型性能仍然是一个重大挑战。

5. 结论、局限性与未来工作

在本研究中,我们分享了通过强化学习提升模型推理能力的探索历程。DeepSeek-R1-Zero代表了一种无需依赖冷启动数据的纯强化学习方法,在多种任务中表现出色。DeepSeek-R1则更为强大,结合了冷启动数据与迭代强化学习微调,最终在一系列任务中实现了与OpenAI-o1-1217相当的性能。

我们进一步探索了将推理能力蒸馏到小型密集模型中的方法。我们使用DeepSeek-R1作为教师模型生成了80万条训练样本,并对多个小型密集模型进行了微调。结果令人鼓舞:DeepSeek-R1-Distill-Qwen-1.5B在数学基准测试中表现优异,AIME得分为28.9%,MATH得分为83.9%,超越了GPT-4o和Claude-3.5-Sonnet。其他密集模型也取得了显著成果,显著优于基于相同检查点的其他指令微调模型。

未来,我们计划在以下方向深入研究DeepSeek-R1:

  • 通用能力:目前,DeepSeek-R1在函数调用、多轮对话、复杂角色扮演和JSON输出等任务中的能力尚不及DeepSeek-V3。未来,我们计划探索如何利用长链式思维(CoT)提升这些领域的任务表现。
  • 语言混合:DeepSeek-R1目前针对中文和英文进行了优化,这可能导致在处理其他语言查询时出现语言混合问题。例如,即使查询语言非中文或英文,DeepSeek-R1仍可能使用英文进行推理和响应。我们计划在未来的更新中解决这一局限性。
  • 提示工程:在评估DeepSeek-R1时,我们发现其对提示非常敏感。少样本提示(few-shot prompting)会持续降低其性能。因此,我们建议用户直接描述问题并使用零样本设置(zero-shot setting)指定输出格式,以获得最佳结果。
  • 软件工程任务:由于评估时间较长,影响了强化学习过程的效率,大规模强化学习尚未广泛应用于软件工程任务。因此,DeepSeek-R1在软件工程基准测试中未展现出对DeepSeek-V3的显著改进。未来版本将通过实施软件工程数据的拒绝采样或在强化学习过程中引入异步评估来提高效率。

少样本提示会降低性能——这跟 Qwen 的 QwQ 有些相似(多轮对话会让 QwQ 变笨)。或许是推理模型的共性?
在这里插入图片描述

相关文章:

读 DeepSeek-R1 论文笔记

DeepSeek-R1&#xff1a;通过强化学习激发大语言模型的推理能力 DeepSeek-AI 摘要 我们推出第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero作为无需监督微调(SFT)预训练阶段、直接通过大规模强化学习(RL)训练的基础模型&#xff0c;展现出卓越的推理能力。…...

【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和

【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和 文章目录 一、dp1.1 题意理解1.2 整体思路1.3 具体思路1.4 代码 二、多语言解法 一、dp 1.1 题意理解 nums 数组, 有正负0, 使用最多两次魔法卷轴, 希望使数组整体的累加和尽可能大. 求尽可能大的累加和 其实就…...

蓝桥杯C语言组:分治问题研究

蓝桥杯C语言组分治问题研究 摘要 本文针对蓝桥杯C语言组中的分治问题展开深入研究&#xff0c;详细介绍了分治算法的原理、实现方法及其在解决复杂问题中的应用。通过对经典例题的分析与代码实现&#xff0c;展示了分治算法在提高编程效率和解决实际问题中的重要作用&#xff…...

npm介绍(Node Package Manager)(JavaScript生态中最流行的包管理工具,主要用于Node.js项目的依赖管理)

文章目录 **核心功能****常用命令****关键文件****npm vs 其他工具****最佳实践**官方资源 npm&#xff08;Node Package Manager&#xff09;是 JavaScript 生态中最流行的包管理工具&#xff0c;主要用于 Node.js 项目的依赖管理。以下是核心要点&#xff1a; 核心功能 依赖管…...

小白零基础如何搭建CNN

1.卷积层 在PyTorch中针对卷积操作的对象和使用的场景不同&#xff0c;如有1维卷积、2维卷积、 3维卷积与转置卷积&#xff08;可以简单理解为卷积操作的逆操作&#xff09;&#xff0c;但它们的使用方法比较相似&#xff0c;都可以从torch.nn模块中调用&#xff0c;需要调用的…...

【分布式架构理论3】分布式调用(1):负载均衡

文章目录 零、三种不同的负载均衡一、常见行业负载均衡方案1. 电商与互联网服务2. 金融与支付系统3. 云计算与分布式存储 二、负载均衡策略概述1. 无状态负载均衡&#xff08;强调公平性&#xff09;2. 有状态的负载均衡&#xff08;强调正确性&#xff09; 三、 总结 零、三种…...

QT 5.15.2 开发地图ArcGIS 100.15.6(ArcGIS Runtime SDK for Qt)

QT 5.15.2ArcGIS下载 Downloads | ArcGIS Runtime API for Qt | Esri Developer ArcGIS安装&#xff08;略&#xff09;参考 Display a map | ArcGIS Maps SDK for Qt | Esri Developer QT新建工程 步骤1 步骤2 步骤3 步骤4&#xff08;选择Topographic不需要KEY) 步骤5&a…...

细读 React | React Router 路由切换原理

2022 北京冬奥会开幕式 此前一直在疑惑&#xff0c;明明 pushState()、replaceState() 不触发 popstate 事件&#xff0c;可为什么 React Router 还能挂载对应路由的组件呢&#xff1f; 翻了一下 history.js 源码&#xff0c;终于知道原因了。 源码 假设项目路由设计如下&#…...

kubernetes学习-Helm 包管理器(十二)

一、Helm解释 Helm&#xff1a;Kubernetes 的软件包管理器 Helm 被誉为查找、分享及使用 Kubernetes 软件组件的最佳途径。作为 Kubernetes 包的管理工具&#xff0c;Helm 专注于管理名为 chart 的软件包。以下是 Helm 所具备的核心功能&#xff1a; 创建新 chart&#xff1…...

PbootCMS最新代码注入漏洞(CNVD-2025-01710、CVE-2024-12789)

PbootCMS是一套高效、简洁、 强悍的可免费商用的CMS源码&#xff0c;使用PHPMySQL开发&#xff0c;能够满足各类企业网站开发建设的需要。 国家信息安全漏洞共享平台于2025-01-14公布该程序存在代码注入漏洞。 漏洞编号&#xff1a;CNVD-2025-01710、CVE-2024-12789 影响产品…...

网络安全与AI:数字经济发展双引擎

在2025年年初&#xff0c;一场科技攻防战引发了全球关注。国产人工智能DeepSeek的爆火&#xff0c;伴随着大规模的网络攻击事件&#xff0c;将网络安全的重要性推上了风口浪尖。 在此背景下&#xff0c;我们计划探讨网络安全与人工智能如何为数字经济发展提供强大动力。网络安…...

【DeepSeek × Postman】请求回复

新建一个集合 在 Postman 中创建一个测试集合 DeepSeek API Test&#xff0c;并创建一个关联的测试环境 DeepSeek API Env&#xff0c;同时定义两个变量 base_url 和 api_key 的步骤如下&#xff1a; 1. 创建测试集合 DeepSeek API Test 打开 Postman。点击左侧导航栏中的 Co…...

如何将网站提交百度收录完整SEO教程

百度收录是中文网站获取流量的重要渠道。本文以我的网站&#xff0c;www.mnxz.fun&#xff08;当然现在没啥流量&#xff09; 为例&#xff0c;详细讲解从提交收录到自动化维护的全流程。 一、百度收录提交方法 1. 验证网站所有权 1、登录百度搜索资源平台 2、选择「用户中心…...

【unity实战】实现摄像机跟随效果

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

使用Hexo部署NexT主体网站

一.使用git提交文件 参考&#xff1a; 从零开始搭建个人博客&#xff08;超详细&#xff09; - 知乎 致谢&#xff01; 第一种&#xff1a;本地没有 git 仓库 直接将远程仓库 clone 到本地&#xff1b;将文件添加并 commit 到本地仓库&#xff1b;将本地仓库的内容push到远程仓…...

使用 AlexNet 实现图片分类 | PyTorch 深度学习实战

前一篇文章&#xff0c;CNN 卷积神经网络处理图片任务 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 使用 AlexNet 实现图片分类…...

ES6 Proxy 用法总结以及 Object.defineProperty用法区别

Proxy 是 ES6 引入的一种强大的拦截机制&#xff0c;用于定义对象的基本操作&#xff08;如读取、赋值、删除等&#xff09;的自定义行为。相较于 Object.defineProperty&#xff0c;Proxy 提供了更灵活、全面的拦截能力。 1. Proxy 语法 const proxy new Proxy(target, hand…...

初次体验Tauri和Sycamore (2)

原创作者&#xff1a;庄晓立&#xff08;LIIGO&#xff09; 原创时间&#xff1a;2025年2月8日&#xff08;首次发布时间&#xff09; 原创链接&#xff1a;https://blog.csdn.net/liigo/article/details/145520637 版权所有&#xff0c;转载请注明出处。 关键词&#xff1a;Sy…...

Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)

效果:由于录制软件导致exe显示不正常,实际运行没有任何问题。 作者其他相关文章链接:           Qt - 地图相关 —— 1、加载百度在线地图(附源码)...

ffmpeg基本用法

一、用法 ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 说明&#xff1a; global options&#xff1a;全局选项&#xff0c;应用于整个 FFmpeg 进程&#xff0c;它们通常不受输入或输出部分的限制。 infile options&#xff1a;输入选…...

redis底层数据结构——链表

文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力&#xff0c;以及顺序性的节点访间方式&#xff0c;并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构&#xff0c;链表内置在很多高级的编程语言里面&#xff0c;因为Redis使用的C语言并没有…...

Repo命令使用

repo 命令与 git 类似&#xff0c;但它主要用于管理多个 Git 仓库的操作。以下是等效的 repo 命令&#xff1a; 1. 获取新仓库代码 克隆仓库 repo init -u <manifest_url> -b <branch_name> repo sync repo init&#xff1a;初始化 repo&#xff0c;指定远程清单…...

React 高级教程

使用 React 高级组件(HOC)实现的完整项目示例,包含权限控制、数据加载状态处理、性能优化等常见高级功能。创建一个简单的博客系统: // 项目结构: src/ |-- components/ | |-- ArticleList.jsx | |-- Article.jsx | |-- Header.jsx | |-- LoginForm.jsx | |-- U…...

Linux: ASoC 声卡硬件参数的设置过程简析

文章目录 1. 前言2. ASoC 声卡设备硬件参数2.1 将 DAI、Machine 平台的硬件参数添加到声卡2.2 打开 PCM 流时将声卡硬件参数配置到 PCM 流2.3 应用程序对 PCM 流参数进行修改调整 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&am…...

网络基础知识与配置

目录 网络基础知识 &#xff08;一&#xff09;网络的概念 &#xff08;二&#xff09;网络协议 &#xff08;三&#xff09;网络拓扑结构 &#xff08;四&#xff09;IP地址和子网掩码 显示和配置网络接口 &#xff08;一&#xff09;在Windows系统中 &#xff08;二&a…...

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…...

centos 7 关于引用stdatomic.h的问题

问题&#xff1a;/tmp/tmp4usxmdso/main.c:6:23: fatal error: stdatomic.h: No such file or directory #include <stdatomic.h> 解决步骤&#xff1a; 1.这个错误是因为缺少C编译器的标准原子操作头文件 stdatomic.h。在Linux系统中&#xff0c;我们需要安装开发工具…...

用语言模型探索语音风格空间:无需情感标签的情 感TTS

用语言模型探索语音风格空间&#xff1a;无需情感标签的情感TTS 原文&#xff1a;Exploring speech style spaces with language models: Emotional TTS without emotion labels 今天我们要说的是 一种无需情感标签的情感TTS。提出了一个基于FastSpeech2的E-TTS框架&#xff0…...

将Excel中的图片保存下载并导出

目录 效果演示 注意事项 核心代码 有需要将excel中的图片解析出来保存到本地的小伙子们看过来&#xff01;&#xff01;&#xff01; 效果演示 注意事项 仅支持xlsx格式&#xff1a;此方法适用于Office 2007及以上版本的.xlsx文件&#xff0c;旧版.xls格式无法使用。 图片名…...

2.11日学习总结

题目一 &#xff1a; AC代码 #include <stdio.h> #include <stdlib.h>// 定义长整型 typedef long long ll;// 定义求最大值和最小值的宏函数 #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b))// 定义数组和变量 ll…...

安川伺服控制器MP系列优势特点及行业应用

在工业自动化领域&#xff0c;运动控制器的性能直接决定了设备的精度、效率和可靠性。作为全球领先的运动控制品牌&#xff0c;安川电机伺服控制器凭借其卓越的技术优势和广泛的应用场景&#xff0c;正在为智能制造注入强劲动力&#xff01; MP3100&#xff1a;主板型运动控制…...

【腾讯地图】录入经纬度功能 - 支持地图选点

目录 效果展示代码引入地图服务地址弹框中输入框 - 支持手动输入经纬度/地图选点按钮地图选点弹框组件 当前文章 - 地图功能与 https://blog.csdn.net/m0_53562074/article/details/143677335 功能类似 效果展示 代码 引入地图服务地址 public/index.html <!-- 互联网地图…...

Mybatis快速入门与核心知识总结

Mybatis 1. 实体类&#xff08;Entity Class&#xff09;1.1 实体类的定义1.2 简化编写1.2.1 Data1.2.2 AllArgsConstructor1.2.3 NoArgsConstructor 2. 创建 Mapper 接口2.1 Param2.2 #{} 占位符2.3 SQL 预编译 3. 配置 MyBatis XML 映射文件&#xff08;可选&#xff09;3.1 …...

RK3568平台开发系列讲解(调试篇)网卡队列均衡负载

🚀返回专栏总目录 文章目录 一、RPS 的介绍1. RPS 的工作原理2. RPS 配置3. 启用和调优 RPS4. RPS 优势二、下行测试iperf测试沉淀、分享、成长,让自己和他人都能有所收获!😄 RPS(Receive Packet Steering) 是一种用于提高网络接收性能的技术,通常用于多核处理器系统中…...

Matlab机械手碰撞检测应用

本文包含三个部分&#xff1a; Matlab碰撞检测的实现URDF文件的制作机械手STL文件添加夹爪 一.Matlab碰撞检测的实现 首先上代码 %% 检测在结构环境中机器人是否与物体之间发生碰撞情况&#xff0c;如何避免&#xff1f; % https://www.mathworks.com/help/robotics/ug/che…...

【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念 一、常见的跨域解决方案1. 服务端配置CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff1a;2. Nginx代理3. Vue CLI配置代理&#xff1a;4 .uni-app在manifest.json中配置代理来解决&#xff1a;5. 使用WebSocket通讯…...

服务器有多少线程?发起一个请求调用第三方服务,是新增加一个请求吗?如果服务器线程使用完了怎么办?

目录 1. 服务器有多少线程? (1)服务器类型 (2)配置参数 (3)硬件资源 2. 发起一个请求调用第三方服务,是新增加一个线程吗? (1)同步调用 (2)异步调用 (3)HTTP 客户端 3. 如果服务器线程使用完了怎么办? (1)请求被拒绝 (2)性能下降 (3)解决方案…...

【Spring AI】基于SpringAI+Vue3+ElementPlus的QA系统实现一

整理不易&#xff0c;请不要吝啬你的赞和收藏。 1. 前言 这是 SpringAI 系列的第二篇文章&#xff0c;这篇文章将介绍如何基于 RAG 技术&#xff0c;使用 SpringAI Vue3 ElementPlus 实现一个 Q&A 系统。本文使用 deepseek 的 DeepSeek-V3 作为聊天模型&#xff0c;使用…...

前端快速生成接口方法

大家好&#xff0c;我是苏麟&#xff0c;今天聊一下OpenApi。 官网 &#xff1a; umijs/openapi - npm 安装命令 npm i --save-dev umijs/openapi 在根目录&#xff08;项目目录下&#xff09;创建文件 openapi.config.js import { generateService } from umijs/openapi// 自…...

【Qt 常用控件】多元素控件(QListWidget、QTabelWidgt、QTreeWidget)

**View和**Widget的区别&#xff1f; **View的实现更底层&#xff0c;**Widget是基于**View封装实现的更易用的类型。 **View使用MVC结构 MVC是软件开发中 经典的 软件结构 组织形式&#xff0c;软件设计模式。 M&#xff08;model&#xff09;模型。管理应用程序的核心数据和…...

java 读取sq3所有表数据到objectNode

1.实现效果&#xff1a;将sq3中所有表的所有字段读到objectNode 对象中&#xff0c;兼容后期表字段增删情况&#xff0c;数据组织形式如下图所示&#xff1a; 代码截图&#xff1a; 代码如下&#xff1a; package com.xxx.check.util;import java.sql.*; import java.util.Arr…...

react redux用法学习

参考资料&#xff1a; https://www.bilibili.com/video/BV1ZB4y1Z7o8 https://cn.redux.js.org/tutorials/essentials/part-5-async-logic AI工具&#xff1a;deepseek&#xff0c;通义灵码 第一天 安装相关依赖&#xff1a; 使用redux的中间件&#xff1a; npm i react-redu…...

C++20中的std::atomic_ref

一、std::atomic_ref 我们在学习C11后的原子操作时&#xff0c;都需要提前定义好std::atomic变量&#xff0c;然后才可以在后续的应用程序中进行使用。原子操作的优势在很多场合下优势非常明显&#xff0c;所以这也使得很多开发者越来习惯使用原子变量。 但是&#xff0c;在实…...

encodeURI(),encodeURIComponent()区别

encodeURI()&#xff0c;encodeURIComponent()区别 encodeURI(): 对整个url(链接/网络链接)进行编码。 对中文&#xff0c;完全编码。 对英文不带空格则不会编码&#xff0c;带空格则会对空格编码。 解码&#xff1a;decodeURI() 例如&#xff1a; let ChineseUrl "htt…...

Selenium:网页frame与多窗口处理

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、多窗口处理 1.1、多窗口简介 点击某些链接&#xff0c;会重新打开⼀个窗⼜&#xff0c;对于这种情况&#xff0c;想在新页⾯上操作&#xff0c;就 得先切换窗…...

自动驾驶---如何打造一款属于自己的自动驾驶系统

在笔者的专栏《自动驾驶Planning决策规划》中&#xff0c;主要讲解了行车的相关知识&#xff0c;从Routing&#xff0c;到Behavior Planning&#xff0c;再到Motion Planning&#xff0c;以及最后的Control&#xff0c;笔者都做了相关介绍&#xff0c;其中主要包括算法在量产上…...

开源机器人+具身智能 解决方案+AI

开源机器人、具身智能(Embodied Intelligence)以及AI技术的结合,可以为机器人领域带来全新的解决方案。以下是这一结合的可能方向和具体方案: 1. 开源机器人平台 开源机器人平台为开发者提供了灵活的基础架构,可以在此基础上结合具身智能和AI技术。以下是一些常用的开源机…...

【web自动化】指定chromedriver以及chrome路径

selenium自动化&#xff0c;指定chromedriver&#xff0c;以及chrome路径 对应这篇文章&#xff0c;可以点击查看&#xff0c;详情 from selenium import webdriverdef get_driver():# 获取配置对象option webdriver.ChromeOptions()option.add_experimental_option("de…...

高等代数笔记—线性变换

latex花体字母与花体数字 https://blog.csdn.net/weixin_39589455/article/details/133846783 https://blog.csdn.net/orz_include/article/details/123645710线性变换 线性空间 V V V到自身的映射称为 V V V的一个变换&#xff0c;最基本的是线性变换。 定义&#xff1a;变换…...

Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统

Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统 需求 在实际生成操作过程中&#xff0c;一般会遇到物理服务器存在多块盘的情况。 安装过程中&#xff0c;磁盘的标签是随机分配的&#xff0c;并不是空间较小的盘&#xff0c;就会使用较小的磁盘标签 而需求往往需要…...