TC-RAG: Turing-Complete RAG--图灵完备的检索增强

摘要:

在提升领域特定的大语言模型(LLMs)的方法中,检索增强生成(RAG)技术作为一种有前景的解决方案,可以缓解诸如幻觉、知识过时以及在高度专业化查询中专业知识有限等问题。然而,现有的RAG方法忽视了系统状态变量的引入,而系统状态变量对于确保自适应控制、检索停止和系统收敛至关重要。本文通过严格的理论证明,提出了图灵完备的RAG(TC-RAG)框架,通过引入图灵完备的系统来管理状态变量,从而实现更高效、准确的知识检索。通过利用具有自适应检索、推理和计划能力的内存堆栈系统,TC-RAG不仅确保了检索过程的受控停止,还通过Push和Pop操作减轻了错误知识的积累。在医疗领域的案例研究中,我们在真实世界的医疗数据集上进行了广泛的实验,结果表明,TC-RAG在准确性上比现有方法提高了7.20%以上。

医学场景案例研究

在真实医学场景中,是否检索/怎样检索/如何规划检索/如何处理检索过程中的瑕疵 是非常重要的四个难点:

(1) 是否检索:如下图的真实场景的例子所示,使用检索后由于大量的无关噪声被检索到,因此模型的回答反而被误导了。这时候是不需要检索的!

图1. 使用RAG检索到的噪声知识导致回答错误的例子

(2) 怎样准确检索:在真实场景下,一个懂医学的医生查阅资料的过程和普通人问诊是完全不一样的, 不会一股脑的将全部知识点拿去检索。

图2. 真实场景中医生去检索的例子

(3) 如何规划检索: 在真实场景下,一个懂医学的医生查阅资料的过程是有规划的,并且能够灵活的使用多种医学工具。

图3. 医生规划检索的例子

(4) 如何处理检索过程中的瑕疵:在检索过程中,检索到的错误知识(例如过时知识)或任务无关的噪声知识是很常见的,然而医生大多数时候是能够根据自己的认知来纠正错误重新检索的。

图4. 医生处理检索过程的瑕疵的例子

因此,现目前的研究大多都采用RAG+LLM的方法,但很少有工作解决以上问题。

引言

大语言模型(LLMs),如ChatGPT(OpenAI 2022)和GPT-4(OpenAI 2023),在许多关键领域取得了显著进展,并在各种下游任务中表现出了卓越的性能。在医疗领域,这些医疗LLMs展示了巨大的潜力,尤其是在健康护理领域,责任感和可信度至关重要。通过全面的医学知识预训练,这些模型不仅可以支持医生进行精确的诊断和制定治疗计划,还可以改善医疗资源的分配。然而,尽管医疗LLMs取得了重大进展,仍然存在一些关键挑战,包括难以避免的事实错误(如幻觉)、知识的过时,以及缺乏高度专业化的知识。为了解决这些问题,检索增强生成(RAG)技术被提出,该技术利用外部知识库提供的医疗知识作为上下文信息来增强内容生成,这被认为是解决上述问题的一个有前景且必要的解决方案。

然而,尽管现有通过RAG增强LLMs的方法显示出一定的前景,但它们始终忽略了系统状态变量的引入,而这些变量对于确保自适应控制、检索停止和系统收敛至关重要。此外,这些现有的RAG方法并非图灵完备,缺乏动态管理和监控检索过程的能力,无法保证在复杂的医疗场景中得出可靠的结论。在这些复杂的医疗场景中,决策通常需要复杂的多步骤推理和自适应响应,图灵完备性的缺失显著限制了系统的有效性和可靠性。这一差距促使我们提出一种新的方法:构建一个图灵完备的系统来有效管理状态变量,利用有限的逻辑框架来增强RAG过程。然而,如何有效地构建一个图灵完备的RAG系统仍然未被充分探索,并且面临着重大的挑战:

挑战1: **设计具有监控状态变量的图灵完备RAG系统:**设计一个图灵完备的RAG系统需要整合能够动态跟踪和控制检索过程的监控状态变量,这是现有RAG方法所缺乏的。当前的方法并没有明确的机制来评估系统是否已经收敛到一个可靠的结论,这是一个重要的缺口。一个显著的挑战在于如何利用大模型的前向传播过程,实时准确地计算这些状态变量,并确保这些变量能够有效反映系统的演变上下文,从而指导是否继续、停止或改进检索过程的关键决策。如何在模型的前向传递过程中管理这些变量,同时保持对复杂多变的医疗查询的适应性,是实现效率和准确性的关键。

