大规模语言模型中新的思想和方法

大规模语言模型的发展引入了多项创新的思想和方法,这些创新对实际效果产生了深远的影响:

1. 深度神经网络架构创新

       如Transformer模型的引入,利用自注意力机制解决了长序列输入的处理难题,使得模型能够更有效地捕获语言中的长距离依赖关系,显著提高了语言模型在理解和生成文本时的性能。

       Transformer模型作为深度学习领域的一次重大革新,由Google在2017年提出的这篇开创性论文《Attention is All You Need》中首次详细介绍。相较于传统的循环神经网络(RNN)和卷积神经网络(CNN),Transformer彻底摒弃了顺序处理和循环结构,转而依赖于自注意力机制来捕捉输入序列中任意两个位置之间的相互依赖关系。

       自注意力机制的核心在于,它允许模型在处理当前词元时,可以同时考虑句子中所有其他词元的信息,并根据不同词元的相关程度动态分配注意力权重,从而高效地提取出长距离依赖特征。这样,Transformer不仅解决了RNN在处理长序列时可能出现的梯度消失和爆炸问题,还大幅提升了计算效率,尤其是在并行计算方面具有明显优势。

       因此,在语言建模、机器翻译、问答系统、摘要生成等众多NLP任务上,Transformer及其变体都展现出了优异的表现,推动了整个领域的快速发展。随后,诸如BERT、GPT、Turing NLG以及阿里云的通义千问等大规模预训练模型,均是在Transformer架构基础上构建和发展起来的,进一步验证了这一创新架构的广泛影响力和实用性。

2. 预训练与微调(Pre-training and Fine-tuning)

       预训练阶段,模型在大规模无标注文本数据上学习语言的通用表示,如BERT、GPT系列模型采用的自回归或双向预训练任务。

       在预训练阶段,像BERT(Bidirectional Encoder Representations from Transformers,双向Transformer编码器表示)和GPT系列(Generative Pre-training Transformer,生成式预训练Transformer)这样的深度学习模型,会首先在海量无标注的文本数据上进行自我学习,目标是捕捉和学习语言的通用表示结构。

       对于BERT而言,其预训练任务主要包括两个核心部分:

  1. 遮蔽语言模型(Masked Language Model, MLM):随机遮蔽输入序列中的部分词汇,并要求模型基于上下文预测被遮蔽的词,这一过程促使模型理解词语之间的依赖关系并学习到单词在句子中的语义和语法含义。

  2. 下一句预测(Next Sentence Prediction, NSP):在处理连续的两段文本时,模型需要判断第二段是否紧跟在第一段之后,这有助于模型理解文本篇章间的连贯性和逻辑联系。

      而对于GPT系列模型,其预训练任务主要集中在自回归语言建模(Autoregressive Language Modeling)上,即模型根据前文内容预测下一个出现的词,逐词递进地生成整个句子或段落。通过这种方式,GPT模型能够学习到自然语言的概率分布,掌握语言的流畅性和上下文依赖性。

       这些预训练任务使模型在大规模无标注数据集上习得了丰富的语言知识,构建出对各种语言结构的高质量抽象表征,为后续针对特定任务的微调或直接使用(如在零样本或少样本情况下)奠定了坚实的基础。

       微调阶段,针对具体下游任务,使用有标注数据对预训练模型进行调整优化,使其适应特定任务的需求。

       在微调阶段,经过预训练得到的语言模型不再仅仅是对一般语言结构的学习,而是针对具体的下游自然语言处理(NLP)任务进行定制化训练。例如,在预训练完成后,BERT或GPT等模型可以用于文本分类、命名实体识别、问答系统、情感分析等多种不同任务。

       在这个阶段,研究人员或工程师会使用与特定任务相关的有标注数据集来进一步调整模型的参数。例如,在文本分类任务中,模型可能需要预测一段文本属于哪个类别;在命名实体识别任务中,则需要识别出文本中的人名、地名或其他专有名词。微调的过程就是利用有标签的数据及其对应的预期输出来更新模型权重,使模型学会关注与该任务相关的特征,并优化其在特定任务上的性能。

       总之,微调阶段的目标是充分利用预训练模型已经学到的通用语言表示能力,并结合具体任务的标注数据,对其进行精调,从而使模型具备解决实际问题的能力。这个过程通常比从头开始训练一个新模型更为高效,因为预训练模型已经具备了很强的泛化能力和语言理解基础。

