Meta祭出三篇最详尽Llama微调指南!千字长文,0基础小白必备

news2024/11/15 15:34:54

如何使用特定领域数据微调LLM,如何确定微调适配自己的用例,以及如何管理良好训练数据集的经验法则。

接下来,直接进入正题。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

01

适配大模型

预训练

预训练是指,使用数万亿个token数据,从头开始训练LLM的过程,通常使用自监督算法进行训练。

最常见的情况是,训练通过自回归预测下一个token(也称为因果语言建模)。

预训练通常需要数千个GPU小时(105-107个),并分布在多个GPU上进行。

预训练的输出模型称为「基础模型」。

继续预训练

继续预训练(也称为第二阶段预训练)将使用全新的、未见过的领域数据进一步训练基础模型。

这里,同样使用与初始预训练相同的自监督算法。

通常会涉及所有模型权重,并将一部分原始数据与新数据混合。

微调

微调是以监督方式使用带注释的数据,或使用基于强化学习的技术,来适配预训练语言模型的过程。

与预训练相比,微调有两个主要区别:

- 在包含正确标签/答案/偏好的注释数据集上进行监督训练,而不是自监督训练

- 需要较少的token(数千或数百万,而不是预训练中需要的数十亿或数万亿),其主要目的是提高能力,如指令遵循、人类对齐、任务执行等。

而要了解微调的现状,可以从两个方面入手:参数变化的百分比和微调后新增的能力。

更改的参数百分比

根据更改的参数量,有两类算法:

- 全面微调:顾名思义,这包括更改模型的所有参数,包括在XLMR和BERT(100-300M参数)等小模型上所做的传统微调,以及对Llama 2、GPT3(1B+参数)等大模型上的微调。

- 参数高效微调(PEFT):PEFT算法只微调少量额外参数,或更新预训练参数的子集,通常是总参数的1%-6%,而不是对所有LLM权重进行离线微调。

基础模型新增的能力

微调的目的是为了向预训练的模型添加功能,比如指令遵循、人类对齐等。

聊天微调Llama 2,就是一个具有附加指令遵循和对齐能力的微调模型的例子。

检索增强生成(RAG)

企业还可以通过添加特定领域的知识库来适配LLM,RAG是典型的「搜索驱动的LLM文本生成」。

RAG于2020年推出,它使用动态提示上下文,通过用户问题检索并注入LLM提示,以引导其使用检索到的内容,而不是预训练的知识。

Chat LangChain是由RAG支持的、在Lang Chain文档上流行的Q/A聊天机器人。

上下文学习(ICL)

对于ICL,通过在提示符中放置原型示例来适配LLM。多项研究表明,「举一反三」是有效的。这些示例可以包含不同类型的信息:

- 仅输入和输出文本,也就是少样本学习

- 推理追踪:添加中间推理步骤,可参阅思维链(COT)提示

- 计划和反思追踪:添加信息,教LLM计划和反思其解决问题的策略,可参阅ReACT

02

选择正确的适配方法

要决定上述哪种方法适合特定应用,你应该考虑各种因素:所追求任务所需的模型能力、训练成本、推理成本、数据集类型等。

下面的流程图总结了一些建议,可以帮助你选择合适的LLM适配方法。

❌ 预训练

预训练是LLM训练的重要组成部分,它使用token预测变量作为损失函数。自监督算法,使得大量数据训练成为可能。

例如,Llama 2接受了2万亿token的训练。这需要大量的计算基础设施:Llama 2 70B需要1,720,320个GPU小时。

因此,对于资源有限的团队,Meta不建议将预训练作为LLM适配的可行方法。

在预训练计算成本很高的情况下,更新预预训练好的模型权重,可能是一种有效的方法,来适配特定任务。

不过,任何更新预训练模型权重的方法,都容易出现一种「灾难性遗忘」的现象。

比如,此前一项研究显示,在医疗领域微调训练后的模型,在遵循指令和常见问答任务上的性能出现下降。

论文地址:https://arxiv.org/pdf/2009.03300

还有很多研究可以佐证,通过预训练获得的通用知识,在后续训练过程中可能会被遗忘。

❌ 继续预训练

鉴于灾难性的遗忘,最近的研究表明,继续预训练(CPT)可以导致模型性能的进一步提高,而计算成本只是预训练的一小部分。

