【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?

如何通过强化学习(RL)有效提升大型语言模型(LLM)的推理能力?

《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写,主要介绍了他们开发的第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1,以及如何通过强化学习(Reinforcement Learning, RL)提升大型语言模型(LLMs)的推理能力。论文展示了一种前沿的开源推理模型(Reasoning model),以及使用大规模强化学习技术训练此类模型的详细方法。

本文介绍了DS团队的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规模强化学习(RL)训练的模型,没有经过监督微调(SFT)作为初步步骤,展示了显著的推理能力。通过强化学习,DeepSeek-R1-Zero自然展现出许多强大且有趣的推理行为。然而,它面临着可读性差和语言混合等挑战。为了解决这些问题并进一步提升推理性能,DS团队推出了 DeepSeek-R1,该模型在强化学习之前融入了多阶段训练和冷启动数据。DeepSeek-R1 在推理任务上的表现与 OpenAI-o1-1217 相当。为了支持研究社区,DS团队开源了 DeepSeek-R1-Zero、DeepSeek-R1 以及从 6个从 DeepSeek-R1 蒸馏出的稠密模型(1.5B、7B、8B、14B、32B、70B),这些模型基于 Qwen 和 Llama 构建。

  • DeepSeek-R1-Zero:无需SFT(监督式微调),纯RL,展现了自我进化能力,但存在可读性问题。

  • DeepSeek-R1:冷启动 + 多阶段训练,解决Zero遇到的问题,多个推理benchmark上取得了和OpenAI-o1-1217相近的水平。

  • 小模型蒸馏:知识蒸馏后的小模型在推理benchmark上也表现出强大的竞争力,远超原始开源模型,包括Qwen2.5和Llama3。

 

一、背景

近年来,大型语言模型(LLMs)经历了快速的迭代和演变,逐渐缩小了与人工通用智能(AGI)之间的差距。最近,后训练已成为完整训练流程中的一个重要组成部分。研究表明,它能够提高推理任务的准确性,与社会价值观保持一致,并适应用户偏好,同时在计算资源需求上相较于预训练相对较少。在推理能力的背景下,OpenAI的o1系列模型首次通过增加链式思维推理过程的长度引入了推理时的扩展。这种方法在数学、编程和科学推理等各种推理任务中取得了显著的改善。然而,有效的测试时间扩展的挑战仍然是研究界的一个未解之谜。之前的几项研究探索了各种方法,包括基于过程的奖励模型(PRM)、强化学习(RL)以及搜索算法,如蒙特卡洛树搜索(MCTS)和束搜索(BS)。然而,这些方法都未能实现与OpenAI的o1系列模型相当的通用推理性能。

1. 现有模型在复杂推理任务(如数学证明、代码生成、科学问题解答)上的表现仍存在显著瓶颈。传统的监督微调(SFT)虽能部分提升性能,但依赖大量标注数据,且难以覆盖长链、多步推理场景。

2. 后训练(Post-Training)的重要性。后训练(如强化学习、对齐优化)已成为LLMs能力提升的关键环节。它能够以较低算力成本优化模型的推理能力、价值观对齐和用户适应性。例如,OpenAI的o1系列通过动态扩展推理链长度(Chain-of-Thought, CoT)显著提升了数学和编码任务的性能。然而,如何高效实现“测试时计算扩展”(即在推理过程中灵活调整计算资源)仍是一个开放挑战。

3. 此外,现有方法也存在一定的局限性:

  • 基于过程的奖励模型(PRM):依赖对中间步骤的细粒度奖励,但标注成本高且易受奖励劫持(Reward Hacking)影响。
  • 搜索算法(如蒙特卡洛树搜索):在复杂任务中面临搜索空间爆炸问题,难以规模化。
  • 混合监督与强化学习:需大量标注数据,限制了模型的自主演化潜力。

二、方法

