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

【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE

由于Transformer 中的自注意模块具有置换不变性(不关心输入序列的顺序),因此需要使用位置编码来注入位置信息以建模序列,使模型能够区分不同位置的 token,并捕捉序列的顺序关系。

在介绍一些位置编码方法前,首先说明,一个好的位置编码方法需要具备怎样的特性:

  • 唯一性: 每个位置应该有一个唯一的编码,以确保模型能够区分序列中的不同位置。如果两个位置共享相同的编码,模型将无法区分它们,从而导致混淆

  • ​​连续性: 位置编码应该是连续的,相邻位置的编码应该相似,连续性有助于模型捕捉序列中元素之间的局部依赖关系。如果位置编码在相邻位置之间突变,模型可能难以学习到平滑的序列模式

  • 可扩展性: 位置编码应该能够处理比训练时更长的序列(即具有外推性),例如,Transformer的正弦和余弦位置编码由于其周期性,能够为更长的序列生成合理的编码

  • 捕获相对位置信息: 位置编码应该能够捕获序列中元素之间的相对位置关系(例如,位置5和位置6的编码应该比位置5和位置10的编码更接近)

  • 远程衰减特性: 远程衰减特性是指随着序列中元素之间相对位置的增加,位置编码的内积逐渐减小。这种特性有助于模型区分远距离和近距离的位置关系。这种特性有助于模型专注于更相关的局部信息,同时减少对远距离噪声的敏感性

  • 高效性: 位置编码的计算和存储应该是高效的,尤其是在处理长序列时。复杂的位置编码方法可能会增加计算开销,从而影响模型的训练和推理速度

接下来介绍一些位置编码方法,主要可以分为绝对位置编码相对位置编码

1.绝对位置编码

绝对位置编码是为每个序列中的位置分配唯一的编码,无论它与其他位置的相对关系如何。每个位置的编码是固定的,并与具体的输入数据无关。常见方法有​正弦/余弦编码可学习编码

1)​正弦/余弦编码(Sinusoidal Encoding)​:

首先补充背景知识:

  • 正弦/余弦函数:
    在这里插入图片描述
  • 波长: 是指函数在一个完整周期内所覆盖的距离或时间间隔
    在这里插入图片描述
  • 频率: 是指函数在单位时间或单位距离内重复的次数
    在这里插入图片描述
  • 波长与频率:
    在这里插入图片描述

使用正弦和余弦函数生成位置编码,公式如下:

i的范围是0~d/2-1

在这里插入图片描述
这样编码位置的特点:

  • 低维度(小i)时,波长小,频率大,位置编码随位置 pos 的变化较快,对位置变化非常敏感,适用于捕捉短距离信息,即局部依赖关系

  • 高维度(大i):波长大,频率小,位置编码随位置 pos 的变化较慢(在高维度上,即使 pos 变化很大,因为波长大,即分母大,正弦和余弦的值仍然变化得很缓慢,也就是说两个位置很远(pos相差大)的 token,在高维度的编码仍然可能相似,这种特性使得模型能够利用高维度信息来识别长距离的相似性,并捕捉远距离 token 之间的联系,对于 NLP 任务中需要捕捉长距离依赖的情况(如长句子、长文档的建模)特别有帮助

  • 不同维度(i)的编码具有不同的波长,使得 Transformer 既能关注短距离依赖,又能捕捉长距离信息,兼顾短期记忆和长期记忆

  • 周期性与外推性: 外推性指的是模型能够处理比训练时更长的序列,正弦和余弦函数的周期性特性使得位置编码能够自然地扩展到训练时未见过的序列长度。具体来说,正弦和余弦函数的周期性意味着其值会随着输入位置的增加而重复出现,即使位置索引 pos 超过了训练时的最大值,位置编码仍然能够通过函数的周期性生成有意义的值,这种重复性使得模型能够通过已学习的模式来处理更长的序列,覆盖更长的序列范围

这个编码位置中的10000起什么作用?可以换成别的数字吗?

作用: 调节位置编码的频率范围

10000决定了位置编码的频率范围。较大的值(如10000)会使频率较低,编码变化更平缓,相邻位置的编码差异较小。较小的值(如1000)会使频率较高,编码变化更剧烈,相邻位置的编码差异较大。

10000这个值决定了位置编码函数的波长较大(周期大),频率较低,使得不同位置的编码在向量空间中具有足够的区分性(如果频率较大,位置编码经常出现重复值,则每个位置的编码区分度不够大),**10000这个数字的取值规律是:**小的值更适合短序列任务,但小的值在长序列任务中可能会导致位置信息的变化过于频繁和剧烈,大的值适合长序列任务。

2)​可学习编码(Learned Positional Encoding)​

