51-13 多模态论文串讲—BEiT v3 论文精读

BEiT-3的核心思想是将图像建模为一种语言,这样我们就可以对图像、文本以及图像-文本对进行统一的mask modeling。Multi-way transformer模型可以有效地完成不同的视觉和视觉语言任务,使其成为通用建模的一个有效选择。

同时,本文也对多模态大模型作了一个简单的总结。

接下来,我们来看BEiT-3论文,题目是Image as a Foreign Language: BEiT Pretraining for All Vision and Vision-Language Tasks。BEiT-3的这个目标,非常明确,他就是想做一个更大一统框架,不论是从模型上要统一,而且从训练的目标函数上要统一。还有就是模型大小,数据集大小,怎么scale也要统一。作者管这个叫做big convergence。那如果简单用一句话来概括?BEiT-3就是把图像也看成了是一种语言,他们题目的意思说image as foreign language。他们在文章中,把这个image叫做Imglish,文本叫做English,把这个图像文本叫做parallel sentence。这个时候,因为不论是图像还是文本,我都可以用mask modeling去做。不需要ITC、ITM、MLM loss或者Word patch alignment各种loss。那模型层面,他就用的是他们之前VLMo提出的那个MoME。在这篇论文里,作者又重新起了个名字,管他们之前提出的那个框架叫做multi-way transformers,可能是受Google pathway的影响吧。总之到最后,这就是一个非常简单,而且非常容易扩展的一个框架。模型就是multi-way transformer一个,目标函数也就一个mask modeling。但是效果,出奇的好。

我们往下看,BEIT-3采取了CoCa这种多边形图的形式去展现它有到底有多强。

那我们可以看到在这个图里面,作者还新加了蓝色的这个flamingo,然后他们的BEiT-3,就是这个紫色的这条线,完完全全把之前所有的方法,全都包进去了。而且在每个任务上的提升,也都不小。而且最重要的是,BEiT-3这种灵活的结构,就是一个模型,但是它在推理的时候,可以拆成各种各样的部分去做下游任务,就导致它可以做Unimodel的这个图像问题。比如说classification,segmentation,detection,他通都可以做。然后,就是他本来要做的,这种各种各样的多模态的任务,当然language的任务他也是可以做的。只不过这里,之前的工作也没有比,所以他这里也就不用比。那因为BEiT-3的这个效果,也确实是非常强,所以作者在这个图一之后,紧跟着又跟了一个表一,放在了第二页。去具体展示了一下,BEiT-3到底做了任务,然后之前的这个SOTA到底是哪些方法,然后上面具体提升了多少。

我们这里可以看到,比如说在ADE20K上,BEiT-3就达到62.8,其实到现在为止应该还都是一、二吧,我看paper with code上最高是62.9。然后object detection,在CoCo上也已经刷到了,惊人的是63.7,当然现在好像已经65点几了,大家刷coco的这个积极性还是非常高,目标检测是真卷不动。然后在ImageNet上,BEiT-3达到89.6。你是可能会想,Coca不都已经90多了吗?当时作者在这里打了个记号。说这个性能,SOTA的这个性能,是没有用额外的private data训练,但是,CoCa用了JFT300m,这个Google自己有的数据集,所以别人没法复现。

然后如果看多模态这边,我们也可以发现,像NLVR2这个数据集上,这个BEiT-3比之前的CoCa高了5.6个点,这个提升是非常恐怖的,而且别的几个多模态任务,这个BEiT-3表现也都非常。所以说别看BEiT-3就是一个模型结构,只用了一个目标函数,而且它的数据,也没有用很多,微软真的是很亲民。他这篇文章专门还强调了,他使用的这个预训练数据集,全都是public data set,都是你可以下到的,您是可以去得到差不多一样的数据集,然后去复现它的模型的。