2.1 概述

  • DeepSeek-R1-Zero:纯强化学习
    • 直接在基础模型上应用强化学习,不使用任何 SFT 数据。
    • 探索 LLM 在纯 RL 环境下的自演化过程,使其自主发展推理能力。
  • DeepSeek-R1:冷启动 + 多阶段训练
    • 使用少量高质量长链思维(CoT)数据进行冷启动,预热模型。
    • 进行面向推理的强化学习,提升模型在推理任务上的性能。
    • 使用拒绝采样和监督微调,进一步提升模型的综合能力。
    • 再次进行强化学习,使模型在所有场景下都表现良好。
  • 知识蒸馏:
    • 将 DeepSeek-R1 的推理能力蒸馏到更小的模型中,使小模型也具有强大的推理能力。

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

强化学习在推理任务中表现出显著的有效性,正如之前的研究所证明的那样。然而,这些研究都在很大程度上依赖监督数据,而这些数据的收集过程非常耗时。DeepSeek-R1-Zero探讨了在没有任何监督数据的情况下,LLMs 如何通过纯强化学习过程自我演化并发展推理能力。首先简要概述了我们的 RL 算法,然后呈现一些令人兴奋的结果,希望能为社区提供有价值的见解。

2.2.1 强化学习算法 

群体相对策略优化为了节省强化学习的训练成本,DS团队采用了 Group Relative Policy Optimization (GRPO),它不依赖于通常与策略模型大小相同的评价模型,而是通过从组得分中估计基线。具体而言,对于每个问题 ,GRPO 从旧的策略中采样一组输出 {1, 2, ···, },然后通过最大化以下目标来优化策略模型: 

 

2.2.2 奖励模型

奖励是训练信号的来源,决定了强化学习(RL)的优化方向。为了训练 DeepSeek-R1-Zero,采用了一种基于规则的奖励系统,主要由两种类型的奖励组成:

准确度奖励(Accuracy rewards):准确度奖励模型用于评估响应是否正确。例如,在具有确定性结果的数学问题中,要求模型以指定的格式(例如,在一个框内)提供最终答案,从而可以通过可靠的规则进行正确性验证。同样,对于 LeetCode 问题,可以使用编译器基于预定义的测试用例生成反馈。

格式奖励(Format rewards):除了准确度奖励模型外,还使用了格式奖励模型,强制模型将其思维过程放置在 <think> 和 </think>标签之间。

在开发 DeepSeek-R1-Zero 时没有应用基于结果或过程的神经奖励模型,因为在大规模强化学习过程中,神经奖励模型可能会遭遇奖励操控问题,并且重新训练奖励模型需要额外的训练资源,这会使整个训练流程变得更加复杂。

2.2.3 训练模板

为了训练 DeepSeek-R1-Zero,首先设计了一个简单的模板,指导基础模型遵循指定的指令。

如表 1 所示,该模板要求 DeepSeek-R1-Zero 首先生成推理过程,然后给出最终答案。模板示例如下:

表1:用户(User)和助手(Assistant)之间的对话。用户提出了一个问题,助手解决了这个问题。助手首先在脑海中思考推理过程,然后向用户提供答案。推理过程和答案分别包含在标签 <think> </think>和 <answer> </answer> 中,即

<think> reasoning process here </think>, <answer> answer here </answer>。
User: prompt.
Assistant:

DS团队有意将约束限制在这种结构格式上,同时避免任何内容特定的偏见,例如强制要求反思性推理或推广特定的解题策略——以确保能够准确观察模型在强化学习过程中的自然进展。

2.2.4 性能、自我进化过程和顿悟时刻

性能

自我进化过程

自我进化过程是一个引人注目的示范,展示了强化学习如何驱动模型自主提升其推理能力。通过直接从基础模型开始强化学习,可以在没有监督微调阶段影响的情况下,密切监控模型的进展。这种方法清晰地展示了模型如何随着时间的推移不断进化,特别是在处理复杂推理任务的能力方面。