挑战2:动态规划检索以维持最佳状态:一旦能够评估状态,如何动态管理状态以达到预期的状态是一个重要的问题。在现实生活中的咨询中,医生通常会根据他们对问题的掌握程度决定是否进行检索以及检索什么,而不是盲目地进行检索,这可能导致模型已经具备的冗余信息,从而可能导致混淆甚至误导LLMs。如何系统地分析和计划进一步的步骤,并有效利用LLMs内部参数化知识来维持最佳状态,是一个重要的挑战

挑战3: 避免无关噪声影响系统状态:由于传统RAG的检索过程通常是由查询关键词驱动的,而不是根据模型的具体需求,这可能会引入大量无关和噪声的上下文。而错误的知识会随着检索和推理过程的积累而持续增加,从而浪费token资源、积累无效记忆并遇到“lost in middle”(即大模型不遵循指令)的问题。因此,如何有效地消除错误知识对于维持系统状态至关重要。

为了解决这些挑战,我们提出了图灵完备的RAG(TC-RAG),这是一个为领域特定LLMs提供可靠且可信的医疗分析的图灵完备系统。首先,对于挑战1,我们设计了一个具有内存堆栈的图灵完备RAG系统,该系统监控中间状态,确保检索过程可靠地收敛到最佳结论。其次,为了应对挑战2,我们广泛收集了医疗数据,并预训练了一个医疗LLM,从而提高了它的推理和规划能力。最后,对于挑战3,TC-RAG结合了内存堆栈系统,利用回溯和总结操作及时删除错误并压缩冗余知识,从而减轻了错误信息和噪声的积累。

相关工作

**检索增强生成(RAG)**最早由Lewis等人提出,通过将外部知识库的信息整合到LLMs的提示工程中,增强了LLMs在知识密集型任务中的表现。RAG不仅在LLMs推理过程中减少了幻觉问题,还提供了最新的、任务特定的知识,从而显著提升了下游任务的可解释性和性能。在生物医学领域,RAG被广泛应用于通过利用医学论文、指南、教科书、维基百科、知识图谱等外部医学知识,来提高LLMs的推理和分析能力。

(1) Naive & Advanced RAG: Naive RAG通常采用简单的检索-阅读方法,其中相关信息是基于用户初始查询进行检索的,然后使用这些内容生成答案。Advanced RAG则结合了更复杂的组件,如检索器、重新排序器、过滤器和阅读器,以提高检索和生成的质量。然而,无论是Naive RAG还是Advanced RAG,都没有考虑LLMs是否已经具备了必要的知识。这常常导致检索过多冗余信息,可能会误导模型,造成所谓的“中途丢失”困境。我们的方法通过基于模型的内部参数化知识来决定是否检索以及检索什么,从而实现更高效、准确的检索。

(2) Adaptive RAG: 最近的研究重点开发了自适应RAG策略,使得LLMs能够决定是否以及何时检索,并从庞大的知识库中选择最合适的检索工具。FLARE通过预测下一句并使用生成的低置信度词作为查询重新检索相关文档。DRAGIN利用LLMs在其生成内容中的不确定性,根据内部自注意力权重和相应的关键词来决定何时触发检索。Adaptive-RAG使用一个较小的LLM作为分类器,先查询问题的复杂性,然后选择最合适的检索策略——从简单到复杂。然而,这些现有的自适应RAG方法都不是图灵完备的,缺乏动态管理和监控检索过程的能力,无法保证系统收敛到一个可靠的结论。此外,它们尚未充分利用LLMs与RAG相结合的逐步规划和工具使用能力。我们的方法通过整合一个图灵完备的框架,优化了检索过程,通过高级的规划和工具使用策略,确保了更可靠和准确的结果。

推理和规划能力**:**最近的研究重点是增强LLMs的推理和规划能力。链式推理(Chain-of-Thought,CoT)展示了LLMs如何构建结构化的“思维过程”来解决复杂问题。ReAct将推理轨迹与任务特定的动作相结合,使LLMs能够计划、调整动作,并在从外部来源(如知识库)获取信息时管理异常。Reflexion通过使用语言反馈进一步改进了LLMs,使它们能够反思并存储任务反馈,从而提高未来尝试中的决策能力。尽管这些方法在推理和规划过程中引入了新的决策尝试,但它们往往在管理之前的记忆上表现不足,尤其是在删除无效决策或精炼历史记录方面。为了解决这些挑战,TC-RAG结合了具有回溯和总结操作的内存堆栈系统,允许及时纠正错误并压缩冗余知识,确保模型的推理过程高效且准确,从而得出更可靠的结果。

