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

Buffer of Thoughts: Thought-Augmented Reasoningwith Large Language Models

CODE: NeurIPS 2024

https://github.com/YangLing0818/buffer-of-thought-llm

Abstract

我们介绍了思想缓冲(BoT),一种新颖而通用的思想增强推理方法,用于提高大型语言模型(大型语言模型)的准确性、效率和鲁棒性。具体来说,我们提出了元缓冲区来存储一系列信息丰富的高级思想,即思想模板,这些思想是从不同任务的解决问题过程中提炼出来的。然后,针对每个问题,检索相应的思想模板,并自适应地实例化特定的推理结构,以进行有效的推理。为了保证可扩展性和稳定性,我们进一步提出了缓冲区管理器来动态更新元缓冲区,从而在处理更多任务时增强元缓冲区的容量。我们在10个具有挑战性的推理密集型任务上进行了广泛的实验,并比以前的SOTA方法取得了显着的性能改进:Game of 24提高了11%,Geometric Shapes提高了20%,checkmate in- one提高了51%。进一步的分析表明,我们的BoT具有卓越的泛化能力和模型鲁棒性,而平均只需要多查询提示方法(例如,树/思想图)的12%的成本。值得注意的是,我们发现我们的Llama3-8B + BoT具有超越Llama3-70B模型的潜力。


Introduction

一系列大型语言模型(Large Language Models, LLMs),如GPT-4、PaLM和LLaMA,已经在各种推理任务中展示了令人印象深刻的性能。除了扩大模型大小来提高推理性能外,还有更有效的提示方法可以进一步增强大型语言模型的功能和性能。我们将这些方法分为两类:

(i)单查询推理;这些方法通常侧重于提示工程,它们的推理过程可以在单个查询中完成,例如CoT在输入查询中附加“Let ' s think step by step”以产生提高推理精度的理由,以及少量样本学习提示,它提供了与任务相关的范例来帮助答案的生成;

(ii)多查询推理:这些方法侧重于利用多个大型语言模型查询来引出不同的似是而非的推理路径,从而将复杂问题分解为一系列更简单的子问题,如Least-to-Most、ToT和GoT。

然而,这两种方法都存在一定的局限性:

(1)单查询推理通常需要对推理过程进行先验假设或相关示例,难以逐个任务手工设计,缺乏通用性和泛化性;

(2)由于推理路径的递归扩展,当为每个特定任务的推理过程寻找唯一的内在结构时,多查询推理通常是计算密集型的;

(3)单查询和多查询推理过程都受到其设计的示例和推理结构的限制,它们忽略了从先前完成的任务中推导出一般和高级的指导方针或思想,这些指导方针或思想对于解决类似问题时提高效率和准确性具有重要意义。

为了解决这些限制,我们提出了思想缓冲(BoT),这是一种新颖而通用的思想增强推理框架,旨在提高大型语言模型在各种任务中的推理准确性、效率和鲁棒性。具体来说,我们设计了元缓冲区,这是一个轻量级的库,包含一系列通用的高级思想(思想模板),这些思想是从不同的问题解决过程中提炼出来的,可以跨任务共享。然后,对于每个问题,我们检索一个相关的思想模板,并用特定的推理结构实例化它,以实现有效的思想增强推理。为了保证BoT的可扩展性和稳定性,我们进一步提出了缓冲区管理器来动态更新元缓冲区,随着任务的增加,有效地提高了元缓冲区的容量。

我们的方法有三个关键优势:

(i)准确性提高:通过共享的思想模板,我们可以自适应地实例化处理不同任务的高级思想,从而消除了从头开始构建推理结构的需要,从而提高了推理准确性。

(ii)推理效率:我们的思维增强推理可以直接利用信息丰富的历史推理结构进行推理,而不需要复杂的多查询过程,从而提高推理效率。

(iii)模型鲁棒性:从思想检索到思想实例化的过程就像人类的思维过程一样,使大型语言模型能够以一致的方式解决类似的问题,从而显著增强了我们方法的模型鲁棒性。我们的实证研究表明,缓冲思想显著提高精度,效率和鲁棒性在不同的任务阵列。

贡献:

1. 为了提高基于llm的推理的准确性、效率和鲁棒性,我们提出了一种新的思想增强推理框架——思想缓冲(BoT)。

2. 我们提出了元缓冲区来存储从不同问题中提炼出来的信息丰富的高级思想,并自适应地实例化每个思想模板来解决每个特定的任务。

3. 我们设计了缓冲区管理器,从各种解决方案中提取思想模板,并随着任务的解决不断提高元缓冲区的容量。