如图3 所示,DeepSeek-R1-Zero的思维时间在整个训练过程中持续改进。这种改进不是外部调整的结果,而是模型内部的自我发展。DeepSeek-R1-Zero通过利用扩展的测试时间计算,自然获得了解决越来越复杂推理任务的能力。这些计算从生成数百个到数千个推理标记不等,使得模型能够更深入地探索和完善其思维过程。

这种自我进化的一个最显著的方面是随着测试时间计算的增加,复杂行为的出现。比如反思行为——模型回顾并重新评估之前的步骤——以及探索问题解决替代方法的行为,都是自发产生的。这些行为并非显式编程所致,而是模型与强化学习环境互动的结果。这种自发的发展显著增强了DeepSeek-R1-Zero的推理能力,使其能够以更高的效率和准确性应对更具挑战性的任务。

Aha Moment” - 顿悟时刻

在DeepSeek-R1-Zero的训练过程中,观察到一个特别有趣的现象,即发生了“顿悟”时刻。如表3所示,这一时刻出现在模型的一个中间版本中。在此阶段,DeepSeek-R1-Zero通过重新评估其初始方法,学会了为一个问题分配更多的思考时间。这种行为不仅证明了模型推理能力的提升,而且是强化学习如何导致意外且复杂结果的迷人示例。

这个时刻不仅是模型的“顿悟”,也是观察其行为的研究人员的“顿悟”。

它强调了强化学习的力量与美妙:并没有显式地教模型如何解决问题,而是为其提供了正确的激励,模型自主发展出先进的问题解决策略。这个“顿悟”时刻有力地提醒我们,强化学习能够解锁人工系统中智能的新层次,为未来更具自主性和适应性的模型铺平道路。

DeepSeek-R1-Zero的缺点

尽管 DeepSeek-R1-Zero 展现了强大的推理能力,并能自主发展出意想不到且强大的推理行为,但它仍然面临一些问题。例如,DeepSeek-R1-Zero 在可读性差和语言混杂等问题上存在困难。为了使推理过程更加易读并与开放社区分享,DS团队继续探索了DeepSeek-R1,一种结合了强化学习与人性化冷启动数据的方法。

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

受到DeepSeek-R1-Zero取得的良好结果的启发,产生了两个自然而然的问题:

(1)通过引入少量高质量数据作为冷启动,是否能够进一步提高推理性能或加速收敛?

(2)如何训练一个既能生成清晰连贯的推理链(CoT),又能展现出强大通用能力的用户友好型模型?

为了解决这些问题,DS团队设计了一个训练深度寻求-R1的流程。该流程包括四个阶段,概述如下:

 

2.3.1 冷启动

与 DeepSeek-R1-Zero 不同,为了防止强化学习训练的早期冷启动阶段在基础模型上出现不稳定现象,在 DeepSeek-R1 中,DS团队构建并收集了少量的高质量长推理链(CoT)数据,用以微调模型,作为初始的 RL 行为目标。

为了收集这些数据,DS团队探索了几种方法:使用少量示例提示与长推理链的结合,直接提示模型生成带有反思和验证的详细回答,收集DeepSeek-R1-Zero输出的可读格式,并通过人工注释者后处理以优化结果。

在这项工作中,DS团队收集了数千条冷启动数据,用于微调 DeepSeek-V3-Base作为强化学习的起点。与DeepSeek-R1-Zero相比,冷启动数据的优势包括:

可读性:DeepSeek-R1-Zero的一个主要限制是其内容通常不适合阅读。响应可能会混合多种语言,或者缺乏Markdown格式来突出显示给用户的答案。相比之下,在为DeepSeek-R1创建冷启动数据时,DS团队设计了一个可读的模式,包括每个响应末尾都有一个摘要,并且过滤掉不适合阅读的响应。这里定义输出格式为 |special_token| <reasoning_process>|special_token| <summary>,其中推理过程是针对查询的CoT,而摘要则用于总结推理结果。

潜力:通过精心设计结合人工先验的冷启动数据模式,观察到DeepSeek-R1在性能上优于DeepSeek-R1-Zero。DS团队认为,迭代训练是推理模型的一种更好的方法。