对于需要LLM获得新的转换技能的任务,CPT可能是有益的。

有研究报告显示,继续预训练成功地增加了多种语言能力。

但CPT成本极高,需要大量的数据和计算资源。

比如,PYTHIA套件经历了第二阶段的预训练,最终得到了FinPYTHIA-6.9B。该模型专为金融数据设计的,使用240亿token的数据集,进行了18天的继续预训练。

此外,CPT也容易导致灾难性的遗忘。

因此,对于资源有限的团队,Meta同样不建议将继续预训练训作为LLM适配的可行方法。

总而言之,在预训练和持续预训练中,使用自监督算法和未加注释的数据集,微调LLM是资源和成本密集型的,不建议将其作为一种可行的办法。

✅ 全参微调和参数高效微调(PEFT)

与使用未注释的数据集进行预训相比,使用较小的带注释的数据集进行微调,是一种更具成本效益的方法。

而且,微调后模型被证明在法律、医疗或金融等专业领域的广泛的应用中,实现了SOTA。

微调,特别是参数高效微调,只需要预训练/继续预训练所需计算资源的一小部分。

因此,对于资源有限的团队来说,这是一个可行的方法来适配LLM。

✅ 检索增强生成(RAG)

RAG是另一种流行的LLM适配方法。

如果你的应用程序需要从动态知识库(例如QA机器人)中提取,RAG可能是一个很好的解决方案。

RAG的系统的复杂性,主要在于检索引擎的实现。

这种系统的推理成本可能会更高,因为输入提示包含了检索到的文档,而大多数服务提供商采用按token计费的模式。

✅ 上下文学习(ICL)

这是适配LLM最具成本效益的方式。

ICL不需要任何额外的训练数据或计算资源,使其成为一种具有成本效益的方法。然而,与RAG类似,随着推理时处理更多的token,推理的成本和延迟可能会增加。

总之,创建一个基于LLM的系统是迭代的,上面的流程图概述了这一迭代过程,并为LLM适配战略奠定了坚实的基础。

03

微调还是不微调?

在第二部分中,Meta又谈了谈什么情况下,需要微调。

在大模型兴起之前,微调通常用于参数比较少的模型(100M – 300M)。

而且,最先进领域应用程序,也是使用监督微调(SFT)构建的,即使用自己专业领域和下有任务的注释数据,进一步训练预训练的模型。

然而,随着更大参数模型的出现(>1B),微调的问题变得微妙了起来。

最重要的是,大模型需要更大的资源和商业硬件来进行微调。

下表1列出了三种情况下,微调Llama 2 7B和Llama 2 13B模型的峰值GPU内存使用量。

你可能会注意到,QLoRA等算法使得利用有限资源,对大模型进行微调变得更加容易。

例如,表1显示了Llama 2 7B上三种微调模式(全面微调、LORA和QLoRA)的峰值GPU内存。

在Llama 1中,由于参数高效微调(PEFT)或量化,内存也有类似的减少。

除计算资源外,灾难性遗忘(详见本系列第一部分)也是全参数微调的常见隐患。

PEFT技术旨在通过对少量参数进行训练来解决这些缺陷。

微调可能有益的原型

研究人员将以下场景确定为可从微调中受益的常见用例:

- 语气、风格、形式定制:使用案例可能会寻求反映特定角色或服务特定受众的LLM。

通过使用定制数据集对LLM进行微调,可以塑造聊天机器人的响应,使其更符合受众的特定需求或预期的体验。

另外,研究者可能还希望它能以特定的方式组织输出,例如,JSON、YAML或Markdown格式的输出。

- 提高精度并处理边缘情况:微调可以用于纠正幻觉或错误,这些错误很难通过prompt和上下文学习来纠正。

它还可以增强模型执行新技能或任务的能力,这些技能或任务很难在提示中表达。

这个过程可以帮助纠正模型没有遵循复杂提示的错误,并提高其产生所需输出的可靠性。

以下是两个案例:

- Phi-2对金融数据情绪分析准确率,从34%提高到85%。

- 仅用100个示例,ChatGPT对Reddit评论情绪分析的准确率从48%提高到73%。

