【强化学习】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的行为打分,告诉它"什么是对的/好的",就像老师批改作业时给分数和评语。
实际案例——训练聊天机器人:
-
收集数据:记录1000条人类客服与客户的真实对话
-
定义评分标准:
- 正确性(+3分)
- 响应速度(+1分)
- 语气友好(+2分)
- 提供错误信息(-5分)
-
训练奖励模型过程:
# 模拟训练代码
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)
- 数据收集:收集人类标注者对模型输出的比较和排名数据。这些数据包括对同一输入的不同模型输出的偏好排名。
- 训练目标:训练奖励模型来预测人类标注者更偏好的输出。奖励模型的输入是提示(prompt)和模型的输出(completion),输出是一个标量值,表示该输出的奖励。
- 模型架构:奖励模型基于GPT-3的架构,但输出层被修改为一个标量输出,用于表示奖励。
- 损失函数:使用交叉熵损失函数来训练奖励模型。具体来说,对于每一对输出(preferred completion和less preferred completion),奖励模型的损失函数如下:
PPO算法
-
初始化:从监督微调(SFT)模型初始化PPO策略模型。
-
奖励信号:使用训练好的奖励模型作为奖励函数,为策略模型的输出提供奖励信号。
-
强化学习优化:使用PPO算法优化策略模型,以最大化奖励模型提供的奖励。具体来说,策略模型的更新目标是:
结合方式
-
奖励模型作为奖励信号:奖励模型的输出直接作为PPO算法中的奖励信号,指导策略模型的优化方向。奖励模型替代了环境提供的奖励函数,成为策略模型优化的唯一奖励来源。
-
奖励模型的训练数据:奖励模型的训练数据来自人类标注者的比较和排名,而不是环境交互数据。这使得奖励模型能够更好地捕捉人类的偏好。
-
策略模型的更新:策略模型在PPO算法中通过与奖励模型交互,不断调整其输出以最大化奖励模型提供的奖励。奖励模型的输出作为标量奖励,直接用于计算策略梯度。
总结
奖励模型(RM)在强化学习过程中替代了环境提供的奖励函数,成为策略模型优化的唯一奖励来源。奖励模型的输出是一个标量值,表示模型输出的奖励,这个奖励值用于指导策略模型的优化方向。通过这种方式,奖励模型和PPO算法紧密结合,共同实现了对语言模型的对齐和优化。
[Notice] 常见误区:
- RM不是简单的打分器,而是复杂的价值判断系统
- RM需要避免"分数欺骗"(比如为了快速回复牺牲正确性)
- 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页面,可以直接从网页中提取标签中的内容,而不用在使用正则表达式进行提起数据 import requests from bs4 import BeautifulSoup html_content <li id123><a hrefdfsdf>123</a>789</l…...
分析K8S中Node状态为`NotReady`问题
在Kubernetes(k8s)集群中,Node状态为NotReady通常意味着节点上存在某些问题,下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。 正常情况下Node节点应运行的容器 1. kubelet kubelet是节点上的核心组件&…...
【最后203篇系列】021 Q201再计划
忙了一周,终于到周末有时间再细细想这个问题了。这周还是不经意的弥补了kv硬盘存储库这个小空白的,这样也有助于构建更好的Q201。 计划是到6.1再发版,之所以留那么长时间,一方面是因为平时的确忙,另一方面则是可以有更…...
CA 机构如何防止中间人攻击
在现代互联网中,中间人攻击(Man-in-the-Middle Attack,简称 MITM)是一种常见的网络攻击方式,攻击者通过拦截和篡改通信双方的信息,进而窃取敏感数据或执行恶意操作。为了防止中间人攻击,证书颁发…...
CUL-CHMLFRP启动器 windows图形化客户端
CUL-CHMLFRP启动器 windows图形化客户端 基于v2 api开发的chmlfrp ui版本的第三方客户端 CUL原名CHMLFRP_UI CUL顾名思义为CHMLFRP-UI-Launcher 下载地址:https://cul.lanzoul.com/b00pzv3oyj 密码:ff50 下载解压运行即可(仅支持win7以上版本…...
C语言基础08
内容提要 数组 排序算法:冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想(向前冒泡) 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小,用第一个…...
基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)
原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由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基础实战
学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 笔记来源:在这位大佬的基础上添加了一些东西,欢迎大家支持原创,大佬太棒了:JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础…...
模型整合-cherry studio+mysql_mcp_server服务配置
一、什么是MCP MCP(Model Context Protocol)是模型上下文协议,它允许大型语言模型(LLM)通过协议与外部工具或服务交互,动态获取实时数据或执行操作。简单来说,它让模型不再局限于静态知识库&…...
【QA】装饰模式在Qt中有哪些运用?
在Qt框架中,装饰模式(Decorator Pattern)主要通过继承或组合的方式实现,常见于IO设备扩展和图形渲染增强场景。以下是Qt原生实现的装饰模式典型案例: 一、QIODevice装饰体系(继承方式) 场景 …...
window 设置自动开启/关闭程序(分享)
打开计算机管理 winr 输入 compmgmt.msc 找到任务计划程序创建任务 设置开启任务 常规:添加名称与描述 触发器:新建触发时间与次数 操作:新建执行程序 添加任务对应的位置 以便修改 设置关闭任务 添加批处理文件,写完后吧 .…...
QT布局笔记
在 Qt 中,如果你希望将一个 QGroupBox 放置在水平布局(QHBoxLayout)的上方,可以通过将它们添加到一个垂直布局(QVBoxLayout)中来实现。垂直布局会将子布局或子控件按垂直顺序排列,因此 QGroupBo…...
【LLM大模型】LangChain学习
大模型对话 from langchain.chat_models import ChatOpenAI # 内置对话模型 from langchain.schema import HumanMessage, SystemMessage, AIMessage # 用户提示词,系统提示词, AI响应chat ChatOpenAI(temperature0.7, openai_api_keyxxxxxxxxxxxx) #…...
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
目录 一、OFD 简介 1.1 什么是 OFD?1.2 什么是 版式文档?1.3 为什么要用 OFD 而不是PDF? 二、ofdrw 简介 2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD(ofdrw-conterver) 3.1 介绍…...
SolidWorks使用显卡教程
操作步骤: 打开注册表编辑器 按下键盘上的 Win R 组合键,输入 regedit 并按回车键,打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径: plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…...
mysql 查询进程查看并释放
在MySQL中,查看和管理进程(例如查询、连接等)是数据库维护和性能调优的重要部分。以下是一些常用的方法来查看MySQL进程并释放它们。 1. 查看进程 你可以使用SHOW PROCESSLIST命令来查看当前MySQL服务器上的所有进程。这个命令会显示正在执…...
C++代码2-多目标算法求解车辆路径规划
为了解决车辆路径规划问题,我们需要在同一模型中同时考虑多个目标,其中一个目标是降低运营总成本,而另一个目标是降低总的碳排放量。使用组合算法,包括人工蜂群算法(Artificial Bee Colony, ABC)、模拟退火算法(Simulated Annealing, SA)、以及多目标优化算法MODAD(Mu…...
JAVA学习*接口
接口 在生活中我们常听说USB接口,那接口是什么呢? 在Java中,接口相当于多个类的一种公共规范,是一种引用数据类型。 定义接口 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(Hypertext Transfer Protocol Secure)是一种基于 HTTP 协议的安全通信协议,通过 SSL/TLS 协议对传输数据进行加密和身份验证,解决了 HTTP 明文传输的安全隐患。以下是其核心原理和加密流程的…...
lua垃圾回收
lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)获取当前lua脚本占用内存字节数(单位为KB)。 collectgarbage(“collect”)执行一次垃圾回收。 xxxnil 将变量置为空,会释放内存。 lua中的机制和c#中回收机制很类似 解除羁绊(置为空)。 --垃圾回…...
springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类
以下是使用 MyBatis-Plus 分页插件的完整配置和封装步骤,包括日志输出、驼峰转下划线、逻辑删除以及分页属性类的封装。 1. 引入依赖 确保在 pom.xml 中已经引入 MyBatis-Plus 的依赖: <XML> <dependency><groupId>com.baomidou<…...
智能汽车以太网系统测试:聚焦ETH链路高负载性能表现
引言 在智能汽车高速发展的今天,车载以太网作为车辆信息交互的“神经网络”,承担着传输海量数据的关键使命。它不仅能够满足车辆对高带宽、低延迟和高可靠性的通信需求,还为自动驾驶、智能座舱等复杂功能提供了强大的技术支持。然而…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.21)
10.7 案例-员工管理-分页查询-分析 形参的默认值可以使用注解来设置:RequestParam(default “1”) 10.8 案例-员工管理-分页查询-PageHelper插件 分页插件PageHelper帮助完成有关分页的所有操作,我们只要正常使用查询语句就可以了。插件会自动…...
计算机网络精讲day1——计算机网络的性能指标(上)
性能指标1:速率 概念1:比特 英文全称是binary digit,意思是一个二进制数字,因此一个比特就是二进制数字中的1或0,比特也是信息论中使用的信息量单位。 概念2:速率 网络中的速率指的是数据的传送速率&#…...
gin-路由handler封装思路
约束handler入参和返回为func(ctx, req) (resp, error)。通过反射,封装handler,在调用前后写入入参和返回的处理。 package testingimport ("context""fmt""reflect""strings""testing" )type ReqPa…...
【实战案例】用STAR+3W模型拆解电商支付系统设计文档
各位开发者朋友,上次分享了结构化写作的黄金公式后,很多同学反馈需要更具象的落地方法。今天通过真实电商支付系统案例,手把手教你用STAR3W模型写出可执行的设计文档! 结构化写作的「黄金公式」 STAR原则 3W模型 Situation&…...
计算机组成原理和计算机网络常见单位分类及换算
计算机组成原理(主要用于存储、内存、缓存等) 计算机网络(主要用于传输速率) 直观对比...
线性筛法求素数
时间复杂度 o(n) 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])//如果这个数没有被筛出去过,说明是一…...
触动精灵对某东cookie读取并解密--记lua调用C语言
在Mac上构建Lua扩展模块:AES解密与Base64解码实战 今天我要分享一个实用技术:如何在Mac系统上为Lua编写和编译C扩展模块,特别是实现一个某东iOS PIN码解密功能的扩展。这对于需要在Lua环境中执行高性能计算或使用底层系统功能的开发者非常有…...
GEO:在AI时代抢占DeepSeekC位?
前言:当SEO遇见AGI——一场静默的流量革命 在生成式AI日均处理53亿次查询的今天,传统SEO的「关键词-排名-点击」逻辑正在崩塌。DeepSeek、ChatGPT、豆包等大模型用动态生成的答案,悄然截流了68%的搜索需求。更残酷的是:当用户问&q…...
【设计模式】策略模式
以下是格式优化后的Markdown文档,仅调整代码缩进,保持内容不变: 四、策略模式 策略(Strategy) 模式是一种行为型模式,其实现过程与模板方法模式非常类似——都 是以扩展的方式支持未来的变化。本章通过对一个具体范例的逐步重构…...
第J6周:ResNeXt-50实战解析
文章目录 一、前期准备1.设置GPU2.导入数据3.查看数据 二、数据预处理1.加载数据2.可视化数据3.再次检查数据4.配置数据集 四、模型复现1. 分组卷积模块2. 定义残差模块3. 堆叠残差单元4. 搭建ResNext-50网络5. 查看模型摘要 五、训练模型六、结果可视化总结: &…...
调试 ResNet18 cpp实现中的段错误(SIGSEGV)问题
调试 ResNet18 cpp实现中的段错误(SIGSEGV)问题 问题分析 您的程序在运行时遇到了段错误(SIGSEGV),GDB显示错误发生在main()函数的第一行(resnet18_allo_test.cpp:33)。这种情况看起来很奇怪&…...
详细介绍IDI_APPLICATION和IDC_ARROW
书籍:《windows程序设计(第五版)》 环境:visual studio 2022 内容:HELLOWIN程序 说明:以下内容大部分来自腾讯元宝。 IDI_APPLICATION 与 IDC_ARROW 详解 1. IDC_ARROW(光标资源标识符) 定义与…...
curl库+openssl库windows编译
一、工具准备 Visual Studio 2008:确保安装了 C 开发工具。 Git:用于克隆 cURL 的源码。 Perl:可以从 ActiveState Perl 下载并安装。 NASM(可选):如果需要汇编优化,可以从NASM 官方网站 下载并…...
今日行情明日机会——20250321
后续投资机会分析 结合2025年3月21日盘面数据(涨停56家,跌停31家),市场呈现结构性分化行情,海洋经济成为绝对主线,机器人概念局部活跃,人工智能表现较弱。以下是具体方向与策略建议:…...
repo init 错误 Permission denied (publickey)
一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig (此步骤是公司要求,设置gerrit地址为一个别名之类的,有的公司不需要) 然后出现下面的错误,最后发现忘记设置git的用户名和邮箱 1. git config --globa…...
STM32 模拟SPI 模式0
SPI 模式 0 的时钟极性(CPOL)为 0,时钟相位(CPHA)为 0。CPOL 0 意味着时钟信号空闲时为低电平,CPHA 0 表示在时钟信号的第一个跳变沿(上升沿)进行数据采样。 #include "stm3…...
MySQL实现全量同步和增量同步到SQL Server或其他关系型库
在将MySQL中的两张表同步到SQL Server的过程中,全量同步和增量同步各有其优缺点。全量同步简单直接但可能耗时较长且资源消耗大,而增量同步则更加高效但需要额外的逻辑来处理数据的变更。以下是对这两种同步方式的详细解释及代码示例的完善。 完整代码示…...
详细解析GetOpenFileName()
书籍:《Visual C 2017从入门到精通》的2.3.8 Win32控件编程 环境:visual studio 2022 内容:【例2.34】打开文件对话框和另存为。 说明:以下内容大部分来自腾讯元宝。 GetOpenFileName() 是 Windows API 中用于显示标准文件打开…...
FPGA----完美解决Windows下[XSIM 43-3409][XSIM 43-3915]错误
大家好久不见,今天开始又要重操旧业了!最近会更新很多关于petalinux的踩坑日记,敬请期待! 先更新一个常见问题,使用Vivado仿真时C编译器报错问题。如下所示 ERROR: [XSIM 43-3409] Failed to compile generated C fi…...
LeetCode Hot100 刷题路线(Python版)
目录 1. LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口 2. LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵 3. LeetCode Hot100 刷题笔记(3)—— 链表 4. LeetCode Hot100 刷题笔记&…...
宇树科技纯技能要求总结
一、嵌入式开发与硬件设计 核心技能 嵌入式开发: 精通C/C,熟悉STM32、ARM开发熟悉Linux BSP开发及驱动框架(SPI/UART/USB/FLASH/Camera/GPS/LCD)掌握主流平台(英伟达、全志、瑞芯微等) 硬件设计:…...
Docker学习笔记(十)搭建Docker私有仓库
一、环境配置 1、宿主机系统:macOS Sequoia(版本15.2) 2、虚拟机VMware Fusion版本:专业版 13.6.2 (24409261) 3、虚拟机系统:AlmaLinux-9-latest-x86_64-boot.iso 二、安装Harbor开源企业级Docker镜像 Harbor 是一个开源的企业级 Docker…...