2.3.2 面向推理的强化学习

在对DeepSeek-V3-Base进行冷启动数据微调后,DS团队采用与DeepSeek-R1-Zero相同的大规模强化学习训练过程。

这个阶段重点提升模型的推理能力,特别是在推理密集型任务中,如编码、数学、科学和逻辑推理等,这些任务涉及明确定义的问题和清晰的解决方案。在训练过程中,观察到CoT经常出现语言混合,尤其是在强化学习提示涉及多种语言时。为了缓解语言混合的问题,DS团队在强化学习训练中引入了语言一致性奖励,这一奖励是根据推理链中目标语言词汇的比例计算的。尽管消融实验表明这种对齐会导致模型性能略微下降,但这一奖励与人类偏好一致,使得模型输出更具可读性。最后,通过直接将推理任务的准确性和语言一致性奖励相加,形成最终的奖励。然后,对微调后的模型进行强化学习训练,直到其在推理任务上收敛。

2.3.3 拒绝采用与监督微调

当面向推理的强化学习收敛后,DS团队利用得到的检查点收集监督微调(SFT)数据用于下一轮训练。与最初的冷启动数据主要关注推理不同,这一阶段将涉及其他领域的数据,以增强模型在写作、角色扮演和其他通用任务中的能力。具体而言,生成数据并按如下所述对模型进行微调。

推理数据

整理推理提示,并通过从上述强化学习训练的检查点执行拒绝采样来生成推理轨迹。在前一个阶段,仅包含了可以通过基于规则的奖励进行评估的数据。然而,在这一阶段,DS团队通过加入额外的数据来扩展数据集,其中一些数据使用生成奖励模型,通过将真实标签和模型预测输入DeepSeek-V3进行判断。此外,由于模型输出有时混乱且难以阅读,过滤掉了含有混合语言、长段落和代码块的推理链。对于每个提示,采样多个响应,并只保留正确的响应。最终,收集了约60万个与推理相关的训练样本。

非推理数据

对于非推理数据,如写作、事实问答、自我认知和翻译,采用DeepSeek-V3流程并重复使用部分DeepSeek-V3的SFT数据集。对于某些非推理任务,通过提示调用DeepSeek-V3生成潜在的推理链,以便在回答问题前使用。然而,对于更简单的查询,例如“你好”,不会提供推理链作为回应。最终,收集了大约20万个与推理无关的训练样本。

DS团队使用上述整理好的大约80万个样本数据集对DeepSeek-V3-Base进行两轮微调。

2.3.4 面向所有场景的强化学习

为了进一步使模型与人类偏好对齐,实施了一个二次强化学习阶段,旨在提高模型的有用性和无害性,同时精炼其推理能力。具体而言,使用奖励信号和多样化的提示分布来训练模型。对于推理数据,遵循DeepSeek-R1-Zero中概述的方法,利用基于规则的奖励来引导数学、代码和逻辑推理领域的学习过程。对于一般数据,依赖奖励模型来捕捉人类偏好,以应对复杂和微妙的场景。在DeepSeek-V3流程的基础上,采用类似的偏好对分布和训练提示。在有用性方面,专注于最终的总结,确保评估重点强调响应对用户的实用性和相关性,同时尽量减少对基础推理过程的干扰。在无害性方面,评估模型的整个响应,包括推理过程和总结,以识别并减少生成过程中可能出现的任何潜在风险、偏见或有害内容。最终,奖励信号和多样化数据分布的整合使DS团队能够训练一个既在推理上表现优异,又优先考虑有用性和无害性的模型。

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

为了使更高效的小型模型具备类似于DeepSeek-R1的推理能力,DS团队直接对开源模型如Qwen和Llama进行了微调,使用了与DeepSeek-R1策划的80万样本,研究结果表明,这种简单的蒸馏方法显著增强了小型模型的推理能力。这里使用的基础模型包括Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B和Llama-3.3-70B-Instruct。选择Llama-3.3,因为它的推理能力略优于Llama-3.1。