将位置编码向量作为可学习的参数,允许模型根据任务需求自动调整位置表示。与如正弦-余弦编码相比(通过固定的数学公式得到),可学习的位置编码更加灵活,能够根据具体任务和数据集调整位置编码,但缺点是需要学习更多的参数,并且对于不同的任务,模型可能会过拟合于某些特定的位置信息。在训练过程中,模型通过反向传播优化这些位置编码向量,使其能够更好地捕捉任务所需的位置信息。

2.相对位置编码

相对位置编码不是编码绝对位置,而是编码两个位置之间的相对关系,这种方法不必完整建模每个输入的位置信息,而是在算 Attention 的时候考虑当前位置与被 Attention 的位置的相对距离,与绝对位置编码相比,相对位置编码可以推广到比训练序列更长的序列(外推性)

1) Rotary Position Embedding(RoPE)

RoPE以绝对位置编码形式实现的相对位置编码,它通过将一个向量旋转某个角度,为其赋予位置信息。具体操作是对attention中的q, k进行旋转变换,使其自带相对位置信息,然后用更新的q,k向量计算attention,得到的内积就会引入相对位置信息了

RoPE已成为主流选择,代表模型有: LLaMA、PaLM

首先我们说明了RoPE是通过旋转使得向量带有位置信息的,那么我们介绍以下数学上的旋转

在这里插入图片描述
在这里插入图片描述
此图参考自:图解RoPE旋转位置编码及其特性

根据以上的介绍,我们知道通过旋转可使得向量带有位置信息,那么RoPE怎么将这个思想带入Transformer架构中的呢?对Attention中的q, k进行旋转变换,使其自带相对位置信息,然后用更新的q,k向量attention,得到的内积就会引入相对位置信息了

在这里插入图片描述
在这里插入图片描述

证明 R m T R n = R m − n {R_m}^TR_n=R_{m-n} RmTRn=Rmn:
在这里插入图片描述
在这里插入图片描述

你可能会疑问, R m − n R_{m-n} Rmn展开之后应该是 θ m − n \theta_{m-n} θmn,上面的式子是 θ m − θ n \theta_m-\theta_n θmθn,这是一样的吗?有一个结论: R θ 1 R θ 2 = R θ 1 + θ 2 R_{\theta_1}R_{\theta_2}=R_{\theta_1+\theta_2} Rθ1Rθ2=Rθ1+θ2,下面证明:

在这里插入图片描述
在这里插入图片描述
好的,介绍到这里我们就知道了,RoPE向Q,K引入旋转矩阵 R m R_m Rm R n R_n Rn,使他们带有位置信息,而他们的内积可以用 R m − n R_{m-n} Rmn表示 R m R_m Rm R n R_n Rn的乘积, R m − n R_{m-n} Rmn包含了Q,K的相对位置信息,使得模型能够更好地捕捉序列中元素之间的相对位置关系。现在总结一下:

在这里插入图片描述

这里的 θ \theta θ借鉴了transformer中正余弦位置编码的思想:

  • 低维度(小i)时,波长小,频率大,适合捕捉短距离依赖

  • 高维度(大i)时,波长大,频率小,适合捕捉长距离依赖

在这里插入图片描述
现在总结RoPE的优点:

  • ​显式建模相对位置信息:通过旋转矩阵显式地建模相对位置关系

  • ​外推性:能够处理比训练时更长的序列,具有良好的外推性在这里插入图片描述

  • 多尺度位置编码:通过不同维度的旋转角度捕捉不同距离的依赖关系( θ \theta θ

  • 计算高效:旋转矩阵的计算简单高效,不会引入额外的计算负担。

2) Attention with Linear Biases(ALiBi)