4. 我们对10个具有挑战性的推理密集型任务进行了广泛的实验。与以前的SOTA方法相比,我们的BoT实现了显着的性能改进:Game of 24提高了11%,Geometric Shapes提高了20%,将死合一提高了51%,而平均只需要多查询提示方法12%的成本。

Related Work and Discussions

Retrieval-Augmented Language Models 引入检索增强(Large)语言模型作为缓解幻觉现象和提高语言模型输出质量的解决方案。当提供一个输入问题时,检索增强大型语言模型首先查询一个具有十亿级令牌的外部数据库,以检索文本语料库的子集,以帮助生成最终答案。值得注意的是,与传统的大型语言模型相比,检索增强的大型语言模型使用更少的参数实现了更好的问答性能,并且它已经在各种下游任务中得到了应用,包括多模态生成和生物医学应用。在本文中,我们构建了一种新的检索数据库,称为元缓冲区,它包含一系列高层次的思想,而不是具体的实例,旨在普遍解决基于llm的推理的各种任务。

Prompt-based Reasoning with Large Language Models 提示技术显著增强了大型语言模型的算术和常识推理能力。思维链(CoT)提示及其变体,如Least-to-Most、decomposition提示和Auto-CoT,提示大型语言模型将复杂问题分解为更简单的子任务,并在总结最终答案之前系统地解决它们。许多研究已经证明了这些提示方法在广泛的任务和基准中是有效的。像Tree-of-Thought和Graph-of-Thought这样的创新,通过探索动态的、非线性的推理路径来扩展大型语言模型的启发式能力,进一步推动了这一领域的发展。然而,它们面临着不断增加的资源需求和更大的时间复杂性,依赖于手动提示制作,并且经常针对特定的任务类型进行定制。最近的元提示方法对各种任务使用相同的任务无关的提示形式,并递归地引导单个大型语言模型自适应地处理不同的输入查询。然而,如此长的元提示可能需要相当大的上下文窗口,并且这些方法无法利用历史信息指导或想法来执行潜在的类似任务。 

Analogical Reasoning 类比推理是一种有用的自然语言推理技术。最近的研究表明,大型语言模型可以像人类一样进行类比推理。例如,Analogical prompts和Thought Propagation提示大型语言模型自生成一组类似问题,然后利用类似问题的结果生成输入问题的解。然而,针对自探索问题的具体解决方案可能会引入额外的噪声并导致误差积累。最近的思想检索器使用解决过去用户时产生的中间思想来处理类似的查询,但它只关注文本理解/生成,而不是一般的推理问题。因此,大型语言模型复杂推理仍然缺乏更高级和更普遍的类比方法。

Buffer of Thoughts

Overview of Buffer of Thoughts 在本节中,我们将详细介绍我们的思想缓冲,并在图2中说明我们的核心思想增强推理过程。给定一个特定的任务,我们利用问题提取器(第3.1节)提取特定于任务的关键信息以及相关约束。基于提炼出来的信息,我们在包含一系列高级思想(思想模板)的元缓冲区(第3.2节)中搜索,并检索与任务最相关的思想模板。随后,我们将检索到的思想模板实例化为更具任务特异性的推理结构,并进行推理处理。最后,我们使用了一个缓冲区管理器(第3.3节)来总结整个解决问题的过程,并提炼出提高元缓冲区容量的高级思想。

说明不同的推理过程。思想缓冲使大型语言模型能够通过我们的思维增强推理过程来处理复杂的推理任务。思想模板用橙色标记,实例化的思想用蓝色标记。

Problem Distiller

大多数复杂任务在其上下文中包含隐式约束、复杂的对象关系以及复杂的变量和参数。因此,在推理阶段,大型语言模型需要克服三个主要挑战:提取重要信息、识别潜在约束和执行准确的推理。这些挑战将给一个大型语言模型带来沉重的负担。因此,我们通过在推理过程中增加一个问题蒸馏器,将任务信息的提取和理解阶段与最终推理阶段分开。具体来说,我们设计了一个元提示φ来首先提取和形式化任务信息。提取的任务信息可表示为:

其中x是任务语句。由于页面限制,我们将problemdistiller的详细元提示放在附录A.2中。

Problem Condensation and Translation 我们使用问题蒸馏器从输入任务中提取关键元素,重点关注:(1)解决问题的基本参数和变量;(2)输入任务的目标及其约束条件。然后,我们将这些提炼出来的信息重新组织成清晰、可理解的格式,以供后续推理阶段使用。然后,我们将具体问题转化为高级概念和结构。这个翻译过程将复杂的现实问题,如复杂的数学应用场景,分解成更简单的多步计算,使其更容易在以后检索高层次的思想。

Thought-Augmented Reasoning with Meta Buffer 