对于蒸馏模型,仅应用SFT,而不包括RL阶段,尽管结合RL可能会显著提升模型性能。但在这里的主要目标是展示蒸馏技术的有效性,将RL阶段的探索留给更广泛的研究社区。

三、实验

数据收集:收集数千条冷启动数据,用于初始微调。这些数据通过少样本提示、直接提示生成详细答案、人工后处理等方式生成。

实验设置:在多个基准测试上进行评估,包括 MMLU、MMLU-Redux、MMLU-Pro、C-Eval、CMMLU、IFEval、FRAMES、GPQA Diamond、SimpleQA、C-SimpleQA、SWE-Bench Verified、Aider 1、LiveCodeBench、Codeforces、Chinese National High School Mathematics Olympiad (CNMO)、American Invitational Mathematics Examination 2024 (AIME)等。

参数配置:所有模型的最大生成长度设置为32,768个token。对于需要采样的基准测试,使用温度0.6,top-p值0.95,每个查询生成64个响应。

 3.1 DeepSeek-R1模型评估

3.2 DeepSeek-R1蒸馏模型评估

四、讨论

4.1 蒸馏与强化学习

论文得出两个结果:首先,将更强大的模型蒸馏到较小的模型中可以获得优秀的结果,而依赖于大规模强化学习的小模型则需要巨大的计算能力,甚至可能无法达到蒸馏的性能。其次,尽管知识蒸馏策略既经济又有效,但推进超越智能的边界可能仍需要更强大的基础模型和更大规模的强化学习。

4.2 不成功的尝试

在开发DeepSeek-R1的早期阶段,DS团队也遇到了失败和挫折。以下是他们分享的失败经验,用以提供见解,但这并不意味着这些方法无法开发出有效的推理模型。

过程奖励模型(PRM),PRM是一种合理的方法,可以引导模型朝着更好的解决推理任务的方法前进。然而,在实践中,PRM有三个主要限制,可能会阻碍其最终成功。首先,很难明确地定义一般推理中的细粒度步骤。其次,确定当前中间步骤是否正确是一项具有挑战性的任务。使用用模型进行自动标注可能无法产生令人满意的结果,而手动标注则不利于规模化。第三,一旦引入基于模型的PRM,必然会导致奖励黑客行为,并且重新训练奖励模型需需要额外的训练资源,这使整个训练流程变得复杂。总之,尽管PRM在重新排序模型生成的前N个响应或辅助引导搜索方面表现出良好的能力,但与其在实验中引入的大规模强化学习过程所带来的额外计算开销相比,其优势是有限的。

蒙特卡罗树搜索(MCTS),受到AlphaGo和AlphaZero的启发,DS团队探索了使用蒙特卡罗树搜索(MCTS)来增强测试时的计算可扩展性。这种方

法涉及将答案分解为更小的部分,以便模型能够系统地探索触决方案空间。为此,提示模型生成多个标签,这些标签对应于搜索所需的特定推理步骤。在训练过程中,首先使用收集到的提示通过MCTS找到答案,MCTS由预训练的价值模型指导。随后,使用生成的问题-答案对来训练演员模型和价值模型,迭代地完善这一过过程。

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

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

五、结论、局限性与未来工作 

通用能力:目前,DeepSeek-R1在函数调用、多轮对话、复杂角色扮演和json输出等任务上的能力不及深度寻求-V3。继续探索如何利用长链推理来增强这些领域的任务。

语言混合:DeepSeek-R1目前针对中文和英文进行了优化,这可能导致在处理其他语言查询时出现语言混合问题。例如,DeepSeek-R1可能会在推理和回应时使用英语,即使查询是用其他语言而非英语或中文提出的。旨在未来的更新中解决这一限制。

提示工程:在评估DeepSeek-R1时,观察到它对提示非常敏感。少量示例提示会持续降低其性能。因此,建议用户直接描述问题,并在zero-shot设置中指定输出格式,以获得最佳结果。