3.提示学习(Prompt Learning)

       将待解决的任务包装成自然语言提示的形式,引导模型在预训练时学习到的知识上进行推理和生成,无需重新训练或微调整个模型,提高了模型的灵活性和泛化能力。

       将待解决的任务转化为自然语言提示的形式,意味着我们将具体任务的要求或者问题表述为一句或多句人类可理解的语言指令,从而引导经过预训练的大型语言模型(如GPT系列、BERT等)运用其已有的知识储备进行推理和生成答案。这种方法利用了模型在大规模无标注文本数据上预训练所获得的广泛知识和语言理解能力,使得模型在面对新任务时,无需针对每个特定任务从头开始训练或微调所有参数,仅通过理解和响应自然语言提示即可解决问题。

这样做的优势在于:

  1. 灵活性增强:由于模型能依据不同的自然语言提示完成多样化任务,它不再局限于预先设定好的、固定的几个任务类别,而是可以应对更多样化的场景。

  2. 泛化性能提升:模型能够在一定程度上跨任务迁移知识,即使对于未在训练集中见过的具体问题,只要问题表述清晰且与模型预训练时接触过的语言模式相似,模型也可能给出合理解答。

  3. 资源高效利用:避免了为每一种新任务收集大量标注数据和耗费大量计算资源进行模型微调的过程,从而大大提升了效率。

       这种技术理念在近期发展迅速的大规模语言模型中得到了广泛应用,比如OpenAI的GPT-3及其后续版本,以及阿里云的通义千问等,它们都展现了强大的零样本(zero-shot)或少样本(few-shot)学习能力。

4.指令微调(Instruction Tuning or In-context Learning)

       对模型进行指令微调,使其更好地理解并遵循人类给出的具体指令,以便在新的任务上表现更好,无需显式的训练数据。

        指令微调(Instruction Tuning)是针对大规模预训练语言模型的一种优化手段,它的目的是为了让模型更好地理解和遵循人类以自然语言形式给出的具体指令。在预训练阶段,模型已经学会了通用的语言表示和理解能力,但未必能完美适应每一个具体任务的指令格式和需求。

       在指令微调过程中,通常使用少量或甚至不需要额外的有标注任务数据,而是直接利用精心设计的指令集来指导模型。这些指令集包含了一系列针对目标任务的自然语言描述,例如,“根据这段描述生成一份总结”、“解释这个词在上下文中的含义”等。

       通过指令微调,模型能够学习到如何根据给定的指令调整其输出,使其更加符合人类的期望和特定任务的需求。这样一来,即便在遇到全新任务或没有显式训练数据的情况下,经过微调的模型也能根据指令灵活地进行推理和生成,从而展现出更强的任务适应能力和泛化能力。这种方法不仅提高了模型的实用性,也在一定程度上降低了对大规模标注数据集的依赖。

5.大规模参数与稀疏激活(Large Scale & Sparse Activation)

       增加模型参数数量可以提升模型的表达能力和学习复杂模式的能力,但同时引入稀疏激活机制,如稀疏注意力或动态路由等,可以降低计算复杂度和资源消耗。

       大规模参数与稀疏激活是现代深度学习尤其是大语言模型研究中的两个关键概念:

  1. 大规模参数: 大规模参数通常指深度学习模型中的参数数量极其庞大,如GPT-3等模型拥有上百亿甚至上千亿的参数。更多的参数意味着模型有更强的表达能力和学习复杂模式的潜能,能够更好地模拟和学习自然语言的丰富性和复杂性。然而,大规模参数也带来了计算成本高昂、存储需求增大以及过拟合风险增加等问题。

  2. 稀疏激活: 稀疏激活是一种优化技术,它在模型内部实现了激活函数的输出仅有一小部分是非零值,大部分为零,从而减少了不必要的计算量。在大规模语言模型中,稀疏激活可以体现在注意力机制中,如稀疏注意力机制只关注输入序列中一小部分重要的位置,而不是对所有位置进行密集计算,这样可以显著降低计算复杂度和资源消耗。

       将这两个概念结合起来,研究者努力寻求在保持模型强大表达能力的同时,通过稀疏激活等技术优化模型效率,使得大规模参数模型在实际应用中更加可行和高效。例如,研究者探索如何在保持模型高性能的前提下,通过设计新型稀疏结构、动态路由机制等方式,使得模型在处理长文本或大规模数据时,既能利用大量参数学习复杂的语言结构,又能避免不必要的计算开销。

