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

【强化学习】Reward Model(奖励模型)详细介绍

        📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】- 【RL Latest Tech】(15)---《Reward Model(奖励模型)详细介绍》

Reward Model(奖励模型)详细介绍

目录

1. 背景和起源

2. 与强化学习的结合

3. 不同类型的奖励模型

4.Reward Model原理

5.应用实例

6.论文解读

7.论文建模

奖励建模(RM)

PPO算法

结合方式

总结

[Notice]  常见误区:

8. 面临的挑战与发展方向

9. 未来展望


        Reward Model(奖励模型)是近年来在深度学习和强化学习领域广泛应用的一种技术,特别是在生成式模型(如大型语言模型)和强化学习(RL)结合的场景中,起到了至关重要的作用。它在多个领域的应用中,尤其是在自然语言处理(NLP)和数学推理领域,展现了显著的潜力。

1. 背景和起源

        随着深度学习技术的发展,尤其是大型语言模型(LLMs)的崛起,如何有效地评估模型生成的响应质量成为一个重要的问题。早期,监督学习方法通过标注数据训练模型来生成高质量的响应,但这种方法难以处理复杂的偏好和评估机制。此时,Reward Model的提出为此提供了新的解决方案。

        Reward Model的核心思想是利用强化学习中的“奖励信号”来引导模型生成更符合人类偏好的输出。在这种框架下,Reward Model通过为每个生成的响应分配一个奖励值,反馈模型生成的质量或人类偏好。

        例如,生成的文本被赋予一个标量奖励值,作为模型进一步优化的依据


2. 与强化学习的结合

        Reward Model与强化学习的结合,特别是在强化学习从人类反馈(RLHF, Reinforcement Learning from Human Feedback)中的应用,极大地推动了该技术的进展。在RLHF的框架中,Reward Model发挥着核心作用,步骤如下:

  • Step 1:使用监督微调(SFT)对预训练语言模型进行优化,使其能够根据提示生成较高质量的响应。
  • Step 2:利用经过SFT训练的基础模型,生成多个候选响应,并由人类评估这些响应的质量,基于人类反馈训练一个Reward Model。
  • Step 3:通过强化学习算法(如PPO),基于Reward Model的评分进一步优化基础模型

        在这个过程中,Reward Model通过对生成响应的质量打分,帮助模型学习人类的偏好,进而提升生成内容的质量。


3. 不同类型的奖励模型

        随着研究的深入,Reward Model的形式不断多样化,出现了多种不同类型的奖励模型。最常见的有两种:

  • Outcome Reward Model (ORM):这种模型关注的是最终结果的质量,即模型生成的输出是否满足目标要求。ORM通过对生成的最终答案进行评分,来评估模型的表现。

  • Process Reward Model (PRM):与ORM不同,PRM不仅仅关注最终答案,还对模型的推理过程进行评分。PRM在生成答案的过程中逐步激励或惩罚模型,引导模型朝着更可解释、更稳定的推理路径发展。然而,PRM在大规模推理场景中的效果尚不理想,面临一些挑战,如计算复杂度和推理的可解释性。


4.Reward Model原理

        Reward Model(奖励模型)是人工智能训练中的关键组件,简单来说就像给AI定制的"评分老师"。用小朋友学画画的例子帮你理解:

核心原理:通过给AI的行为打分,告诉它"什么是对的/好的",就像老师批改作业时给分数和评语。

实际案例——训练聊天机器人:

  1. 收集数据:记录1000条人类客服与客户的真实对话

  2. 定义评分标准:

    • 正确性(+3分)
    • 响应速度(+1分)
    • 语气友好(+2分)
    • 提供错误信息(-5分)
  3. 训练奖励模型过程:

# 模拟训练代码
class RewardModel:def __init__(self):self.weights = {"正确性": 0.3, "响应速度": 0.1, "语气友好": 0.2}def calculate_reward(self, response):score = 0if check_accuracy(response):  # 正确性检查score += 3 * self.weights["正确性"]if check_speed(response):     # 响应速度检查score += 1 * self.weights["响应速度"]if check_tone(response):      # 语气检查score += 2 * self.weights["语气友好"]return score

  4.应用场景: 当AI生成回复"您的问题需要联系技术部门"时:

  • 正确性:✅(+3×0.3=0.9)
  • 响应速度:✅(+1×0.1=0.1)
  • 语气友好:❌(0) 总分:1.0 → 奖励模型会建议改进语气

关键特点

  • 像体育比赛的评分规则(但更复杂)
  • 需要平衡不同评分标准(就像跳水比赛的难度系数)
  • 会不断进化(随着数据积累调整权重)

        RM这个模型就像给AI装了个"价值指南针",虽然看不见摸不着,但决定了AI的行为方向。就像教小朋友时,我们不会直接代他做作业,而是通过表扬和纠正来引导他学会正确的方法。


5.应用实例

        目前已经有许多工作将强化学习与奖励模型进行结合使用,例如存在多个重要工作将PPO与reward model结合使用,特别是在需要人类反馈或复杂奖励建模的场景中:

1.OpenAI的InstructGPT/ChatGPT

# 典型实现架构:
def train_ppo_with_reward_model():# 1. 预训练语言模型作为策略policy_model = LanguageModel()# 2. 单独训练奖励模型(基于人类偏好数据)reward_model = train_reward_model(human_feedback_data)# 3. PPO使用奖励模型生成奖励信号ppo_trainer = PPOTrainer(policy=policy_model,reward_fn=reward_model.predict  # 关键集成点)

 2.DeepMind的Sparrow

// ... existing code ...
# 奖励模型整合到PPO训练循环中
for episode in training_loop:responses = policy.generate()rewards = reward_model.score(responses)  # 使用RM评分advantages = calculate_advantages(rewards)policy.update_with_ppo(advantages)
// ... existing code ...

3.Anthropic的Constitutional AI

  • 使用多个reward model组合(安全性、有用性等)
  • PPO同时优化多个奖励信号
  • 通过加权组合不同reward model的输出

技术特点

  • Reward model通常独立于PPO训练(预训练或同步更新)
  • 常见于自然语言处理任务(对话系统、文本生成)
  • 解决稀疏奖励/复杂奖励建模问题
  • 论文参考:OpenAI的《Training language models to follow instructions with human feedback》(2022)---OpenAI的InstructGPT/ChatGPT

这些实现保持PPO的核心算法不变,但将环境奖励替换为reward model的输出,形成:策略网络 → 生成行为 → reward model评分 → PPO更新的闭环。


6.论文解读

摘要:

  • 大型语言模型虽然能够执行多种自然语言处理任务,但往往表现出与用户意图不一致的行为,如编造事实、生成有害内容等。因此,需要对这些模型进行对齐,使其更好地遵循用户的指示。

  • 本文提出了一种通过对人类反馈进行微调来对齐语言模型的方法,主要分为三个步骤:监督微调、奖励模型训练和基于奖励模型的强化学习。

  • 实验结果表明,经过对齐的InstructGPT模型在遵循用户指示、减少有害输出和提高真实性方面优于原始的GPT-3模型,且在大多数情况下,13亿参数的InstructGPT模型的表现优于1750亿参数的GPT-3模型。

引言:

  • 大型语言模型虽然能够执行多种自然语言处理任务,但往往表现出与用户意图不一致的行为,如编造事实、生成有害内容等。因此,需要对这些模型进行对齐,使其更好地遵循用户的指示。

  • 本文提出了一种通过对人类反馈进行微调来对齐语言模型的方法,主要分为三个步骤:监督微调、奖励模型训练和基于奖励模型的强化学习。

相关工作:

  • 研究了与模型对齐和从人类反馈中学习相关的技术,如强化学习从人类反馈(RLHF)、跨任务泛化等。

  • 探讨了语言模型遵循指令的训练方法,以及在自然语言处理任务中的应用。