ALiBi提出用于提升Transformer的外推性,不向单词embedding中添加位置embedding,而是根据query、key之间的距离给 attention score 加上一个预设好的偏置矩阵(仅需要修改softmax之前的mask矩阵,将偏置矩阵加上去即可,几乎不增加额外开销)。代表模型:BLOOM。

在这里插入图片描述

总结:本文介绍了大模型中常见的绝对位置编码和相对位置编码方法,其中RoPE的代码待补充

相关文章:

【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE

由于Transformer 中的自注意模块具有置换不变性(不关心输入序列的顺序),因此需要使用位置编码来注入位置信息以建模序列,使模型能够区分不同位置的 token,并捕捉序列的顺序关系。 在介绍一些位置编码方法前&#xff0…...

【大模型篇】推理模型大作战(QwQ-32B vs DeepSeek-R1)

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 写在前面 当我让QwQ-32B vs DeepSeek-R1 写一封未来自己的信 大家更喜欢哪种风格? QwQ-32B 模…...

【汇编语言】单片机程序执行过程

一、任务需求 指示灯LED4闪烁,亮0.5秒,灭0.5秒,无限循环 二、针对硬件的编程 1、确定原理图2、确定硬件的物理关系 三、设计步骤 1.用自己的语言描述工作流程 1.1指示灯LED4亮1.2延时0.5秒1.3指示灯LED4灭1.4延时0.5秒1.5跳转到1.1步 …...

MYSQL之创建数据库和表

创建数据库db_ck (下面的创建是最好的创建方法,如果数据库存在也不会报错,并且指定使用utf8mb4) show databases命令可以查看所有的数据库名,可以找到刚刚创建的db_ck数据库 使用该数据库时,发现里面没有…...

MybatisPlus

1.增删改查入门案例&#xff1a; 首先导入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency> 然后这些增删改查…...

HCIE云计算学什么?怎么学?未来职业发展如何?

随着云计算成为IT行业发展的主流方向&#xff0c;HCIE云计算&#xff08;华为认证云计算专家&#xff09;作为华为认证体系中的高端认证之一&#xff0c;逐渐成为了许多网络工程师和IT从业者提升职业竞争力的重要途径。 那么&#xff0c;HCIE云计算究竟学什么内容&#xff0c;如…...

小程序 -- uni-app开发微信小程序环境搭建(HBuilder X+微信开发者工具)

目录 前言 一 软件部分 1. 微信开发者工具 2. HBuilder X 开发工具 二 配置部分 1. 关于 HBuilder X 配置 2. 关于 微信开发工具 配置 三 运行项目 1. 新建项目 2. 代码编写 3. 内置浏览器 编译 4. 配置小程序 AppID获取 注意 四 实现效果 前言 uni-app开发小程…...

多线程-线程本地变量ThreadLocal

简介 ThreadLocal是线程本地变量&#xff0c;用于存储独属于线程的变量&#xff0c;这些变量可以在同一个线程内跨方法、跨类传递。每一个ThreadLocal对象&#xff0c;只能为当前线程关联一个数据&#xff0c;如果要为当前线程关联多个数据&#xff0c;就需要使用多个ThreadLo…...

MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模

2025-03-05&#xff0c;由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE&#xff08;MuJoCo and Blender simulation Environment&#xff09;模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染&#xff0c;为机器人操作任务规划提供了逼真的视…...

计算机网络笔记(一)——1.1计算机网络在信息时代中的作用

21世纪的一些重要特征是数字化、网络化和信息化&#xff0c;它是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络&#xff0c;因为网络可以迅速地传递信息。网络现在已经成为信息社会的命脉和发展知识经济的重要基础。 有三大类网络大家应该很熟悉&#xff0c;即…...

第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)

客观试题: 01.典型的BUCK电源电路包含哪些关键器件(ABCD) A. 电容 B. 二极管 C. 电感 D. MOSFET 解析: 典型的 BUCK 电源电路是一种降压型的直流-直流转换电路,它包含以下关键器件: A.电容:电容在电路中起到滤波的作用。输入电容用于平滑输入电压的波动,减少电源噪声对…...

计算机组成与体系结构-存储系统

