DeepSeek-R1 模型及GRPO算法学习
总结DeepSeek-R1 模型算法,并对其中的GRPO算法做一些学习补充。
DeepSeek-R1 论文总结
提出了通过强化学习提升大语言模型推理能力的方法,开发出 DeepSeek-R1-Zero 和 DeepSeek-R1 模型,在多个推理任务上表现出色,并开源模型推动研究发展。
该研究旨在用纯强化学习(RL)提高语言模型推理能力 ,探索 LLMs 在无监督数据下通过 RL 自我进化的潜力。
在多个任务场景上达到了和openai-o1模型近乎持平的效果:

主要贡献
-
在基础模型上直接进行强化学习
-
直接将强化学习(RL)应用于基础模型,而不依赖监督微调(SFT)。这种方法使模型能够探索用于解决复杂问题的思维链(CoT),从而开发出了 DeepSeek - R1 - Zero。 DeepSeek - R1 - Zero 展现出了自我验证、反思以及生成较长思维链等能力,这对研究界来说是一个重要的里程碑。
这是首个通过公开研究验证大语言模型(LLM)的推理能力可以纯粹通过强化学习来激励,而无需监督微调。
-
开发 DeepSeek - R1 模型流程。包含两个强化学习(RL)阶段,旨在发现改进的推理模式并契合人类偏好,还包括两个监督微调(SFT)阶段,它们是模型推理和非推理能力的基础。
推理能力(reasoning capabilities): 如数学问题,根据已知条件可以严格推断出来一个结论。
非推理能力(non-reasoning capabilities): 不涉及逻辑推理,如翻译,生成某种风格的文本等。
-
-
对小模型进行蒸馏,也达到了不错的效果
传统的方法针对标注的样本,用SFT + RL的方法对小模型进行学习。本文用大模型对小模型进行蒸馏,仅使用SFT,也达到了比较好的效果。
DeepSeek-R1-Zero: 在base模型上直接进行RL
针对推理任务,没有用到有监督的数据。
GRPO 强化学习算法
参考论文GRPO,对每一个question q, 从旧模型 π θ o l d \pi_{\theta_{old}} πθold采样一组输出 { o 1 , o 2 , . . . , o G } \{o_1, o_2, ..., o_G\} {o1,o2,...,oG}, 然后最大化如下目标函数:
J G R P O ( θ ) = E [ q ∼ P ( Q ) , o i i = 1 G ∼ π θ o l d ( O ∣ q ) ] = 1 G ∑ i = 1 G ( 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 ) − β D K L ( π θ ∣ ∣ π r e f ) ) \begin{align*} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}[q \sim P(Q), {o_i}_{i = 1}^{G} \sim \pi_{\theta_{old}}(O|q)] \\ &= \frac{1}{G} \sum_{i = 1}^{G} \left( \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 - \varepsilon, 1 + \varepsilon \right) A_i \right) - \beta \mathbb{D}_{KL} (\pi_{\theta}||\pi_{ref}) \right) \end{align*} JGRPO(θ)=E[q∼P(Q),oii=1G∼πθold(O∣q)]=G1i=1∑G(min(πθold(oi∣q)πθ(oi∣q)Ai,clip(πθold(oi∣q)πθ(oi∣q),1−ε,1+ε)Ai)−βDKL(πθ∣∣πref))
D K L ( π θ ∣ ∣ π r e f ) = π r e f ( o i ∣ q ) π θ ( o i ∣ q ) − log π r e f ( o i ∣ q ) π θ ( o i ∣ q ) − 1 , \mathbb{D}_{KL} (\pi_{\theta}||\pi_{ref}) = \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - \log \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - 1, DKL(πθ∣∣πref)=πθ(oi∣q)πref(oi∣q)−logπθ(oi∣q)πref(oi∣q)−1,
ε \varepsilon ε 和 β \beta β为超参数, A i A_i Ai为归一化的优势函数。
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}\left({r_{1}, r_{2}, \cdots, r_{G}}\right)}{\text{std}\left({r_{1}, r_{2}, \cdots, r_{G}}\right)}. Ai=std(r1,r2,⋯,rG)ri−mean(r1,r2,⋯,rG).
π θ ( o i ∣ q ) \pi_{\theta}(o_i|q) πθ(oi∣q) 代表正在训练的policy模型对于每一个output o i o_i oi 输出的概率。
这里的output o i o_i oi 不是token粒度的,而应该是一个完整的输出。 reward的计算是根据推理任务直接进行逻辑解析。
GRPO 与PPO的区别如下图所示:

GRPO算法的详细迭代过程:

输入参数
- 初始策略模型 π θ i n i t π_{θ_{init}} πθinit:这是算法开始时的初始模型,用于生成策略。
- 奖励模型 r φ r_φ rφ:用于评估生成的输出的质量。
- 任务提示 D D D:包含所有任务的提示或问题,模型将根据这些提示生成输出。
- 超参数 ε , β , μ ε,β,μ ε,β,μ:这些参数用于控制算法的行为,如学习率、折扣因子等。
算法步骤
-
初始化策略模型:将策略模型设置为初始模型 π θ i n i t π_{θ_{init}} πθinit。
-
迭代过程:算法通过多次迭代来优化策略模型。
-
在每次迭代中,首先将参考模型设置为当前的策略模型。
-
对于每一步:
- 从任务提示prompt_list中采样一个batch D b D_b Db。
- 更新旧策略模型为当前策略模型。
- 对于每个问题 q q q ,从旧策略模型中采样 G G G 个输出。
- 计算每个采样输出的奖励。
- 通过组相对优势估计计算每个输出中每个标记的优势A。
-
在GRPO迭代中:
- 通过最大化GRPO目标函数来更新策略模型。
- 使用重放机制连续训练更新奖励模型。
-
输出
- 优化后的策略模型 π θ π_θ πθ:这是经过多次迭代和优化后的最终模型,旨在生成更高质量的输出。
关键概念
- 组相对优势估计:这是一种计算优势的方法,它考虑了同一问题下不同输出之间的相对表现,而不是依赖于一个固定的价值函数。
- 奖励模型的更新:通过重放机制连续训练奖励模型,以确保它能够准确评估输出的质量。
这种算法特别适用于需要生成多个可能解决方案的任务,如自然语言处理中的文本生成,其中可以通过比较不同生成结果的质量来优化模型。GRPO通过减少对价值函数的依赖和利用组内比较来提高训练效率和模型性能。
prompt形式

Reward Model
-
准确性奖励: 数学问题直接要求按照特定格式输出,对比结果本身正确的结果;LeetCode问题直接运行生成的代码。
-
格式奖励: 除准确性奖励模型外,还采用格式奖励模型,强制模型将其思考过程置于 “<think>” 和 “</think>” 标签之间。
-
未采用其他奖励模型的原因:未应用结果或过程的神经网络奖励模型,因为发现神经奖励模型在大规模强化学习过程中可能遭受奖励欺骗问题,并且重新训练奖励模型需要额外的训练资源,还会使整个训练流程复杂化。
效果表现
随着训练步数的增加,性能稳步提升,达到和OpenAI-o1-0912接近的水平。
并且观察到了明显的“进化”现象,随着训练步数的增加,输出平均长度也在增加。意味着LLM似乎自己已经潜移默化学会了进行更多的思考和推理,达到更好的效果。

甚至出现了自主的“Aha Moment”(顿悟时刻)情况,学会自我反思和修正。

