RWKV-原理笔记-二-
RWKV 原理笔记(二)
你必须拥有RWKV,以及其他模型为何拉胯,NLP杂谈 - P1 - taku的交错电台 - BV12h4y1u7uN
hello,大家好,我是海边的泰国。今天让我们来讲一下这个大型语言模型RWKV。这个模型好像发最早发布是在差不多两个月之前吧,就是它架构发布,要发论文,好像是在两个月之前吧,现在已经发展的比较快了。
然副标题是变形金刚和RNA为什么拉垮?然后变形金刚就是toform。面向的观众呢是有基本的神级网络知识的观众。
不好意思。
启用计完毕。等一下。
嗯嗯。为什么不能全屏呢?
不好意思不好意思。然后有基本的神奇网络架构知识,了解阿伦啊transform的一些观众啊,然后我们就入下一页。啊,首先这是目录,你们看一下就好了。首先RWKV是什么啊?我直接先演示一下它效果啊,它效果。
比如说我输入这个你不要看这个前面前缀,这是我在直播间里边的试用的一个一句话。你们可以到我直播间去试用一下。这个他谷是一个前缀,只有我在加踏谷才会被识别。然后我输入的是你认为活着只是一种幻觉嘛。
他会说这是一个非常深刻的问题,对我来说,活着只是一种幻觉。但是对于你来说活着可能不仅仅是一种幻觉。我觉得这是很了不起的一个回答吧。然后当然了。嗯,像是现在风梨就涨了死可以用来描某些于。你看到了吗?
他这个,例如当我们。这是我在直播间开的,我开的我的直播间嘛,然后你可以在这里弹幕这里试用,我就先不看这里了,我们直接看幻灯片了。然后我觉得关于意识的问题是一个很值得深究的问题吧。
我最近也在一直在看这个相这方面相关的一些。一些东西嘛所以。我今天我们就不。不做赘述了,我们就用下一页吧。啊,就是说他对比起那些去的GPT啊,肯定是。不够好的。但是但是你你要知道它只有这个硬盘空间。
只有6G左右的一个模型,它居然可以有这样的对话效果。而且你在自己的电脑上面能跑,我觉得是很了不起很了不起的。而且我推荐我最主主要为什么推荐这个RWKV是因为它是一个中文本土的模型啊,就它是真的在全有。
纯粹在总文数集上面训练的一些模型。就下一页,我知道这个模型的契机呢,首先是这个个。这个Q巧在6月3日发布了专题讲解的视频,这个人是我非常非常推荐的一个柔款up主。
我觉得他应该是讲嗯这些神经网络相关的题材讲的最好的一个优盘组了。然后6月中旬的时候,我在玩GPG for嘛,之前呢在知道这RWKV之前呢,我认为这个是我们就说能够企及的模型之中最好的模型吧。
然后群里朋友就推荐我使用RWKV我试用一下,发现。试用的结果非常惊喜啊。首先之前本来就没有几个在走成数据集上预训练的对话模型啊,不是fune啊,是Y预训练。他这一次呢他因为是中国人嘛。
模型作者是中国人嘛,然后可以说是本土模型。要后它有一些模型,小说的模型是啊100%在中文小说上面训练的。然后有一些对话模型呢是50%,英文50%的中文,那个效果是非常好的。然后我刚刚演示的这一个。
它其实就是那个啊英文跟中文对半的那个对话模型。据说就说中文的,如如果你纯粹在中文数集上面训练的话,那个性能反而会下降了。就说可能因为那数值太嘈杂了,就没有人没有人愿意花费那个费时费力去整理那数据集嘛。
我觉得这是很不好的一个倾向吧。在在中文圈子里边嘛。
总之我们先不讲这个了。然后RWKV是什么?用一句话来概括,就是用简化版的这个IN替换的注意力机制的变形性感啊。如果你没有听说过IN注力机制的话,啊,还有啊transformer的话,可以先补课再来。
我之前有做transformer的视频,好像是吧,好像是。不是很确定。我开一下激光笔啊。那这管也是哥哥的脸。然后我用这这个图来。就说说明一下RWKV和变形金刚的主要区别啊,这左边是RWKV。
右边是变形金刚啊,我们先看右边的变形金刚部分,我们这个是因为它是非常流行的一个架构嘛,所以我们先看这个。你可以看得到。这个地方呢就是输入嘛,每个token的输入,然后经过一层就抽取注意力键值的操作之后。
我们得到一个。就说KWE好像是对,我们得到KWE然KWE之间呢就通就通过这样的相互关,就怎么说呢?全连接。就说。怎么说呢?这个注意力的它的本质是每一个token要跟每一个token进行连接,你看到吗?
所以它的计算量就是你token的就是平方,它计算量是你token的平方。然后因为我们要保存那个结果嘛,所以。它的那个内存的消耗量是也是这个token的平方,你每输入加一个,你就要它的那个内存消耗是。
平方增长的还有计算量也是平方增长的。我们要知道这一点就可以了。但我们再来看RWKV啊RWKV我说过了,它是将这个平方级别的这个attention呢替换成这个RNMRN它的。他的计算。
算量是线性增加的线性增加,你看到吗?它嗯不像这样,你需要全连接嘛当就是线性增加的嘛,继续参加,还有那个内存消耗也都是线性增加的。所以它这是它一个好处啊,然后。嗯,怎么说呢?嗯,我想一下我想一下啊。
我想一下怎么讲。但是呢但是。既然他那么好,为什么以前的人不用它呢?是因为。是因为它不能够平行,就是说啊同时进行啊,你像是因为它无视顺序嘛,它这个attention这注意力其实是没有持续的。
所以你它可以同时计算这一个就算这个计算这个计算这个嘛,对不对?它可以同时计算嘛,因为它相互之间是没有关联的。但是你看这个它有个箭头相关联的嘛。
所以他只能够先计算完这一个再计算这个再计算这个再计算这个懂我意思吗?所以他是牺牲了那个同步的。同步计算的能力来达到这个。线性啊线性attention的懂我意思吗?我们接下来会详细讲一下。然后。几个结果。
首先是时序这个IN类似的注意力结构,天然编码的时序可以省掉这个positionencoding啊。这proincluding是transformer里边很重要的一个机制啊。如果没有它的话,所有的这些。
它已经是丢失了那个位置信息啊,丢失位置信息的话,那个性能会下降非常非常多。如你你想象一下,如果没有顺序的话,比如说猫是我跟我是猫是一样的嘛,那肯定是不一样的,对吧?然后相反在香草注意力机制里面。
单词的位置是不被考虑的。就跟我刚刚讲的一样嘛。然后第二点是连续性,这个RNANA结构提供了连续处理文本的可能性啊。安安是天生的文本处理者,或者说我们的语言就是以IN的形式被组织的。嗯,怎么说呢?
提供了连续处理文本的可能性。就比如说啊我现在先处理了一个句子,对吧?我拿到了这一个最后一个隐藏隐藏层的内容,对不对?然后我再在后边再增加一个句子,我可以沿用这个。包含了前面一个句子的那些信息的隐藏层来。
啊,进行新的处理,对不对?虽然transformer其实也是可以的啦。就说但是它更加自然了,因为我们的语言就是以IN的形式被组织嘛,就是线性的形式组织的语言嘛。你不可能说语言是可以打乱顺序的嘛,对吧?
你可以从后面往前面读嘛,当然是不可能的啊。因为我们的语言就是顺序持序的嘛。然后啊计算量方面呢,就是说计算量是下降了的,但是是以牺牲平行运算的能力为代价的。刚刚我已经讲过了,然后我们就下一页。
然后这里有几个需要注意的地方。第一点啊,首先IN注意力本质上是不能平行运算的。这个RWKV通过精简计算式来降低了计算量,那个代价也是显而易见的。然后就是那个代价就是注意力性能的下降了啊,不过有一说一呢。
我这是我个人的看法。变形金刚的多头注意力太夸张了。人类不是海德了,而不需要九个头啊。直源上处理一个句子,我们只只需要注意大概三个地方就够了。那个就是主主页B结构嘛,我是这样想的。
然后某个贡献者就是那个RWKV贡献者表示举证惩罚。这个模块呢计算量是IN注意力模块的1000倍啊,就是这举证乘法模块呢就其实两个地方都有。其实这个地方也有,这里也有。但是这个地方因为被精简了。
所以它可以忽略不计。但是啊这个地方呢抽取注意力键值的地方呢,会那个计算量会比较高,是这个这样一个情况的。那后边有还有一个feed forward,那里也是啊计算量比较高的地方,但是那是可以平行进行的。
嗯。是这样子。然后我们就不要讲这个了,下一页,然后需要注意地方。第二点呢,然后我怀疑IN注意力模块是。那信息注意力模块啊是性能瓶颈啊,因为在执行单次推理的时候,我的GPU计算量只能上到35%左右啊。
然后其实基本上不用怀疑,我觉得就是。但是当然这个可以通过怎么说呢?增加那个批处理的数量来,就说让计算量达到盘子几0百还是可以的,其实还是可以的,觉得没什么问题。那就下一页吧。然后第三点就是说。
所于本质上是持续运算推理的时候,我们确实可以扔掉计算过的hidden state,就那个隐藏层嘛。但是在训练然计算梯度的时候呢,中间结果是要保存的。所以你增加文增加那个文本长度。
还是要付出对应的内存代价的。那个增长速度是OL就是先性增长。然后具体实验部分呢,我们看下一页啊。然后如果通过切片方式训练呢,我们一次只能优画局部。我们可以,如果是以句子为单位的话。
我们可以拿到前面一个句子人的hidden day,然后。即系。计算那个啊第二个句子的那个。损失值的时候,我们要我们先沿用那个state,那个hidden state这是可行了。不过因为我们。
终究我们还是只能优画第二个句子对应的那些。那些。啊,权重对不对?是这个意思,我是这个意思啊。然后非要说的话,变形金刚也有切片训练的方式啊。
比如说我们选择那个呃class token对应的那个hidden stay作为前面文本的编码就可以了。当然了,IN的模式更加自然了,这是理所当然的。然后这是我的一个实验啊。
这个是不同输入长度下训练时的显存消耗以及GPU占用率啊。我用的是那个hugging啊,hugging face5月15号左右发布的那个RWKV的那个模块啊啊然后用的是169M的小模型。
然后加载就加就占用了1500左右的线存的。MB啊,然后输入文本长度200248的时候,2000的时候就是使用量是6000左右。那GPU按GPU占用率是78%左右,然后增加1024的话是增加了899。
然后再增加2000的话,是上升到1万1万多一点点。怎么说呢?它还是一个线性的过程吧。那比如说你现在书文本。就反而是线性增长的吧,你可以这样看这样理解,如果我用transformer的话。
可以想象得到就是说这里是以平方几增长了。
然后下一个话题是说为什么爱恋不醒。然后嗯简单来说,神奇网络的性能本质上是取决于深度的。然后还有那个参数量,然后在可训练的条件下。你不能说堆叠那个深度,但是你。对叠深度,但不能训练的话,那就没有意义。
对不对?那为什么对叠训对叠IN不行呢?为什么呢?因为长插连接是对叠的必要条件啊,以往对叠INN的研究没有考虑到长插连接。关于长沙连接,你们可以去看我之前的一个视频,是说。现代审计网啊现代。
人工智能的基石这两个基石,其实好像是叫这个名字的一个视频,你们可以去看。然后变形金刚和RWKV通用算式是这样子的,是hidden等于hidden,加上这个attention。
然后attention hiddendden就这个是注意力嘛,通过hiden计算的一个注意力。然后这个是hidden,为什么它这里要加一次呢?他这个因为就说本质上注意力是作为长沙附加到隐藏状态上面的。
这个是啊就说一个加plus函数嘛,对不对,对不对?所以这里是作为一个参材连接的。那所以我们才有了对点的能力,是这样子的。那为什么IN不行?过去我们有的原始的注意力机制是INN加上注意力。
这个机制呢是以INN为主,注意力为辅的。然后虽然你们可以看这个图啊,以前就是原始的那种注意力机制的应用的一个地方,就是说图像的那个识别,物体的识别。它这个地方就是注意力的大小,就越红地方。
注意力就就说明那个神经网络注意力就越强,是这样子的。注意力其实其实是很了不起的发明啊,只能这样说,那变形金刚呢是长叉连接,加上注意力。嗯。😊,WKV呢是长家连接加上INN注意力,他把这注意力改了一下。
但是产商连接是没有改的。你可以看我们可以看得到啊W个KV这里把INN直接等同一注意力啊。然后以前的是以注意力以INA为主的,这样是不行的。
我们进入下一页。我们就只接进入结论了,就说我觉得RWKV应该作为生成模型的默认选项啊。然后那个变形金刚呢可以作为一个升级的选项。因为RWKV它注意力是保留了那个最极致的精精度呢。
让RWKV在随着时间的推移呢,是慢慢的减少。对以前的token的那个注意力也是这样子的。所以我们认为啊就是说呃如果RWKV可以满足的情况下,我们就直接用RWKV就好了。然后如果不能满足的时候。
我们再用transformer嘛,对不对?所以我觉得它应该作为生成模型默认选项才对。让阿WKV给变形金刚的注意力减负啊,对个人的机器更加友友好啊。所以我认为这是非常非常好的一个反面吧,是这样想的。
第二啊第三点就是说现代大型语言模型的其实是注意力加产常连接。这个就在我之前的视频里有讲,你们可以去看。啊那之所以不显示就是败在了财产连接上面啊。
然后最后是一点点抱怨了,我觉得阿WKV主项目呢不应该为了性能而放弃通用模型了。我觉得那个通用模型就 hideenface嘛。我现在用的那个版本呢,就各种bug。
最最严重的CPU最严重的bug是CPU在提供state的情况下,就不能够训练了。我修那个bug坏了好几天啊,然后顺便读了一下源码,所以才有了这个视频。然后。啊,基本上就结束了,没有什么其他想讲的了。
我对这个模型的评价是非常高的,你们可以去玩一下。
我们稍微看一下我的直播间。的模型吗?你可以看一下啊,ta你在做什么?他现在在随机挑选那个弹幕来进行回答。我可以问他一个问题,他你觉得人活着。的意义是什么?稍微看一下。他出你觉着神握说的意义是什么?
思考中了,现在。因为现在开人的训练模式,所以所以稍微会有点慢。但是如果单纯是呃推理的话,是不会那么慢的。然后因为我还追加那个过去的对话终价值嗯。你可以看得到他回答是非常连贯的,有序的,然后还可以微调了。
这里还提供微调呢。你比如说你要说微调指定是你要说啊啊,我觉得人活着。没有嗯。没。等一上啊,我我觉得这没有意议。我开了一个叠加los啊。嗯嗯。哦,他已经t了。现在。调就结束,损失值。我再问一次再问一次。
他可能因为它很难反映到实际的生成上面的。因为那个那个什么那个lening rate比较比较低,所以很难反应的。不过我可以试一下,你觉得人活着的意义是什么?哎,等一下等一下好这条股是一个前缀来的。
一定要加才它才会回答呢。う。这网络有点慢,稍微等一下。不是,是他在思考吗。怎么感觉卡住了?有时候OB跟之前的回答有一些些不一样,我认为。所以说微调是一个很难的工作啊,只能这样说。然后基本上就这样吧。
今天视频就到此为止吧。
关于RWKV的5个谣言 - P1 - 霍华德vlog - BV114421S7pi
大家好,今天想要录一个视频,专门来谈一谈关于ra库的5个谣言。长期以来我都听到过各种各样的ra库谣言,经常使我完全绷不住。好,咱们开始吧。第一个谣言是说,ra户的训练效率贼低。
比transformer慢的多。往往散播这样谣言的人,还把ra库当做LSTM时代的那种RNN呢。他们认为ra库也必须要一个token一个token的处理无法并行,所以训练速度很慢。但实际上。
ra库早就已经鸟枪换炮,跟他们完全不是一个时代的RNN了。这里我专门做了一个实验来证明ra酷的训练效率很高,长上下文是更快。首先用的baseline呢是卡ac的 nanoGPT。
看过这个代码的都知道这个代码写的非常好。已经把它的训练效率优化到了单机上,普通人可以达到的极限,使用了混合精度,touchch compareflash attention全部都用上了。好。
那我们来看一看。右边这张图上显示的软训练时间啊,这个的训练时time最后一列训练时间是指训练一个step。训练一步所需要的时间。我们看当上下文较短时。
raku的训练速度确实略慢于GPT加flash attention。当时单达到4K的时候,基本两个都是1000毫秒左右,速度就已经很接近了。当上下文达到8K的时候,ra库的训练速度就已经比GPT要快了。
如果你还需要更长的训练上下文,那么ra库的优势将进一步显现出来。第二个谣言是什么呢?是ra库收敛慢MMLU的分数很差。但实际上,真正跑过ra库的都知道ra库的收敛速度比transformer快的多。
比GPT也快得多。啊,像右图所示,这是真实的训练结果,也是用了nnoGPT。作为对比参照物raku的los下降的比GBT要快。另外可以看看左边这张图。
这个是raku67B在一系列英文和多语言测试机上的效果。英文的效果仅仅次于拉ma38比和m7比。多语言能力是最佳的。因为ra酷使用了。2。5T的多语文本。好,那再来回答MMLU分数的问题。首先。
raku67B的MMLU分数一点都不差。five shot可以达到44。0,非常接近拉ma27B的45。3了。至少是在开元社区开元模型里也是相对比较有竞争力的一个分数了。好。
下一个要演是相同训练数据线ra酷MMLU的分数低于transformer。
嗯。😊,确实从上一页幻灯片我们就能看出来,raku67B在2。5T token上训练MMLU是44。0分。拉马27B在2T token上训练MMLU是45。3分,似乎多了0。
5T的token效果MMMU还差一点,似乎是说明在相同训练数据下,raku的MMU分数会低于transformer。但是最近英伟达的有一篇论文。指出了这样一个现象。他是在member上做的实验。
因为memba和raku都是一系列新型的。叫做新架构吧,对吧?他们其实都或多或少的是某种没有标准注意力机制的这样一个模型。他们遇到的一些现象或者观察到的现象。我认为是相通的。好,我们来看是什么现象。
在memba在1。1T token上训练时,其他测试集的效果都非常不错,甚至比transformer要好。但是MMU暂时落后,而且落后的分数还不少,这是挺让人失落的一个结果。似乎也真正的印证了这个谣言。
但当我们把训练数据提升到3。5T token的时候。MMU的分数就后来居上了。zero short的分数甚至超过了transformer。这说明什么?
这说明transformer和其他节些架构确实有不同的学习过程。他们在不同的token数的时候,可能会有不同的学习历程,或者说叫要那graing。的过程是不一样的。在3。5T的时候。
新架构的MMU分数会后来居上。门把2,我可以负责任的说是弱滑版的ra酷6,类似于ra酷5。1,我们相信ra酷也会后来居少,让我们拭目以待吧。好,第四个谣言,ra库不是国产的。
啊,我这个是最绷不住的,我向来不喜欢民族主义这一套,但居然又有人用这个来抹黑rapku,那必须不能认。我们来看看transformer的作者列表里,一个中国人都没有吧,国产化率0%8,而且这已经成为。
既定的历史永远不可能改变吧。任何使用transformer的,你都没有办法说你是完全国产吧,因为你的祖宗就里面一个中国人都没有。我们再来看看ra库。库无论是四还是五还是六的论文,都有大量的中国人参与。
而且软后的一座蓬勃可以说。就是主导整个软库架构架构创新和开发的主导者。他是中国人,中国籍长期居住工作,生活在中国。那么。可不可以说这就是中国人主导的新一代架构呢?那可不可以就是说ra库是国产的呢?
至少就就算退一步来说,确实有不讨不少外国友人也参与了ra酷的研发和写作过程。那么rap库的作者列表里也有大量的中国人。至少含中国的成分已经远远高于transformer了吧。我再多扯一句。
member虽然大家很多人都在followme的工作,但member的两个作者。都是美国大概率啊,我没有办法完全核实这一点。但是我认为。abber古应该是华裔美国人。道神应该是一个越南裔美国人。
如果其他人对此能有什么其他的铁证来证明我说错了,随时欢迎私信我,我也愿意。把我说的这些话删掉。好,最后一个谣言。最后一个谣言是说ra酷是名科模型。
不能因为蓬勃。不在学术界。就认为阮户是个名客模型。彭勃长期在对冲基金工作。对世界的人才分布有了解的人都会知道,这世界上的最顶级人才。很大一批都在对冲基金工作。
包括奥林匹克数学竞赛金牌、物理竞赛金牌、信息学竞赛金牌,很多都会到对冲基金工作。对冲基金吸纳了这世界上最优秀的一批人,可以这么说。相反,我认为彭勃有很好的创新能力跟学术素养。
他得到了来自全世界各路大神的认可。包括传奇程序员fabsbanard。LSTM支fu。油管大V康奈尔的教授,还有全世界的开发者。
你会在越来越多的paper里都会看到raku作为一个非常重要的基准或者benchmark进行对比。那么这个时候说明raku早就得到了全世界学术界工业界的认可,绝对不是一个名科模型。最后。
欢迎大家一起加入阮酷的社区,你一定会有收获的。
解密RWKV线性注意力的进化过程 - P1 - 霍华德vlog - BV1zW4y1D7Qg
好的,下面呢我们来用代码解释一下各种模型的tenion是什么样子的。
首先呢我们先来介绍一下transform attention向量版。这个和大家平时看到的矩阵版是不同的。可以看到这个。公式里它是首先计算Q和K的一个分数,然后再通过指数进行一下变化,再乘以VI。
然后求和,最后除以一个规划因子。就可以得到呃attention的。就可以得到transformer的 attention。用代码来解释的话,可以看下面这个代码。首先呢我们初始化一个输出。
这个输出呢是由序列长度T和模型维度低所决定的。然后我们开始从第一个字或者第一个词,第一个token开始。我们先算一个当前token的归化因子初始化一下。
然后初始化一个当前这个token的要输出的tenion。然后呢,我们就开始沿着第一个tion开始往后逐步的便利啊,attention呢等于。对应的QT就是当前的。
token它的作为cory和后面一个token之间的啊这么一个。内积分数,然后取一个。指数都得到它的ten性分数是ten性分数呢再乘以后面的对应的那个token的。呃,value向量。
加到一起就可以得到后面的这个OT。同时,它规划因子也不断的积累了tension。最后呢。OT再除以一下Z就可以得到我们要输出的。我摊盛了。从这个地方一个不严谨的说啊。啊,不严谨的时候。
你可以看到它其实是。两个循环啊,那么最简单的算法分析里面,两个循环就是ON方,或者说这里说是OT方的一个复杂度。对吧。好,让我们看一下这个计算结果和标准的selft一样吗?你会发现它是一样的啊。
但是标准的selft计算是矩证版它就更简单了。Q的整个矩阵和K的矩阵转制一下,得到一个ten score。让这个t score再和V做下聚合就得到我们标准的selft的结果。
我们可以看到aser它是一模一样的。所以说明我们向量版的attion啊,可以计算和矩证版一样的结果,那可能观众就要问,那为什么我们要计算向量版的明显的向量版好像效率很低。
是但是把attention转化成向量版,我们更容易看清楚后面的一系列眼镜和变化的。最初的模样。后面苹果就提出了。attention free transformer的线性attention。
我们可以再看一看这个是什么样子呢。他把之前的Q和K取消了,转而代之的取而代之的是W和K,这是什么意思呢?我们还是从代码上来看一看,我觉得更容易理解。首先。W在。
attention free transformer里面呢被定义为一个T乘T的矩阵。这个呢它代表的是点和点之间的位置的biers,或者说位置的偏置项。
可以理解为说我第一个词和第二个词之前就有个固定的偏执。我第零个字和第三个字之前就有个固定的偏执。模型就是要学这样一个静态的固定的偏执。OK那么当模型开始便利,取到第一个token的时候。
我们会发现它仅仅是取到。当前头ken。而是一个to困之后的,他不会取到。它的计算过程呢也是把对应的。W矩阵里面。T和I之间的这么一个位置偏置拿出来。
同时呢加上1个KIKI是可以理解为第I个token的词权证或者自权证或者token权证。把这两个是加到一起。来相当于是说近似之前的Q乘以V啊。而Q上面Q乘以K的那个点击的结果,然后再取一个指数。
就得到一个就可得到了AFT的tension。然后呢,把attention的结果加到V上面。然后把测结果和VI相乘,然后把规划因子也加上了。最后。除一下规划因子,就可以输出得到AFT的。发现没有?像这样。
那么它其实上。就也实现了一种现tenion,但这个tction是线性的。为什么说它是线性的呢?它其实这个地方平实我觉得看的不是很准确。就像我刚刚说为什么我刚刚说那个是。不准确的它也是一个双重循环。
但是呢你可以看到它其实每一个tenion它。不再依赖于啊其他的所有的这个成绩啊,而是说依靠这样的。你可以理为,这个就是一个查表啊,理解为一个查表,加上是当前资权重的一个加和。他就不再需要做矩证惩罚了。
那他就摆脱了其他token和它之间的这么一个限制关系。所以他就变成了一个线性的ten。
好,那我们最后再来看一下reco的线性attention是什么样子的呢?其实受AFT的启发,reku的线性attention。也使用了W和K,还有V啊。
所以在recd paper里面都把这一项attention叫做WKV。好,那我们来看一下这WKV这个公式是什么意思呢?其实作者的思想或者说我们这论文的思想是说,我们认为啊随着这个。距离和当前token。
的变化。那么其实上这个词的重要性是有一个衰减的。啊,当前token我们给了他一个buus啊,或者说可以理解为就是一个加奖加奖。然后呢,当前token的前一个token,我们把他的这个注意力的W取为0。
然后再前一个token,就前两个token为-W,前三个token为-2W之后以此类推啊,就实现了这样的一个衰减过程。然后再。那我们现在下面来去看具体的计算过程吧。首先也是从第一个token开始取。
然后计算到。这个token开始,但是我们呢注意pyython它只取,它其实最终取值取不到T,它最终I的一个只是T减1。那么可以理解为最终其实上会计算到当前token的前一个token。那么。
对于前一token,我们怎么计算它的这个attention呢?使用W。响亮成语当前。成语,当前T和。当前乘语当前tokenT和I之间的一个距离。啊,转换为之前看到的-W-2W-3W这样的一个形式。
然后再加上。KI做一个词权重或者偷恨权重。取指数就得到了啊re。这么一个呃attention,然后再把这个attention和V乘到一起,然后再把它加上,然后规划因子也同样加上。
然后那下一步其实就有点不一样,就是说OK下一步是算一算当前token。它的这么一个attention是多少的?我们使用了U作为它的一个奖励啊,我因为我们认为当前token对于模型而言可能更重要。
所以专门给了他一个奖励,用了U,然后加上。KT就是当前token的权重给了它指数,然后再加上最后就可以计算出了了。当们。像这样做的话,就实现了我们之前所说的,随以时间衰减的这样的一个规律。
那它具体的公式是这样的。啊,但是其实像这样的话,我们会发现他好像。呃。计算起来还是不快啊,它所有的他所有的这个值还是需要依赖全面的这些所有再便利一遍,对吧?它计算效率还是不好。
那其实我们会发现在这个公式里啊,它前面这一部分。和下面这一部分其实可以用另外一个因子给它记录下来的,只需要把这个当做一个state。每次计算的时候,把它们输入进来。
再和当前的这个token的这一系列的向量进行一个计算,就可以得到WKV了。所以我们其实上不需要把所有之前的值重新算一遍的。而是在当前的话把。当前的把之前的纸啊放到一个cash里面。
你可以把它叫做cash,也可以把它叫做state。然后再和当前的这个通口来计算,这样的话呢计算效率就可以大幅提高。所以我们来看一下。raku的RN版本递归形式,其实就是利用了这样一个思想。
把之前的所有的那些求和项啊记为AT减1。规划因子里的求和项即为BT减1。然后呢,我们通过一定的推导。就可以发现啊,其实找客户第一个项就是V0。因为这个时候你可以认为他的tention就是一嘛。
然后A和B可以初始化成这样。因为。因为它就是现在我们要呃OK然后从第一个token开始便利。然后我们把A。和B要加进去,同时就算当前这个token的。值和它的buus,然后再乘上它对应的valueue。
就可以得到。当前的tention,然后呢再更新一下,再更新一下我们的A和B。用这样的一个公式跟下A和B,感兴趣的观众可以自己去推导啊。这个其实推导过程并不并不复杂,然后我们就得到了我们的tension。
那你会发现其实它计算结果和前面计算结果是一模一样的啊,说明我们这样的一个化解是正确的。
但是其实这样做还有一个问题就是数值不稳定。因为。呃指数K其实是很容易溢出的,特别是在flow16的时候,它最大的数值只有65504啊,大家可以取个log,大概也就十几的样子。如果K大于十几。
它整个值就溢出了。所以训练时呢,我们还需要做一个改造。其实这个改造说简单也挺简单的。就是每一次我们在求ESP之前,要先把它的值减到一个最大值。减掉这个最大值之后呢,就把EXP这个值压到了零和负数之间啊。
像这样的它就不会溢出了。最后呢我们再计算一下。就得到对应的ten啊,大家可以发现最后这个版本其实就是。就是彭博作者,他在他的开源代码里面使用的方式了啊,所以说我们一步一步的大家跟随着。
我就从最原始的tenion到AFT的tension,再到raku的简化版呃,简单版的tion,然后再到递归形式的tenion,最后到了数值稳定版的tenion。
就知道了啊整个工作是怎么一步一步的演进到最后的这个样子的。OK那今天想说的就这么多,谢谢。😊。
观看。
论文速读23: Vision-RWKV - P1 - Camnuy_AI - BV1FC411L7Lx
hello,大家好,今天给大家一篇文章叫做这个微人RWKV那也是一个在LNLP上问题首先提出的框架叫做RWKV在微视觉领域上的一个扩充。😊。
那我们首先来看一下这个RN和transform的呃出现的问题,这也是一个老生常谈的问题。那首先就是RN。第一个问题是在训练长序列时容易出现梯度消失的问题。因为在后面的这个taken的时候呃。
在要想梯度回传到很前慢的taken,那它这个路径会很长,就容易出现梯度消失这样的一个问题。然后第二是训练过程无法实现这样一个并行化。因为它需要每个taken,每个taken这样进行运算。😊。
然后transformer主要提出问题就是今年就是具有的二次复杂度,那长序列计算成本高,这样嫩存度。那,我们我们今天要要介绍这个RWKV的这样的一个框架,它主要的优点在于它的内存占用是恒定。
就不像transformer一样。你的taken越多,那你的占用内存越越高。呃,第二就是不随序列长度发生呃,这个内存占用恒定,不随序列长度增加。第二个就是单tken的推力时间恒定,就跟RN一样。
给单taken推力时间能达恒定。然后总推力时间随序列长度线性增加。第三就是推力时间和内存占用随模型尺寸线性增加。😊,就是说不像transformer一样,嗯。
它的推理时间和内存都跟这个整体的序列长度乘二次复杂度。
那我们就来看一下,首先来看一下,有一个叫做attention free transformer的这样的一个模型。那它本身就是一个线性的transformer的这样的一个结构。
然后呃它跟普通transer一样,首先是计算QKV。然后我们这里介绍的是介绍的是这个AFT for这样的一个结构。那AFT这样框架。
还有叫AFTloc AFT simpleimple和嗯AFT这样的一个结构。那我们介绍的是AFT for这个结构。然后我们的ARWKV呢也是基于AFT for这样的一个结构进行改进的。啊。
计算完QKV之后呢,它会对K加入一个可学习的相对位置编码。那个为什么相对位置编码?那就是这个T和T撇分别表示的是呃我们现在要融合的这个位置。然后T撇的话是我们要把那个位置的信息融合到T这个位置上。
那他们就会有一个根据它们之间的位置的差距,有一个相对的这样的一个位置编码。😊,这个嗯这里用到的位置编码是一个可学习的这样的一个位置编码。然后呢,之后我们采用sigma的函数规划QK以及并融合信息。
那这一步其实跟线性transformer基本上是一样的那就是对我们这个位置编码呢进行这样的一个s单独进行sma的操作。那Q这个函数这个向量单独进行这个sma的操作。如用单独对Q和K进行s的操作。
为什么要采用这样的方法呢?因为我们是要在attention呃在真是呃在传统transer里面呢,首先对Q和K进行相乘,然后再对sal的再用sma,然后来保证呢它每一行再融合的过程中啊。
它这个整个的值相加是等于一的就是这样会可以避免它的这个特征啊这个值如果过大的话,有可能出现这个梯度爆炸。那如果这个值过小的话,有可能出现梯度消失。单独的对对Q和Kq和K进行sma的操作的话。
就是相当于对Q来说话。😊,是这一行它的值加起来是一。那对K来说的话,这这一行加每一行加起来值都是一。那么在这样的情况下呢,它也可以保证乘出来的是每一行,这个整个和是一。那感兴趣的话可以自己去推导一下。
那线性 transformform码呢也是经呃很多线性 transform码都采用的单独对QK进行归一化,然后来保证最后乘出来的。😊,就算是这两个先相乘,那么它乘出来的相当于是attention的话。
也是能保证它的每一行的和都是一的。就是说其他位置的信息融合到这个位置的,它的这个整体的全值相加是等于一的。然后其实在线性transform里面,我们都知道它是会K和V先相乘。
然后来保证我们的这个复杂度有一个有一定的下降。😊,那这就本身呃这是完全的完整的1个AFT for的这样的一个计算流程,就跟基本的线象穿刺方法其实是一样的。只不过这里是会有一个相对位置编码。
是一个可学的相应位置编码的一个加入。😊。
那这就是下面这是我们的RWKV的这样的一个整体的结构。那它整体的结构呢跟我们的这个基本transformer也是一样的那一个transform一个这样一个类transform模块,它主要是有两部分组成。
第一部分就是time mixing。那本质上就跟我们的attention这样的一个小模块是差不多的那第二部分是channel mixing跟我们的这个一个fe forward的这样的一个模块基本上差不多的那我们首先先来介绍一下这个time mixing模块。
也就是呃最核心的就是相当于是attention的这样的一个模块,它是怎么计算的呢?😊,那么首先它计算的时候,这个R会会有一个RI的这样的一个向量。那这个本身的RI其实跟我们的Q有点类似。呃。
这个KV来计算的时候呢,都是也是像传统一样,面是有一个W那乘上这样一个特征。那这个特征呢跟我们的传统不一样。我们在传里面就是XT那这里呢它会把上一个时刻的这样一个特征啊。
哎跟像RN一样放到这样的一个这一时刻的这样的一个特征里面来进行一个小的这样的一个线性的线性的来全值为一的这样的一个整合。然后来分别得到这个KKV然后之后呢,我们的呃之后我们的这个信息融合呢。
跟我们的上面就基本上完全一致的那变化的呢基本上就只有我们的这个把Q会变成一个R,然后在在之后呢,在这个呃这个这个相当于是sma的这样一个操作过程中啊,这里。😊。
是会把前面的所有的这样,还是按照我们前面的这样的一个呃sma的操作,是用这个指数来乘上这样的一个乘数。然后再加上然后不同的一点是在于它的这个这里AFT采用的这个相对位置编码。
是对于每个T和TI它都是不一样的。TT和T撇是不一样的,都是完全学出来的。但在这里呢它其实只有一个参数,它叫做W。但然后同时呢对于我们的T和I时刻。
在这里就是我我们想把I时刻的这样的一个特征融合到T时刻里面。那它的这个相对位置编码呢,我们就把它定义成T减一减I倍的这样的一个W。那这样呢就相当于是说我们离T越近的这样的一个I。
比如说我们在I取T减一的时候,那这这一块就相当于是0。那么在这呃因为前面有一个负号嘛,然后这里有。
有定义上这个W是大于零的这样的一个情况。也就是说如果这个值越近的这个点离我们的想要融合的这个时刻T越近的话,那么这样的一个E的负这样倍数的W,那这个值就会越越大。如果离越远的话,那相当于这个值就会越大。
那整体这个负的值呢再乘以ep普on之后,那就会越小。就是说离得越远的话,那融合的信息的这个这样的一个权值就会越小。那它就是本质上就采用了这样的一个方法来呃来来这个体现我们的这样的一个离得越远。
它的权值越小的这样的一个情况。然后这个W本质上是一个学习的参数。😊,这样相当于参数量也是有一定的有一定的减少。然后呢,同时呢它是呃在呃本时刻的这样的一个时候呢,它是单独拎出来融合的。呃,不像前面一样。
它这个也是如果是对于自己时刻的话,也是一个T呃TT的这样本身是相当于是这样的一个位置编码。它也是完全放在这里面的。但它这个没有一样,没有像这样的一样。
也是用一个什么某个W倍的这样的一个不是而是用那个单一的U参数。这个U的参数跟W一样,也是一个可学习的这样的一个参量,然后相当于自己时刻的这样的一个特征融合,那也是用这样的一个全值来进行融合的。
那么本质上那下面的融合的时候,把前面所有的全值都拿出来,那么进行这样的一个规划。那么这样这个这个这个KWKV就相当于是我们最终融合出来的这样的一个。😊。
呃,变这样融合出来这样的一个信息。然后后面呢这里就是相当于做了一个相当于有一呃类似于遗忘门这样的一个操作。就像RN里面类似于遗忘门这样的一个操作,也就是是我们的R来实现的。类似于遗忘门。
然后也有也有也有本时刻的这样一个信息的。呃像Q一样的这样的一个。呃,信息融合。呃,这里其实更多的像是一个Q,就像就像是Q来做一个这样的一个跟本时刻的位置的这样的一个信息的加合。
然后后面的WN就跟我们的这样的一样,会进行一个线性线性的呃线性层。那后最终得到最终的这一时刻的这样的一个output,就经过我们time mix模块这样得到这样output。那本质上也是非很好理解。😊。
然后之后我们的之后我们再进行一个chnel mixing操作。这个chnel mixing操作本上其实呃就就基本上是一个呃线性层的这样的一个经过线性层。只不过它在呃全要是计算的时候啊。
也是会进行这样的和前意识刻这样的一个信息的融合,然后来得到RR和R和K。😊,然后再之后呢呃在这一边会进行一个max乘上一个maxKT,然后零这样的一个平方,这本质上就是跟像一个很很像一个软路呃。
但是软但是它把软路还会进行一个平方。然后之后呢,这边s格玛的RT呢按作者很说,就是这里就想达到一个像RN里面的一个遗忘门这样的一个呃遗忘遗忘门遗忘门这样的一个操作。
然后来实现我们最终的去除掉一些我们可能需要遗忘掉的这样的一个呃颤诺的特征,把它最终得到我们的最终的这样的一个输出的结果。这一时刻的结果。然后这里需要注意的一点啊,是因为我们在这里。
虽然我们在每一时刻里面这里用到的时候是一减缪R的XT减1。比如说。呃,我们time mixing的时候啊,呃我们会用到上一时刻的这样的一个ta。然后我们的channel mixing的时候呢。
也会用到用到的是我们上一时刻time mixing之后的这样的一个结果。😊,然后我们知道因因为我们上一时刻的这样一个time mixing这样的一个结果啊。
它以它的输入已经是融合在上一时刻的这样一个time mixing的输入的这样一个结果。也就是说我们这样channel mixing这样一个输入的本质上呢已经融合了这一时刻上一时刻以及在上一时刻的这样一个特征。
而我们这time mixing的呢,只是融合上一时刻channel mixing相当于再往前又融多融合的一个这样时刻。那我们知道在我们的这样的一个基本的trans模块候都是有多个这样的模块进行叠加的。
比是说后面还会多更多模块。也就是说在我们下这是第一个模块。那我们比如说在我们第二个模块时,第二个模块的time mixing相当于它输入的时候就能再得到我们 mixing输出的结果同时还会上一时刻的这样的一个channel mixing输出的这样一个结果会把它引入进来。
而上一时刻的 mixing结果。😊,我们知道就已经会融合呃上一时刻呃上一时刻上一时刻上一时刻的上一时刻以及上一时刻上一时刻上一时刻这样的一个结果。也就是说随着我们的深度增加呢。
我们的这样的一个感受也会逐渐变得越来越大。那么我们可能在最后最后一层的时候呢,也就已经能输入的相当于已经能融合前面很多层的这样的一个输入的结果。也就是说我们在呃进行这一时刻的这样一个迭代时候呢。
能能很快的这样的通过这一条线就可以得到前面很多时刻的这样的一个信息。就是说它的感受也变得很大。那整体的信息丢失的话,也会相对于RN来说会很小。因为RN它只有一条线。那这个RWKV呢。
它本质上有多条线的这样一个特征会从嗯会整个融合起来。😊,也就是说,相对RN来说更不容易出现梯度消失这样的一个情况。在我看来。然后呢,就是呃我们的RWKV呢。
它被称作这样的一个transformer时代的这样的一个RNN那也就是因为它。我们之前的推导都是基于transformer这样的一个形式啊,它为什么要采用这样的形式呢?
就是因为它可以转化为这个RN这样的一个形式,就是采用这样的一个形式。呃,它本质上有两个引变量是AT和BT它是AT和BT呢就可以采用RN的形式这样一个迭代的。然后它每一时刻的WKVT呢。
都可以采用呃我们的这个AT和BT进行这样的一个信息的融合信息的计算,直接计算来得到我们的这时刻的WKVT就说我们像现当于像RN1样来迭代更新AT和BT然后通过AT和BT来计算出来我们的WKVT也就相当于这样整体来说。
就是一个RN的形式。😊,然后下面这两张图呢来看了来这个直观的来看了一下我们的RWKV的这个网络的这样的一个呃。它的信息到底是怎样传递的那这里呢每条线呢它是一个layer,就是说 layer有12层。
也就是说我们一共迭代了12个这样的呃RWKV的基本模块,有12层。那我们也可可以看到啊就是呃黑色线的是lay越小的。也就是说呃黄色线是 layer越高层的那这能说明什么呢?就是说呃在层数较少的时候。
我们可以看到这个time decay就是这样的一个衰减。呃,time decayK在呃 layer很小的时候,它衰减的很快。😊,呃,这是一,这是零,它很快在很小的channel的时候。
它就很快衰减下来了。而我们的黄色的,它它很很远的时候,它都会衰减下来。也就是说呢我们的最底层就是越下面的层它获取到的信息更多的是他自己这一时刻以及周围几个时刻的这样的一个信息。呃,信息会记忆的更多。
而到我们的越高层的时候呢,前面时刻的这样的一个信息的衰减,它会越小。那这也跟我们。😊,哎有前面的说得到的,因为我们的更高层呢,它感受也越大。因此他能对前面的信息能更好的这样进行的一个融合以及记忆。
那也能就能进行更多的处理。而我们较低层呢,因为我们的这个本身感受也比较小。因此前面的信息进行一个底K的话也是呃。😊,也是比较比较合适的。因为我们的本身在这这一层呢,它的输入呃。
除了从前面的这个AT和BT得到之外,它本身直接的这样的一个输入是比较少的。因此我们的这样的一个我们会更容更更更加去关注我们自己本身周围的这几个块的信息,而不会记更前面的这样的一个时刻的信息。
然后这里是一个对于这个这个句子的那个待遇,对于不同呃对于不同层的看来看,它对于这个呃theal法 tower is located in这句话是怎么着进行一个呃注意力的呃以信息的这样的一个接收的。
就说我们也可以发现就是对于呃前面几个层,呢它可能就只关注到了al法的这样的。法阿法因为它是一个在这个句子里面,它是一个非常重要的一个名词。因此它在前面在呃RWKV在处理这个句子的时候。
在前面的层呢说就会关注到这个阿尔法可能后面就会用到它是一个很重要的句子。因此在前面的时候呢,它就会关注度对于这个句子关注度很高。但是我们可以发现它对于周围的这样的一个融合其实比较少。
就是说对于在这个本身的自己的位置的时候会关注到这个阿尔法这个句子很重要。因此它的这个关注度很高。然后我们发现到层数越多的时候呢,就对于周围的这样的句子就关注度多起来了。啊,就比如这一层就关度很高。
对于周围这些整个会把周后面的句子进行一个融合,然后来融合到最终的结果。然后后面的层数都会关注到这些的结果。然后最终已经融合完毕了之后,然后就会会最终得到我们的is这样的一个答案。😊,好。
之后我们就来看一下微onRWKV是怎么做的。如何把这个RWKV来。呃,扩展到这样的一个视觉的这样的一个任务上。那它其实本质上跟我们的之天讲的renet以及到RMT本质上是有一些类似之处的。呃。
类似之处主要是在于它的第一点优化。它主要有两点优化。我们从这张图中也可以看到第一个优化是WKV也就是双向的这样的一个呃细息的融合。因为说我们在NLP的时候,我们一个词可能只关注前面的词就可以。
但是我们在图像处理的时候,我们每一个像素点都要关既要关注它前面的像素点也要关注到后面的像素点,因此采用这样的一个双向的这样的一个WKV是不可或缺的。那它这里采用的方法。
其实本质上是跟我们的RMT对于renet改进是一样的。比如说它对于呃不只是对于前半时刻的呃到T减一了,而是到I等于0到大T减一,就是所有的这样的一个呃像素点都会都进行这样的一个特征融合。
然后在进行融合的时候。😊,在进行计算的时候呢,这就是加了绝对值呃,而不是用T减I。因为呃前面的这个tken和后面这个tken本质上离它的距离是一样的啊,就让它衰减度也是完全是一样的。
然后基本上其他地方都是不变,只只是把这样加了一个绝对值,然后并且扩充到了全部的像素上。那我那其实本质上就发现一个问题,那这个东西能不能变成RN形式呢?我们最重要的是要有这个RN那样形式呢。
那其实我们的RMT这篇文章他在做的时候并没有保证它能像re一样进行呃这样的一个呃。像类RN的操作,继续把它变变式,让它变成一个类RN的操作。呃,它只是把呃变成这样的一个式子之后。
就继续在这样的一个式子上进行了类 transformform操作。它只把它变成了一个新的注意力的机制。那它这里其实我们呃这篇文章也可以看到,它其实。变成这样的一个操作之后。
还是可以变成这样的一个RN形式的。只不过呢我们之前的变成RN形式啊,它需要AT和BT2个变量就可以。但是这里呢我们就需要把它变成AT减ATBTCT和DT4个变量。
那么我们的WKV是要变成4个向量这样的一个计算结果。那我们来看一下这个AT减一呢呃本质上它会要变成一个这样的新的式子,它会是变成呃对前面的。😊,它还是主要处理前面的所有的向量。那他在做的时候呢。
也就是跟前面基本上一样。只不过前对前面向量来说,它还要加加一个绝对值这样的一个操作。😊,那我们需要我们要变成RN的形式,那我们就需要从RT能从RT减一推断出来RT来用简单计算就能推断出来RTAT嗯,对。
从AT减1简要的推断出来AT那怎么来计算呢?其实我们来看看下式子,同明同学就很简单可以发现啊,那我们想从AT减一推推断到AT呢。那么首先呢我们需要先。
把这一项把整个的AT减一呢先乘上一个E的负呃E的负T乘W。呃,EE的T分之1W因因为我们相当于呃两个taken来说,我们相当于要计算下一个taken了。
那相当于前面所有的taken呢离它的距离就又远又远了一个E的T分之W。哦,这里我有一点忘记提了,那,他在除了呃在前面加个绝对值之外,还还会对整体再除一个T啊,就得出一个T。
这也是呃本身的RWKV是没有的。但这样其实本质上我感觉其实是不影响这样的一个操作。因为说如果T分T分之1也可以学习到W分W中啊,所以我感觉本质上这里的改进,其实是呃并没有什么E并不是很大啊。
然后这里我们相当于成了一个E的T分之1W之后呢,相当于我们还需要再加上我们呃这一时刻的这样的一个特征。对于下一时刻这样的一个特征结果,就说只要再加上呃E的。😊,呃,在这时刻T减1时刻的时候呢。
我们会发现啊,这也就是相当于是0。😊,这际上是0呃,其当于只需要再加上一个E的。KI呃这时刻的VI的到这时刻到AT里面就可以。然后就我在这样的情况下,我们也是可以。🎼呃。
相当于以1个RN的形式来更新我们的ATBTCT和DT的。然后最终采用呃得到结果来计算得到WKVT就说我们依然可以在这样的情况下,依然可以实现我们这样的1个RN形式的WRWKV在视觉上。好。
第二步的这样更新呢,其实就是对我们的Q shift进行一更新。呃,这个主要完成的解决是一个什么问题呢?就是我们的RLKV。我们知道它会在XT的时候啊,它会把前意时刻的这样的一个特征给引入进来。😊。
但是我们对于图像来说,其实它并不虽然。呃,微人RWKV啊大在处理的时候啊,也是会把图像变成一个序列。😊,这样的一个taken进行计算。但是呢呃作者又认又认为他这个在融合的时候啊。
因为我们的图像它是四个方向,其实都相当于是它的近邻,而不只是前半是它相当它的近邻。所以它在融合的时候呢,并没有只对前半这样的一个呃进行融合。而是他在对于。😊,向下左右四个方向的特征都进行了一个融合。
就是说这里是我们相当于是对向下组合融合结果。而在融合的过程中啊,相当于你看这里是H减一,就是说我们对于呃这这个点相当于是这个Ht,也就是说对于我们现在要融合的这个点的上面一个点把上面一个点的这样特征啊。
拿出来4分之chnel这么多大小呃,对于它下面的点也拿出来4分之channel这么一个大小,就在左边点也拿出来4分之chnel大小,右边点也拿出来4分之channel这么一个大小。
然后把这四个点呢最终四个特征融合成一个特征,就是我们的呃本质的本身的特征的维度。然后相当于对于这一时刻特征呢,在加的时候并不只加了呃在这算过程中变化成了pixel的。😊,嗯。
Pacel一个维度的这样的一个top单一维度的这样的一个talk,而是对于上下左右四个呃维度的特征都进行了这样的一个融合,然后来相当于来。😊,解决我们的呃图像中四个维度都有相邻点的这样一个问题。
但是其实我本质上感觉他还没有解决到一个问题,就是呃它在计算的时候呢,还是像我们会像我们的这样的经典的呃比如说me的变种,包包括各种各样的变种采用的方法都是会对于图像呃先分成patch。
比如说比如说我们有一个49乘49图像他们一般就会以7乘7作为一个patch。然后最终呢把这个图像分割成分割成一个呃大的每个7乘大的,一共有7乘7个patch,比如说有49个patch。
然后每个 patchch是7乘7这样的一个图像对,然后相当于把这个49个 patchch呢,把它变成一个序列,然后相当在这个序列上进行这样的一个整体的IWKV的操作。然后但是其实本质上它在计算的时候呢。
会。😊,就会呃虽然在这里会融合上下左右这样的一个信息,但是其实在那个呃本质的RWKV计算的时候,就不存在我们的二维维度的信息了。所以这其实也是后续可以改进的一个点。😊,在我看来。好。
那我们这篇文章讲解就到这里了,感谢大家收看。😊。