图灵完备的记忆栈定义(Tc Stack)

在Tc-RAG中,记忆栈被定义如下:

解释:记忆栈Tc=(S,A,M,delta,s0, F,sigma):

1. 其中S是大模型的可能处于的状态(作者这里用具体的数值来表示,代表大模型的确定性程度,越小代表大模型此刻对该任务的回答越确定);

2. A达标大模型可以执行的动作。在栈里面,在基于栈的记忆系统中,通过push和pop这两个基本操作的组合,TC-RAG将能够有效实现对大模型交互记忆的管理、精炼大模型交互过程中的记忆内容以及去除RAG过程中所引入的噪声:

基于这两个meta-actions,TC-RAG一共定义了5个由push和pop两个基本操作所组合而成的有意义的行为,在大模型每次决策时,都将从这5个行为中选择一个执行。这5个行为的定义如下:

(1) 思考:这个行为将激发大模型的决策能力,让大模型根据已有的信息进行分析和处理,决定大模型下一步的行为。大模型思考的内容会被push到记忆栈之中。

(2) 工具调用:当大模型仅凭借自身知识无法回答问题时,大模型可以通过调用网络搜索、文档检索、图谱检索等外部工具来获取额外的信息辅助自身回答问题。工具调用后,使用工具的名称以及工具检索的结果将被push到记忆栈之中。

(3) 反思:当大模型发现记忆栈栈顶的内容与整个任务不相关或是该内容是有害的时候,大模型可以通过反思行为,将记忆栈栈顶的元素pop出去,从而避免大模型被无关信息或是有害信息所干扰。

(4) 总结:当记忆栈栈顶的信息过长,或是在栈顶信息中包含了部分噪音时,大模型可以通过总结行为,先利用pop操作将栈顶元素取出,然后对取出的文本进行总结,得到更加精炼且与任务相关的文本,最后再将精炼后的文本push回到记忆栈之中。

(5) 结论:当大模型觉得可以给出最终答案时,会执行结论操作。然而,当且仅当此时整个系统的状态变量达到终止条件时,大模型才会停止整个流程

3. M代表的是大模型的记忆栈,在任务一开始时将用户的Query压入栈底

4. delta是状态转移函数

5. s0代表的是大模型的初始状态,这里用一个很大的值Large_Value表示

6. F代表大模型的终止状态。Tc-RAG认为当大模型自己需要输出Conclusion以及当状态值小于sigma阈值时,此刻推理结束,Tc的栈顶将作为最终的输出答案。

图灵完备性的证明

关于图灵完备性的证明,作者在第四部分和附录部分已经写的非常详细了,感兴趣的同学可以去阅读看看,这里就不细致说了。

记忆栈和系统监测方法

如上图所示,TC-RAG利用基于栈的记忆系统以及对应的状态变量来实现对整个RAG框架的状态管理与终止判定,让模型能够自适应地进行检索以及在合适的时刻输出最终答案。

1. 在一开始的时候,大模型将用户Query压栈,接下来大模型将不断的执行所定义的复合操作(Composed Action Set),例如:思考(push),反思(pop),工具执行(push),总结(pop->push)等。在工具执行的过程中,大模型被允许使用多源数据(图谱、文档、网页百科等)。

2. 在大模型执行到Conclusion/Thought时,系统会不断更新它的状态变量(状态变量的计算方法在下文);当大模型执行到有Pop的动作时,会将状态变量重置为上一个Thought的值,以确保系统的完备性。

3. 最后在大模型输出Conclusion且状态变量小于阈值时,输出最终答案,否则大模型的结论行为会被视为思考行为处理,并继续进行下一步推理。

为了解决自适应检索中的停机问题,我们在系统中引入了状态变量来监测系统状态。只有当状态变量满足终止条件时,整个系统才会停机。在实践中,TC-RAG分别尝试了条件困惑度和不确定性这两种不同的状态变量作为量化系统当前状态的指标。

(1) 条件困惑度通过计算大模型在用户提问内容的基础上,生成栈顶输出内容时的困惑度而获得:

(2) 不确定性则是通过计算输出栈顶输出信息的熵值所得到的:

当系统状态值较低或不确定性较低时,表明此时大模型对于最终的结果已经有了比较高的信心。

整个方法部分的伪代码如下:

Prompt如下所示:

和ReACT的对比:

图: ReACT策略

然而,我们如果将ReACT的执行过程视作栈的话,就可以发现这是一个单向的栈(只有push,没有pop)。先目前的Reflexion工作,虽然纳入了反思过程,但其上一次的错误思考过程还是被纳入到栈中了。因此,大量的错误知识被累计,token资源被浪费,容易导致资源lost in middle问题。