通常来说,对于较小的初始精度(<50%),微调是一个巨大的障碍,需要用几百个示例。

- 处理代表性不足的领域:尽管LLM接受了大量通用数据的训练,但它们可能并不总是精通每一个特定领域的细微差别的行话、术语或具体情况。

对于不同的领域,如法律、医疗或金融,微调已被证明有助于提高下游任务的准确性。

以下是两个案例:

- 正如本文中指出的,患者的病历包含高度敏感的数据,这些数据通常不会在公共领域中找到。因此,基于LLM的病历摘要系统需要进行微调。

- 对于印地语等代表性较少的语言,使用PEFT进行微调有助于完成这些语言的所有任务。

- 降低成本:微调可以将较大参数模型(如Llama 2 70B/GPT-4)中的技能,提炼成小模型(如Llama 2 7B)中的技能,从而在不影响质量的情况下降低成本和延迟。

此外,微调减少了对冗长或特定提示的需要,从而节省了象征性成本并进一步降低了成本。

- 新的任务/能力:通常,新的能力可以通过微调来实现。以下是三个案例:

1 微调LLM,以便更好地利用特定检索器的上下文,或完全忽略它

2 微调LLM「法官」,以评估其他LLM的指标,如接地性、合规性或有用性

3 微调LLM以增加上下文窗口

与其他领域适配技术的比较

微调与上文学习(少样本)

上下文学习(ICL)是提高基于LLM的系统性能的有效方法。

使用ICL时的常见注意事项包括:

- 随着需要展示的示例数量的增加,推理的成本和延迟也会增加。

- 随着例子越来越多,LLM忽略一些例子是很常见的。这意味着你可能需要一个基于RAG的系统,根据输入找到最相关的示例。

- LLM可以吐出提供给他们的知识作为例子。这一担忧在微调时也存在。

微调和RAG

普遍的共识是,当LLM基本性能不尽如人意时,可以先从RAG开始,衡量其性能,如果发现不足,再转向微调。

或者说,与微调相比,RAG可能更有优势。

然而,Meta认为这种范式过于简单化,因为在多种情况下,RAG不仅不是微调的替代方案,而且更像是微调的补充方案。

根据问题的特点,应该尝试一种方法,或者两种方法。

根据本文的框架,你可以提出以下问题,以确定微调或 RAG(或两者)是否适用:

- 你的应用程序需要外部知识吗?微调通常对注入新知识没什么帮助

- 你的应用程序是否需要自定义语气/行为/词汇或风格?对于这些类型的需求,微调通常是正确的方法。

- 你的应用程序对幻觉的容忍度如何?在抑制虚假和想象力编造至关重要的应用中,RAG系统提供内置机制,最大限度地减少幻觉。

- 有多少已标记的训练数据可用?

- 数据的静态/动态程度如何?如果问题需要访问动态数据语料库,微调可能不是正确的方法,因为对LLM的知识可能很快就会过时。

- LLM应用程序需要有多透明/可解释?RAG本身可以提供引用,这些引用对于解释LLM输出非常有用。

- 成本和复杂性:团队是否拥有构建搜索系统的专业知识或之前的微调经验?

- 您的应用程序中的任务种类有多少?

在大多数情况下,微调和RAG的混合解决方案,将产生最好的结果,问题就在于两者的成本、时间和额外的独立效益。

最后,微调中的探索,确实需要一个强大的数据收集和数据改进策略,Meta建议将其作为开始微调的前奏。

04

如何微调?

到了第三部分就步入真正关键的内容——如何去微调,先要关注数据集。

微调LLM可以说,是艺术和科学的结合,最佳做法仍在不断涌现。

在这部分,Meta将重点介绍微调的设计变量,并就资源受限的情况下,微调模型的最佳实践提供方向性指导。

全面微调与参数高效微调

在学术和实际应用中,当应用于新领域时,全面微调和PEFT都显示出下游性能的提升。

选择其中一种方法,可归结为可用计算量(GPU小时数和GPU内存)、目标下游任务以外的任务性能(学习和遗忘权衡)以及人工注释成本。

全面微调更容易出现两个问题:模型崩溃和灾难性遗忘。

一些早期的实证研究表明,与PEFT技术相比,全面微调更容易出现上述问题,但还需要做更多的研究。