Motivation 人类在解决问题时,往往会总结和归纳出更高层次的准则,然后将其应用于相关问题。受此启发,我们提出了元缓冲区,这是一个轻量级库,包含一系列高级思想(思想模板),用于解决各种类型的问题。与传统方法不同,我们的高级思想模板可以在解决不同问题时自适应实例化,从而提高大型语言模型的精度和灵活性。

Thought Template 作为一种高级指南,我们的思想模板存储在元缓冲区中,并由缓冲区管理器从各种解决问题的过程中获得。关于获取思想模板的细节将在3.3节中介绍。由于我们的BoT旨在为各种任务提供通用的推理方法,因此我们相应地将思想模板分为六类:文本理解、创造性语言生成、常识推理、数学推理、代码编程和应用程序调度。我们在附录A.1中提供了一些示例思想模板。这种思想模板的分类可以方便地检索模板,为不同的问题找到最合适的解决方案。这里我们将思想模板、模板描述及其对应的范畴表示为(Ti,DTi, Ck),其中i表示元模板的索引,k∈Z+,1≤k≤6,表示Ck属于六个范畴之一,DTi表示思想模板的描述。

Template Retrieval 对于每个任务,我们的BoT通过计算描述DTi和xd之间的嵌入相似度来检索与提炼问题xd高度相似的思想模板Ti。检索过程可表述为:

N为元缓冲区的大小,f(·)为普通文本嵌入模型,Tj为检索到的思想模板。我们设置了一个阈值δ(建议0.5 ~ 0.7)来确定当前任务是否为新任务。因此,如果Sim(f(xd), {f(DTi)}n i=0) < δ,我们将任务x识别为新任务。

Instantiated Reasoning 对于每个特定的任务,我们讨论实例化推理的两种情况,这取决于当前任务是否是新的:第一种情况是我们成功地检索了任务的思想模板Tj。在这种情况下,如图2所示,我们的思想增强推理将通过我们设计的实例化提示(见附录A.3)自适应地实例化到合适的推理结构。例如,在将军合一问题中,我们实例化了更新棋盘状态的模板来逐步解决问题。因此,我们使用提取的信息xd和检索到的模板Tj对任务x进行实例化推理,得到其解Sx为:

其中llmininstance表示具有大型语言模型的实例化推理器。

在第二种情况下,任务被标识为新任务。为了启用适当的实例化推理,我们准备了三个通用的粗粒度思想模板供使用。基于提取的任务信息xd,我们的BoT将自动为推理过程分配合适的思想模板。详细的预先定义的思想模板包含在附录A.3中。

Buffer Manager

我们建议使用buffer-manager来总结从每个问题解决过程中获得的高级指导方针和思想。它可以将每个特定的解决方案推广到更多的问题,将提炼出来的关键知识以思想模板的形式存储在元缓冲区中。与为每个问题临时生成示例或指令的方法相比,我们的缓冲管理器可以确保基于llm的推理在准确性、效率和鲁棒性方面的永久进步。

Template Distillation 为了提取一个通用的思想模板,我们提出了三步走的方法:

(1)核心任务总结:识别和描述问题的基本类型和核心挑战;

(2)解决步骤说明:总结解决问题的一般步骤;

(3)通用回答模板:在上述分析的基础上,提出一个可以广泛应用于类似问题的解决模板或方法。

此外,为了提高模板蒸馏的泛化能力和稳定性,我们精心设计了两种类型的上下文示例,用于生成任务中思想模板和跨任务示例。交叉任务意味着我们选择从一个任务中提炼出来的模板来解决其他任务的问题,比如用一个与代码相关的思想模板来解决一个数学问题。从输入任务x提取的新模板可以表示为:

其中llm蒸馏器是基于llm的模板蒸馏器,用以下提示符初始化:

Dynamic Update of Meta-Buffer 模板蒸馏后,我们需要考虑蒸馏后的模板是否应该更新到元缓冲区中。如果我们初始化一个空的元缓冲区,或者遇到一个没有合适的思想模板的问题,提炼出来的思想模板将直接存储在元缓冲区中。如果我们用检索到的思想模板来解决问题,新的见解可能会在某个思想模板的实例化过程中产生。因此,为了在保持新生成的信息思想的同时避免元缓冲区的冗余,我们将计算DTnew与{DTi}的嵌入向量i=0之间的相似度,并按照以下规则更新元缓冲区:

否则,这意味着元缓冲区已经拥有解决此任务所需的知识,不需要执行更新。我们的动态更新策略有效地减少了模板检索的计算负担,同时保证了元缓冲区的轻量级。我们在第6节进一步进行烧蚀研究进行分析。

Additional Method Details

Detailed Thought-Templates

Text Comprehension