软件工程任务由于评估时间较长,影响了强化学习过程的效率,因此大规模强化学习在软件工程任务中尚未得到广泛应用。因此,DeepSeek-R1在软件工程基准测试中并未表现出相较于DeepSeek-V3的显著改进。未来的版本将通过在软件工程数据上实施拒绝采样或在强化学习过程中引入异步评估来解决这一问题,以提高效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无缝对接[系列2]:在VSCode中继续接入本地DeepSeek的完整指南---实现代码协助编写~

无缝对接&#xff1a;在VSCode中继续接入本地DeepSeek的完整指南 在上一篇文章中&#xff0c;我们已经详细介绍了如何成功部署本地 DeepSeek&#xff0c;使得开发者能够在本地环境中高效地进行深度学习和数据分析工作。 部署完成后&#xff0c;如何在 Visual Studio Code (VS…

linux5-多任务--进程fork()

一.多任务&#xff1a;让系统具备同时处理多个任务的能力 1.如何实现多任务 1.1进程&#xff1a;操作系统上正在运行的程序&#xff0c;需要消耗内存和CPU 1.1.1 进程的生存周期&#xff1a;创建、调度、消亡 1.1.1.1进程的创建&#xff1a;每个进程被创建时&#xff0c;操作…

原生稀疏注意力机制(NSA):硬件对齐且可原生训练的稀疏注意力机制-论文阅读

摘要 长上下文建模对于下一代语言模型至关重要&#xff0c;但标准注意力机制的高计算成本带来了巨大的计算挑战。稀疏注意力提供了一种在保持模型能力的同时提高效率的有前途的方向。本文提出了一种名为 NSA&#xff08;原生可训练稀疏注意力机制&#xff09; 的方法&#xff…

C++ Primer 库-IO类

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

FlutterAssetsGenerator插件的使用

在Plugins中找到FlutterAssetsGenerator插件&#xff0c;点击安装。 更改生成的资源索引类可以修改名字。 在根目录下创建assets/images文件夹&#xff0c;用于存储图片。 点击images文件夹&#xff0c;鼠标右键点击Flutter&#xff1a;Configuring Paths&#xff0c;pub…

网络安全与防范

1.重要性 随着互联网的发达&#xff0c;各种WEB应用也变得越来越复杂&#xff0c;满足了用户的各种需求&#xff0c;但是随之而来的就是各种网络安全的问题。了解常见的前端形式和保护我们的网站不受干扰是我们每个优秀fronter必备的技能。 2.分类 XSS干扰 CSRF干扰 网络劫持干…

【算法】----多重背包问题I,II(动态规划)

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

超低失真、超高清晰度的远心工业镜头

随着机器视觉技术的不断提高&#xff0c;工业生产应用机器视觉系统也越来越广泛&#xff0c;大大提高的工厂的效率&#xff0c;而有时候采集的图像有些扭曲变形&#xff0c;也就是失真&#xff0c;图像失真又叫“畸变”&#xff0c;远心镜头就是为纠正传统工业镜头视差而设计一…

JWT认证机制

Session认证机制中需要配合cookie才能实现&#xff0c;由于cookie默认不支持跨域访问&#xff0c;当涉及到前端跨域请求后端接口时&#xff0c;需要做很多额外的配置&#xff0c;才能实现跨域session认证。所以这里不推荐使用session身份认证机制&#xff0c;一般推荐使用jwt认…

嵌入式八股文(四)计算机网络篇

第一章 基础概念 1. 服务 指网络中各层为紧邻的上层提供的功能调用,是垂直的。包括面向连接服务、无连接服务、可靠服务、不可靠服务。 2. 协议 是计算机⽹络相互通信的对等层实体之间交换信息时必须遵守的规则或约定的集合。⽹络协议的三个基本要素:语法、…

数据结构——单向循环链表、双链表、双向循环链表

