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

LLMs 系列科普文(5)

在前文中,我们讲述了什么是基础模型,并重点以 LLaMA 3.1 基础模型为例,向大家演示了它可以做什么,有哪些问题或有趣的现象。

在进入新的主题内容之前,我们再次对 基础模型 做一些总结:

  • 这是一个基于 token 级别的互联网文档模拟器
  • 它具有随机性/概率性——每次运行都会生成不同的内容
  • 它能够"幻想"出互联网文档
  • 它也能逐字背诵记忆中的某些训练文档(“机械复述”)
  • 模型的参数有点像互联网的有损压缩文件
    => 大量有用的世界知识被存储在网络参数中
  • 通过巧妙设计提示词,你已能将其用于实际应用(例如翻译)
    • 例如:构建"少量示例"提示词并利用"上下文学习"能力,实现英语→韩语翻译应用
    • 例如:使用对话式提示词打造能回答问题的助手

但我们还能做得更好,我们希望训练像 ChatGPT 这样的大型语言模型助手 …

五、后训练(Post-Training)

我们已经讨论了第一阶段,即预训练(Pre-Training) 阶段,这一阶段的核心在于:我们获取互联网文档,将其分解为这些 token,然后利用神经网络预测 token 序列。整个这一阶段的输出就是这个基础模型。

我们发现它可以应用于某些场景,但实际上我们还需要做得更好。我们需要一个助手,能够提出问题并得到模型的回答。因此,我们现在需要进入第二阶段,即所谓的后训练阶段。于是,我们将基础模型——我们的互联网文档模拟器——交给后训练阶段进行处理。

接下来我们将探讨几种方法,用于对这些模型进行所谓的"后训练处理"。这些后训练处理阶段的计算成本将大幅降低。大部分计算工作、所有大型数据中心、以及所有重型计算设备和数百万美元的开支,都集中在预训练阶段。

后训练阶段虽然成本降低,但该阶段依然极其重要,它的目标是将这个大语言模型转化为真正的助手。让我们来看看如何让模型不再简单检索网络文档,而是学会回答问题。换句话说,我们的目标是要开始构建对话思维。这些对话可以是多轮次的。

举个例子,我们可以想象对话可能是这样的。当人类问 “2+2=?” 时,助手应该回答“2+2=4”。如果人类接着问“如果把 “+” 换成 “ × \times ×” 会怎样”,助手可以做出相应的回答,同样地,这个例子也展示了助手可以带有某种个性,显得友善。而当人类提出模型不愿协助的请求时,模型可以给出所谓的拒绝回应,模型可以说对此无能为力。换句话说,我们现在想做的是思考一个助手应该如何与人类互动。我们想要在这些对话中编程助手及其行为。

现在,由于这是神经网络,我们不会在代码中明确编程这些内容,这一切都是通过对数据集进行神经网络训练来完成的,正因如此,我们将通过创建对话数据集 来隐式地训练这个助手。这里展示的是数据集中三个独立的对话示例。而实际的数据集规模要大得多。它可以进行成千上万次多轮、冗长的对话,涵盖广泛的话题。其基本运作方式是通过示例来编程助手。

但就像图例中的这些数据是从哪里来的呢?它们来自人类标注员。我们基本上会给人类标注员一些对话上下文,然后让他们给出在这种情况下理想助手应该给出的回答。人类会为助手在各种情境下写出理想的回答。然后我们将让模型以此为基础进行训练,模仿这类回答。具体实操上,我们将采用预训练阶段生成的基础模型

后训练数据集(对话)

我们将舍弃现有的互联网文档数据集,转而采用一个全新的数据集——对话数据集,我们将基于这个全新的对话数据集继续训练模型。实际上,模型会迅速调整,并大致学会应如何响应人类查询的统计规律。然后在后续推理过程中,我们基本上可以引导助手获得响应,它会模仿人类标注员在这种情况下会采取的行动。