方法和实验细节:

  • 高阶方法论: 采用与Ziegler等人和Stiennon等人类似的方法,通过对人类反馈进行微调来对齐语言模型,具体步骤包括收集演示数据、训练监督策略、收集比较数据和训练奖励模型,最后使用PPO算法对监督策略进行优化。

  • 数据集: 主要包括通过OpenAI API提交的文本提示,以及由标注者编写的提示。数据集涵盖了多种自然语言任务,如生成、问答、对话、总结等。

  • 任务: 训练任务来自两个来源:标注者编写的提示和通过早期InstructGPT模型提交的提示。

  • 人类数据收集: 聘请了约40名标注者来收集演示和比较数据,并进行主要评估。标注者的选择基于其在筛选测试中的表现,以确保他们对不同人群的偏好敏感,并能够识别潜在的有害输出。

模型:

  • 从GPT-3预训练语言模型开始,使用三种不同的技术进行训练:监督微调(SFT)、奖励建模(RM)和强化学习(RL)。

  • 监督微调(SFT): 使用标注者的演示数据对GPT-3进行微调,训练了16个epoch,使用余弦学习率衰减和0.2的残差dropout。

  • 奖励建模(RM): 使用标注者的比较数据训练奖励模型,预测人类标注者偏好的输出。使用6B的奖励模型,因为其训练更稳定。

  • 强化学习(RL): 使用PPO算法对SFT模型进行微调,将奖励模型的输出作为奖励信号。同时,引入预训练数据的更新,以减少在公共NLP数据集上的性能退化。

结果:

  • API分布上的结果: 标注者显著偏好InstructGPT模型的输出,其在遵循用户指示、减少有害输出和提高真实性方面优于GPT-3模型。例如,175B InstructGPT模型的输出在85±3%的情况下优于GPT-3模型。

  • 公共NLP数据集上的结果: InstructGPT模型在TruthfulQA数据集上生成更真实和信息丰富的答案,在RealToxicityPrompts数据集上生成的有害内容较少,但在Winogender和CrowSPairs数据集上没有显著改进。

  • 定性结果: InstructGPT模型在非英语语言任务和代码相关任务上表现出一定的泛化能力,但仍然存在简单错误,如未能遵循具有错误前提的指令、过度对冲等。

讨论:

  • 对齐研究的影响: 该研究为对齐研究提供了现实世界的基础,验证了RLHF作为一种低税收对齐技术的有效性。

  • 我们对齐的对象是谁: 模型的对齐受到多种因素的影响,包括标注者的偏好、研究人员的指示等。需要进一步研究如何设计一种公平、透明且具有问责机制的对齐过程。

  • 局限性: InstructGPT模型仍然存在生成有害或有偏见内容、编造事实等问题。此外,模型的大小和性能之间存在权衡,需要进一步优化。

结论:

  • 通过对人类反馈进行微调,可以显著提高语言模型在遵循用户指示、减少有害输出和提高真实性方面的表现。然而,仍有许多工作需要完成,以进一步提高模型的安全性和可靠性。


7.论文建模

        在论文《Training language models to follow instructions with human feedback》中,奖励建模(RM)和PPO算法的结合方式如下:

奖励建模(RM)

  1. 数据收集:收集人类标注者对模型输出的比较和排名数据。这些数据包括对同一输入的不同模型输出的偏好排名。
  2. 训练目标:训练奖励模型来预测人类标注者更偏好的输出。奖励模型的输入是提示(prompt)和模型的输出(completion),输出是一个标量值,表示该输出的奖励。
  3. 模型架构:奖励模型基于GPT-3的架构,但输出层被修改为一个标量输出,用于表示奖励。
  4. 损失函数:使用交叉熵损失函数来训练奖励模型。具体来说,对于每一对输出(preferred completion和less preferred completion),奖励模型的损失函数如下:
     

PPO算法

  1. 初始化:从监督微调(SFT)模型初始化PPO策略模型。

  2. 奖励信号:使用训练好的奖励模型作为奖励函数,为策略模型的输出提供奖励信号。

  3. 强化学习优化:使用PPO算法优化策略模型,以最大化奖励模型提供的奖励。具体来说,策略模型的更新目标是:

 