6.多模态学习(Multimodal Learning)

       如DALL·E、通义万相等模型,不仅处理文本信息,还能够理解并生成图像等其他类型的数据,实现跨模态的理解和生成,扩展了模型的应用范围。

       多模态学习(Multimodal Learning)是一种机器学习方法,它专注于理解和利用多种模态(如文本、图像、音频、视频等)的数据来提高模型的表现和泛化能力。这种学习方式模拟人类感知和认知过程,可以综合不同来源的信息,更全面、准确地理解复杂环境下的信息。

       DALL·E是由OpenAI开发的一个多模态模型,它可以理解文本描述,并基于这些描述创造性地生成高质量的图像输出。这代表了模型能够跨越文本和图像两种模态进行理解和生成,实现了所谓的“文本到图像”的转换。

       通义万相则是阿里云研发的一种基于AI的文本生成图像技术,用户输入文本描述,系统就能生成相应的图像内容,这也是一个多模态交互的例子,展现了模型如何通过学习文本和图像间的内在联系,实现跨模态的智能转换。

       通过多模态学习,模型能够整合不同类型的输入信号,提升在多个领域的应用,比如内容创作、虚拟现实、人机交互、智能检索、自动驾驶等,极大地拓宽了人工智能的应用边界和创新潜力。

7.连续学习和在线学习(Continuous Learning & Online Learning)

       允许模型通过持续学习新的数据,更新自身知识库,以适应现实世界中信息的快速变化,提高模型的时效性和可靠性。

       连续学习(Continuous Learning)和在线学习(Online Learning)是机器学习领域中的两种重要学习策略,特别适用于处理现实世界中数据不断变化和更新的场景。在大规模语言模型的背景下,这两种学习方法显得尤为重要:

  • 连续学习: 连续学习强调模型在学习新知识的同时,应尽量保留对旧知识的记忆,避免“灾难性遗忘”(Catastrophic Forgetting)。这意味着,当大规模语言模型接触到新的文本数据时,不仅需要学习并理解这些新数据中的信息,还要能够在面对以前学习过的任务时保持原有的性能,即维持模型的长期稳定性。

  • 在线学习: 在线学习则是指模型能够实时接收并学习新的数据样本,每次学习一个新的样本后,立即调整模型参数以优化模型表现。在大规模语言模型中,通过在线学习,模型能够持续不断地从实时的、源源不断的文本流中获取信息,实时更新其语言知识库,以适应语言使用的最新趋势和变化。

       结合这两者,大规模语言模型能够在不停止服务或频繁重训的前提下,通过持续地增量学习,不断改进和扩展其对语言的理解能力,从而更好地服务于搜索、问答、文档生成、聊天机器人等多种自然语言处理任务,并在实际应用中体现出更高的时效性和可靠性。同时,这也对模型的架构设计、优化方法以及防止过拟合和灾难性遗忘的策略提出了更高要求。

8.无监督学习

        利用大量的无标签文本数据进行自我监督学习,设计诸如掩码语言模型(MLM,如BERT)或自回归语言模型(如GPT)等目标函数,使模型在预测缺失部分的过程中习得丰富的语言结构和语义信息。

       无监督学习是一种机器学习范式,在训练过程中不需要人工标注的标签数据。对于自然语言处理领域,无监督学习的一大突破是利用大规模无标签文本数据进行自我监督学习。

       掩码语言模型(Masked Language Model, MLM)是一个典型的例子,如BERT(Bidirectional Encoder Representations from Transformers)采用的就是这一策略。在预训练阶段,BERT会对输入文本中的某些词随机遮蔽(mask),然后要求模型根据上下文预测被遮蔽的词,这样模型在预测过程中不得不理解整个句子的全局语境,从而学到丰富的语言结构和词汇间的关联关系。

       另一种无监督学习方法是自回归语言模型(Autoregressive Language Model),例如GPT(Generative Pre-training Transformer)系列模型。在自回归模型中,模型按顺序预测下一个词,即当前时刻的预测依赖于前一时刻预测的结果,通过不断迭代此过程,模型在逐字预测的过程中逐渐掌握语言规律和上下文依赖性。

       总之,无论是掩码语言模型还是自回归语言模型,它们都在无需直接依赖人工标注数据的前提下,通过预测任务的方式从大量无标签文本中提取出深层次的语言知识和模式,进而显著提升了模型在各种下游自然语言处理任务上的性能。