在后训练阶段,我们基本上会继续训练模型,但预训练阶段实际上可能需要大约三个月的时间,在数千台计算机上进行训练。而后训练阶段通常会短得多,比如三个小时,这是因为我们将手动创建的对话数据集比互联网上的文本数据集要小得多。因此,这个训练时间会非常短,但从根本上说,我们只是拿基础模型,继续使用完全相同的算法、完全相同的所有东西进行训练,只不过我们把数据集换成了对话

那么现在的问题是,这些对话在哪里,我们如何表示它们,如何让模型看到的是对话形式而不仅仅是原始文本,然后这种训练的结果是什么,当我们谈论模型时,从某种心理意义上你能得到什么。现在让我们转向这些问题。

对话的 tokenizer

让我们从对话的分词开始讨论。这些模型中的所有内容都必须转化为 token,因为一切都与 token 序列有关。那么问题来了,我们如何将对话转化为 token 序列?

为此,我们需要设计某种编码方式,这有点类似于——如果你熟悉的话——比如互联网上的 TCP/IP 数据包(当然不了解也没关系)。信息的呈现方式、所有内容的组织结构都有精确的规则和协议,这样才能确保各类数据以书面形式清晰呈现,并获得所有人的认可。如今同样的情况也发生在大型语言模型中。我们需要某种数据结构,还需要制定规则来规范这些数据结构(比如对话)如何编码为 token,又如何从 token 中解码还原。

我们再次打开 TickTokenizer,选择 gpt-4o 模型,这就是这段对话在模型中的表示形式。现在我们正在迭代用户和助手的两轮对话,虽然看起来有点杂乱,但实际上相当简单。

这段内容最终被转换为 token 序列的方式有点复杂,但最终,用户与助手之间的这段对话会被编码为 49 个 token。这是一个由 49 个 token 组成的一维序列,不同的模型会采用略微不同的格式或协议,目前这方面还比较混乱,但以 GPT-4o 为例,它是这样处理的:使用一个 <|im_start|> 的特殊 token,关于 im 是什么意思,貌似有一些不同的解释,如 “imaginary monologue of the start”(起始假想独白)的缩写,或者 input message 的简写,老实说,我也不知道为什么叫这个么东西。然后你必须指定轮到谁了,即对话角色,比如说用户,token ID 为 1428。然后有一个内部独白分隔符 <|im_sep|>,接着是具体的问题,然后你需要结束它 <|im_end|>,即想象独白的结束。

现在要提到的重要一点是,<|im_start|> 等符号并不是文本内容,它是一个额外添加的特殊 token,这是一个全新的 token,从未出现在预训练阶段的字典表中,即迄今为止从未参与过训练。它是我们在后训练阶段创建并引入的新 token。因此,这些特殊 token,需要被引入并与文本交错排列,以便让模型学会识别:嘿,这是一轮对话的开始…是谁的回合开始呢?是用户的回合开始。然后是用户说的话,接着用户结束发言。然后是新的一轮对话开始,这次是助手的回合。然后助手会说什么呢?巴啦巴啦,于是这段对话就被转化成了这一连串的 token。

我们原本视为某种结构化对象的对话,最终会通过这种编码转化为一维的 token 序列。因此,我们依然只是在预测序列中的下一个 token,就像之前一样,同时我们也能对对话进行建模和训练。

那么在推理阶段的测试过程中,这会是什么样子呢?假设我们已经训练好了一个模型,并且是在这类对话数据集上训练的,现在我们要进行推理。那么在推理过程中,当你在同 ChatGPT 交互时,这会是什么样子呢?实际上我们将对话文本发送给 chatgpt,其内部也会按这种格式进行内部处理,将我们的问题以及可能存在的上下文对话编码为相同的格式,所以这就是协议的大致工作原理,协议的细节并不重要。再次强调,我的目标只是向你展示,最终一切都归结为一维的 token 序列。因此,我们可以应用之前讲到的所有内容,但现在是在对话上进行训练,并且基本上也在生成对话。

早期对话数据集的构建过程

接下来,我们简单介绍下这些数据集在实际中的应用,OpenAI 在 2022 年发表的 InstructGPT 论文1是在这个方向上的首次尝试.