主存编址 存储单元&#xff1a;最小存储单元&#xff0c;一般为4bit。每个存储单元有自己的二进制编号 存储器&#xff1a;多个存储单元排布而成。常见的有8*4存储器&#xff08;8个4bit的存储单元&#xff09; 编址内容&#xff1a; 按字编址&#xff1a;存储体的最小存储单…...

better-sqlite3之exec方法

在 better-sqlite3 中&#xff0c;.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比&#xff0c;这种方法性能较差且安全性较低&#xff0c;但有时它是必要的&#xff0c;特别是当你需要从外部文件&#xff08;如 SQL 脚本&#xff09;中执行多个 SQL 语句时。…...

WinUI 3 支持的三种窗口 及 受限的窗口透明

我的目标 希望能够熟悉 WinUI 3 窗口的基本使用方式&#xff0c;了解可能出现的问题 。 WinUI 3 支持三种窗口模式&#xff0c;分别为&#xff1a;常规窗口模式、画中画模式、全屏模式。 窗口模式&#xff1a;常规 即我们最常见的普通窗口。 支持&#xff1a;显示最大化按钮…...

【运维笔记】Navicat中删除mongo 某个时间之前的数据

【运维笔记】Navicat中删除mongo 某个时间之前的数据 一、场景与需求1.1、场景1.2、需求 二、解决方案三、实战3.1、【Navicat】使用sql语句 &#xff08;推荐&#xff09;Step 1&#xff1a;使用查询窗口 - 查询Step 2&#xff1a;确认第一步的数据是否是需要删除的数据Step 3…...

java2025年常见设计模式面试题

1. 请解释建造者模式&#xff08;Builder Pattern&#xff09;及其应用场景。 答案&#xff1a; 建造者模式用于创建一个复杂的对象&#xff0c;同时允许用户只通过指定复杂对象的类型和内容就能构建它们&#xff0c;隐藏了复杂的构建逻辑。 示例&#xff1a; public class C…...

Docker部署Ragflow(完美解决502 bad gateway)

Docker快速启动Ragflow:Dev 系统准备 ubuntu server 24.04 CPU ≥ 4 cores (x86);RAM ≥ 16 GB;Disk ≥ 100 GB; 更新系统 sudo apt update 下载源码 git clone https://github.com/infiniflow/ragflow.git cd ragflow/docker # 切换稳定版本分支 git checkout -f v0.17.…...

算法中的背包问题详解:部分背包与0-1背包

1. 背包问题概述 背包问题是组合优化中的经典问题&#xff0c;其核心目标是&#xff1a;在给定容量的背包中装入一组物品&#xff0c;使得物品的总价值最大化。根据物品是否可分割或重复选择&#xff0c;背包问题分为多个变种&#xff0c;其中最常见的两种是&#xff1a; 部分…...

Stream特性(踩坑):惰性执行、不修改原始数据源

在日常开发中&#xff0c;Stream API 提供了一种高效且易于使用的工具集来处理集合数据。 本文主要讲解 Stream 的两个特性&#xff1a;惰性执行&#xff0c;不修改原始数据源。 为什么说这两个、而不讲下其他的特性呢&#xff1f;主要是因为在开发中如果忽略这两个特性的话&…...

Varlens(手机上的单反)Ver.1.9.3 高级版.apk

Varlens 是一款专业级手机摄影软件&#xff0c;旨在通过丰富的功能和高自由度参数调节&#xff0c;让手机拍摄效果媲美微单相机。以下是核心功能总结&#xff1a; 一、核心功能 专业拍摄模式 支持手动/自动/程序模式&#xff0c;可调节ISO、快门速度、EV、白平衡等参数27 提供…...

【无监督学习】层次聚类步骤及matlab实现

层次聚类 &#xff08;四&#xff09;层次聚类1.算法步骤2.MATLAB 实现参考资料 &#xff08;四&#xff09;层次聚类 层次聚类是一种通过逐层合并或分裂数据点构建树状结构&#xff08;树状图&#xff0c;Dendrogram&#xff09;的聚类方法。它分为两种类型&#xff1a; 凝聚…...

uploadlabs通关思路

目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一&#xff1a;直接修改或删除js脚本 方法二&#xff1a;修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程&#xff1a; 文件上传 pass-04 代码审计 文件上传 p…...

doris:Elasticsearch