所以这个从侧面说明了两个问题,第一个,就是说不是目标函数越多越好,不是说你给他加更多的regularization,它这个模型就一定会训练的更好,还是得看loss之间,有没有互相弥补的特性。而且还有就是你这个当模型变大,数据变大的时候,你还需不需要其他的这个loss函数,那比如说CLIP,也就用了这个对比学习就训练的很好了。那BEiT-3,就用mask model也就训练很好了。所以真的是越简单的方法,它skill越好,而且越能应用。第二个,就是说数据也不一定是越多越好,那CoCa,就用了10倍于训练CLIP的数据量,可能几十倍于BEiT-3用的这个数据量,但BEiT-3的这个性能,还反超了Coa,所以更多时候,这个数据的质量是非常关键。

BEiT-3,其实从方法上来说,它就是之前,BEiT,BEiT v2,VLBEiT,VLMo,他们一系列的工作的一个集合体。本身,它其实没有提出什么新的东西,都是在之前的工作里,都已经提到过了,这篇就是把它做大做强。 展示了一下,到底一个unified framework,达到一个什么样的性能。

那BEiT-3的这个引言部分,真的是写的非常非常好,如果有同学对多模态学习感兴趣,或者接下来想做多模态的研究,那我建议一定要把这个第一段读一下。

作者上来就给这个引言部分起了个标题,叫做the big convergence,就是大一统。

文章说,最近我们观察到,不论是在这个language,还是在vision,还是在这个多模态领域,我们都观测到这个big convergence。就是说我们在超级多的这个数据集上,去做大规模的预训练,一旦这个模型训练好之后,它的这个特征,就已经非常好了,可以直接transfer到这个下游任务上去。那尤其是当你这个模型足够大,数据足够多的时候,你有可能就能训练出来一个有通用性能的一个foundation model。这个foundation model,可能就已经能去解决,各种各样的这个模态,或者各种各样的下游任务了,非常的强大。那foundation model这个概念,其实也就是去年还是前年提出的,基本上22年做大模型的,都喜欢把他们的模型叫做foundation model,所以一瞬间,出来了很多很多的foundation model。那作者说,在这篇工作里,他们就是想把这个大一统,继续往前再推一步,就是彻底把这个多模态,尤其是vision language的这个预训练做得很好,而且主要是从以下的这三个方面来讲这个大一统。

那第一个方面,就是说从这个模型角度来说,这个transformer真的是非常关键。之前我们讲transformer,还有vision transformer的时候,我就说过,我非常喜欢transformer这个结构,原因,不是因为这个结构它有多强,因为最近你看在这个视觉这边的这个CNN和transformer,还在争到底是谁性能更好,或者说谁更适合做这个视觉任务,但这个,其实已经无所谓了。因为未来,肯定是多模态的,未来肯定是一个模型,去做所有的modality,这样去做所有的task,肯定是一个大一统的框架。那在这个大一统的框架下,CNN就不太适合做其他的modality,但是transformer,又适合做很多的modality,所以就从这一点上讲,Transformer已经胜出了。所以作者接下来说,这个transformer刚开始是从NLP那边用的,然后,逐渐用到了这个vision和这个多模态领域。现在,对于这个vision language model,对于多模学习来说,有几个常用的这个方式,比如说,CLIP就是Dual encoder这种的方式,他就非常适合做这种快速的retrieval。还有,就是这种encoder-decoder的框架去做这种generation task,我们刚讲这个BLIP、CoCA这都属于这类。还有,就是这种fusion-encoder architecture,就是只用encoder,有多模态融合部分,ALBEF、VLMo那都属于这一类,他们就能做很好的这个image text encoding。作者说,不论是哪一个方向,这些模型,在遇到这个下游任务的时候,因为这个输入的形式,可能有时候会改变,或者输出的形式,有时候会改变,所以这个模型,就需要根据下游任务去做一些改进,它不是真正意义上的就是训练好一个模型之后,你拿去用就可以了,而是说你训练好这个模型之后,你遇到各种各样的任务,你还得去修改。那这个就还不够方便,而且,离他们说的这种general purpose model,就还有一段距离,所以作者这篇文章里就说,我们想提出BEiT-3,用multi-way transformer,去进一步的往这个方向去push。