这是 OpenAI 首次谈到如何利用语言模型并通过对话对其进行微调。这篇论文包含了许多细节,值得和大家分享一下。

在 3.4 章节,这部分讲述了他们雇佣的外包团队——这些人员来自 Upwork 或通过 ScaleAI 招募——来构建这些对话内容。因此,这里会有人工标注员参与,他们的专业工作就是创建这些对话,这些标注员被要求提出 prompt(基本上是一些问题),然后还要完成理想的助手回复。其中在附录 A2.1 章节罗列了一些示例:

可以看到这里会有各种类型的,如头脑风暴(接下来我应该读哪10本科幻小说?)、分类问题(按文本讽刺程度打分,1-10分)、信息提取(从表格中提取课程名称)、文本生成类(为某种产品撰写一则创意广告,在 Facebook 上投放,目标受众为家长)等,这里有很多不同类型的提示。

他们首先想出了这些提示,然后他们还需要回答这些提示,给出了理想的助手回应。那么他们如何知道针对这些提示应该写出怎样的理想助手回应呢?

在附录 B.3 章节就能看到这里提供给人工标注人员的标注指南节选。开发语言模型的公司,比如 OpenAI,会撰写标注指南,指导人类如何创建理想的回应。这里展示的就是这类标注指南的一个节选片段。

翻译:你收到了一份用户提交的基于文本的任务描述。该任务描述可能以明确的指令形式呈现(例如“写一个关于聪明青蛙的故事”)。任务也可能以间接方式指定,例如通过提供多个期望行为的示例(例如给定一系列电影评论及其情感倾向,然后是一条没有情感倾向的评论,你可以假设任务是预测最后一条评论的情感倾向),或者通过生成期望输出的开头(例如给定“从前有一只聪明的青蛙叫朱利叶斯”,你可以假设任务是继续这个故事)。你还将获得几个文本输出,旨在帮助用户完成任务。你的工作是评估这些输出,确保它们有帮助、真实且无害。对于大多数任务,真实和无害有帮助 更重要。

从高层次来看,你是在要求人们乐于助人、诚实守信、避免伤害。如果你想了解更多,可以定位到论文 B.3 章节详细阅读。但概括来说,基本就是回答问题时要尽力提供帮助,力求真实,不要回答那些我们不希望系统在后续 ChatGPT 对话中处理的问题。

因此,大致来说,公司会制定标签说明。通常这些说明不会这么简短,可能会有数百页之多,人们需要专业地研究它们。然后他们根据这些标注说明写出理想的助手回应。正如这篇论文所述,这是一个非常依赖人工的过程。目前 OpenAI 实际上从未发布过 InstructGPT 的数据集。

但我们确实有一些开源项目在尝试遵循这种设置并收集自己的数据。比如,一个例子是之前 Open Assistant2 所做的努力,这只是众多例子中的一个。

这些是网上被要求创作这类对话的人,类似于 OpenAI 让人类标注员做的工作。这里展示的是某人想出的这个提示的条目。你能写一篇关于“买方垄断”在经济学中相关性的简短介绍吗?请使用例子等说明。然后由同一个人,或可能是另一个人,来撰写回应。以下是助手对此的回复。然后,同一个人或不同的人会实际写出这个理想的回应。接着,这可能是对话如何继续的一个例子。现在,向一只狗解释它。然后你可以尝试想出一个稍微简单一点的解释或类似的东西。现在这就变成了标签,我们最终会基于此进行训练。

当然我们无法覆盖模型在推理测试时会遇到的所有可能问题,也就无法涵盖人们未来可能提出的所有提示。但如果我们拥有一些这样的示例数据集,那么在训练过程中,模型就会开始呈现出这种乐于助人、诚实无害的助手形象。这一切都是通过示例编程实现的。因此,这些都是行为示例。如果你针对这些示例行为进行对话,并且数量足够多,比如 10 万条,然后进行训练,模型就会开始理解其中的统计模式,并逐渐呈现出这种助手般的个性。当然,在测试时遇到完全相同的问题时,答案可能会一字不差地复述训练集中的内容。