9.对比学习与蒸馏

       对比学习是一种让模型学习如何区分不同样本之间差异的学习方式,在大规模模型训练中也有所应用。同时,知识蒸馏技术被用来压缩大型模型,使其能在有限资源下部署,或者提升小型模型的性能。

       对比学习(Contrastive Learning)在大规模模型训练中是一种常用的学习策略,它不是通过明确的标签信息进行学习,而是通过构建正负样本对,使模型学习如何区分相似样本和不相似样本。在自然语言处理中,对比学习可以用于文本表示学习,模型通过学习将同一文本的不同变体(如同一篇文章的不同表述)拉近,同时将无关文本样本推开,从而捕捉文本的内在语义结构。

        知识蒸馏(Knowledge Distillation)则是另一种优化技术,常用于模型压缩和性能提升。在大规模语言模型中,知识蒸馏通常是指将大型预训练模型(教师模型)的知识转移到一个相对较小的模型(学生模型)中。教师模型已经通过大量数据训练获得了丰富的语言知识,学生模型通过模仿教师模型的输出(如 logits 或软化概率分布)学习如何解决同样的问题。这样做可以在保持较高性能的同时,显著减少模型的参数量和计算复杂度,使得模型更适合于资源有限的设备上部署。

       结合对比学习和知识蒸馏,一方面可以利用对比学习提高模型对不同文本样本的区分能力,另一方面,通过知识蒸馏可以将这种学习到的表示能力有效地传递给小型模型,从而实现模型的轻量化和性能优化。

10.模型压缩与量化(Model Compression & Quantization)

       尽管大规模语言模型效果优异,但其资源占用大。因此,研究者致力于模型压缩技术,如剪枝、量化、知识蒸馏等,以减小模型体积,提高部署效率。

        模型压缩与量化确实是大规模语言模型落地应用中至关重要的技术手段,主要目的是解决大型模型在部署时面临的计算资源、存储空间和能源消耗等方面的挑战。

  1. 剪枝(Pruning):剪枝是指去除模型中不那么重要的权重,减少模型的参数数量。这可以通过识别并移除对模型输出影响较小的神经元或连接来进行。例如,可以基于权重绝对值大小、梯度贡献或者其他准则来决定哪些权重可以被裁剪掉。

  2. 量化(Quantization):量化技术则是将模型中的浮点数参数转换为低比特整数,比如将32位浮点数转换为8位或更低的整数格式。通过量化,模型的存储空间显著减小,同时在某些硬件平台上运行时,可以利用专门针对低精度计算优化的硬件加速器,从而提升模型的推理速度并降低功耗。

  3. 知识蒸馏(Knowledge Distillation):知识蒸馏是一种将大型复杂模型(教师模型)的知识转移给小型简易模型(学生模型)的方法。通过让学生模型模仿教师模型的输出(如softmax层的预测概率分布),学生模型可以在保持相近性能的前提下大幅度减少参数数量。

       通过这些模型压缩技术,大规模语言模型不仅能够适应移动设备、嵌入式系统等资源有限的环境,而且能够实现在数据中心和云计算环境中的高效部署,从而在保证模型性能的同时,降低成本、节约能源,提高用户体验。