接下来,对于这个大一统方向的第二个点,就是这个预训练的目标函数。作者说,其实到目前为止,这个mask data modeling,就已经成功的被应到各个这个modality里了,比如说最开始的完形填空这个BERT,然后Image这边,他们就是自己的这个BEit,还有这个image text pair这边就是他们自己的VLBEiT。总之,就用这种掩码学习,就已经能够很好的去学习图像,文本,或者多模态的这种特征了。那作者这里就想,那我能不能真的就用这一个目标函数,就把这个模型训练的非常好?因为,如果你用更多的这个目标函数,你这个训练速度,肯定会变慢,也就是他这里说的,如果你用其他的这个pretraining objective,比如说ITM的话,你这个当数据和模型变大的时候,计算就不高效了,你就很难去在短时间内训练出来一个大模型。另外也有优化和调参的问题在里面,如果你只有一个loss,那你这个loss weight,就没啥可调的了,但是如果你现在有三四个loss,那这loss和loss之间的weight该怎么调?你是不是得跑好几个大模型去对比一下该选用什么loss weight?那同时,有的loss之间可能互补,有的loss之间可能互斥。比如说之前我们说想让那个ITM工作的更好,我们还得用ITC去帮助他选择Hard negative,然后才能去做ITM,这就无形中增加了很多的复杂度,和很多这种调参度就太人工了,他就不好skill up。所以作者说,在这篇文章中,我们就用了一个这个pretraining task,就是mask then predict。然后我们就把这个图像看成是一个foreign language叫Imglish。因为反正图像过完这个vision transformer embedding以后,它就变成了一个sequence of token,那这样他们就能把这个文本和图像,用同样的方式去处理,本质上就没有任何区别。而且如果这样子去处理,对于这个多模态的这个图像文本来说,也就可以把它看成是一个parallel sentence,就是句子一,后面跟了个句子二,就没有什么不同了,一切,都变成NLP了。当然这也从侧面说明,mask data modeling这个目标函数,真的是非常的强。

最后作者,又讨论一下第三个方面,就是如何把这个模型,还有数据集的这个大小,全都scaling up,因为只有scaling up,用了更多的数据,有一个capacity很大的模型,他才有可能用一个模型去解决所有的事情。所以在BEiT-3里,作者说也把这个模型的size扩展到了B级,而且也把数据集也扩展的非常大,但即使如此,作者团队还是坚持,就使用这种public available的这个data resource。所以学术界,就比较容易去这个复现,非常的难能可贵。

如果我们接下来看BEIT的这个方法本身,也就看这个图。

就会发现,真的很简单,而且它就是VLMo,所以没什么好讲的。那对于模型本身而言,它就是用了这个multi-way transformer,就是之前的这个MoME。它前面的这个自注意力,全都是shared,只有后面这个feed forward network是不一样的。根据不同的modality,我们练不同的expert,这是vision,这是language,这是vision language。然后通过调整,不同的这个input modality,然后去选择这个模型,到底该走哪一支,最后来得到模型的这个输出。至于训练的时候的这个目标函数,就是这个mask data modeling,它有可能是遮住了图像,有可能是遮住了文本,总之就是完形填空,你去这个恢复它就可以了。所以说,非常直接,而且就像VLMo里讲的一样,它也很灵活。

我们现在如果直接去看这个图三

也就是说当一训练完了之后,我们要去做这个下游任务的transfer的时候,作者这里说BEiT-3也非常的强大。如果你只用这边的这个vision encoder,就可以去做所有这个图像这边的任务,包括分类、分割和检测。那如果你只用language这边的encoder,你就可以去做那边的各种任务,反正是用MLM训练出来的,所以BERT能做,BEiT-3都能做。那接下来,就是看多模态了,如果你有vision和language,最后有vision language这种fusion encoder形式,你就比较容易去做这种vison language understanding task,这种VQA,VR这种任务。那如果你想像CLIP一样,去做比较高效的这种image text retrieval,你就可以把这两个vision和language分开做,变成双塔结构。那如果fine tune的话,你还可以再用ITC去fine tune一下就好了。最后,就是如果你做生成,你做captioning这种任务,如像我们讲过BLIP和CoCa,就是文本这边mask,然后你用image grounded这个text encoder去预测这个mask掉的词到底什么,然后可以做image captioning。所以说,BEiT-3,就跟一个积木一样,也就跟一个乐高一样,他每一个训练好的那个transformer block,或者每一个训练好的那个SA或者这个FFN,你都可以随意的去拼和组合,从而达到你想要的各种结果。