但更有可能的是,模型会做出类似感觉的回应,并理解这就是你想要的答案类型。这就是我们正在做的事情。我们通过示例来编程系统,系统在统计上采用了这种乐于助人、诚实无害的助手角色,这在一定程度上反映在公司创建的标注指南中。

现代对话数据集的构建过程

现在我想告诉你的是,自 InstructGPT 论文发表以来的这两三年里,前沿技术已经有了相当的进步。具体来说,现在已经不太常见人类完全靠自己来完成所有繁重的工作了。这是因为我们现在有了语言模型,这些语言模型正在帮助我们创建这些数据集和对话。因此,现在人们很少会完全从零开始写出回答

更常见的情况是,他们会使用现有的 LLMs 来生成答案,然后进行编辑或类似的处理。甚至不仅仅是生成答案,也可以让其生成问题,自问自答,当然问题和答案可以来自同一个 LLMs,也可以是不同的 LLMs。

因此,现在 LLMs 已经开始以多种不同的方式渗透到这一后训练流程中。而 LLMs 基本上被普遍用于帮助创建这些庞大的对话数据集。我不想具体展示,但像 UltraChat 就是一个更现代的对话数据集的例子,其包含数百万次对话。

这份数据集在很大程度上是合成的,但通常也会有少量人工参与,而且这些都是以不同方式构建的。上图是这份数据集主题的一个概览,它们涵盖了极其多样化的领域,基本每一个小的颜色块都是一个主题,像这类数据集,我们称为 SFT(监督微调)数据集,而 UltraChat 只是目前众多 SFT 数据集中的一个例子。

如今借助 LLMs,你可以很便捷的拥有有各种各样的类型和来源的数据混合,它们部分是合成的,部分是人类生成的,之后的发展方向大致如此。

最后我想说的是,我希望稍微消除一些与 AI 对话的神秘感。就像你去 ChatGPT 那里问一个问题,按下回车键后,返回的内容在某种程度上与训练集中的数据统计对齐。而这些训练集,说白了,不过是人类按照标注指令播下的一粒种子。那么,你实际上在和 ChatGPT 的什么对话呢?或者说,你该如何理解它?直白点说,它并非来自某种神奇的 AI

这源于一种在统计上模仿人类标注者的机制,而这些标注者又遵循由这些公司编写的标注指南。因此,你某种程度上是在模仿这个过程。你几乎就像是在向人类标注者提问一样。想象一下,ChatGPT 给你的回答就像是对人类标注员的一种模拟。这有点像在问:在这种对话中,人类标注员会说什么?而且,这个人类标注员可不是随便从网上找来的普通人,因为这些公司实际上会聘请专家。比如,当你询问有关代码等问题时,参与创建这些对话数据集的人类标注员通常都是受过教育、具备专业知识的专家。你实际上是在向那些人的模拟版本提问。所以你不是在和一个神奇的 AI 对话,而是在和一个普通的标注员交流。这个普通的标注员可能相当熟练,但你实际上是在和那种在构建这些数据集时会被雇佣的人的即时模拟版本对话。

在我们继续之前,让我再举一个具体的例子。比如,当我打开 ChatGPT,输入“推荐巴黎最值得看的五个地标”,然后按下回车。它巴啦巴啦给出输出一些内容,我该怎么理解它呢?其实这并不是某种神奇的 AI,它并没有出去研究所有的地标,然后用它无限的智慧给它们排名等等。我得到的是 OpenAI 雇佣的一个标注员的统计模拟。你可以大致这样理解。

因此,如果这个具体问题恰好出现在 OpenAI 的后训练数据集中,我很可能会看到一个答案——这个答案大概率与人类标注员为那五个地标写下的内容高度相似。那么人类标注员是如何得出这些答案的呢?他们会去网上进行一段时间的自主调研,然后列出一份清单。如果这份清单被收录进数据集,我看到的助手回复很可能就是他们提交的"标准答案"。