缺点
生成的答案可读性相对差、存在混合语言输出情况。
所以需要DeepSeek-R1, 使用一些有监督的数据。
DeepSeek-R1 冷启动强化学习
DeepSeek-R1采用如下4个阶段,将模型能力进一步加强。
冷启动阶段
DeepSeek - R1 相对于 DeepSeek - R1 - Zero 在冷启动数据方面的改进:
-
改进原因:为防止基础模型在强化学习(RL)训练早期不稳定的冷启动阶段出现问题,DeepSeek - R1 构建并收集少量长思维链(CoT)数据来微调作为 RL 初始策略网络(actor)的模型。
-
数据收集方法:探索了多种方法收集长 CoT 数据,如以长 CoT 为示例进行少样本提示,直接提示模型生成带反思和验证的详细答案,以可读格式收集 DeepSeek - R1 - Zero 的输出,并通过人工标注者进行后处理优化结果。收集了数千条冷启动数据来微调 DeepSeek - V3 - Base 作为 RL 的起点。
-
冷启动数据优势
- 可读性:DeepSeek - R1 - Zero 的一个关键局限是内容常不适合阅读,回复可能混合多种语言或缺乏突出答案的 markdown 格式。相比之下,DeepSeek - R1 在创建冷启动数据时,设计了可读模式,在每个回复结尾包含总结,并过滤掉不友好的回复。输出格式定义为 | special_token|<reasoning_process>|special_token|,其中推理过程是查询的 CoT,总结用于概括推理结果。
- 潜力:通过精心设计融入人类先验知识的冷启动数据模式,与 DeepSeek - R1 - Zero 相比,观察到更好的性能表现。认为迭代训练是推理模型更好的方式。
对推理场景进行RL
-
前期微调:在冷启动数据上对 DeepSeek - V3 - Base 进行微调后,应用与 DeepSeek - R1 - Zero 中相同的大规模强化学习训练过程。
-
训练重点:此阶段专注于提升模型的推理能力,特别是在诸如编码、数学、科学和逻辑推理等推理密集型任务上,这些任务涉及定义明确且有清晰解决方案的问题。
-
问题及解决:训练过程中观察到思维链(CoT)常出现语言混合现象,尤其是当强化学习提示涉及多种语言时。为缓解这一问题,在强化学习训练期间引入语言一致性奖励,其计算方式为目标语言单词在 CoT 中的比例。尽管消融实验表明这种对齐会导致模型性能略有下降,但该奖励符合人类偏好,使生成内容更具可读性。
-
最终奖励形成:最后,通过直接将推理任务的准确性和语言一致性奖励相加,形成最终奖励。然后在微调后的模型上应用强化学习训练,直至其在推理任务上达到收敛。
拒绝采样和SFT
拒绝采样和监督微调阶段:
当面向推理的强化学习收敛后,利用得到的checkpoints 为下一轮收集监督微调(SFT)数据。此阶段与初始专注推理的冷启动数据不同,会纳入其他领域的数据,以增强模型在写作、角色扮演等通用任务上的能力。
-
推理数据处理
- 生成方式:精心策划推理提示,并通过对上述强化学习训练的checkpoints 进行拒绝采样来生成推理轨迹。
- 数据集扩展:之前阶段仅包含能用基于规则的奖励评估的数据,此阶段通过纳入额外数据来扩展数据集,部分数据使用生成式奖励模型,将真实数据和模型预测输入 DeepSeek - V3 进行判断。
- 数据筛选:由于模型输出有时混乱且难以阅读,因此过滤掉了语言混合的思维链、长段落和代码块。对于每个提示,采样多个回复并仅保留正确的回复。总共收集了约 60 万条与推理相关的训练样本。
-
非推理数据收集
对于写作、事实问答、自我认知和翻译等非推理数据,采用 DeepSeek - V3 的流程,并复用 DeepSeek - V3 的部分监督微调(SFT)数据集。对于某些非推理任务,在提示回答问题之前,调用 DeepSeek - V3 生成潜在的思维链(CoT);但对于像 “hello” 这样简单的查询,不提供 CoT 回复。最终,总共收集了大约 20 万个与推理无关的训练样本。 -
模型微调
使用上述精心整理的约 80 万个样本的数据集,对 DeepSeek - V3 - Base 进行了两个轮次(epochs)的微调。
通用场景的RL阶段
使模型更符合人类偏好所实施的二次强化学习阶段:
-
目的:旨在提高模型的有用性和无害性,同时优化其推理能力。
-
训练方法:使用奖励信号和多样化提示分布相结合的方式训练模型。
- 推理数据:在数学、代码和逻辑推理领域,遵循 DeepSeek - R1 - Zero 中概述的方法,利用基于规则的奖励来引导学习过程。
- 一般数据:借助奖励模型来捕捉复杂微妙场景中的人类偏好。
-
数据及评估依据:基于 DeepSeek - V3 流程,采用类似的偏好对和训练提示分布。
- 有用性评估:只专注于最终总结,确保评估强调回复对用户的实用性和相关性,同时尽量减少对底层推理过程的干扰。
- 无害性评估:评估模型的整个回复,包括推理过程和总结,以识别和减轻生成过程中可能出现的任何潜在风险、偏差或有害内容。
-
最终效果:奖励信号和多样化数据分布的整合,使我们能够训练出在推理方面表现出色,同时优先考虑有用性和无害性的模型。
蒸馏小模型
- 目的:为让更高效的小模型具备如 DeepSeek - R1 那样的推理能力。
- 方法:直接使用由 DeepSeek - R1 整理的 80 万个样本,对 Qwen和 Llama等开源模型进行微调。
- 使用的基础模型:包括 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 阶段的探索留给更广泛的研究社区。
实验结果
DeepSeek-R1:

蒸馏模型:

讨论
- 蒸馏 v.s. RL
从实验结果来看,蒸馏又便宜又实用。用小的模型进行SFT+RL操作,最后的效果远不如直接蒸馏更好。

暂未成功的尝试
过程奖励模型(PRM)
PRM在GRPO的论文中也有实验验证,主要是对模型的中间步骤进行评价和奖励。
-
PRM 的合理性:PRM 是一种合理的方法,可引导模型采用更好的方式来解决推理任务。
-
PRM 的局限性
- 定义困难:在一般推理中,明确界定细粒度的步骤具有挑战性。这意味着难以精确地确定推理过程中每个小步骤的标准和要求。
- 判断正误困难:确定当前中间步骤是否正确是一项艰巨的任务。使用模型进行自动标注可能无法产生令人满意的结果,而人工标注不利于大规模扩展,因为人工标注需要耗费大量人力和时间成本。
- 奖励欺骗与资源消耗:一旦引入基于模型的 PRM,不可避免地会导致奖励欺骗问题。而且重新训练奖励模型需要额外的训练资源,这会使整个训练流程变得复杂。
-
PRM 在实验中的表现:虽然 PRM 在对模型生成的前 N 个回复进行重新排序或辅助引导搜索方面展现出良好能力,但在大规模强化学习过程中,与它所引入的额外计算开销相比,其优势较为有限。
蒙特卡罗树搜索(MCTS)
受 AlphaGo 和 AlphaZero 启发,探索使用 MCTS 来提升测试时计算扩展性。该方法将答案分解为更小部分,让模型系统地探索解决方案空间。具体做法是促使模型生成对应搜索所需特定推理步骤的多个标记。训练时,先收集提示,通过预训练价值模型引导的 MCTS 找到答案,然后用生成的问答对训练策略网络模型和价值模型,并迭代优化过程。
面临的挑战:
-
搜索空间复杂:与国际象棋搜索空间相对明确不同,标记生成存在指数级更大的搜索空间。虽设置每个节点的最大扩展限制,但这可能导致模型陷入局部最优解。
-
价值模型训练困难:价值模型直接影响生成质量,因其指导搜索过程的每一步。训练细粒度价值模型本身就极具难度,这使得模型难以迭代改进。尽管 AlphaGo 成功依赖于训练价值模型逐步提升性能,但由于标记生成的复杂性,此原则在当前设置中难以复制。
所以虽然 MCTS 与预训练价值模型配合时可在推理阶段提高性能,但通过自我搜索迭代提升模型性能仍是重大挑战。
未来的改进方向
- 通用能力:DeepSeek-R1的通用能力仍然不及DeepSeekV3。接下来,将探索如何利用长CoT来提升这些领域的任务表现。
- 语言混合:DeepSeek-R1目前针对中文和英文进行了优化,但是在处理其他语言以及语言遵循方面还是会有问题。
- Prompt Engineering:DeepSeek-R1对Prompt非常敏感。few-shot提示会持续降低其性能。这里建议用户直接描述问题并指定输出格式(采用zero-shot,不要加示例),以获得最佳结果。
- 软件工程任务:由于长时间的评估会影响RL过程的效率,大规模RL尚未在软件工程任务中广泛应用。因此,DeepSeek-R1在软件工程基准测试上未显示出比DeepSeek-V3更大的改进。未来版本将通过在软件工程数据上实施拒绝采样或在RL过程中引入异步评估来提高效率。
参考文献
- DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
- DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
- DeepSeek-R1论文速读
相关文章:
DeepSeek-R1 模型及GRPO算法学习
总结DeepSeek-R1 模型算法,并对其中的GRPO算法做一些学习补充。 DeepSeek-R1 论文总结 提出了通过强化学习提升大语言模型推理能力的方法,开发出 DeepSeek-R1-Zero 和 DeepSeek-R1 模型,在多个推理任务上表现出色,并开源模型推动…...
Vue 3.0打造响应式用户界面的新方式
1 简介 Vue.js 是一个用于构建用户界面的渐进式框架。Vue 3.0 是其最新版本,引入了许多新特性和改进,使得开发者能够更高效地构建响应式的Web应用程序。本文将带你深入了解如何使用Vue 3.0来打造响应式用户界面,并通过实际案例和代码示例帮助你快速上手。 2 环境搭建 要开…...
爬虫基础(二)Web网页的基本原理
一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…...
Kotlin开发(六):Kotlin 数据类,密封类与枚举类
引言 想象一下,你是个 Kotlin 开发者,敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很?别急,Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode,直接省时省力!再想想需要多种状…...
我的AI工具箱Tauri+Django内容生产介绍和使用
在现代内容生产环境中,高效、自动化的工具能够显著提升生产力,降低人工成本。Tauri 与 Django 结合打造的工作箱,集成了强大的 音频处理、视频剪辑、内容下载 以及 AI 文章撰写 等模块,帮助用户在多媒体内容生产的各个环节实现高效…...
openssl 生成证书 windows导入证书
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
AJAX笔记入门篇
黑马程序员视频地址: 黑马程序员前端AJAX入门到实战全套教程https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p2https://www.bilibili.com/video/BV1MN411y7pw?vd_source…...
DOM操作中childNodes与children的差异及封装方案
引言 在JavaScript的DOM操作中,childNodes和children是开发者常用的属性,但它们在浏览器中的行为差异可能导致兼容性问题。尤其是在处理空白符(如换行符\n)时,某些浏览器(如Chrome和Edge)会将空…...
数据分析系列--④RapidMiner进行关联分析(案例)
一、核心概念 1.1项集(Itemset) 1.2规则(Rule) 1.3支持度(Support) 1.3.1 支持度的定义 1.3.2 支持度的意义 1.3.3 支持度的应用 1.3.4 支持度的示例 1.3.5 支持度的调整 1.3.6 支持度与其他指标的…...
危机13小时:追踪一场GitHub投毒事件
事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…...
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略 目录 STORM系统简介 1、Co-STORM 2、更新新闻 STORM系统安装和使用方法 1、安装 pip安装 直接克隆GitHub仓库 2、模型和数据集 两个数据集 FreshWiki数据集 WildSeek数据集 支持…...
使用QSqlQueryModel创建交替背景色的表格模型
class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…...
低代码产品插件功能一览
下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...
buu-rip-好久不见26
简单的栈溢出,找到后面函数和输入的个数即可...
Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持
在去年春节,Flutter 官方发布了宏(Macros)编程的原型支持, 同年的 5 月份在 Google I/O 发布的 Dart 3.4 宣布了宏的实验性支持,但是对于 Dart 内部来说,从启动宏编程实验开始已经过去了几年,但…...
新手项目管理的实用工具推荐
项目启动的实用工具推荐 1. MindManager MindManager 是一款功能强大且广受欢迎的思维导图工具,对于项目启动阶段的新手而言,它就像是一位贴心的 “思路梳理助手”。在项目启动初期,各种信息和想法往往杂乱无章地充斥在脑海中,而…...
2025一区新风口:小波变换+KAN!速占!
今天给大家分享一个能让审稿人眼前一亮,好发一区的idea:小波变换KAN! 一方面:KAN刚中稿ICLR25,正是风口上,与小波变换的结合还处于起步阶段,正是红利期,创新空间广阔。 另一方面&a…...
Django ORM解决Oracle表多主键的问题
现状 以Django 3.2为例 Django ORM 设计为默认使用单一主键(通常是自增的 id 字段),这一选择主要基于以下核心原因: 简化ORM设计与操作 统一访问方式外键关联简化 避免歧义冲突 主键语义明确防止隐式依赖 性能与数据库兼容 索引…...
solidity高阶 -- 线性继承
Solidity是一种面向合约的高级编程语言,用于编写智能合约。在Solidity中,多线继承是一个强大的特性,允许合约从多个父合约继承属性和方法。本文将详细介绍Solidity中的多线继承,并通过不同的实例展示其使用方法和注意事项。 在Sol…...
无公网IP 外网访问 本地部署夫人 hello-algo
hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...
系统思考—蝴蝶效应
“个体行为的微小差异,可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说,小变动带来大影响,这种现象,在复杂系统理论中被称为“蝴蝶效应”:即使极小的变化,也能在动态系…...
钉钉群机器人设置——python版本
钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点) 参考文档及博客:…...
sem_wait的概念和使用案列
sem_wait 是 POSIX 标准中定义的一个用于同步的函数,它通常用于操作信号量(semaphore)。信号量是一个整数变量,可以用来控制对共享资源的访问。在多线程编程中,sem_wait 常用于实现线程间的同步。 概念 sem_wait 的基…...
深度学习在金融风控中的应用:突破传统模型的瓶颈
深度学习在金融风控中的应用:突破传统模型的瓶颈 金融风险控制(简称“风控”)是现代金融体系中至关重要的一环,关系到金融机构的稳定性、客户的安全以及整体经济的健康运行。近年来,随着深度学习的迅猛发展,传统的风控模型正面临被颠覆的挑战,新的技术手段和思维方式正…...
【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址,指向另一个数据。 Rust 中最常见的指针是引用,…...
Spring AI 在微服务中的应用:支持分布式 AI 推理
1. 引言 在现代企业中,微服务架构 已成为开发复杂系统的主流方式,而 AI 模型推理 也越来越多地被集成到业务流程中。如何在分布式微服务架构下高效地集成 Spring AI,使多个服务可以协同完成 AI 任务,并支持分布式 AI 推理&#x…...
QT串口通信,实现单个温湿度传感器数据的采集
1、硬件设备 RS485中继器(一进二出),usb转485模块、电源等等 => 累计115元左右。 2、核心代码 #include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::...
EtherCAT主站IGH-- 21 -- IGH之fsm_reboot.h/c文件解析
EtherCAT主站IGH-- 21 -- IGH之fsm_reboot.h/c文件解析 0 预览一 该文件功能`fsm_reboot.c` 文件功能函数预览二 函数功能介绍`fsm_reboot.c` 中主要函数的作用1. `ec_fsm_reboot_init`2. `ec_fsm_reboot_clear`3. `ec_fsm_reboot_single`4. `ec_fsm_reboot_all`5. `ec_fsm_reb…...
使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书
使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天,为站点或应用部署 HTTPS 已经成为一种常态。然而,手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例,基于 Docker 容器来搭建一个…...
深入理解Linux内核的虚拟地址到物理地址转换机制及缓存优化
在现代计算机系统中,虚拟地址到物理地址的转换是操作系统内存管理的重要组成部分。特别是在基于x86_64架构的Linux系统上,这一转换过程及其相关的缓存机制对系统性能和稳定性至关重要。本文将深入探讨Debian 10上运行Linux 4.19内核时,这些机制的实现细节,特别是页表管理、…...