11.总结

       这些新的思想和方法不仅提升了大规模语言模型的性能,也拓展了它们在诸多领域如教育、医疗、金融、法律等的实际应用,大幅提升了AI系统的智能程度和实用价值。

       具体来说,在教育方面,新方法使得语言模型能够理解和生成高质量的教学内容,适应不同层次的学习需求,比如开发虚拟助教来实时指导学习,或者创建动态教材与学习资源,实现精准化、个性化的在线教育;同时也能通过自动评测和反馈机制,有效促进学生自主学习能力和批判性思维的发展。

       在医疗健康领域,优化的语言模型有助于医疗知识图谱构建,能高效地解读病历、诊断报告,辅助医生进行病情诊断和治疗决策,并且能在海量医学文献中挖掘潜在联系,推动科研进步。此外,还能应用于患者咨询问答系统,提供准确及时的医疗建议。

       金融行业的应用则包括利用强大的语言模型处理大量复杂的金融文本数据,进行实时新闻舆情分析、投资策略制定、信贷风险评估等任务,以及构建高效的智能客服系统,提升金融服务的质量和客户满意度。

       至于法律领域,高智能的语言模型能够快速研读、理解并引用大量的法律法规、判例文书等资料,协助律师完成繁琐的文档审阅工作,提供初步的法律咨询服务,甚至参与到智能合约的撰写与审核过程中,大大提高了法律服务的效率和精度。

       总的来说,这些新思想和方法深化了人工智能在各领域的渗透融合,使大规模语言模型得以更加广泛而深入地服务于社会经济生活各个方面,显著增强了AI技术的实用性与影响力。然而,随之而来的是对模型解释性、公平性、安全性和伦理问题的关注,这些挑战同样需要不断探索和解决。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年AI辅助研发:科技遇上创意,无限可能的绽放

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 随着人工智能技术的持续突破与深度融合,2024年AI辅助研发正以前所未有的速度和规模,引领着科技界和工业界…

加密 / MD5算法 /盐值

目录 加密的介绍 MD5算法 盐值 加密的介绍 加密介绍:在MySQL数据库中, 我们常常需要对密码, 身份证号, 手机号等敏感信息进行加密, 以保证数据的安全性。 如果使用明文存储, 当黑客入侵了数据库时, 就可以轻松获取到用户的相关信息, 从而对用户或者企业造成信息…

Java学习笔记------内部类