除此之外,ReACT等方法没有引入系统变量监测系统,因此该类模型往往都是黑盒的,即仅仅依靠大模型自己来决定是否结束检索和思考。

因此,Tc-RAG也做了一个可视化实验:

图:Tc-RAG和ReACT的可视化实验

从这个图可以看出,基于ReACT的方法在处理无关噪声的积累时存在困难,这导致了系统的过度自信和错误的结论。例如“仅仅因为单位不同”的错误,ReACT就得到了错误的判断。相比之下,TC-RAG能够有效管理其内存,并利用总结和回溯操作修剪错误的检索结果,从而得出更加简洁和准确的结论。这凸显了TC-RAG在处理复杂任务时的优势。此外,作者也发现基于ReACT的方法由于缺乏状态管理,往往会在系统状态值较高时过早确定答案。而TC-RAG能够动态地监控RAG过程,确保系统状态值符合终止条件,这进一步说明了构建系统状态的重要性。

实验

实验设置

(1) 精心微调的医学LLM模型:为了提升模型的思考和任务规划能力,作者搜集了海量的数据来持续预训练(continuous pretraining)了一个医学LLM:

(2) 医学工具库:

a. 作者纳入了 百万规模的医学知识图谱(包含130万医学实体和360万关系)并将图谱路径作为检索结果提供大模型(这里是延续了HyKGE的工作);

b. 医学文档库:作者搜集了海量的医学教程、就诊治疗、医学论文、病人电子病例等作为文档库

c. 网页检索:作者利用Bing和Google Search作为网页检索

d. 百科检索:作者利用WikiPedia和MedNet作为百科检索工具

e. 电子病历数据:来自MIMIC-III和MIMIC-IV数据。

实验结论

在CMB、MMCU以及CMB-Clin三个数据集上基于Qwen1.5-32B-Chat基座模型以及在Qwen1.5-32B-Chat上预训练后的模型的实验结果表明,TC-RAG的方法与其他RAG方法相比有着更好的表现,比现有方法在准确率上平均提升了7.20%,达到了SOTA的水平。同时,通过人为在RAG检索内容中引入噪声的投毒实验证明了TC-RAG方法在弹出检索噪声,保留有效信息方面有着较好的表现。此外,消融实验验证了TC-RAG中反思与总结动作的有效性以及状态变量引入的必要性。这些实验结果都表明,TC-RAG能够充分利用预训练大模型的规划能力,通过自适应地进行信息检索,辅助大模型更好地进行推理和决策,提升了模型的整体性能。

结论

本文提出了首个图灵完备的检索增强生成(RAG)系统,TC-RAG。通过引入监控状态变量,作者开发了一个内存堆栈框架,使检索过程更加动态和自适应,有效解决了传统RAG方法中存在的无休止和不准确的检索问题。TC-RAG框架通过其内存堆栈系统的回溯和总结功能,有效减少了错误知识和无关噪声的积累。实验表明,TC-RAG在多个真实世界的医疗数据集上显著优于现有的基准方法,展示了其在准确性和可靠性上的潜在改进。此外,TC-RAG的成功部署也凸显了其在实际应用中的价值。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF- vs中的WPF应用项目模板 如何自己实现

读书笔记 1. 单个 c#文件的 空白window应用程序 (只展示了一个button按钮) 2.C#文件 和xml文件 的空白window程序 .xml文件作为程序的资源 (只一个button按钮) 3. xmal和c#共同编译 形如使用VS 创建WPF应用项目模板 1.新建一个wpf空白项目 ,添加一个主c#文件 和xaml文件(属…

【C++ Primer Plus习题】7.2

问题: 解答: #include <iostream> using namespace std;#define MAX 10int input(float* grade, int len) {int i 0;for (i 0; i < len; i){cout << "请输入第" << i 1 << "个高尔夫成绩(按0结束):";cin >> grade[i]…

【二叉树进阶】--- 前中后序遍历非递归

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们将来了解有关二叉树前中后序遍历的非递归版本。 &#x1f3e0; 前序遍历 要迭代非递归实现二叉树的前序遍历&#xff0c;首先还…

【Android】MotionLayout实现动画效果

【Android】MotionLayout实现开场动画 在移动应用开发中&#xff0c;动画不仅仅是美化界面的工具&#xff0c;它更是提升用户体验的关键手段。Android 平台一直以来都提供了丰富的动画框架&#xff0c;但随着应用复杂性的增加&#xff0c;开发者对动画的需求也变得更加复杂和多…