结合方式

  • 奖励模型作为奖励信号:奖励模型的输出直接作为PPO算法中的奖励信号,指导策略模型的优化方向。奖励模型替代了环境提供的奖励函数,成为策略模型优化的唯一奖励来源。

  • 奖励模型的训练数据:奖励模型的训练数据来自人类标注者的比较和排名,而不是环境交互数据。这使得奖励模型能够更好地捕捉人类的偏好。

  • 策略模型的更新:策略模型在PPO算法中通过与奖励模型交互,不断调整其输出以最大化奖励模型提供的奖励。奖励模型的输出作为标量奖励,直接用于计算策略梯度。

总结

        奖励模型(RM)在强化学习过程中替代了环境提供的奖励函数,成为策略模型优化的唯一奖励来源。奖励模型的输出是一个标量值,表示模型输出的奖励,这个奖励值用于指导策略模型的优化方向。通过这种方式,奖励模型和PPO算法紧密结合,共同实现了对语言模型的对齐和优化。


[Notice]  常见误区

  1. RM不是简单的打分器,而是复杂的价值判断系统
  2. RM需要避免"分数欺骗"(比如为了快速回复牺牲正确性)
  3. RM需要定期更新(就像考试大纲会变化)

8. 面临的挑战与发展方向

尽管Reward Model在多个领域展现了其强大的潜力,但其发展仍然面临诸多挑战:

  • 模型偏差与可解释性:Reward Model在处理复杂任务时,容易受到数据偏差的影响,并且模型的决策过程往往缺乏可解释性。
  • 跨任务泛化能力:Reward Model是否能有效地适应不同任务或领域,仍然是一个未解之谜。尤其是在跨领域任务的应用中,Reward Model的泛化能力和稳定性有待进一步验证。
  • PRM的局限性:尽管PRM在一些任务中表现出色,但其在处理大规模推理任务时仍然存在很多局限性。研究者正在探索如何改进PRM,提升其在复杂推理任务中的表现。

9. 未来展望

Reward Model的未来发展方向主要集中在以下几个方面:

  • 优化算法:如何设计更高效的算法,以解决Reward Model在推理过程中的计算复杂度和可扩展性问题。
  • 多模态学习:Reward Model未来可能与图像、视频等多模态数据结合,进一步推动跨领域的应用。
  • 自监督学习:通过自监督学习,Reward Model可能能够减少对人工标注数据的依赖,提高训练效率。

        综上所述,Reward Model作为强化学习与深度学习结合的产物,已经在多个领域得到广泛应用,并展现出强大的潜力。随着技术的不断进步,Reward Model有望在更广泛的应用场景中发挥更大作用

 更多强化学习文章,请前往:【强化学习(RL)】专栏


        博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨

相关文章:

【强化学习】Reward Model(奖励模型)详细介绍

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...

UE5材质法线强度控制节点FlattenNormal

连法 FlattenNormal内部是这样的 FlattenNormal的作用是用来调整法线强度 连上FlattenNormal后 拉高数值...

<项目> 主从Reactor模型的高并发服务器

目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop(核心) eventfd 设计思路 …...

python爬虫解析器bs4,xpath,pquery

0x00 bs4 解析器的作用就是可以直接解析html页面&#xff0c;可以直接从网页中提取标签中的内容&#xff0c;而不用在使用正则表达式进行提起数据 import requests from bs4 import BeautifulSoup html_content <li id123><a hrefdfsdf>123</a>789</l…...

分析K8S中Node状态为`NotReady`问题

在Kubernetes&#xff08;k8s&#xff09;集群中&#xff0c;Node状态为NotReady通常意味着节点上存在某些问题&#xff0c;下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。 正常情况下Node节点应运行的容器 1. kubelet kubelet是节点上的核心组件&…...

【最后203篇系列】021 Q201再计划