PEFT技术本质上,是作为微调的自然正则化器。

PEFT通常需要相对较少的计算资源来训练下游模型,并且在数据集规模有限的资源受限场景下,更易于使用。

在某些情况下,全面微调在特定任务上表现更好,但代价往往是遗忘原始模型的一些能力。

在资源受限的情况下,PEFT可能会比全面微调提供更好的性能提升/成本比。

如果在资源受限的情况下,下游性能至关重要,那么全面微调将是最有效的。

无论在哪种情况下,关键是要牢记以下几个关键原则来创建高质量的数据集。

数据集管理

在各种文献的微调实验中,数据集对于获得微调的好处至关重要。

除了「更好的质量和更多的示例」之外,还有更多的细微差别,你可以明智地投资数据集收集,以在资源受限的微调实验中提高性能。

数据质量/数量

- 质量是最重要的:一个大趋势是质量比数量更重要。也就是说,拥有一小部分高质量的数据,比拥有一大批低质量的数据更好。

质量的关键原则是一致的注释,没有错误、没有错误标签的数据、有噪音的输入/输出,以及与总体相比具有代表性的分布。

在微调时,几千个精选的LIMA数据集示例,比50K机器生成的Llama数据集具有更好的性能。

OpenAI微调文档表明,即使是50-100个示例的数据集也可能产生影响。

- 更困难的语言任务需要更多数据:相对困难的任务,如文本生成和摘要,更难微调,比起更容易的任务,如分类和实体提取,需要更多数据。

「更难」可以指多个:输出中有更多的token,需要更高级别的人类能力,多个正确答案。

- 有效的高质量数据收集:由于数据收集成本较高,建议使用以下策略来获得更高的样本效率和成本

1 观察失效模式:观察先前机器学习能力失败的例子,并添加针对这些失效模式的样例。

2 人机协作:这是一种更经济的数据标注扩展方式。可以使用LLM自动生成基础回答,人类标注者可以基于此更快地进行标注。

数据多样性

简单来说,如果你用特定类型的回应过度训练模型,它会倾向于给出那种回应,即使不是最合适的答案。

这里的经验法则是,尽可能确保训练数据反映模型在现实世界中应该如何表现。

- 重复:无论是在微调还是预训练中,这都被发现是导致模型性能下降的原因。通过去重实现多样性,往往会提高性能指标。

- 输入多样性:通过改述来增加输入的多样性。

- 数据集多样性:当为更通用的下游任务微调时(例如,多语言适配),使用多样化的数据集已被证明,可以改善模型在遗忘原始能力和学习新能力之间的权衡。

- 标准化输出:移除输出中的空白和其他格式技巧被证明是有帮助的。如果你想要回答中有特定的语气,比如「服务台聊天机器人是…」,那么就为每个例子在数据集中添加这些内容。

基于LLM的数据管道

为了整理高质量、多样化的数据集,数据管道经常使用大语言模型来降低标注成本。

以下是实践中观察到的技术:

- 评估:用高质量数据集训练一个模型,然后用它来标注较大数据集,以筛选出高质量的样例。

- 生成:用高质量示例来引导大模型,并通过提示生成类似的高质量样例。合成数据集的最佳实践正在逐渐形成。

- 人机协作:使用大模型生成初始输出集,然后由人类通过编辑或选择偏好来提高质量。

调试数据集

- 评估数据集中的不良输出:如果模型在某些方面仍然表现不佳,添加直接向模型展示如何正确处理这些方面的训练示例。

如果你的模型存在语法、逻辑或风格问题,检查数据是否存在相同的问题。

例如,如果模型现在说「我会为你安排这个会议」(实际上它不应该这样做),看看现有的例子是否教导模型说它可以做一些它实际上不能做的新事情。

- 仔细检查正面/负面类别的平衡:如果数据中60%的助手回应说「我无法回答这个问题」,但在推理时只有5%的回应应该这样说,你可能会得到过多的拒绝回应。

- 全面性和一致性:确保你的训练示例包含回应所需的所有信息。

如果希望模型基于用户的个人特征来赞美用户,而训练示例中包含了助手对前面对话中没有出现的特征的赞美,模型可能会学会虚构信息。

确保所有的训练示例,都采用与推理时预期相同的格式,查看训练示例中的一致性和协调性。