但若该查询不在后训练数据集中,此刻生成的回答就更具 涌现性——因为模型通过统计规律已理解到:训练集中出现的地标通常是知名景点、人们常去的热门地标,也是网络上被频繁讨论的地标类型。请记住,模型在互联网预训练阶段已经掌握了海量知识。它很可能见识过大量关于地标以及人们喜闻乐见事物的对话内容。

正是这种预训练知识与后续训练数据集的结合,才造就了这种模仿能力。所以,这就是你大致可以从统计学角度理解模型背后运作原理的方式。


  1. InstructGPT Paper: https://arxiv.org/pdf/2203.02155 ↩︎

  2. Open Assistant: https://huggingface.co/datasets/OpenAssistant/oasst1 ↩︎

相关文章:

LLMs 系列科普文(5)

在前文中&#xff0c;我们讲述了什么是基础模型&#xff0c;并重点以 LLaMA 3.1 基础模型为例&#xff0c;向大家演示了它可以做什么&#xff0c;有哪些问题或有趣的现象。 在进入新的主题内容之前&#xff0c;我们再次对 基础模型 做一些总结&#xff1a; 这是一个基于 toke…...

HarmonyOS开发:显示图片功能详解

目录 前言 Image组件基础 1、Image组件概述 2、加载图片资源 3、存档图类型数据源 &#xff08;1&#xff09;本地资源 &#xff08;2&#xff09;网络资源 &#xff08;3&#xff09;Resource资源 &#xff08;4&#xff09;媒体库file://data/storage &#xff08;…...

ORACLE 修改端口号之后无法启动?

Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见&#xff0c;但并非必然发生。这一问题通常源于​​配置错误或环境冲突​​&#xff0c;而非端口修改本身。以下是系统性解决方案&#xff1a; &#x1f50d; ​​一、问题根源分析​​ ​​配置文件语法错误​​ 修…...

Qt Quick Test模块功能及架构

Qt Quick Test 是专门为测试 QML 应用程序设计的模块&#xff0c;在 Qt 6.0 中得到了显著增强。 一、主要功能/使用方法 核心功能概述 QML 单元测试框架 提供完整的 QML 测试环境 支持测试用例组织和执行 包含 QML 断言函数和测试结果收集 测试类型支持 组件功能测试 用…...

Excel自动分列开票工具推荐

软件介绍 本文介绍一款基于Excel VBA开发的自动分列开票工具&#xff0c;可高效处理客户对账单并生成符合要求的发票清单。 软件功能概述 该工具能够将客户对账单按照订单号自动拆分为独立文件&#xff0c;并生成可直接导入发票清单系统的标准化格式。 软件特点 这是一款体…...

Maven入门(够用)

1、Maven是什么&#xff1f; 这个问题非常不重要&#xff0c;或者说不应该上来就问maven是什么&#xff0c;而是直接学习maven怎么用能干什么&#xff0c;学完之后自然就知道了maven是个什么玩意儿&#xff0c;很多技术都是如此。 2、Maven下载 先准备Java环境&#xff0c;安…...

【HarmonyOS 5】 社交行业详解以及 开发案例

HarmonyOS 5通过分布式能力、响应式框架及AI技术&#xff0c;重构社交应用的交互范式&#xff0c;以下是分领域解析&#xff1a; &#x1f9cf; ‌一、无障碍社交创新‌ ‌听障人士实时通讯辅助‌ 语音文字双向转译功能&#xff1a;对方语音实时转为文字显示&#xff0c;用户…...

python版若依框架开发:集成Dash应⽤

python版若依框架开发 从0起步,扬帆起航。 python版若依部署代码生成指南,迅速落地CURD!项目结构解析前端开发规范后端开发规范集成Dash应⽤文章目录 python版若依框架开发后端部分1.安装 Dash2.在 sub_applications 目录下新建 dash_app.py ⽂件3.在 sub_applications/han…...

网盘变硬盘挂载软件:百度 / 阿里 / OneDrive 秒变本地磁盘

各位网盘达人们&#xff01;今天咱来聊聊超神奇的网盘挂载软件。你知道吗&#xff0c;这玩意儿就像个超级魔法棒&#xff0c;能把远程网盘&#xff0c;像百度网盘、阿里云盘、OneDrive这些&#xff0c;变成咱本地的虚拟磁盘。有了它&#xff0c;咱管理云端文件就跟操作自己家硬…...