目录 一、单向循环链表 1.1 单向循环链表的概念 1.2 单向循环链表的操作 1.2.1 单向循环链表的创建 1.2.2 单向循环链表的头插 1.2.3 单向循环链表的遍历 1.2.4 单向循环链表的头删 1.2.5 单向循环链表的尾插 1.2.6 单向循环链表的尾删 1.2.7 约瑟夫环 1.3 单向循环列表所有程…

dify安装

官网教程 https://github.com/langgenius/dify/blob/main/README_CN.md 1、下载源码 git clone https://github.com/langgenius/dify.git 2、进入docker目录 cd dify cd docker cp .env.example .env修改nginx对外端口配置 修改为9000 最后执行&#xff1a;docker compo…

使用Termux将安卓手机变成随身AI服务器(page assist连接)

通过以下方法在安卓手机上运行 Ollama 及大模型&#xff0c;无需 Root 权限&#xff0c;具体方案如下&#xff1a; 通过 Termux 模拟 Linux 环境运行 核心工具&#xff1a; 安装 &#xff08;安卓终端模拟器&#xff09;()]。借助 proot-distro 工具安装 Linux 发行版&#xf…

C++ STL中的reverse/unique/sort/lower_bound/upper_bound函数使用

本文主要涉及以下几个函数&#xff1a; reverse&#xff1a;反转序列。unique&#xff1a;移除相邻重复元素。sort&#xff1a;对序列进行排序。lower_bound 和 upper_bound&#xff1a;查找目标值的边界位置。头文件均为<algorithm> 1. reverse 功能&#xff1a;反转指…

QT QLabel加载图片等比全屏自适应屏幕大小显示

最近在工作项目中,遇到一个需求: 1.使用QLabel显示一张图片; 2.当点击这个QLabel时,需要全屏显示;但不能改变原来的尺寸; 3.当点击放大后的QLabel时,恢复原有大小. 于是乎,就有了本篇博客,介绍如何实现这样的功能. 一、演示效果 在一个水平布局中&#xff0c;添加两个Lable用…

C# 背景 透明 抗锯齿 (效果完美)

主要是通过 P/Invoke 技术调用 Windows API 函数 gdi32.dll/user32.dll&#xff0c;同时定义了一些结构体来配合这些 API 函数的使用&#xff0c;常用于处理图形绘制、窗口显示等操作。 运行查看效果 局部放大&#xff0c;抗锯齿效果很不错,尾巴毛毛清晰可见。 using System; u…

Windows10 将Docker虚拟磁盘文件ext4.vhdx迁移至D盘

今天打开电脑发现之前迁移到D盘的ext4.vdx居然占有80多个G不得不重新清理一下了 于是先删除了d盘的ext4.vdx文件 注销了原来的 wsl --unregister docker-desktopwsl --unregister docker-desktop-data 确认 WSL 发行版状态&#xff1a; 运行以下命令以确认当前的 WSL 发行版…

OpenCV二值化处理

1.1. 为什么需要二值化操作 二值化操作将灰度图像转换为黑白图像&#xff0c;即将图像中的像素值分为两类&#xff1a;前景&#xff08;通常为白色&#xff0c;值为 255&#xff09;和背景&#xff08;通常为黑色&#xff0c;值为 0&#xff09;。二值化的主要目的是简化图像&…

深入了解 DevOps 基础架构:可追溯性的关键作用

在当今竞争激烈的软件环境中&#xff0c;快速交付强大的应用程序至关重要。尽管如此&#xff0c;在不影响质量的情况下保持速度可能是一项艰巨的任务&#xff0c;这就是 DevOps 中的可追溯性发挥作用的地方。通过提供软件开发生命周期 &#xff08;SDLC&#xff09; 的透明视图…

由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)

最近&#xff0c;随着DeepSeek的爆火&#xff0c;GRPO也走进了视野中。为了更好的学习GRPO&#xff0c;需要对PPO的强化学习有一个深入的理解&#xff0c;那么写一篇文章加深理解吧。纵观网上的文章&#xff0c;要么说PPO原理&#xff0c;各种复杂的公式看了就晕&#xff0c;要…