忙了一周&#xff0c;终于到周末有时间再细细想这个问题了。这周还是不经意的弥补了kv硬盘存储库这个小空白的&#xff0c;这样也有助于构建更好的Q201。 计划是到6.1再发版&#xff0c;之所以留那么长时间&#xff0c;一方面是因为平时的确忙&#xff0c;另一方面则是可以有更…...

CA 机构如何防止中间人攻击

在现代互联网中&#xff0c;中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称 MITM&#xff09;是一种常见的网络攻击方式&#xff0c;攻击者通过拦截和篡改通信双方的信息&#xff0c;进而窃取敏感数据或执行恶意操作。为了防止中间人攻击&#xff0c;证书颁发…...

CUL-CHMLFRP启动器 windows图形化客户端

CUL-CHMLFRP启动器 windows图形化客户端 基于v2 api开发的chmlfrp ui版本的第三方客户端 CUL原名CHMLFRP_UI CUL顾名思义为CHMLFRP-UI-Launcher 下载地址&#xff1a;https://cul.lanzoul.com/b00pzv3oyj 密码:ff50 下载解压运行即可&#xff08;仅支持win7以上版本&#xf…...

C语言基础08

内容提要 数组 排序算法&#xff1a;冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想&#xff08;向前冒泡&#xff09; 一次只排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小&#xff0c;用第一个…...

基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接&#xff1a;从零开始的DeepSeek微调训练实战&#xff08;SFT&#xff09; 微调参考示例&#xff1a;由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…...

JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 笔记来源&#xff1a;在这位大佬的基础上添加了一些东西&#xff0c;欢迎大家支持原创&#xff0c;大佬太棒了&#xff1a;JavaScript |&#xff08;五&#xff09;DOM简介 | 尚硅谷JavaScript基础…...

模型整合-cherry studio+mysql_mcp_server服务配置

一、什么是MCP MCP&#xff08;Model Context Protocol&#xff09;是模型上下文协议&#xff0c;它允许大型语言模型&#xff08;LLM&#xff09;通过协议与外部工具或服务交互&#xff0c;动态获取实时数据或执行操作。简单来说&#xff0c;它让模型不再局限于静态知识库&…...

【QA】装饰模式在Qt中有哪些运用?

在Qt框架中&#xff0c;装饰模式&#xff08;Decorator Pattern&#xff09;主要通过继承或组合的方式实现&#xff0c;常见于IO设备扩展和图形渲染增强场景。以下是Qt原生实现的装饰模式典型案例&#xff1a; 一、QIODevice装饰体系&#xff08;继承方式&#xff09; 场景 …...

window 设置自动开启/关闭程序(分享)

打开计算机管理 winr 输入 compmgmt.msc 找到任务计划程序创建任务 设置开启任务 常规&#xff1a;添加名称与描述 触发器&#xff1a;新建触发时间与次数 操作&#xff1a;新建执行程序 添加任务对应的位置 以便修改 设置关闭任务 添加批处理文件&#xff0c;写完后吧 .…...

QT布局笔记

在 Qt 中&#xff0c;如果你希望将一个 QGroupBox 放置在水平布局&#xff08;QHBoxLayout&#xff09;的上方&#xff0c;可以通过将它们添加到一个垂直布局&#xff08;QVBoxLayout&#xff09;中来实现。垂直布局会将子布局或子控件按垂直顺序排列&#xff0c;因此 QGroupBo…...

【LLM大模型】LangChain学习

大模型对话 from langchain.chat_models import ChatOpenAI # 内置对话模型 from langchain.schema import HumanMessage, SystemMessage, AIMessage # 用户提示词&#xff0c;系统提示词&#xff0c; AI响应chat ChatOpenAI(temperature0.7, openai_api_keyxxxxxxxxxxxx) #…...

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介 1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介 2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09; 3.1 介绍&#xf…...

SolidWorks使用显卡教程

操作步骤&#xff1a; 打开注册表编辑器 按下键盘上的 Win R 组合键&#xff0c;输入 regedit 并按回车键&#xff0c;打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径&#xff1a; plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…...

mysql 查询进程查看并释放