总而言之,微调是大模型开发中的一个关键方面,需要在艺术和科学之间取得微妙的平衡。

数据集的质量和筛选,对微调的成功起着重要作用。

经过微调的小型LLM在特定任务上,往往表现优于更大的模型。

一旦决定进行微调,Llama微调指南提供了一个良好的起点。

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

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

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

相关文章

蓝牙信令测试(二)

本文BLE测试主要依据RF-PHY.TS.5.0.0协议,且仅包含了NOC(正常工作条件)的不需添加干扰的测试项目。EOC(极限工作条件)需要根据实际情况(温度范围、湿度范围以及电源类型等)而定,干扰信号需要信号发生器,在这里不再展开。 BLE支持三个物理层,如下图: 其中S=2代表2个…

pyro 教程和实例 支持贝叶斯神经网络实现 (pyro 1.8以上的)bnn Bayesian Neural Network pyro ,人工智能

Example: Bayesian Neural Network — NumPyro documentation https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/DL2/Bayesian_Neural_Networks/dl2_bnn_tut1_students_with_answers.html 注意&#xff0c;这些文档&#xff0c;也是有对应的版本的&…

记一次 .NET某实验室自动进样系统 崩溃分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友在微信上联系到我&#xff0c;说他们的程序在客户那边崩掉了&#xff0c;让我帮忙看下怎么回事&#xff0c;dump也拿到了&#xff0c;那就上手分析吧。 二&#xff1a;WinDbg 分析 1. 哪里的崩溃 既然是程序的崩溃&#xff0c…

《黑神话:悟空》中的黑科技及未来高端游戏展望

一、《黑神话&#xff1a;悟空》中的黑科技 1. 虚幻引擎5与次世代渲染技术 《黑神话&#xff1a;悟空》是首批采用虚幻引擎5&#xff08;Unreal Engine 5&#xff09;的游戏之一&#xff0c;虚幻引擎5代表了当前游戏引擎技术的顶尖水平。其核心技术“Nanite”和“Lumen”分别…

【学术英语】Unit3:Academic Writing(学术写作)

文章目录 一、摘要1.1 摘要简介1.2 摘要的两种类型1.3 写摘要的技巧1.4 摘要的关键词1.5 例子1.5.1 例子11.5.2 例子2 二、注释和致谢2.1 注释的格式2.1.1 Book2.1.2 论文2.1.3 例子 2.2 致谢的格式 三、书目选编 一、摘要 1.1 摘要简介 摘要对学术写作极其重要和有用&#x…

健康管理小程序怎么做 健康管理小程序系统开发制作方法

很多老板想要做一个自己公司的健康管理小程序&#xff0c;但是不知道该怎么做&#xff0c;本次瀚林就为大家详细介绍一下各种中心小程序系统的开发制作方法为大家做参考。 目前市面上的健康管理有很多类型例如常见的健康管理中心、健康服务平台、健康生活馆、健康科技管家、健康…

mysql定位慢查询和分析

1. 使用工具&#xff1f; 运维工具&#xff1a;skywalking&#xff0c;可以监测出哪个接口&#xff0c;然后找到对应的sql。2. 在调试阶段使用mysql配置&#xff1f; 确保慢查询日志功能已经开启。设置慢查询阈值&#xff08;可选&#xff09;。分析慢查询日志。 在调试阶段中…

不使用 JS 纯 CSS 获取屏幕宽高

在现代前端开发中&#xff0c;获取屏幕的宽度和高度通常依赖于 JavaScript。然而现代 CSS 也可以获取到屏幕的宽高&#xff0c;通过自定义属性&#xff08;CSS Variables&#xff09;和一些数学函数来实现这一目标。本文将详细解析如何使用 CSS 的 property 规则和一些数学运算…

ToB福音?专业场景数据生成的“大杀器”接连发布

Meta官方发布的LLaMA3.1-405B的各项得分 ©作者|格林 来源|神州问学 最近&#xff0c;AI领域掀起了一股数据合成的热潮&#xff0c;各大厂商最近推出的模型都或多或少有数据合成的影子。英伟达的Nemotron-4-340B-Instruct、微软的Orca-3&#xff0c;以及Meta的Meta-Llama…

