深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化
从简单的RNN到复杂的LSTM/GRU,再到引入注意力机制,研究者们一直在努力解决序列建模的核心问题。每一步的进展都为下一步的突破奠定了基础,最终孕育出了革命性的Transformer架构和GPT大模型。
1. 从n-gram到循环神经网络(RNN)的诞生
1.1 N-gram 模型
在深度学习兴起之前,处理序列数据主要依靠统计方法,如n-gram模型。
N-gram 是一种基于统计的语言模型,它的核心思想是:一个词出现的概率只与它前面的 n-1 个词有关。
举个例子,假设我们有一个句子:“我喜欢吃苹果”
- 1-gram (unigram): 只考虑单个词的概率,如 P(苹果)
- 2-gram (bigram): 考虑相邻两个词,如 P(苹果|吃)
- 3-gram (trigram): 考虑相邻三个词,如 P(苹果|喜欢吃)
n-gram 模型的工作原理:
- 统计训练语料中各种 n-gram 组合出现的次数
- 根据统计结果计算条件概率
- 预测时,使用这些概率来估计下一个词或整个句子的可能性
优点:
- 简单直观,计算效率高
- 在一些简单任务中效果不错
缺点:
- 无法捕捉长距离依赖
- 数据稀疏问题:n 越大,出现未见过的组合的概率就越高
- 没有语义理解,纯粹基于统计
1.2 循环神经网络 (RNN)
RNN 是一种能够处理序列数据的神经网络,它的核心思想是在处理序列的每一步都保持一个"内部状态"。
想象 RNN 是一个处理信息的工人:
- 他有一个记事本(隐藏状态),记录了之前看到的重要信息
- 每次他接收新信息时,都会结合记事本上的内容来理解
- 然后他会更新记事本,并给出一个响应
- 这个过程不断重复,直到处理完整个序列
优点:
- 能够处理变长序列
- 理论上可以捕捉长距离依赖
- 参数共享,模型更紧凑
缺点:
- 实际中难以学习很长的依赖关系(梯度消失/爆炸问题)
- 计算是顺序的,难以并行化
1.3 n-gram到RNN的进化
- n-gram 是一种"死记硬背"的方法,它只能记住固定长度的词组
- RNN 更像是"理解"了语言,它可以灵活地处理不同长度的输入,并尝试捕捉更长距离的关系
n-gram 模型简单高效,但缺乏灵活性和对长距离依赖的理解。RNN 引入了"记忆"的概念,使模型能够更好地处理序列数据,但也带来了新的挑战。
这两种方法代表了自然语言处理从纯统计方法到神经网络方法的演进,为后续的深度学习模型(如 LSTM、Transformer 等)铺平了道路。
2. 从RNN到LSTM/GRU
2.1 RNN的问题
简单的RNN存在严重的问题:
a) 梯度消失/爆炸
想象一下,你在玩传话游戏。如果链条很长:
- 梯度消失就像每个人都小声说话,到最后几乎听不见了
- 梯度爆炸就像每个人都大声喊叫,到最后变成了刺耳的噪音
在RNN中,这个问题体现为:
- 长序列中,早期信息对后期的影响会变得极小(消失)或极大(爆炸)
- 这使得网络难以学习长期依赖关系
b) 长期依赖难以捕捉
RNN理论上可以记住长序列的信息,但实际上:
- 新信息不断覆盖旧信息
- 久远的信息很容易被"遗忘"
这就像你试图记住一本长篇小说的所有细节,但到最后可能只记得最近看的几章。
2.2 LSTM (长短期记忆网络)
LSTM通过引入"门"机制来解决上述问题。想象LSTM是一个更智能的记事本系统:
a) 结构
LSTM有三个门:
- 遗忘门: 决定丢弃哪些信息
- 输入门: 决定存储哪些新信息
- 输出门: 决定输出哪些信息
还有一个单元状态(cell state),作为长期记忆。
b) 工作原理
- 遗忘门决定从单元状态中删除什么信息
- 输入门决定向单元状态添加什么新信息
- 更新单元状态
- 输出门决定基于单元状态输出什么
c) 如何解决RNN的问题
- 长期记忆: 单元状态可以长期保存重要信息,不易被新信息覆盖
- 梯度流动: 门机制允许梯度更容易地流过网络,缓解梯度消失/爆炸问题
2.3 GRU (门控循环单元)
GRU是LSTM的简化版本,性能相当但计算更高效。
a) 结构
GRU只有两个门:
- 更新门: 决定保留多少旧信息和添加多少新信息
- 重置门: 决定忽略多少过去的信息
b) 工作原理
- 更新门决定保留多少过去的信息和加入多少新信息
- 重置门帮助决定如何将新输入与先前的记忆组合
- 计算候选隐藏状态
- 最终更新隐藏状态
c) 与LSTM的比较
- 简化结构: 没有单独的单元状态,直接更新隐藏状态
- fewer参数: 计算更高效
- 性能: 在许多任务上与LSTM相当
比喻理解:
- 如果说简单RNN是一个只会机械记录的秘书
- 那么LSTM就像一个有条理的管理者,懂得取舍、分类和整理信息
- 而GRU则像一个精简版的管理者,用更少的步骤完成类似的工作
3. 从注意力机制到Transformer的演变
3.1 注意力机制的引入
在注意力机制被引入之前,序列到序列(Seq2Seq)模型通常采用编码器-解码器结构:
- 编码器读取整个输入序列,将其压缩成一个固定长度的向量
- 解码器基于这个向量生成输出序列
这种方法的问题是:
- 信息瓶颈: 所有信息都被压缩到一个固定长度的向量中
- 长序列困难: 对于很长的序列,难以保留所有重要信息
**注意力机制的核心思想: **
注意力机制的本质是"从关注全部到关注重点"。就像人类在阅读长文本时会自然地聚焦于关键信息一样,注意力机制使得机器学习模型能够在处理大量输入数据时,将计算资源更多地分配给重要的部分。
- 人类认知过程的启发
想象你正在翻译一本书:
- 你不会先读完整本书,把所有内容记在脑子里,然后开始翻译
- 相反,你会一边读一边译,每翻译一个词或一个句子时,你都会回看原文的相关部分
这就是注意力机制的灵感来源。它模仿了人类处理复杂信息的方式:有选择性地关注最相关的部分。
- 权重分配
注意力机制通过分配"权重"来决定关注度:
- 相关性高的部分获得更高的权重
- 相关性低的部分获得更低的权重
这就像你在阅读时,重要的内容你会多看几眼,不重要的则可能略过。
- 突破长度限制
注意力机制有效地解决了处理长序列的问题:
- 不再受固定长度向量的限制
- 理论上可以处理任意长度的输入
- 长距离依赖可以直接建立,而不需要通过多个时间步传递
3.2 查询-键-值(Query-Key-Value)机制
QKV机制是实现注意力的一种具体方法。这里的Q代表Query(查询),K代表Key(键),V代表Value(值)。
在这个机制中,模型会计算Query和每个Key之间的相似度,然后用这些相似度作为权重来对Value进行加权求和。这样,与Query更相关的内容就会得到更多的"注意力"。
想象你在一个大型图书馆里:
-
查询(Query)就像你脑海中的问题或需求。比如,“我想了解人工智能”。
-
键(Key)就像每本书的标题或目录。它们是书籍内容的简要概括。
-
值(Value)就是书籍的实际内容。
现在,注意力机制的工作方式是:
-
你带着你的问题(Query)在图书馆里走动。
-
你快速浏览每本书的标题和目录(Key),看看哪些可能与你的问题相关。
-
对于看起来相关的书,你会多花些时间翻阅其内容(Value)。
-
最后,你综合了所有相关书籍的信息,形成了对你问题的答案。
在这个过程中:
-
"注意力"体现在你对不同书籍投入的时间和精力不同。与你问题相关度高的书,你会更加关注。
-
Query和Key的匹配度决定了你对某本书的关注程度。
-
Value是你最终获取的信息。
在机器学习中:
-
系统计算Query和每个Key的相似度。
-
用这些相似度作为权重,对所有Value进行加权求和。
-
得到的结果就是系统"关注"后的输出。
这种机制允许模型动态地决定要关注输入的哪些部分,从而更好地处理序列数据(如文本或时间序列)。
总的来说,Query-Key-Value机制是实现注意力的一种聪明方法,它模仿了人类有选择性地关注信息的过程。
3.3 自注意力(Self-Attention)的提出
自注意力(Self-Attention)是注意力机制的一种特殊形式,它允许输入序列中的每个元素都能和序列中的其他元素进行交互。
想象一群人在开会讨论问题。每个人发言时,都会根据之前其他人说的内容来调整自己的发言。这就像自注意力的工作方式。
简单来说:
- 注意力机制主要用于处理输入和输出序列之间的依赖关系。
- 自注意力机制则专注于处理序列内部的依赖关系。
让我们深入了解它们的区别:
-
应用场景:
- 注意力机制通常在编码器-解码器结构中使用,作为连接两者的桥梁。例如,在机器翻译任务中,它帮助模型在生成目标语言时关注源语言的相关部分。
- 自注意力机制可以在同一个模型中多次使用,是网络结构的一个组成部分。它在处理长序列时特别有效,如长文本理解或图像处理。
-
工作原理:
- 注意力机制计算输入序列和输出序列之间的相关性,为输入的不同部分分配不同的权重。
- 自注意力机制计算序列内部各元素之间的相关性,允许每个元素与序列中的所有其他元素进行交互。
-
信息处理方式:
- 注意力机制像人类大脑一样,在面对大量信息时,能够筛选出最重要的部分进行处理。
- 自注意力机制更像是序列中的每个元素都在相互"交谈",互相理解彼此的重要性。
-
计算复杂度:
- 注意力机制的计算复杂度通常较低,因为它只在编码器和解码器之间进行一次计算。
- 自注意力机制的计算复杂度较高,因为它需要计算序列中每个元素与其他所有元素的关系。
-
灵活性:
- 自注意力机制比传统的注意力机制更加灵活,能够捕捉到更复杂的序列内部依赖关系。
自注意力的一个典型应用是Transformer模型,它完全基于自注意力机制,在多个NLP任务上都取得了优秀的效果。
3.4 多头自注意力
多头自注意力机制是自注意力的一个扩展,它允许模型同时从不同的角度来关注信息。
想象你在看一部复杂的电影。你可能会同时关注多个方面:人物的表情、对话的内容、场景的布置等。多头自注意力就是让模型也能够同时从多个角度来"看"输入数据。
可以把自注意力机制比作一个高效的会议:
- 每个与会者(输入元素)都有机会发言(Query)。
- 其他人根据自己的专业(Key)来决定是否应该仔细听(给予高的注意力分数)。
- 最后,每个人根据听到的内容(加权的Value)来更新自己的观点。
多头自注意力则像是同时进行多场平行的小组讨论
- 每个小组关注不同的主题
- 最后汇总所有小组的成果
3.5 Transformer在自注意力基础上的创新
- 整体架构
Transformer由编码器(Encoder)和解码器(Decoder)两部分组成,类似于传统的序列到序列(Seq2Seq)模型。但不同的是,Transformer不使用循环神经网络(RNN),而是完全基于注意力机制。
可以将Transformer比作一个高效的翻译团队:
- 编码器团队先仔细阅读并理解源文本,每个成员(层)都会反复审视文本,相互交流(自注意力),形成深入理解。
- 解码器团队负责翻译,他们一边参考编码器团队的理解(编码器-解码器注意力),一边讨论已翻译的部分(掩码自注意力),逐步产出翻译。
Transformer在自注意力的基础上引入了几个重要创新:
a) 多头注意力(Multi-Head Attention)
- 原理:同时从多个角度理解信息
- 比喻:像是多个专家同时分析同一问题,每个专家关注不同的方面
b) 位置编码(Positional Encoding)
- 原理:由于没有使用RNN,Transformer需要额外的位置信息。位置编码会被加到词嵌入上,以表示词在序列中的位置。
- 比喻:给圆桌会议的每个参与者一个编号,让大家知道谁在哪个位置说话
c) 前馈神经网络(Feed-Forward Neural Network)
- 原理:在注意力层后增加非线性变换
- 比喻:像是在每轮讨论后,给每个参与者一些时间来独立思考和总结
5. 从Transformer到GPT
5.1 Transformer作为基础
Transformer就像是一个革命性的语言处理引擎,它有几个关键特点:
a) 强大的特征提取能力
Transformer能够捕捉语言中的复杂模式和长距离关系。
比喻:想象Transformer是一个超级阅读专家,它不仅能理解每个句子,还能轻松地连接文章开头和结尾的信息。
b) 并行处理能力
Transformer可以同时处理输入的多个部分。
比喻:这就像是有多个人同时阅读一本书的不同章节,然后快速交换信息,大大提高了阅读效率。
c) 灵活的架构设计
Transformer可以根据需要调整和扩展。
比喻:它就像一套高级乐高积木,可以根据不同任务搭建成各种形状。
d) 自监督学习的"游乐场"
Transformer特别适合进行自监督学习。
比喻:想象Transformer是一个智能游乐场,语言就是游戏。模型在这个游乐场中玩各种语言游戏(如猜词、续写故事),通过玩耍自然而然地学会了语言规律。
5.2 预训练的兴起
预训练的核心思想是让模型在大量数据上学习通用知识,然后再针对特定任务进行调整。这个过程有几个关键点:
a) 通用知识学习
模型在大规模、多样化的数据上学习。
比喻:这就像让一个学生在进入大学之前,先在一个巨大的图书馆中自由阅读各种书籍,建立广泛的知识基础。
b) 无监督学习
预训练通常不需要人工标注的数据。
比喻:这就像学生自主阅读,不需要老师时刻在旁指导。
c) 迁移学习
预训练获得的知识可以应用到多个具体任务中。
比喻:就像一个精通多国语言的人,可以很快适应不同国家的生活。
d) 微调过程
预训练后,模型可以针对特定任务进行小规模调整。
比喻:这就像一个全能运动员,在掌握了基本体能后,可以快速适应不同的运动项目。
5.3 Transformer和预训练的结合
Transformer和预训练的结合,创造了一个强大的AI语言处理系统:
- Transformer提供了高效学习和处理语言的"大脑"
- 预训练提供了获取广泛知识的方法
比喻:这就像给了AI一个超级大脑(Transformer)和一个无限的图书馆(大规模数据),让它能够自主学习,快速成长,并适应各种语言任务。
这种结合极大地推动了NLP的发展:
- 模型可以理解更复杂的语言现象
- 可以更好地处理新的、未见过的任务
- 大大减少了对标注数据的需求
比喻:这就像培养出了一个博学多才的语言天才,它不仅知识渊博,而且学习能力超强,可以快速适应各种新的语言挑战。
Transformer和预训练的结合,就像是给了AI一个强大的学习系统和丰富的学习资源。这使得AI在语言处理方面有了质的飞跃,能够更好地理解和生成人类语言,为各种NLP应用打开了新的可能性。
- 随着预训练模型参数的增加,性能呈现出惊人的提升。
- 这些大模型展现出了惊人的多任务处理能力。
- 当模型达到一定规模时,会出现一些意想不到的能力。
5.4 从Transformer到GPT
GPT 是 Transformer 架构的一个特定实现和应用,核心思想是利用大规模无标注文本数据进行预训练,然后在特定任务上进行微调。
- GPT专注于生成任务,是一个自回归语言模型: 预测序列中的下一个词
- GPT 只使用了 Transformer 的解码器部分。
- GPT 采用了 Transformer 的核心机制,如自注意力、多头注意力等,并使用因果掩码(causal mask),确保只看到过去的信息
- GPT 开启了大规模预训练 + 微调的范式,通过大规模预训练和任务特定微调,扩展了 Transformer 的应用范围。
GPT工作流程:
-
预训练阶段:
- 在大规模文本语料上训练,学习预测下一个词
- 模型学到语言的一般知识和模式
-
微调阶段:
- 在特定任务的数据上进行微调
- 调整模型以适应特定任务(如问答、摘要等)
-
推理阶段:
- 给定提示(prompt),模型逐词生成后续内容
- 每次生成一个词,将其加入序列,继续预测下一个词
GPT 已经经历了多个版本的演进:
- GPT-1:首次引入 GPT 架构。
- GPT-2:增加了模型规模,展示了强大的零样本学习能力。
- GPT-3:进一步扩大规模,展示了惊人的少样本学习能力。
- GPT-4:最新版本,具有更强的理解和生成能力。
参考
从感知机到Transformer,一文概述深度学习简史:https://www.jiqizhixin.com/articles/2022-05-24-6
图解NLP模型发展:从RNN到Transformer: https://developer.aliyun.com/article/1229038
相关文章:
深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化
从简单的RNN到复杂的LSTM/GRU,再到引入注意力机制,研究者们一直在努力解决序列建模的核心问题。每一步的进展都为下一步的突破奠定了基础,最终孕育出了革命性的Transformer架构和GPT大模型。 1. 从n-gram到循环神经网络(RNN)的诞生 1.1 N-gram 模型 在深度学习兴起之前,处理…...
【2024年华为OD机试】 (E卷,200分) - 最优资源分配芯片资源占用(JavaScriptJava PythonC/C++)
一、问题描述 题目解析 题目描述 某块业务芯片的最小容量单位为 1.25G,总容量为 M * 1.25G。芯片资源编号为 1, 2, …, M。该芯片支持 3 种不同的配置,分别为 A、B、C: 配置 A:占用容量为 1.25G(1 个单位ÿ…...
Spring Boot(6)解决ruoyi框架连续快速发送post请求时,弹出“数据正在处理,请勿重复提交”提醒的问题
一、整个前言 在基于 Ruoyi 框架进行系统开发的过程中,我们常常会遇到各种有趣且具有挑战性的问题。今天,我们就来深入探讨一个在实际开发中较为常见的问题:当连续快速发送 Post 请求时,前端会弹出 “数据正在处理,请…...
【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)
本文项目编号 T 159 ,文末自助获取源码 \color{red}{T159,文末自助获取源码} T159,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
差分进化算法 (Differential Evolution) 算法详解及案例分析
差分进化算法 (Differential Evolution) 算法详解及案例分析 目录 差分进化算法 (Differential Evolution) 算法详解及案例分析1. 引言2. 差分进化算法 (DE) 算法原理2.1 基本概念2.2 算法步骤3. 差分进化算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 单目标优化…...
优选算法——哈希表
目录 1. 哈希表简介 2. 两数之和 3. 判定是否为字符重排 4. 存在重复元素 5. 字母异位词分组 1. 哈希表简介 2. 两数之和 题目链接:1. 两数之和 - 力扣(LeetCode) 题目展示: 题目分析: 大家来看上面的图&…...
【前端SEO】使用Vue.js + Nuxt 框架构建服务端渲染 (SSR) 应用满足SEO需求
Nuxt.js 是一个基于 Vue.js 的通用应用框架,它简化了使用 Vue 构建服务端渲染 (SSR) 应用的流程。除了 SSR 之外,Nuxt.js 还支持静态站点生成(Static Site Generation, SSG),渐进式网络应用(Progressive We…...
AI学习指南Ollama篇-Ollama简介
一、定义 大语言模型(LLM)是一种基于深度学习的自然语言处理模型,能够生成文本、回答问题、翻译语言、撰写代码等。这些模型通过海量的文本数据进行训练,学习语言的模式和结构,从而能够生成自然流畅的文本内容。随着技术的不断进步,大语言模型在各个领域都展现出了巨大的…...
Python从0到100(八十五):神经网络与迁移学习在猫狗分类中的应用
在人工智能的浩瀚宇宙中,深度学习犹如一颗璀璨的星辰,引领着机器学习和计算机视觉领域的前沿探索。而神经网络,作为深度学习的核心架构,更是以其强大的数据建模能力,成为解决复杂问题的重要工具。今天,我们…...
《最优化理论基础》8课时层次化教案
《最优化理论基础》8课时层次化教案 课程总目标 掌握最优化核心理论(最优性条件、凸分析、对偶理论);能独立实现经典优化算法(梯度法、牛顿法、约束优化建模);理解优化理论与机器学习模型的关联ÿ…...
从源码深入理解One-API框架:适配器模式实现LLM接口对接
1. 概述 one-api 是一个开源的 API 框架,基于go语言开发,旨在提供统一的接口调用封装,支持多种 AI 服务平台的集成。通过 Gin 和 GORM 等框架,框架简化了多种 API 服务的调用流程。通过适配器模式实现了与多种 大模型API 服务的集…...
2025年国产化推进.NET跨平台应用框架推荐
2025年国产化推进.NET跨平台应用框架推荐 1. .NET MAUI NET MAUI是一个开源、免费(MIT License)的跨平台框架(支持Android、iOS、macOS 和 Windows多平台运行),是 Xamarin.Forms 的进化版,从移动场景扩展到…...
Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战
前一篇文章,Tensor 基本操作3 理解 shape, stride, storage, view,is_contiguous 和 reshape 操作 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started Tensor 基本使用 索引 indexing示例代码 加减…...
图扑 2024 全年精彩回顾 | 稳步向前
2024 年即将过去,回顾这一年,图扑软件在多个领域取得了显著成就,我们斩获多项行业奖项,稳步提升了市场地位,并在产品创新上推出了一系列新功能,提升了用户体验。与此同时,通过与合作伙伴紧密协作…...
[Python学习日记-79] socket 开发中的粘包现象(解决模拟 SSH 远程执行命令代码中的粘包问题)
[Python学习日记-79] socket 开发中的粘包现象(解决模拟 SSH 远程执行命令代码中的粘包问题) 简介 粘包问题底层原理分析 粘包问题的解决 简介 在Python学习日记-78我们留下了两个问题,一个是服务器端 send() 中使用加号的问题,…...
【数据结构】深入解析:构建父子节点树形数据结构并返回前端
树形数据结构列表 一、前言二、测试数据生成三、树形代码3.1、获取根节点3.2、遍历根节点,递归获取所有子节点3.3、排序3.4、完整代码 一、前言 返回前端VO对象中,有列情况列表展示需要带树形结构,例如基于RBAC权限模型中的菜单返回…...
【统计的思想】假设检验(二)
假设检验是根据人为设定的显著水平,对被测对象的总体质量特性进行统计推断的方法。 如果我们通过假设检验否定了零假设,只是说明在设定的显著水平下,零假设成立的概率比较小,并不是说零假设就肯定不成立。如果零假设事实上是成立…...
IT服务规划设计
1. IT服务设计的作用 1) 设计满足需求的IT服务。 2) 设计SAL,测量方法和指标。 3) 设计服务过程及控制方法。...
高效查找:二分查找算法解析
1.二分查找简介 二分查找算法(Binary Search)是一种高效的查找算法,适用于有序数组或序列。它的基本思想是通过逐步缩小查找范围,将查找区间一分为二,直到找到目标值或确定目标值不存在。 算法原理:在数组…...
电脑办公技巧之如何在 Word 文档中添加文字或图片水印
Microsoft Word是全球最广泛使用的文字处理软件之一,它为用户提供了丰富的编辑功能来美化和保护文档。其中,“水印”是一种特别有用的功能,它可以用于标识文档状态(如“草稿”或“机密”)、公司标志或是版权信息等。本…...
我的求职之路合集
我把我秋招和春招的一些笔面试经验在这里发一下,网友们也可以参考一下。 我的求职之路:(1)如何谈自己的缺点 我的求职之路:(2)找工作时看重的点 我的求职之路:(3&…...
FPGA自分频产生的时钟如何使用?
对于频率比较小的时钟,使用clocking wizard IP往往不能产生,此时就需要我们使用代码进行自分频,自分频产生的时钟首先应该经过BUFG处理,然后还需要进行时钟约束,处理之后才能使用。...
【2025最新计算机毕业设计】基于SpringBoot+Vue爬虫技术的咖啡与茶饮料文化平台(高质量源码,可定制,提供文档,免费部署到本地)
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
jmeter中对接口进行循环请求后获取相应数据
1、工作中遇到一个场景就是对某个单一接口进行循环请求,并需要获取每次请求后返回的相应数据; 2、首先就在jmeter对接口相关组件进行配置,需要组件有:循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…...
RocketMQ 怎么保证消息的可靠性?
目录 1. 消息发送可靠性 1.1 同步发送 1.2 异步发送 1.3 发送重试 1.4 事务消息 2. 消息存储可靠性 2.1 CommitLog 持久化 2.2 刷盘机制 2.3 主从复制 2.4 消息索引 3. 消息消费可靠性 3.1 消费确认机制 3.2 消费重试机制 3.3 消费位点管理 3.4 集群消费与广播消…...
基于 Node.js 的天气查询系统实现(附源码)
项目概述 这是一个基于 Node.js 的全栈应用,前端使用原生 JavaScript 和 CSS,后端使用 Express 框架,通过调用第三方天气 API 实现天气数据的获取和展示。 主要功能 默认显示多个主要城市的天气信息 支持城市天气搜索 响应式布局设计 深色主题界面 优雅的加载动画 技术栈 …...
C++函数初识
文章目录 一、形参带默认值的函数二、inline内联函数三、函数重载 一、形参带默认值的函数 给默认值的时候,从右向左给;调用效率的问题;定义处可以给形参默认值,声明也可以给形参默认值;形参给默认值的时候࿰…...
代码随想录day3
203:移除链表元素:注意虚拟头节点的使用 ListNode* removeElements(ListNode* head, int val) {ListNode* result new ListNode();result->next head;ListNode* current result;while(current ! nullptr && current->next ! nullptr){if(current-…...
论文+AI赋能教育:探索变革路径与创新实践。包括word和pdf格式。
下载地址链接: https://download.csdn.net/download/wanggang130532/90292129https://download.csdn.net/download/wanggang130532/90292129...
ray.rllib 入门实践-5: 训练算法
前面的博客介绍了ray.rllib中算法的配置和构建,也包含了算法训练的代码。 但是rllib中实现算法训练的方式不止一种,本博客对此进行介绍。很多教程使用 PPOTrainer 进行训练,但是 PPOTrainer 在最近的 ray 版本中已经取消了。 方式1࿱…...
uniapp 在线更新应用
在线更新应用及进度条显示 1.比较现安装手机中的apk 与线上apk的版本 getVersion(){var newVersionuni.getStorageSync("newVersion").split(".")var versionplus.runtime.version.split(".") // 获取手机安装的版本var versionNum""…...
中间件安全
一.中间件概述 1.中间件定义 介绍:中间件(Middleware)作为一种软件组件,在不同系统、应用程序或服务间扮演着数据与消息传递的关键角色。它常处于应用程序和操作系统之间,就像一座桥梁,负责不同应用程序间…...
从根源分析,调试,定位和解决MacOS ld: unsupported tapi file type ‘!tapi-tbd‘ in YAML file
你要是遇到同样错误,找一圈都没有解决,建议认真读一下本文,这个应该是最终极的解决办法,从原理上剖析了产生的原因,同时给出来了调试和定位的办法。 maccos使用brew安装了一个gcc14, 结果编译一个最简单的程序都报错&a…...
Linux的权限和一些shell原理
目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型: 基本权限: chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后: 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…...
构建企业级React应用的进阶实践
构建企业级React应用的进阶实践 在当今前端开发领域,React凭借其组件化架构和声明式编程范式,已成为构建复杂用户界面的首选方案。本文将深入探讨React的高级应用场景,通过一系列精心设计的代码示例,展示如何打造高性能、可维护的…...
2024年度总结:技术探索与个人成长的交织
文章目录 前言年度创作回顾:技术深耕与分享数据库技术:MySQL 与 MyBatisJava 及相关技术栈计算机网络:构建网络知识体系思维方式的转变:构建技术知识体系的桥梁 项目实践:人工智能与智慧医疗的碰撞生活与博客的融合与平…...
mysql-06.JDBC
目录 什么是JDBC: 为啥存在JDBC: JDBC工作原理: JDBC的优势: 下载mysql驱动包: 用java程序操作数据库 1.创建dataSource: 2.与服务端建立连接 3.构造sql语句 4.执行sql 5.关闭连接,释放资源 参考代码: 插…...
arm-linux平台、rk3288 SDL移植
一、所需环境资源 1、arm-linux交叉编译器,这里使用的是gcc-linaro-6.3.1 2、linux交叉编译环境,这里使用的是Ubuntu 20.04 3、sdl2源码 https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.11.tar.gz 二、代码编译 1、解压sdl2源码…...
CentOS 上安装 Go (Golang)
1. 检查系统环境 确保系统为 CentOS 7 或 CentOS 8,或者其他兼容的 Linux 发行版。 cat /etc/os-release2. 安装依赖 安装一些必要的工具: sudo yum update -y sudo yum install -y wget tar3. 下载 Go 从 Go 官方下载页面获取适用于 Linux 的最新版…...
小哆啦解题记:整数转罗马数字
小哆啦解题记:整数转罗马数字 小哆啦开始力扣每日一题的第十四天 https://leetcode.cn/problems/integer-to-roman/submissions/595220508/ 第一章:神秘的任务 一天,哆啦A梦接到了一项任务——将一个整数转换为罗马数字。他心想:…...
碰撞体问题
用点检测2d物体是否有物体 功能要求是点击空白处取消选中,点击棋子选中所以我做了一个射线检测。但是脑子的惯性让我用的是3D的射线检测。但我们这是一个2D游戏啊。 Vector3 mousePos pos;mousePos.z 10f; // 假设你需要转换到距离相机10单位的世界位置Vector3 …...
HTML<label>标签
例子 三个带标签的单选按钮: <form action"/action_page.php"> <input type"radio" id"html" name"fav_language" value"HTML"> <label for"html">HTML</label><br&…...
「 机器人 」利用数据驱动模型替代仿真器:加速策略训练并降低硬件依赖
前言 在强化学习(Reinforcement Learning, RL)中,策略训练需要大量的交互数据(状态、动作、奖励、下一状态),而这些数据通常来自仿真器或真实硬件。传统高保真仿真器虽然能在一定程度上模拟飞行器的动力学,但往往计算量大、开发成本高,且仍可能与真实环境存在差距。为此…...
.Net Core微服务入门全纪录(六)——EventBus-事件总线
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计
据悉,QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间,QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…...
Docker + Nginx 部署个人静态博客指南
本文是一个使用 Docker 和 Nginx 部署个人静态博客的指南。通过本指南,您可以快速了解如何使用 Docker 和 Nginx 部署自己的静态博客网站。 前提 在开始使用本指南之前,请具备以下前提: 首先你得有个服务器服务器已经安装好Git、Vim等工具一…...
springboot3 集成 knife4j(接口文档)
提示:文章是集成 knife4j,而非 swagger2 或者 swagger3,效果如图 文章目录 前言一、添加依赖二、如何集成1.配置文件2.注解部分1.Tag2.Operation3.Parameter4.Schema 3.使用 总结 前言 提示::大家在开发阶段ÿ…...
批量创建ES索引
7.x from elasticsearch import Elasticsearch# 配置 Elasticsearch 连接 # 替换为你的 Elasticsearch 地址、端口、用户名和密码 es Elasticsearch([http://10.10.x.x:43885],basic_auth(admin, XN272G9THEAPYD5N5QORX3PB1TSQELLB) )# # 测试连接 # try: # # 尝试获取集…...
单路由及双路由端口映射指南
远程登录总会遇到登陆不上的情况,可能是访问的大门没有打开哦,下面我们来看看具体是怎么回事? 当软件远程访问时,主机需要两个条件,一是有一个唯一的公网IP地址(运营商提供),二是开…...
基于Springboot + vue实现的民俗网
“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能学习网站” 💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜…...