在MySQL中&#xff0c;查看和管理进程&#xff08;例如查询、连接等&#xff09;是数据库维护和性能调优的重要部分。以下是一些常用的方法来查看MySQL进程并释放它们。 1. 查看进程 你可以使用SHOW PROCESSLIST命令来查看当前MySQL服务器上的所有进程。这个命令会显示正在执…...

C++代码2-多目标算法求解车辆路径规划

为了解决车辆路径规划问题,我们需要在同一模型中同时考虑多个目标,其中一个目标是降低运营总成本,而另一个目标是降低总的碳排放量。使用组合算法,包括人工蜂群算法(Artificial Bee Colony, ABC)、模拟退火算法(Simulated Annealing, SA)、以及多目标优化算法MODAD(Mu…...

JAVA学习*接口

接口 在生活中我们常听说USB接口&#xff0c;那接口是什么呢&#xff1f; 在Java中&#xff0c;接口相当于多个类的一种公共规范&#xff0c;是一种引用数据类型。 定义接口 public interface IUSB {public static final String SIZE "small";public abstract vo…...

Matplotlib

一、Matplotlib快速入门 学习目标 了解什么是matplotlib 为什么要学习matplotlib matplotlib简单图形的绘制 1、什么是Matplotlib 是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib 可视化是在整个数据挖掘的关键辅助工…...

新版frp-0.61.0 实现泛解析域名穿透 以及 https启用

需要在公网服务器的域名解析平台 泛域名 *.aa.com 解析到frp 公网服务器的ip x.x.x.x 对于frpc.toml 文件的 serverAddr 绑定的ip 需要公网服务器放行 bindPort 对于的端口 frpc.toml serverPort 对于的的是 frps.toml bindPort 端口 frps.toml bindPort 7000 vhostHTTPP…...

HTTPS 加密过程详解

HTTPS 详解及其加密过程流程框架 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种基于 HTTP 协议的安全通信协议&#xff0c;通过 SSL/TLS 协议对传输数据进行加密和身份验证&#xff0c;解决了 HTTP 明文传输的安全隐患。以下是其核心原理和加密流程的…...

lua垃圾回收

lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)获取当前lua脚本占用内存字节数(单位为KB)。 collectgarbage(“collect”)执行一次垃圾回收。 xxxnil 将变量置为空&#xff0c;会释放内存。 lua中的机制和c#中回收机制很类似 解除羁绊(置为空)。 --垃圾回…...

springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类

以下是使用 MyBatis-Plus 分页插件的完整配置和封装步骤&#xff0c;包括日志输出、驼峰转下划线、逻辑删除以及分页属性类的封装。 1. 引入依赖 确保在 pom.xml 中已经引入 MyBatis-Plus 的依赖&#xff1a; <XML> <dependency><groupId>com.baomidou<…...

智能汽车以太网系统测试:聚焦ETH链路高负载性能表现

引言 在智能汽车高速发展的今天&#xff0c;车载以太网作为车辆信息交互的“神经网络”&#xff0c;承担着传输海量数据的关键使命。它不仅能够满足车辆对高带宽、低延迟和高可靠性的通信需求&#xff0c;还为自动驾驶、智能座舱等复杂功能提供了强大的技术支持。然而&#xf…...

学习笔记:黑马程序员JavaWeb开发教程(2025.3.21)

10.7 案例-员工管理-分页查询-分析 形参的默认值可以使用注解来设置&#xff1a;RequestParam(default “1”) 10.8 案例-员工管理-分页查询-PageHelper插件 分页插件PageHelper帮助完成有关分页的所有操作&#xff0c;我们只要正常使用查询语句就可以了。插件会自动…...

计算机网络精讲day1——计算机网络的性能指标(上)

性能指标1&#xff1a;速率 概念1&#xff1a;比特 英文全称是binary digit&#xff0c;意思是一个二进制数字&#xff0c;因此一个比特就是二进制数字中的1或0&#xff0c;比特也是信息论中使用的信息量单位。 概念2&#xff1a;速率 网络中的速率指的是数据的传送速率&#…...

gin-路由handler封装思路