Elasticsearch Catalog 除了支持自动映射 ES 元数据外&#xff0c;也可以利用 Doris 的分布式查询规划能力和 ES(Elasticsearch) 的全文检索能力相结合&#xff0c;提供更完善的 OLAP 分析场景解决方案&#xff1a; ES 中的多 index 分布式 Join 查询。 Doris 和 ES 中的表联合…...

JetBrains学生申请

目录 JetBrains学生免费授权申请 IDEA安装与使用 第一个JAVA代码 1.利用txt文件和cmd命令运行 2.使用IDEA新建项目 JetBrains学生免费授权申请 本教程采用学生校园邮箱申请&#xff0c;所以要先去自己的学校申请校园邮箱。 进入JetBrains官网 点击立即申请&#xff0c;然…...

PDFMathTranslate安装使用

PDF全文翻译&#xff01;&#xff01;&#xff01;&#xff01; PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能&#xff1a; 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…...

清华北大推出的 DeepSeek 教程(附 PDF 下载链接)

清华和北大分别都有关于DeepSeek的分享文档&#xff0c;内容非常全面&#xff0c;从原理和具体的应用&#xff0c;大家可以认真看看。 北大 DeepSeek 系列 1&#xff1a;提示词工程和落地场景.pdf  北大 DeepSeek 系列 2&#xff1a;DeepSeek 与 AIGC 应用.pdf  清华 Deep…...