那最后,我们可以快速的对多模态大模型做一下总结。

我们可以从最中间的这个vision transform ViT开始说。多模态学习之前,都是OSCAR或者UNITER的这些工作,但他们的缺陷,都是因为里面用了一个object detection的模型,去做这个视觉特征的抽取,这个就太慢,而且太贵了。所以说在vision transformer出来之后,这个ViLT的作者就想到说,我可以把这个vision这边,就用一个vision transformer去代替,就一个embedding层就足够了,这样大大的简化了这个模型结构,所以,结合ViT和这个OSCAR,推出了这个ViLT。

ViLT是ICML 21的工作,Clip也是ICML 21的工作。经过一番这个总结,经验和对比,ALBEF的作者就发现了,说Clip比较高效,适合做这种image text retrieval,原始的这些方法,因为这个Modality fusion做的很好,多模态任务非常强,而这个ViLT这个结构比较简单,所以说最后,综合3家的长处,就推出了ALBEF这么一个fusion encoder的模式,从而取得了不错的结果。

因为ALBEF也release了代码,而且结果不错,模型也比较简单,所以在它之上,又延伸出来了很多工作。那比如说之前,这个SimVLM,就是用encoder,decoder去做多模态的。然后作者在的ALBEF、SimVLM基础上推出了这个CoCa。用contrast和caption两个loss就训练出了一个强大的模型。

那同时,另外一个分支,就是有了这个ViLT,而且有了这个ALBEF之后,微软的研究者,就推出了这个VLMo,就用这个共享参数的方式推出一个统一的做多模态的框架。

然后,基于这种参数共享的思想,基于这种可以用很多很多,这个text branch,作者又推出了这个BLIP模型,能做非常好的这个Capfilter的功能,而且它的capfilter模型,也非常的好用,能够像一个普适的工具一样,用到各种各样的情形中去。

我们再回到这个vision transformer。那vision transformer在他的文章中,也做了mask data modeling的方式,去做self supplied learning,但是当时的效果,不是很好。但是大家,整个community,都觉得mask data modeling是一个非常promising的这个方向,所以大家,就顺着BERT的这个思想,这个微软的研究者就提出了BEiT。当时的口号,就是这是计算机视觉界的BERT Moment。

然后在BEiT的基础上,很快又推出了BEiT v2,但是这个,主要是做这个视觉task,并不是做多模态的。然后,因为BEiT可以在视觉上做mask model,然后BERT,可以在文本上做mask model,作者就想那视觉和文本是不是可以合在一起?所以说,又推出了这个vision language BEiT,即VL-BEiT。

最后,在他们一系列的这个实验,经验的这个积累之下,作者最后把BEiT v2,VLMO和VL-BEiT等3个工作合起来,推出了多模态的BEiT-3,大幅超过了之前的这个CoCa,BLIP在单模态和多模态上的各种表现。

再回到ViT,那对于mask data modeling来说,你也可以mask and predict不同的东西。譬如BEiT就是去predict那个patch。另外耳熟能详的工作MAE,mask auto encoder,就是去mask predict pixel。当然不论是恢复patch还是恢复pixel,其实vision transformer那篇paper,原来它都已经做了,但是效果都不是很好,然后BEiT和MAE,都把这个效果推高到很高的一个高度。然后MAE,它有一个非常好的一个特性,就是说他在视觉那端,他把大量的这个patch,全都给mask之后,他只把那些没有mask的那些patch,扔给了这个vision transform 去学习,这样就大大减少了这个计算量。