任务描述:该任务包括分析一个包含企鹅的各种属性(如姓名、年龄、身高和体重)的表,并回答有关这些属性的问题。表可以用新条目更新,并且可以用自然语言提供额外的上下文或比较。

解决方案描述:要准确地回答有关企鹅属性的问题,必须能够解释以表格形式呈现的数据,理解以自然语言提供的任何附加信息,并根据所问问题应用逻辑推理来识别正确的属性。

思想模板:

第1步:解析初始表,将标题信息和每个企鹅的属性提取为结构化格式(例如,字典列表)。

步骤2:读取并集成更新或添加到表中的任何其他自然语言信息,确保数据保持一致。

步骤3:确定所讨论的属性(例如,最老的企鹅,最重的企鹅)和表中相应的列。

步骤4:应用逻辑推理来比较所有条目中的相关属性以找到正确答案(例如,最老企鹅的最高年龄)。

步骤5:从提供的选项中选择与逻辑比较结果匹配的答案。

Creative Language Generation

任务描述:任务是生成一首遵循传统英语十四行诗“ABAB CDCD EFEF GG”押韵方案的十四行诗,并在文本中逐字包含三个特定的单词。

解决方案描述:写一首十四行诗需要按照特定的押韵模式制作14行诗。这些线条通常是抑扬格的五音步,尽管出于创造性的原因可以允许节奏的灵活性。给定的押韵方案决定了每一行的结尾音,确保了有结构的诗歌形式。将所提供的三个单词一字不差地结合在一起,需要有策略地放置在行内,以保持诗歌的连贯性和主题的统一。

思想模板:

第一步:确定必须包含在十四行诗中的三个词。

第二步:理解“ABAB CDCD EFEF GG”的韵律,并准备一个可以使用的押韵词列表。

第三步:为十四行诗制定一个主题或故事,可以自然地结合三个提供的单词。

第四步:开始起草十四行诗,按照“ABAB”押韵方案写第一个四行诗(四行),确保包含一个或多个提供的单词。

第五步:继续第二个四行诗“CDCD”,第三个四行诗“EFEF”,最后是结束的对行诗“GG”,每次都根据需要合并提供的单词。第六步:回顾十四行诗的连贯性、流畅性和对韵式的坚持,必要时进行调整。

Common Sense Reasoning

任务描述:给定一个特定的日期和事件,如假日或历史事件,确定以下日期。

解决方案描述:要确定下一个日期,我们需要考虑日历的结构、每个月的天数以及是否为闰年。通常,一个月的天数是固定的,除了二月可能会因闰年而变化。一年中的第二天通常是增加一天的日期,除非是月底,那么第二天就是下个月的第一天。对于一年的结束,第二天将是下一年的1月1日。

思想模板:

第一步:确定给定日期的月号和日号。

第二步:检查是否到了月底;如果是,确定下个月的开始日期。

第三步:如果不是月底,只需在日期上加1。

第四步:年终要特别注意,确保年终有增量。

Mathematical Reasoning

任务描述:求解任意情况下的二次方程ax2 + bx + c = 0。

解说明:解任何形式为ax2 + bx + c = 0的二次方程,我们可以根据所描述的方法遵循一般方法。下面是解决这类方程的结构化模板:

思想模板:

步骤1:计算判别式-使用公式D = b2−4ac计算判别式D。

步骤2:确定根的性质-如果D > 0,方程有两个不同的实根。如果D = 0,则方程只有一个实根(也称为重根或二重根)。—如果D < 0,则方程有两个复根。

步骤3:计算根—当D≥0时,用公式x =−b±√d2a计算根。—当D < 0时,用公式x = - b 2a±√- D 2a i计算复根的实部和虚部,其中i为虚数单位。

Code Programming

任务描述:当给定一个数字列表时,尝试使用4个基本的数学运算(+-*/)来获得目标数字。

思想模板:

Application Scheduling

任务描述:给定SAN中的一些象棋移动,更新棋盘状态。

相关文章:

Buffer of Thoughts: Thought-Augmented Reasoningwith Large Language Models

CODE: NeurIPS 2024 https://github.com/YangLing0818/buffer-of-thought-llm Abstract 我们介绍了思想缓冲(BoT)&#xff0c;一种新颖而通用的思想增强推理方法&#xff0c;用于提高大型语言模型(大型语言模型)的准确性、效率和鲁棒性。具体来说&#xff0c;我们提出了元缓冲…...

mybatisX动态切换数据源直接执行传入sql

代码 mapper接口中方法定义如下&#xff0c;其中#dbName代表传入的数据源变量&#xff08;取值可参考application.properties中spring.datasource.dynamic.datasource指定的数据源&#xff09; DS("#dbName")List<LinkedHashMap<String, Object>> execu…...