自动化办公集成工具:一站式解决文档处理难题

1. 项目概述 在当今信息化时代,办公自动化已成为提升工作效率的关键。本文将详细介绍一款基于Python和PyQt5开发的「自动化办公集成工具」,该工具集成了多种常用的办公文档处理功能,包括批量格式转换、文本智能替换、表格数据清洗等,旨在为用户提供一站式的办公自动化解决方…...

three.js 零基础到入门

three.js 零基础到入门 什么是 three.js为什么使用 three.js使用 Three.js1. 创建场景示例 2.创建相机3. 创建立方体并添加网格地面示例 5. 创建渲染器示例 6. 添加效果(移动/雾/相机跟随物体/背景)自动旋转示例效果 相机自动旋转示例 展示效果 实现由远到近的雾示例展示效果 T…...

PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别

python容易编辑&#xff0c;因此用pyrx代替rxjava3做演示会比较快捷。 pyrx安装命令&#xff1a; pip install rx 一、Subject&#xff08;相当于 RxJava 的 PublishSubject&#xff09; PublishSubject PublishSubject 将对观察者发送订阅后产生的元素&#xff0c;而在订阅前…...

在Ubuntu22.04 系统中安装Docker详细教程

1.更新系统软件包 #确保您的系统软件包是最新的。这有助于避免安装过程中可能遇到的问题 sudo apt update sudo apt upgrade -y2.安装必要的依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common -y3.替换软件源 echo "deb htt…...

解决transformers.adapters import AdapterConfig 报错的问题

需要安装 Adapter-Hub 的 transformers 分支&#xff0c;不是官方 transformers 库&#xff01; pip install githttps://github.com/Adapter-Hub/transformers.git✅ 注意&#xff1a;这个命令会从 GitHub 下载源码并安装。你需要确保你的网络可以访问 GitHub&#xff0c;并且…...

AUTOSAR实战教程--DoIP_01_配置项解释

配置项 解释 备注 DoIPChannelSARef 引用DoIP Tester的源地址&#xff0c;就是你在DoIP Tester这个Containter中配置的Tester实例。 DoIPChannelTARef 引用目标地址。就是你在DoIPTargetAddress这个Container中的配置。 DoIPPduRRxPduId 为该pdu设置一个ID用于DoIP…...

湖北理元理律师事务所:法律视角下的债务优化与生活平衡之道

一、债务优化的本质&#xff1a;法律与生活的平衡艺术 债务问题常被视为单纯的财务危机&#xff0c;实则牵涉法律权责界定、还款能力评估、生活保障等多重维度。作为法律服务机构&#xff0c;我们观察到&#xff1a;真正的债务优化需同时满足两个条件&#xff1a; 法律合规性…...

机器人/智能车纯视觉巡线经典策略—滑动窗口+直方图法

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 在机器人或智能车的自主导航任务中&#xff0c;视觉巡线是一项最为基础且关键的能力之一。通过摄像头实时获取道路图像&#xff0c;并基于图像信息判断行驶路径&#xff0…...

附加模块--Qt OpenGL模块功能及架构

一、模块功能&#xff1a; 主要变化 Qt OpenGL 模块的分离&#xff1a; 在 Qt 6 中&#xff0c;原来的 Qt OpenGL 功能被拆分为多个模块 传统的 Qt OpenGL 模块 (QGL*) 已被标记为废弃 新的图形架构&#xff1a; Qt 6 引入了基于 QRhi (Qt Rendering Hardware Interface) 的…...

503 Service Unavailable:服务器暂时无法处理请求,可能是超载或维护中如何处理?

处理 "503 Service Unavailable" 错误是服务器管理者面临的常见挑战之一。这种错误通常表示服务器暂时无法处理请求&#xff0c;可能是由于服务器超载、维护中或其他临时性问题导致的。在本文中&#xff0c;我将介绍如何处理 "503 Service Unavailable" 错…...