如何通过WinRAR软件有效禁止RAR压缩包内文件的修改

RAR压缩包作为一种广泛使用的文件格式&#xff0c;凭借其高压缩比和强大的功能&#xff0c;成为了许多用户保存和传输文件的首选。然而&#xff0c;在某些情况下&#xff0c;我们可能希望确保RAR压缩包内的文件不被随意修改或删除&#xff0c;以维护文件的安全性和完整性。本文…

【网络】数据链路层-MAC帧

数据链路层-以太网与ARP协议 文章目录 1.数据链路层2.以太网2.1什么是以太网2.2MAC帧格式 3.ARP协议3.1为什么有ARP协议&#xff1f;3.2ARP的定位3.3ARP协议工作流程3.4ARP数据格式 4.RARP协议 1.数据链路层 数据链路层是网络协议栈中最底层的内容&#xff0c;而在之前对其他…

恶劣天气下的目标检测新突破:多尺度退化建模与特征融合策略

更多优质内容&#xff0c;请关注公众号&#xff1a;智驾机器人技术前线 1.论文信息 论文标题&#xff1a;Degradation Modeling for Restoration-enhanced Object Detection in Adverse Weather Scenes 作者&#xff1a;Xiaofeng Wang, Xiao Liu, Hong Yang, Zhengyong Wang, …

阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读 ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人&#xff0c;以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式&#xff1a;RLHF (Reinforcement Learning from Human Feedback)&#xff0c;即以强化学习…

PTA L1-028 判断素数

L1-028 判断素数&#xff08;10分&#xff09; 本题的目标很简单&#xff0c;就是判断一个给定的正整数是否素数。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤ 10&#xff09;&#xff0c;随后N行&#xff0c;每行给出一个小于的需要判断的正整数。 …

利用clip模型实现text2draw

参考论文 实践 有数据增强的代码 import math import collections import CLIP_.clip as clip import torch import torch.nn as nn from torchvision import models, transforms import numpy as np import webp from PIL import Image import skimage import torchvision …

滚柱导轨:数控机床高效运行的驱动力

机床制造者最关心的莫过于机床的精度&#xff0c;刚性和使用寿命&#xff0c;对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础&#xff0c;各种类型的机床工作部件&#xff0c;都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形…

Python进阶04-网络编程

零、文章目录 Python进阶04-网络编程 1、计算机网络 网络相关知识请参考计算机网络详解 &#xff08;1&#xff09;IP地址的概念 IP 地址就是标识网络中设备的一个地址&#xff0c;好比现实生活中的家庭地址。 &#xff08;2&#xff09;IP地址的表现形式 IP 地址分为两类…

【Python Web开发】Flask+HTML学习笔记

目录 Flask框架一、安装flask库二、运行一个网页三、库函数及变量 HTML标签语言一、基本格式二、标签2.1 块级标签2.1.1 标题2.1.2 div2.1.3 图片2.1.4 列表2.1.5 表格 2.2 行内标签2.2.1 span2.2.2 超链接2.2.3 输入 2.3 其他标签2.3.1 提交表单 Flask框架 一、安装flask库 …

探索Unity与C#的无限潜能:从新手到高手的编程之旅

在数字创意与技术创新交织的今天&#xff0c;Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口&#xff0c;成为了无数开发者心中的首选。而C#&#xff0c;作为Unity的官方脚本语言&#xff0c;更是以其面向对象的特性和丰富的库支持&#xff0c;为游戏开发注入了无限可能…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

【JAVA入门】Day28 - 数据结构

【JAVA入门】Day28 - 数据结构 文章目录 【JAVA入门】Day28 - 数据结构一、栈二、队列三、数组3.1 ArrayList 四、链表4.1 LinkedList 五、二叉树5.1 二叉查找树5.2 二叉树的遍历方式5.3 平衡二叉树5.4 平衡二叉树的旋转5.5 平衡二叉树需要旋转的几种情况 六、红黑树6.1 红黑规…

永成防回水防回气装置煤矿毫不犹豫选择

永成防回水防回气装置煤矿毫不犹豫选择&#xff0c;不敢说我们有多好&#xff0c;我们只把简单的事做好&#xff0c;用心服务&#xff0c;因为品质&#xff0c;所以信任。因为信任&#xff0c;所以值得选择。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、…

3_1_PID控制原理

自从计算机进入控制领域以来&#xff0c;用数字计算机代替模拟计算机调节器组成计算机控制系统&#xff0c;不仅可以用软件实现PID控制算法&#xff0c;而且可以利用计算机的逻辑功能&#xff0c;使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…

YOLOv9改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…