那这个东西,当然不是视觉里独有的了,所以就引出了最近新出的另外一篇比较有名的工作,也有很多同学说能不能讲一下这篇FLIP,Facebook新出的论文,就是fast language image prediction。

但其实,他的想法真的是非常非常的直接,就是把MAE的这个有用的这个特性,用到Clip的这个结构里,它的模型就是Clip,没有任何的改变,只不过是在视觉这端,它跟MAE一样,都是只用那些没有mask的token,把那些mask的就删掉了,这样无形之中,就把sequence length降低了很多,所以这个训练就快了,也就是他说的这个fast language image prediction。

当然Flip这篇论文,做了超级多的实验,最后也做了model和data,还有这个训练Schedule上各种这个scaling的实验。所以大家如果有时间,也可以去读一下,但是从方法本身上来说,它就是在Clip的基础上用MAE的思想。

最后,想说的一点,就是多模态学习的进展,实在是太快了,除了我们这两期讲到的这么多多模态的工作之外,最近还有很多非常非常引人入胜的工作。

比如说有一个系列,就是用language去做interface。他的意思就是说,即使你像BLip,VLMO,BEiT-3,这种模型它可以像积木一样,你想做什么任务,你就去拼出来你想要的模型,然后你再去fine tune得到你想要的结果。这个还是不够统一,它不是真正意义上的unified framework,它只是更灵活的把很多模型给拼到一起了,那真正unified,真正大一统的框架到底应该长什么样?当然有很多思路了,其中一个,如说微软的metaLM,还有Google的这个PaLI。他们称模型就是一个encoder decoder,然后有图像的输入,有文本的输入,但是至于这个模型,不论是在预训练的时候,还是在下游任务的时候做什么,完全是由文本那边的prompt决定。它的输出,永远都是文字,就不论你是什么任务,它的输出都是文字,它是一个text generation task。然后这个时候,如果你做VQA,那你的文本,就说我现在在做VQA,这是我的问题,然后你,就生成一个答案给我。那如果你现在是在做图像分类,那你就把图像给他,然后文本那边,你就告诉他prompt说我现在在做分类,然后这时候,他就会把这个图像的这个label,直接给你生成出来,它不是0123456这种label了,它直接就生成,这是狗还是猫,就是这种带有语义的词了,所以就是text generation。它通过调整各种各样的prompt,也就是这里说的这个language interface,就只需要调整的language,那这个模型,就知道你在做什么任务,然后就会给出相应的这个文本的输出,然后来告诉你答案。那在这个意义下?这个模型真的是很少被改动,所以算得上是一个unified framework。

另外,还有一系列工作,最近也是非常的火热,叫做generalist model,翻译过来,可能就叫通才模型,或者通用模型。它也是一个意思,就是说不论是在训练的时候,还是在做下游任务的时候,我都想用一个模型,直接训练好之后做就完了,我不想在根据这个下游任务再去调整我的模型结构,或者再给它加一个task  specific head,比如说分类头,检测头,分割头这种。那最近也有一些工作,比如说这个unified-IO,还有Uni-Perceiver v2。虽然说这一系列工作,暂时看起来,它的性能还没有那么的炸裂,那么的好,但是我觉得,在现在这个卷的速度之下,可能也就是今年的NeurIPS,就会出来一系列这种generalist model,不仅模型简单,而且效果,应该也能够超过之前的那种task specific模型。

https://arxiv.org/pdf/2208.10442.pdf

多模态论文串讲·下【论文精读·49】_哔哩哔哩_bilibili

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

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

相关文章

K8s-Pod资源(一)Pod介绍、创建Pod、Pod简单资源配额

Pod概述 Kubernetes Pod | Kubernetes Pod是Kubernetes中的最小调度单元,k8s都是以pod的方式运行服务的 一个pod可以指定镜像,封装一个或多个容器 pod需要调度到工作节点运行,节点的选择由scheduler调度器实现 pod定义时,会…

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境(IDE)。 如何安装中文插件 在 Jetbrains 家族的插件市场上,是能够搜到语言包插件的,正常情况下安装之后只需要重启即可享受中文界面,可AndroidStudio 中…