类的五大成员 属性、方法、构造方法、代码块、内部类 内部类 格式: public class Outer{//外部类 public class Inner{//内部类 } } public class Test{//外部其他类 public static void main(String[] args) } inner类表示的事物是Outer类的一部分&#xf…

ABB机器人信号关联Cross Connection的具体方法示例

ABB机器人信号关联Cross Connection的具体方法示例 如下图所示,点击打开菜单,然后点击控制面板进入, 如下图所示,找到配置,点击进入, 如下图所示,找到“Cross Connection” 信号关联,点击进入, 如下图所示,选中“Cross Connection”后,点击下方的“显示全部”, 如下…

DFT应用:计算线性卷积

目录 一、计算两个有限长序列的线性卷积示例 二、无限长序列和有限长序列的卷积(重叠相加法) 实验1:数据实验 实验2:纯净语音加混响(音效) 二、无限长序列和有限长序列的卷积(重叠保留法) 实验1:数据实验 三、小结 一、计算两个有限长序…

吴恩达机器学习笔记十五 什么是导数 计算图 大型神经网络案例

假设函数 J(w)w^2,当 w3 时, J(w)3*39 当我们给w增加一个很小的量时,观察J(w)如何变化。 例如 w30.001, 则J(w)9.006001,因此当w3且增加一个变化量 ε 时,J(w)将会增加 6ε&#x…

非线形优化 Matlab和Python (含01规划)

MATLAB:fmincon 在matlab中,一般使用fmincon来解决非线性优化问题 [x,fval,exitflag,output,lambda,grad,hessian]fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 一般使用: [x,fval,exitflag]fmincon(fun,x0,A,b,Aeq,beq,lb,ub,non…

RestTemplate解析响应数据中文字符出现Unicode编码问题解决和源码剖析

问题 基于上篇文章,开发过程中又遇到一个restTemplate问题: restTemplate请求接口返回响应数据为json时,解析其中的中文字符出现Unicode编码 测试 接口如下: 测试代码: 觉得很奇怪,我的restTemplate配置…

排序算法——梳理总结

✨冒泡 ✨选择 ✨插入  ✨标准写法  &#x1f3ad;不同写法 ✨希尔排序——标准写法 ✨快排 ✨归并 ✨堆排 ✨冒泡 void Bubble(vector<int>& nums) {// 冒泡排序只能先确定最右边的结果&#xff0c;不能先确定最左边的结果for (int i 0; i < nums.size(); i){…

Effective C++ 学习笔记 条款16 成对使用new和delete时要采取相同形式

以下动作有什么错&#xff1f; std::string *stringArray new std::string[100]; // ... delete stringArray;每件事看起来都井然有序&#xff0c;使用了new&#xff0c;也搭配了对应的delete。但还是有某样东西完全错误&#xff1a;你的程序行为未定义。至少&#xff0c;str…

自律篇001-养成自律的秘密武器1-目标规划表

&#x1f680;以前在某书上看到一些博主非常自律&#xff0c;比如每天5点多起床看书&#xff0c;或者每天坚持健身&#xff0c;直到练出马甲线&#xff0c;还有一边工作一边考研等等&#xff0c;自己也曾尝试过做一些目标规划&#xff0c;但结果都不尽人意。写计划的时候往往信…

阿里云k8s环境下,因slb限额导致的发布事故

一、背景 阿里云k8s容器&#xff0c;在发布java应用程序的时候&#xff0c;客户端访问出现500错误。 后端服务是健康且可用的&#xff0c;网关层大量500错误请求&#xff0c;slb没有流入和流出流量。 经过回滚&#xff0c;仍未能解决错误。可谓是一次血的教训&#xff0c;特…

UI学习 一

教程&#xff1a;Accessibility – Material Design 3 需要科学上网&#xff0c;否则图片显示不出来。设计教程没有图片说明&#xff0c;不容易理解。 优化UI方向 清晰可见的元素足够的对比度和尺寸重要性的明确等级一眼就能辨别的关键信息 传达某一事物的相对重要性 将重…

简单了解Stable Diffusion里面sampling methods(采样方法)每种方法的效果

在 Stable Diffusion 模型中&#xff0c;采样方法&#xff08;Sampling Methods&#xff09;是指在生成图像时用于从模型的概率分布中抽取样本的算法。这些方法对于生成图像的质量、多样性和速度都有重要影响&#xff0c;以下是一些 Stable Diffusion 中常见的采样方法。 那么…

STM32day2

1.思维导图 个人暂时的学后感&#xff0c;不一定对&#xff0c;没什么东西&#xff0c;为做项目奔波中。。。1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val HAL_ADC_GetValue(&a…

2575. 找出字符串的可整除数组(Go语言)

https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/ 在看题解之前&#xff0c;我的代码是以下这样&#xff1a; package mainimport ("fmt" )func main() {fmt.Println(divisibilityArray("998244353", 3)) }func divisibilityArray…

基于LSTM实现春联上联对下联

按照阿光的项目做出了学习笔记&#xff0c;pytorch深度学习实战项目100例 基于LSTM实现春联上联对下联 基于LSTM&#xff08;长短期记忆网络&#xff09;实现春联上联对下联是一种有趣且具有挑战性的任务&#xff0c;它涉及到自然语言处理&#xff08;NLP&#xff09;中的序列…

【嵌入式】嵌入式系统稳定性建设:静态代码扫描的稳定性提升术

1. 概述 在嵌入式系统开发过程中&#xff0c;代码的稳定性和可靠性至关重要。静态代码扫描工具作为一种自动化的代码质量检查手段&#xff0c;能够帮助开发者在编译前发现潜在的缺陷和错误&#xff0c;从而增强系统的稳定性。本文将介绍如何在嵌入式C/C开发中使用静态代码扫描…

【数据结构】栈和队列的应用——括号匹配 + 表达式求值 + 表达式转换 +栈的递归应用+队列在计算机系统中的应用

文章目录 3.栈的应用3.1 括号匹配问题3.2 表达式求值3.2.1 三种算术表达式3.2.2 后缀表达式A.中缀转后缀B.后缀表达式的计算 3.2.3 前缀表达式A.中缀转前缀B.前缀表达式的计算 3.2.4 中缀表达式的求值 3.3 递归中栈的应用 4.队列的应用 栈基础知识&#xff1a;【数据结构】栈 顺…

react tab选项卡吸顶实现

react tab选项卡吸顶实现&#xff0c;直接上代码&#xff08;代码有注释&#xff09; tsx代码 /* eslint-disable react-hooks/exhaustive-deps */ import React, { useEffect, useState } from "react"; import DocumentTitle from react-document-title import s…