2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h> char *match(char *s, char ch); int main(void …...

C语言数据结构之顺序表

目录 1.线性表 2.顺序表 2.1.静态顺序表 2.2.动态顺序表 2.2.1.初始化 2.2.2.清空顺序表 2.2.3.扩容&#xff0b;尾插 2.2.4.尾出函数 2.2.5.头插函数 2.2.6.头出函数 2.2.7.在中间位置插入 2.2.8.删除中间位置数据 2.2.9.查找函数 2.2.10.总结 3.OJ例题 3.1.合…...

【Git】合并冲突

合并冲突 可是&#xff0c;在实际分支合并的时候&#xff0c;并不是想合并就能合并成功的&#xff0c;有时候可能会遇到代码冲突的问题。 为了演示这问题&#xff0c;创建一个新的分支 dev1 &#xff0c;并切换至目标分支&#xff0c;我们可以使用 git checkout -b dev1 一步…...

【每日学点HarmonyOS Next知识】Web跨域资源、Web长按菜单、Web拦截请求、禁止录屏、Base64图片宽高

1、HarmonyOS Web组件本地资源跨域问题&#xff1f; 关于资源跨域问题的解决&#xff0c;可以参考以下官网文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cross-origin-V5 方法一 为了使Web组件能够成功访问跨域资源&#xff0c;开…...

高效数据分析实战指南:Python零基础入门

高效数据分析实战指南 —— 以Python为基石&#xff0c;构建您的数据分析核心竞争力 大家好&#xff0c;我是kakaZhui&#xff0c;从事数据、人工智能算法多年&#xff0c;精通Python数据分析、挖掘以及各种深度学习算法。一直以来&#xff0c;我都发现身边有很多在传统行业从…...

【语料数据爬虫】Python爬虫|批量采集征集意见稿数据(1)

前言 本文是该专栏的第5篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 在本文中,笔者将主要来介绍基于Python,来实现批量采集“征集意见稿”数据。同时,本文也是采集“征集意见稿”数据系列的第1篇。 采集相关数据的具体细节部分以及详细思路逻辑…...

电力场景绝缘子缺陷分割数据集labelme格式1585张4类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1585 标注数量(json文件个数)&#xff1a;1585 标注类别数&#xff1a;4 标注类别名称:["broken part","broken insulat…...

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit&#xff0c;而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的&#xff08;符合规定的显示表达式&#xff09; 注&#xff1a;一般情况下…...

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了&#xff0c;为了找出这个bug, 星期六的晚上我从9点查到0点多&#xff0c;此时我心中一万个草泥马在崩腾&#xff0c;超级想骂人&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; uniCloud 不想…...

【论文阅读】VAD: Vectorized Scene Representation for Efficient Autonomous Driving

一、介绍 VAD是华科团队设计的一个端到端无人驾驶框架&#xff0c;针对传统的无人驾驶框架的模块化设计的问题&#xff0c;该算法使用向量化的策略进行了端到端的实现。传统的模块化设计使得感知模块完全依赖于感知模块的计算结果&#xff0c;这一解耦实际上从规划模块的角度损…...

uniapp版本加密货币行情应用

uniapp版本加密货币行情应用 项目概述 这是一个使用uniapp开发的鸿蒙原生应用&#xff0c;提供加密货币的实时行情查询功能。本应用旨在为用户提供便捷、实时的加密货币市场信息&#xff0c;帮助用户随时了解市场动态&#xff0c;做出明智的投资决策。 应用采用轻量级设计&a…...

使用 Java 执行 SQL 语句和存储过程

使用 Java 执行 SQL 语句和存储过程&#xff0c;通常有两种主要的方式&#xff1a;使用 JDBC&#xff08;Java Database Connectivity&#xff09;或者通过框架如 Spring Data JPA、MyBatis 等。 1. 使用 JDBC 执行 SQL 语句 JDBC 是 Java 操作数据库的标准 API。以下是通过 …...

算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式

在算法学习中&#xff0c;深度优先搜索&#xff08;DFS&#xff09;是一种常用的图搜索算法&#xff0c;通过递归或栈实现&#xff0c;适合路径搜索、连通性、拓扑排序、回溯、生成、环路检测、强连通分量和可达性等问题。本文将介绍如何利用深度优先搜索解决“妖怪和尚过河问题…...

大白话JavaScript闭包实现原理与在实际开发中的应用场景

大白话JavaScript闭包实现原理与在实际开发中的应用场景 答题思路 解释闭包的概念&#xff1a;先简单直白地说明闭包是什么&#xff0c;让读者对闭包有一个初步的认识。阐述闭包的实现原理&#xff1a;详细讲解闭包是如何形成的&#xff0c;涉及到函数作用域、变量的生命周期…...

【redis】数据类型之geo

Redis的GEO数据类型用于存储地理位置信息&#xff08;如经纬度&#xff09;&#xff0c;并提供高效的地理位置查询功能&#xff08;如计算两地距离、搜索附近地点等&#xff09;。其底层基于Sorted Set&#xff08;有序集合&#xff09;实现&#xff0c;通过Geohash编码将经纬度…...

C++后端服务器开发技术栈有哪些?有哪些资源或开源库拿来用?

一、 C后台服务器开发是一个涉及多方面技术选择的复杂领域&#xff0c;特别是在高性能、高并发的场景下。以下是C后台服务器开发的一种常见技术路线&#xff0c;涵盖了从基础到高级的技术栈。 1. 基础技术栈 C标准库 C11/C14/C17/C20&#xff1a;使用现代C特性&#xff0c;如…...

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码solution 1solution 2 第三道&#xff08;mid&#xff09;思路及AC代码&#xff08;mid&#xff09; 第一道&#xff08;easy&#xff09; 题目链接 思路及…...

tcp udp区别

TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 是两种常用的传输层协议&#xff0c;它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别&#xff1a; 1. 连接方式 TCP&#xff1a;面向连接的协议。通信前需…...

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…...

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…...

Linux 进程管理工具 Supervisor

介绍 Supervisor 是一个用 Python 编写的进程管理工具&#xff0c;旨在帮助你监控和控制多个进程。它特别适用于需要确保某些服务在服务器启动时自动运行&#xff0c;并且在崩溃时自动重启的场景。 写在前面&#xff1a; 因为现在很多第三方的包的最新版本都是基于 python3了…...

问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘text‘

项目环境&#xff1a; 我的环境&#xff1a;Window10&#xff0c;Python3.12&#xff0c;Anaconda3&#xff0c;Pycharm2024.3.4 问题描述&#xff1a; 找不到’text’这个对象 部分代码&#xff1a; Traceback (most recent call last):File "D:\IT DateFiles\PyDate\FQ…...

Hadoop、Hive、Spark的关系

Part1&#xff1a;Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架&#xff0c;一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程&#xff0c;map将一个任务分成多个小任务&#xff0c;reduce的部分将结果汇总之后返回。 3、HIv…...

OneM2M:全球性的物联网标准-可应用于物联网中

OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…...