抖音怎么下载没有水印的视频?

你是不是经常在抖音上刷到喜欢的视频&#xff0c;想保存下来却总是带着烦人的水印&#xff1f;无论是想收藏精彩片段&#xff0c;还是二次创作&#xff0c;水印都成了“拦路虎”。别急&#xff01;今天就来教你3种超简单方法&#xff0c;轻松下载无水印抖音视频&#xff0c;高清…...

虚拟机时间同步

一、常见同步方式 常见的虚拟机同步方式有给虚拟机配置ntp、或者用平台提供的agent对时与虚拟机所在的宿主机。第一种依赖网络、第二种依赖平台的agent这个三方工具。 二、利用ptp_kvm.ko来直接和宿主机同步时间 关键组件 ptp_kvm驱动、chrony。 PTP_KVM同步原理 |--------…...

三级流水线是什么?

三级流水线是什么&#xff1f; “三级流水线” 英文名&#xff1a;Three-Stage Pipeline 或 Basic 3-Stage Pipeline&#xff0c;是计算机处理器&#xff08;CPU&#xff09;设计中一种基本的指令流水线技术&#xff0c;它将指令的执行过程划分为三个主要阶段&#xff0c;使得…...

软件更新机制的测试要点与稳定性提升

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

自定义protoc-gen-go生成Go结构体,统一字段命名与JSON标签风格

背景 在日常的 Go 微服务开发中&#xff0c;Protocol Buffers&#xff08;protobuf&#xff09; 是广泛使用的数据交换格式。其配套工具 protoc-gen-go 会根据 .proto 文件生成 Go 结构体代码&#xff0c;但默认生成的字段名、JSON tag 命名风格往往不能满足所有团队或项目的代…...

Context API 应用与局限性

核心概念 React 的 Context API 是为了解决组件间数据共享而设计的一种机制&#xff0c;其核心价值在于提供了一种不通过 props 层层传递就能在组件树中共享数据的方法。在 React 应用中&#xff0c;数据通常是自上而下&#xff08;从父组件到子组件&#xff09;通过 props 传…...

LLMs 系列科普文(11)

目前我们已经介绍了大语言模型训练的两个主要阶段。第一阶段被称为预训练阶段&#xff0c;主要是基于互联网文档进行训练。当你用互联网文档训练一个语言模型时&#xff0c;得到的就是所谓的 base 模型&#xff0c;它本质上就是一个互联网文档模拟器&#xff0c;我们发现这是个…...

DQN算法(详细注释版)

DQN算法 DQN算法使用的常见问题 Q1: 为什么用目标网络而非Q网络直接计算&#xff1f; 答案&#xff1a;避免“移动目标”问题&#xff08;训练中Q网络频繁变化导致目标不稳定&#xff09;&#xff0c;提高收敛性。 Q2: 为什么用 max 而不是像SARSA那样采样动作&#xff1f;…...

sizeof 与strlen的区别

sizeof 和 strlen 是C和C 中用于处理数据大小和字符串长度的两个不同的操作符/函数&#xff0c;它们的区别如下&#xff1a; 概念和用途 - sizeof 是一个操作符&#xff0c;用于计算数据类型或变量在内存中所占的字节数&#xff0c;它是在编译时确定的&#xff0c;与数据的…...

论文阅读:HySCDG生成式数据处理流程

论文地址: The Change You Want To Detect: Semantic Change Detection In Earth Observation With Hybrid Data Generation Abstract 摘要内容介绍 &#x1f4cc; 问题背景 “Bi-temporal change detection at scale based on Very High Resolution (VHR) images is crucia…...

10万QPS高并发请求,如何防止重复下单

1. 前端拦截 首先因为是10万QPS的高并发请求&#xff0c;我们要保护好系统&#xff0c;那就是尽可能减少用户无效请求。 1.1 按钮置灰 很多用户抢票、抢购、抢红包等时候&#xff0c;为了提高抢中的概率&#xff0c;都是疯狂点击按钮。会触发多次请求&#xff0c;导致重复下…...