约束handler入参和返回为func(ctx, req) (resp, error)。通过反射&#xff0c;封装handler&#xff0c;在调用前后写入入参和返回的处理。 package testingimport ("context""fmt""reflect""strings""testing" )type ReqPa…...

【实战案例】用STAR+3W模型拆解电商支付系统设计文档

各位开发者朋友&#xff0c;上次分享了结构化写作的黄金公式后&#xff0c;很多同学反馈需要更具象的落地方法。今天通过真实电商支付系统案例&#xff0c;手把手教你用STAR3W模型写出可执行的设计文档&#xff01; 结构化写作的「黄金公式」 STAR原则 3W模型 Situation&…...

计算机组成原理和计算机网络常见单位分类及换算

计算机组成原理&#xff08;主要用于存储、内存、缓存等&#xff09; 计算机网络&#xff08;主要用于传输速率&#xff09; 直观对比...

线性筛法求素数

时间复杂度 o&#xff08;n&#xff09; int cnt, primes[N];//cnt用来记录素数的下标 bool st[N];//用来标记合数 int minp[N];//最小质因数 void get_primes(int n) {for(int i 2;i < n;i )//从2开始找数 {if(!st[i])//如果这个数没有被筛出去过&#xff0c;说明是一…...

触动精灵对某东cookie读取并解密--记lua调用C语言

在Mac上构建Lua扩展模块&#xff1a;AES解密与Base64解码实战 今天我要分享一个实用技术&#xff1a;如何在Mac系统上为Lua编写和编译C扩展模块&#xff0c;特别是实现一个某东iOS PIN码解密功能的扩展。这对于需要在Lua环境中执行高性能计算或使用底层系统功能的开发者非常有…...

GEO:在AI时代抢占DeepSeekC位?

前言&#xff1a;当SEO遇见AGI——一场静默的流量革命 在生成式AI日均处理53亿次查询的今天&#xff0c;传统SEO的「关键词-排名-点击」逻辑正在崩塌。DeepSeek、ChatGPT、豆包等大模型用动态生成的答案&#xff0c;悄然截流了68%的搜索需求。更残酷的是&#xff1a;当用户问&q…...

【设计模式】策略模式

以下是格式优化后的Markdown文档&#xff0c;仅调整代码缩进&#xff0c;保持内容不变&#xff1a; 四、策略模式 策略(Strategy) 模式是一种行为型模式&#xff0c;其实现过程与模板方法模式非常类似——都 是以扩展的方式支持未来的变化。本章通过对一个具体范例的逐步重构…...

第J6周:ResNeXt-50实战解析

文章目录 一、前期准备1.设置GPU2.导入数据3.查看数据 二、数据预处理1.加载数据2.可视化数据3.再次检查数据4.配置数据集 四、模型复现1. 分组卷积模块2. 定义残差模块3. 堆叠残差单元4. 搭建ResNext-50网络5. 查看模型摘要 五、训练模型六、结果可视化总结&#xff1a; &…...

调试 ResNet18 cpp实现中的段错误(SIGSEGV)问题

调试 ResNet18 cpp实现中的段错误&#xff08;SIGSEGV&#xff09;问题 问题分析 您的程序在运行时遇到了段错误&#xff08;SIGSEGV&#xff09;&#xff0c;GDB显示错误发生在main()函数的第一行&#xff08;resnet18_allo_test.cpp:33&#xff09;。这种情况看起来很奇怪&…...

详细介绍IDI_APPLICATION和IDC_ARROW

书籍&#xff1a;《windows程序设计(第五版)》 环境&#xff1a;visual studio 2022 内容&#xff1a;HELLOWIN程序 说明&#xff1a;以下内容大部分来自腾讯元宝。 ​IDI_APPLICATION 与 IDC_ARROW 详解 ​1. IDC_ARROW&#xff08;光标资源标识符&#xff09;​ ​定义与…...

curl库+openssl库windows编译