N8N MACOS本地部署流程避坑指南

最近n8n很火&#xff0c;就想在本地部署一个&#xff0c;尝尝鲜&#xff0c;看说明n8n是开源软件&#xff0c;可以在本地部署&#xff0c;于是就尝试部署了下&#xff0c;大概用了1个多小时&#xff0c;把相关的过程记录一下&#xff1a; 1、基础软件包 abcXu-MacBook-m2-Air…...

搜索策略的基本概念

搜索是人工智能中的一个基本问题&#xff0c;是推理不可分割的一部分&#xff0c;它直接关系到智能系统的性能与运行效率&#xff0c;因而尼尔逊把它列为人工智能研究中的四个核心问题之一。在过去40多年中&#xff0c;人工智能界已对搜索技术开展了大量研究&#xff0c;取得了…...

云原生--CNCF-1-云原生计算基金会介绍(云原生生态的发展目标和未来)

1、CNCF定义与背景 云原生计算基金会&#xff08;Cloud Native Computing Foundation&#xff0c;CNCF&#xff09;是由Linux基金会于2015年12月发起成立的非营利组织&#xff0c;旨在推动云原生技术的标准化、开源生态建设和行业协作。其核心目标是通过开源项目和社区协作&am…...

【Chrome插件开发】某视频网站的m4s视频/音频下载方案,及其Chrome插件实现-v250415

文章目录 引言效果v1.0.0 TODO让AI写初稿两条路&#xff1a;在content.js里&#xff0c;还是popup.js里发请求&#xff1f;World in content.js新建项目如何打包background.js&#xff1a;在鼠标右键菜单添加一个选项&#xff0c;点击后通知content.js第一次创建弹窗eslint 9如…...

Nginx:前后端分离配置(静态资源+反向代理)

Nginx 前后端分离配置 [!IMPORTANT] 前端静态资源位置&#xff1a;/www/wwwroot/dist后端部署端口&#xff1a;9999 server {listen 80;server_name www.0ll1.com;location / {root /www/wwwroot/dist;try_files $uri $uri/ /index.html;index index.html index.htm;…...

go中map和slice非线程安全

参考视频&#xff1a;百度 Go二面&#xff1a; map与切片哪个是线程安全的_哔哩哔哩_bilibili go中的map和slice是非线程安全类型的。 非线程安全类型的表现为&#xff1a; 并发调用时会报错并发调用后结果不可预测 go中三种线程安全类型&#xff1a; channel&#xff0c;底…...

第T9周:猫狗识别2

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 第T9周&#xff1a;猫狗识别2 tf.config.list_physical_devices(“GPU”)&#xff0c;用于检测当前系统是否有可用的 GPU&#xff0c;并将结果存入 gpus 变量…...

AlmaLinux 9.5 调整home和根分区大小