视频剪辑软件Camtasia2024最新版本快捷键大全

Camtasia Studio是一款专门录制屏幕动作的工具,它能在任何颜色模式下轻松地记录 屏幕动作,包括影像、音效、鼠标移动轨迹、解说声音等等。 今天来给大家介绍一下Camtasia快捷键的相关内容,Camtasia也是一个十分好用的电脑屏幕录制与视频剪辑…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH(Secure Shell)协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 (1)对称加密 (2)非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

Pod调度

在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上&…

高斯Hack算法

背景 刷leetcode时,碰到一题需要求解n个bit中选择m个bit的所有组合集,我只想到了递归求解,没啥问题,但是在官方题解中看到了牛逼的方法(Gospers Hack),故记录一下。 4bit中2个1的情况 0011b0101b0110b1001b1010b1100b…

基于协同过滤的零食推荐系统

介绍 协同过滤算法:协同过滤是推荐系统中比较常用的算法之一,其核心思想是寻找用户之间的相似性,通过发现用户之间的共性,向用户推荐可能喜欢的商品或服务。Python Django Vue:Django 是一个基于 Python 的 Web 开发框…

模型的权值平均的原理和Pytorch的实现

一、前言 模型权值平均是一种用于改善深度神经网络泛化性能的技术。通过对训练过程中不同时间步的模型权值进行平均,可以得到更宽的极值点(optima)并提高模型的泛化能力。 在PyTorch中,官方提供了实现模型权值平均的方法。 这里…

PYTHON通过跳板机巡检CENTOS的简单实现

实现的细节和引用的文件和以前博客记录的基本一致 https://shaka.blog.csdn.net/article/details/106927633 差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份 1.需要在跳板机相应的路径放置PYTHON的脚本resc.py resc.py这个脚本中有引用的文件(pm.sh,diskpn…

查询速度提升15倍!银联商务基于 Apache Doris 的数据平台升级实践

本文导读: 在长期服务广大规模商户的过程中,银联商务已沉淀了庞大、真实、优质的数据资产数据,这些数据不仅是银联商务开启新增长曲线的基础,更是进一步服务好商户的关键支撑。为更好提供数据服务,银联商务实现了从 H…

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【E…

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)

在讲述之前,各位先自行在网上下载并安装Visual Studio 2022,安装的时候别忘了勾选msvc 概述:GraalVM 本机应用程序(Native Image)是使用 GraalVM 的一个特性,允许将 Java 应用程序编译成本机二进制文件&am…

AI-数学-高中-5.求函数解析式(4种方法)

原作者视频:函数】3函数解析式求法(易)_哔哩哔哩_bilibili 1.已知函数类型-待定系数法:先用待定系数法把一次或二次函数一般表达式写出来;再用“要变一起变”左右两边同时替换,计算出一般表达式的常数&…

SpringIOC之support模块GenericGroovyApplicationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

【c++】利用嵌套map创建多层树结构

通常树的深度都大于1,即树有多层,而树结构又可以用c的map容器来实现,所以,本文给出了一种多层树结构的实现思路,同时也给出了相应的c代码。 整体思路概述 首先定义一个节点类Node类,要包括children&#x…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件,创建热门商品Top10组件。 选择柱状图,拖拽cnt(总数)到横轴,拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板,拖拽组件到仪表板 效果如下:

代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结

系列文章目录 代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

【计算机二级考试C语言】C数据类型

C 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C 中的类型可分为以下几种: 序号类型与描述1基本数据类型 它们是算术类型&#x…

Vue3 父组件传值给子组件+以及使用NModal组件

前言:我想实现表格中点击详情弹窗出一个表格展示该行详细信息。想着这个弹窗里用子组件展示。分担父组件下,怕代码过多。(使用NModal组件弹窗展示) 等我一波百度,嗯,实现方法挺多嘛,什么refs什…

SpringMVC RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现3、HiddenHttpMethodFilter 1、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 a>资源 资源是一种看待服务器的方式,即&…