一、工具准备 Visual Studio 2008&#xff1a;确保安装了 C 开发工具。 Git&#xff1a;用于克隆 cURL 的源码。 Perl&#xff1a;可以从 ActiveState Perl 下载并安装。 NASM&#xff08;可选&#xff09;&#xff1a;如果需要汇编优化&#xff0c;可以从NASM 官方网站 下载并…...

今日行情明日机会——20250321

后续投资机会分析 结合2025年3月21日盘面数据&#xff08;涨停56家&#xff0c;跌停31家&#xff09;&#xff0c;市场呈现结构性分化行情&#xff0c;海洋经济成为绝对主线&#xff0c;机器人概念局部活跃&#xff0c;人工智能表现较弱。以下是具体方向与策略建议&#xff1a…...

repo init 错误 Permission denied (publickey)

一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig &#xff08;此步骤是公司要求&#xff0c;设置gerrit地址为一个别名之类的&#xff0c;有的公司不需要&#xff09; 然后出现下面的错误&#xff0c;最后发现忘记设置git的用户名和邮箱 1. git config --globa…...

STM32 模拟SPI 模式0

SPI 模式 0 的时钟极性&#xff08;CPOL&#xff09;为 0&#xff0c;时钟相位&#xff08;CPHA&#xff09;为 0。CPOL 0 意味着时钟信号空闲时为低电平&#xff0c;CPHA 0 表示在时钟信号的第一个跳变沿&#xff08;上升沿&#xff09;进行数据采样。 #include "stm3…...

MySQL实现全量同步和增量同步到SQL Server或其他关系型库

在将MySQL中的两张表同步到SQL Server的过程中&#xff0c;全量同步和增量同步各有其优缺点。全量同步简单直接但可能耗时较长且资源消耗大&#xff0c;而增量同步则更加高效但需要额外的逻辑来处理数据的变更。以下是对这两种同步方式的详细解释及代码示例的完善。 完整代码示…...

详细解析GetOpenFileName()

书籍&#xff1a;《Visual C 2017从入门到精通》的2.3.8 Win32控件编程 环境&#xff1a;visual studio 2022 内容&#xff1a;【例2.34】打开文件对话框和另存为。 说明&#xff1a;以下内容大部分来自腾讯元宝。 GetOpenFileName() 是 Windows API 中用于显示标准文件打开…...

FPGA----完美解决Windows下[XSIM 43-3409][XSIM 43-3915]错误

大家好久不见&#xff0c;今天开始又要重操旧业了&#xff01;最近会更新很多关于petalinux的踩坑日记&#xff0c;敬请期待&#xff01; 先更新一个常见问题&#xff0c;使用Vivado仿真时C编译器报错问题。如下所示 ERROR: [XSIM 43-3409] Failed to compile generated C fi…...

LeetCode Hot100 刷题路线(Python版)

目录 1. LeetCode Hot100 刷题笔记&#xff08;1&#xff09;—— 哈希、双指针、滑动窗口 2. LeetCode Hot100 刷题笔记&#xff08;2&#xff09;—— 子串、普通数组、矩阵 3. LeetCode Hot100 刷题笔记&#xff08;3&#xff09;—— 链表 4. LeetCode Hot100 刷题笔记&…...

宇树科技纯技能要求总结

一、嵌入式开发与硬件设计 核心技能 嵌入式开发&#xff1a; 精通C/C&#xff0c;熟悉STM32、ARM开发熟悉Linux BSP开发及驱动框架&#xff08;SPI/UART/USB/FLASH/Camera/GPS/LCD&#xff09;掌握主流平台&#xff08;英伟达、全志、瑞芯微等&#xff09; 硬件设计&#xff1a…...

Docker学习笔记(十)搭建Docker私有仓库

一、环境配置 1、宿主机系统&#xff1a;macOS Sequoia(版本15.2) 2、虚拟机VMware Fusion版本&#xff1a;专业版 13.6.2 (24409261) 3、虚拟机系统&#xff1a;AlmaLinux-9-latest-x86_64-boot.iso 二、安装Harbor开源企业级Docker镜像 Harbor 是一个开源的企业级 Docker…...