在使用linux的过程中, 有时会出现因为安装系统时分区不当导致有的分区空间不足,而有的分区空间过剩的情况.下面本文将讲述解决linux系统AlmaLinux 下调整home和根分区大小的方法。 1、查看现有分区 df -Th2、备份/home中的用户数据 mkdir /backup && mv /home/* /ba…...

[Vue3]绑定props 默认值

前言 使用TS、Vue3组织组件中传入props的通用方式 步骤 步骤1&#xff1a;使用 defineProps 定义 Props 使用interface定义props中各项的类型&#xff1a; // 组件List.vue// 定义 Props 类型和接口 interface ListItem {name: string;time: string;content: {status: numbe…...

【android bluetooth 协议分析 11】【AVDTP详解 1】【宏观感受一下avdtp是个啥东东】

我们先从宏观感受一下avdtp协议是个啥东东&#xff0c; 和 a2dp 是啥关系。 在蓝牙协议中的层次。以及他是如何和 例如l2cap 、sdp、a2dp 配合的。先从宏观把握&#xff0c;我们在逐步展开对 avdtp 的源码分析。 我们先从生活中的小例子感性的认识一下 avdtp 在 蓝牙协议中的作…...

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法)

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型&#xff08;敏感性分析方法&#xff09; 引言 该文章实现了一个可解释的回归模型&#xff0c;使用NBRO-XGBoost&#xff08;方法可以替换&#xff0c;但是需要有一定的编程基础&#xff09;来预测特征输出。该…...

【Spring】静态代理、动态代理

Java中&#xff0c;代理模式是一种设计模式&#xff0c;用于通过代理对象控制对目标对象的访问。代理可以分为静态代理和动态代理&#xff0c;其中动态代理又包括JDK动态代理和CGLIB动态代理。这些机制在Spring框架中广泛用于AOP&#xff08;面向切面编程&#xff09;、事务管理…...

关于el-table可展开行实现懒加载的方案

场景&#xff1a; 一个流程记录&#xff0c;以表格的形式展示。点击展开表格的某一行&#xff0c;可以看到该流程的详细记录。但是&#xff0c;详细记录数据独立于表格数据&#xff0c;在还没有展开这一行的时候就不去请求这一行的详细数据&#xff0c;以便加快网络请求的速度。…...

AutoJs相关学习

一、控件点击、模拟点击 如果一个控件的 clickablefalse&#xff0c;但它的父级控件是 clickabletrue&#xff0c;我们可以通过 向上查找父级控件 的方式找到可点击的父级&#xff0c;然后执行点击操作。以下是几种实现方法&#xff1a; 方法 1&#xff1a;使用 parent() 查找可…...

ISO15189认证有什么要求?ISO15189认证流程

ISO 15189 认证要求及流程详解 ISO 15189 是国际标准化组织&#xff08;ISO&#xff09;针对 医学实验室质量和能力 的认证标准&#xff0c;适用于医院检验科、第三方医学实验室、血站等机构。该认证确保实验室的技术能力和管理体系符合国际标准&#xff0c;提高检测结果的准确…...

【每天一个知识点】大模型的幻觉问题

“大模型的幻觉问题”是指大语言模型&#xff08;如GPT系列、BERT衍生模型等&#xff09;在生成内容时&#xff0c;产生不符合事实或逻辑的虚假信息&#xff0c;即所谓的“幻觉”&#xff08;hallucination&#xff09;。这在诸如问答、摘要、翻译、代码生成等任务中尤其常见。…...

光谱相机在肤质检测中的应用

光谱相机在肤质检测中具有独特优势&#xff0c;能够通过多波段光谱分析皮肤深层成分及生理状态&#xff0c;实现‌非侵入式、高精度、多维度的皮肤健康评估‌。以下是其核心应用与技术细节&#xff1a; ‌一、工作原理‌ ‌光谱反射与吸收特性‌&#xff1a; ‌血红蛋白‌&a…...

【c语言】指针和数组笔试题解析

一维数组: //数组名a如果既不单独放在sizeof()中&#xff0c;也不与&结合&#xff0c;那么就表示数组首元素的大小 //a一般表示数组首元素地址&#xff0c;只有两种情况表示整个数组&#xff0c;sizeof(arr)表示整个数组的大小&#xff0c;&arr表示数组的地址 int a[]…...

【Spring】AutoConfigureOrder与Order注解的区别与使用方式

@AutoConfigureOrder与@Order都是Spring框架中用于控制组件优先级的注解,但它们有不同的应用场景和作用范围。 一、基本区别 1. 包和位置 @Order: 位于org.springframework.core.annotation包,是Spring核心包的一部分@AutoConfigureOrder: 位于org.springframework.boot.au…...

基于SpringBoot的校园赛事直播管理系统-项目分享

基于SpringBoot的校园赛事直播管理系统-项目分享 项目介绍项目摘要管理员功能图用户功能图项目预览首页总览个人中心礼物管理主播管理 最后 项目介绍 使用者&#xff1a;管理员、用户 开发技术&#xff1a;MySQLJavaSpringBootVue 项目摘要 随着互联网和移动技术的持续进步&…...

科研小白可以做哪些准备

断更五个月啦&#xff0c;这段时间一直忙于自己的研究课题。今天给大家分享我在这段时间对科研的一些认识和积累的经验&#xff0c;希望对大家有所帮助。 一、学术研究的认识与思考 什么是科研 什么是好的研究 首先&#xff0c;就是要回答“什么是科研&#xff1f;什么是好研…...

2025.4.22学习日记 JavaScript的常用事件

在 JavaScript 里&#xff0c;事件是在文档或者浏览器窗口中发生的特定交互瞬间&#xff0c;例如点击按钮、页面加载完成等等。下面是一些常用的事件以及案例&#xff1a; 1. click 事件 当用户点击元素时触发 const button document.createElement(button); button.textCo…...

TikTok X-Gnarly纯算分享

TK核心签名校验&#xff1a;X-Bougs 比较简单 X-Gnarly已经替代了_signature参数&#xff08;不好校验数据&#xff09; 主要围绕query body ua进行加密验证 伴随着时间戳 浏览器指纹 随机值 特征值 秘钥转换 自写算法 魔改base64编码 与X-bougs 长a-Bougs流程一致。 视频…...

CentOS7 环境配置

CentOS 7 环境配置 我的基础环境&#xff1a; Windows11 CentOS版本&#xff1a;CentOS Linux release 7.7.1908 (Core) Vmware版本&#xff1a;VMware Workstation 17 Pro 17.5.0 build-22583795 使用工具&#xff1a;MobaXterm 注意&#xff1a; 所有有关防火墙的操作都可以…...

缓存,内存,本地缓存等辨析

快速辨析缓存&#xff0c;内存&#xff0c;本地缓存&#xff0c;memcache&#xff0c;redis等 &#xff08;个人临时记录&#xff09; 缓存 泛指所有用于暂存数据以提升访问速度的技术&#xff0c;包括本地缓存、分布式缓存、CPU缓存等。核心目标是减少对慢速存储&#xff08…...

C++模板学习(进阶)

目录 一.非类型模板参数 二.模板的特化 一&#xff09;.函数模板特化 二&#xff09;.类模板特化 1.全特化 2.偏特化 三.模板分离编译 一&#xff09;.什么是分离编译 1. 问题描述 2. 模板的实例化机制 3. 分离编译的困境 二&#xff09;.解决方法 1. 头文件包含…...

【Git】fork 和 branch 的区别

在 Git 中&#xff0c;“fork” 和 “branch” 是两个不同的概念&#xff0c;它们用于不同的场景并且服务于不同的目的。理解这两者的区别对于有效地使用 Git 进行版本控制非常重要。 1. Fork&#xff08;分叉&#xff09; 定义 Fork 是指在 GitHub、GitLab 等代码托管平台上…...

STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.22 STM32开发板学习——第45节: [13-2] 修改主频&睡眠模式&停止模式&待…...

Java中常见API的分类概述及示例

1. 集合框架&#xff08;java.util 包&#xff09; 核心接口与实现类 接口实现类特点示例代码ListArrayList, LinkedList有序、可重复List<String> list new ArrayList<>(); list.add("Java");SetHashSet, TreeSet无序、唯一Set<Integer> set …...

IOT项目——物联网 GPS

GeoLinker - 物联网 GPS 可视化工具 项目来源制作引导 项目来源 [视频链接] https://youtu.be/vi_cIuxDpcA?sigMaOKv681bAirQF8 想要在任何地方追踪任何东西吗&#xff1f;在本视频中&#xff0c;我们将向您展示如何使用 ESP32 和 Neo-6M GPS 模块构建 GPS 跟踪器——这是一…...

开源状态机引擎,在实战中可以放心使用

### Squirrel-Foundation 状态机开源项目介绍 **Squirrel-Foundation** 是一个轻量级、灵活、可扩展、易于使用且类型安全的 Java 状态机实现&#xff0c;适用于企业级应用。它提供了多种方式来定义状态机&#xff0c;包括注解声明和 Fluent API&#xff0c;并且支持状态转换、…...

TockOS,一种新安全软件架构的RTOS介绍

文章目录 1. TockOS介绍详细总结 2. TockOS开源项目的目录结构3. 胶囊&#xff08;Capsules&#xff09;胶囊的本质胶囊的特点胶囊的应用场景 4. 胶囊的实现模块化设计安全隔离事件驱动可复用性 1. TockOS介绍 Tock 是一款面向 Cortex-M 和 RISC-V 微控制器的安全嵌入式操作系…...

AGI大模型(12):向量检索之关键字搜索

1 检索的方式有那些 列举两种: 关键字搜索:通过用户输入的关键字来查找文本数据。语义搜索:不仅考虑关键词的匹配,还考虑词汇之间的语义关系,以提供更准确的搜索结果。2 关键字搜索 先看一个最基础的实现 安装模块 pip install redis 不会redis的去看我的redis专题 首…...

数据库MySQL学习——day1(创建表与数据类型)

文章目录 1. 创建表&#xff08;CREATE TABLE&#xff09;1.1. 创建表的基本语法&#xff1a;1.2. 示例&#xff1a;创建学生信息表 2. 数据类型2.1. 常用的数据类型&#xff1a; 3. 表约束3.1. 常见约束类型&#xff1a;3.2. 示例&#xff1a;添加约束条件3.3. 修改表添加约束…...

基于Transformer与随机森林的多变量时间序列预测

哈喽&#xff0c;我不是小upper&#xff0c;今天和大家聊聊基于Transformer与随机森林的多变量时间序列预测。 不懂Transformer的小伙伴可以看我上篇文章:一文带你彻底搞懂&#xff01;Transformer &#xff01;&#xff01;https://blog.csdn.net/qq_70350287/article/detail…...

【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)

&#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 希望用我的经验&#xff0c;让“程序猿”的AI学习之路走的更容易些&#xff0c;若我的经验能为你前行的道路增添一丝轻松&#xff0c;我将倍感荣幸&#xff01;共勉~ 【程序员 NLP 入门】词…...

MATLAB Coder 应用:转换 MATLAB 代码至 C/C++ | 实践步骤与问题解决

注&#xff1a;本文为 “ MATLAB 代码至 C/C 应用” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 MATLAB 代码转换为 C/C 代码的详细指南 随心 390 zhihu 发布于 2020-07-12 12:39 在实际项目中&#xff0c;我们常常遇到需要将 MATLAB 代码转换为 C/C …...

BLE 6.0 六大核心特性全解析

写在前面: 2025年1月15日,Bluetooth SIG发布了备受期待的 Bluetooth Core Specification 6.0。相比5.x系列,6.0在测距精度、能耗优化、扫描过滤、音频体验和协议灵活性等方面实现了重大突破。本文将以浅显易懂的语言、丰富的图示和真实案例,带你全面深入了解BLE 6.0的六大核…...

网络应用程序体系结构

本文来源 &#xff1a; 《计算机网络 自顶向下方法》 应用程序体系结构&#xff08;application architecture&#xff09;由应用程序研发者设计&#xff0c;规定了如何在各种端系统上组织该应用程序。 现代网络应用程序中使用的两种主流体系结构&#xff1a; (1)客户-服务器…...

Filename too long 错误

Filename too long 错误表明文件名超出了文件系统或版本控制系统允许的最大长度。 可能的原因 文件系统限制 不同的文件系统对文件名长度有不同的限制。例如&#xff0c;FAT32 文件名最长为 255 个字符&#xff0c;而 NTFS 虽然支持较长的文件名&#xff0c;但在某些情况下也…...

Linux学习——UDP

编程的整体框架 bind&#xff1a;绑定服务器&#xff1a;TCP地址和端口号 receivefrom()&#xff1a;阻塞等待客户端数据 sendto():指定服务器的IP地址和端口号&#xff0c;要发送的数据 无连接尽力传输&#xff0c;UDP:是不可靠传输 实时的音视频传输&#x…...

C++:继承

目录 一&#xff1a;继承的概念 1.1 继承的定义 1.2 继承方式 1.3 可见性区别 公有方式 私有方式 保护方式 1.4 一般规则 二、继承中的隐藏规则 三、基类和派生类间的转换 四、派生类的默认成员函数 实现一个不能被继承的类 继承与友元 五、继承与静态成员 六、多…...

RSGISLib:一款功能强大的GIS与RS数据处理Python工具包

今天为大家介绍的软件是RSGISLib&#xff1a;一款功能丰富的遥感与GIS数据的python库。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 RSGISLib官网网址为&#xff1a;http://rsgislib.org/&#xff0c;它提供了一个丰富的工具集&…...

Git管理

1.创建git仓库 git init 2.让文件添加到暂存区 git add. 3.给暂存区文件添加说明&#xff0c;并提交到本地仓库 git commit -m 说明 4.查看历史记录 git log /git log --oneline 查看状态&#xff1a;git status 5. 引用旧版 git reset --hard commitid 6.创建分支 …...

Java中内部类

1.静态类与非静态类是内部类的区分&#xff0c;外部类不可以被static修饰。 2.类的加载过程&#xff1a;类只有被使用才会被类加载器加载&#xff0c;加载后类的信息放在元空间&#xff08;方法区&#xff09;中。类的使用包括初始化对象、静态方法的调用。 3.静态内部类与普…...

[U-Net-Dual]DEU-Net

论文题目:DEU-Net: Dual-Encoder U-Net for Automated Skin Lesion Segmentation 中文题目:DEU-Net:用于自动皮肤病变分割的双编码器U-Net 0摘要 皮肤病的计算机辅助诊断(CAD)在很大程度上依赖于皮肤病变的自动分割,尽管由于病变在形状、大小、颜色和纹理上的多样性以及…...

【数据结构】第五弹——Stack 和 Queue

文章目录 一. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.3.1 顺序表结构1.3.2 进栈 压栈1.3.3 删除栈顶元素1.3.4 获取栈顶元素1.3.5 自定义异常 1.4 栈的应用场景1.改变元素序列2. 将递归转化为循环3. 四道习题 1.5 概念分区 二. 队列(Queue)2.1 概念2.2 队列的使用2.3…...

LSTM如何解决梯度消失问题

LSTM如何解决梯度消失问题 一、传统RNN的梯度消失困境 在标准RNN中&#xff0c;隐藏状态更新公式为&#xff1a; h t tanh ⁡ ( W h h h t − 1 W x h x t b h ) h_t \tanh(W_{hh}h_{t-1} W_{xh}x_t b_h) ht​tanh(Whh​ht−1​Wxh​xt​bh​) 梯度计算通过链式法则展…...