三维尺寸公差分析软件哪个最好用?推荐上海棣拓自研软件DTAS

软件简介 国产自研-3D公差分析软件 DTAS 3D (Dimensional Tolerance Analysis System 3D)基于蒙特卡洛原理&#xff0c;按照产品的公差及装配关系进行建模&#xff0c;然后进行解析、仿真计算&#xff0c;最终预测产品设计是否能够满足其关键尺寸要求&#xff0c;同时预测产品…

【Linux操作系统】进程间通信(2)——共享内存

目录 一、共享内存 一、共享内存 共享内存的原理&#xff1a; 进程A把它的数据在地址空间中通过页表映射到物理内存中&#xff0c;进程B通过页表获取物理内存的物理地址&#xff0c;得到数据。 共享内存在物理内存可能有多个&#xff0c;那么两个进程如何确定找到的是同一个共…

深入了解搜索引擎蜘蛛:从定义到最新技术应用

撰写一篇关于搜索引擎蜘蛛的详细文章&#xff0c;需涵盖从基础概念到未来趋势的多个方面。以下是根据您提供的大纲撰写的长篇文章&#xff0c;适合用于了解搜索引擎蜘蛛的重要性及其在现代互联网中的作用。 1. 引言 在互联网的浩瀚世界中&#xff0c;搜索引擎就像是庞大的图书…

Ubuntu 22.04中MySQL 8 设置忽略大小写

Ubuntu 22.04中MySQL 8 设置忽略大小写 一、解决完整流程 //根据官网内容说的大概意思就是不能安装完了修改忽略大小写了&#xff0c;只能在初始化的时候做修改。我用的版本是8.0.39//更新软件包 1、sudo apt update //安装MySQL 如果安装了可以忽略这个步骤 2、sudo apt ins…

【网络】子网掩码

1.IP地址的表示形式 事实上在计算机内部IP地址是32位比特位的数字&#xff0c;为了方便表示&#xff0c;就会采用点分十进制的形式 上面这个是万变不离其中的。 本节重点介绍 IPv4 地址&#xff0c;该地址以四个十进制数字&#xff08;以句点分隔&#xff09;的形式表示&#…

spring security 自定义图形验证码(web/前后端分离)

一、准备工作 1.1 导入pom 所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><!-- <version>2.7.18</version>-->&l…

代码随想录算法训练营第13天 |二叉树的学习

目录 二叉树 理论基础 二叉树的分类 1. 满二叉树 (Full Binary Tree) 2. 完全二叉树 (Complete Binary Tree) 3. 平衡二叉树 (Balanced Binary Tree) 5. 二叉搜索树 (Binary Search Tree, BST) 二叉树的存储 1. 链式存储 (Linked Representation) 2. 顺序存储 (Sequent…

废酸处理业务

废酸处理是指将工业生产过程中产生的废酸进行有效处理&#xff0c;以实现其回收利用或安全排放的过程。这一过程对于环境保护和资源节约具有重要意义。以下是对废酸处理的详细介绍&#xff1a; 一、废酸处理的必要性 废酸中含有大量的有害物质&#xff0c;如重金属离子、有机物…

SAP ERP与长城汽车EDI业务集成案例(SAP CPI平台)

一、项目背景 某智能座舱公司是国内领先的智能座舱领域科技公司&#xff0c;致力于成为智能网联行业变革的领导者和推动者&#xff0c;聚焦整车域控制器产品、智能网联软件产品和运营服务产品&#xff1b; 已建成首条先进的数智化域控制器生产线&#xff0c;为客户提供最优…

零基础学PLC的指令-沿指令(2)

扫描操作数的信号上升沿&#xff1a; 在触点分配的 "IN" 位上检测到正跳变&#xff08;0->1&#xff09;时&#xff0c;该触点的状态为 TRUE。该触点逻辑状态随后与能流输入状态组合以设置能流输出状态。P 触点可以放置在程序段中除分支结尾外的任何位置。 扫描…

【VUE入门级温故知新】一文向您详细介绍~组件注册(选项式API)

大家好&#xff0c;我是DX3906 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘大前端领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; 前面和大家分享了《如何从零开始创建一个 Vue 应用》 《VUE模板语法(超详细讲解)》 《一文向您详细介绍~Vu…