00:00
呃,大家好,这一期视频,呃给大家讲一下former这个模型,呃这篇这个模型呢,它这篇论文在R上的发表时间是20年4月10号,那他解决问题就是说呃,Self。它采用的是我全都要的一个机制,就是说呃,Self attention,它里面是每个单词都会attention到其他所有的词,不管每一个,不管什么token,它都会有到其他所有的N,所以说它就是一个呃,我全都要看的这么一个机制,因此它的时间复杂度和空间复杂度啊,整个复杂度都会都高达N平方级别。那为了解决这个问题,之前其实有一些工作,比方说比较经典的transform XL,那与之呃对应的一个模型就是呃XLNE,那么transform XL它解决办法就是说呃将attention与呃RN结合在一起,呃找一下。EXNE。
01:01
那个图大家看一下就明白了。就是说一篇文章,一个文档,它太长了,没有办法直接输入进去,那bet的话就会把它给截断,呃,截断成比方说你有400呃,4096个呃做token,那bet直接不管什么,他直接给你全部截断,截断掉只有512啊,取前512个token,后面的就丢掉了,那XL net是一种什么样的做法呢?就穿梭CL,他其实说呃,把这个4096这这样一篇长文档,比方说分配成呃。嗯,四。就是呃,它会分成很多个segment,比方说2048呃这样的一个,这么呃token数量的一个文本文档,呃它可能就会分成嗯,四个512的segment,那这一个segment里面就有512个token,呃,四五二十对,2048对的,嗯。
02:00
然后呢,它但是这个不同的segment之间啊,同一个segment里面,你是可以去attention的词的,但如何把不同的segment之间也串联起来呢?就是他们比方说在segment t加一的时候,你也要获得前面一个segment这个片段它的信息啊,所以说这就是一个呃,引入了一个RN的一个呃结构吧,呃,我会把这个在我这个单独的segment里面,我会处理啊,自己处理自己的,但与此同时呢。我会将我每一层的输出都传入到下一个segment呃里面去,那这样的话,每一个segment就能够呃呃之间会有一些交互的信息,但这个transform XL它有个问题在于什么呢?大家可以看到这个箭头是从左至右的,也就是他没有办法呃,比方说这个片段它就没有办法呃,Attention选到后面这个片段了。只有后面的片段能够参选到前面的片段,那他就。就是一个单向的RN了,大家可以这么理解,那每个segment之间就没有办法进行完全的交互,而只是单纯的后面的segment可以交互到前,可以获取前面的segment的信息啊,这是transform XR的问题。
03:10
呃,就会导致不同的S之间无法进行交互。没有办法进行完全的交互。所以呢?呃,为了解决这样的问题吧,那么这个former就应运而生。那么former里面主要是提出了三个新的attention机制,呃,这三种方法都很好,降低到传统self attention的复杂度,他们分别是呃划窗、空洞划窗以及融合全局信息的划窗机制。看下面这个图吧,呃,首先第一个呃,后面三个就是它的form的一个呃技术,那么第一个就是传统的self attention它的一个呃情况。也就是一个我全都要看这么的一个机制,那比方说这个这个这每一个它都是一个方阵啊,为什么呢?因为呃,假如说一个呃输入它有N个词,或者是N个token啊,我们叫N个token token吧,那N个token里面呢,呃,你肯定是个方阵,因为你这个第一个头N,你要呃填写到后面其他的所有头N,那么所以说你有N行就有N列。
04:12
啊。然后呢,这全部都是绿的,表示说每一个token它都会有attention到其他ton啊,并且它都是它一定是一个呃对称的矩阵,因为。你这个头N,呃,Attention到另一个头N之后,那么另一个头N也会attention到你这个头N,所以说你们两个头N,呃都会互相attention到,那么你们之间一定,那么这个矩阵图一定是个方阵啊,呃,对称矩阵好,那么这个就是传统self attention就不说了,那这个呢,就是呃,首先是long former的第一个技术就叫滑窗忌日啊,这个滑窗具体来说。它会设置类似于CN,呃,我给大家看一张图。T。
05:03
大家看一下啊,呃,如果说你用一个卷积和去划这个呃这样的一个句子的话,然后这个呃,这个这个句子啊,它有多少个词就有多少行,然后每一个句子呢,用多少维的向量去进行一个编码,那就是word in bedding嘛,那么它就有多少列,那么就最后组成了一个呃,N行M列的一个矩阵,N表示一个句子它的单词的个数,M表示说每一个词用多少倍的向量去编码。如果说你用CN去做一个卷积啊,然后呢,你设置啊,卷积核的大小是多少,那么它是不是比方说这个这个黄色的框,它的卷积核大小就是三。那我们可以认为它就同时看到了and左边和右边的词啊,对吧。就是这样的一个东西,那么这个也是一样的,呃,它的attention呢,大家可以看到,比方说对于某一行。啊,就能放大一点。
06:03
那好吧,那这样吧。比方说对于其中的某一行啊,它这个绿色的呢,表示说他自己,然后左边这个浅绿色的啊,左边有三个,右边有三个,也就是他的可以理解他说它的一个,嗯嗯,CN的一个剪积和的宽度是多少呢?是七,用左边三个,右边三个加上它一个就是嗯七个。这样一次往下滑去,那如果说你左边没有,你看这里一开始它是一个呃开它是第一个字,它是第一个头肯,所以它左边没有头肯了,那就它就只能看到右边的,然后慢慢的才会有左边的头感,然后慢慢的这样子下来,那就是一个滑窗,非常简单,呃,这里。就是划窗,那么这里有一点要注意的时候,就是,呃,大家可能会误认为这个滑窗,它的窗口W会比较小,但实际上这个作者的实验,它在实现的时候呢,它的窗口大小非常的大,W是512,也就是我们可以看到这个地方,我以为它W就是七,或者是非常非常小,100以内吧,但它设置的是512这么大,呃,可以理解吧,因为一篇长文档至少都是比方说2048个token,或者是4096TOKEN这样的级别,嗯,你设置512好像也没有什么特别大的问题。
07:27
当然你这个512相对于你整个文档token的数量就小得多了。其实。好,那么呃,其他的就呃不说了,那么第二个机制呢,就叫空洞滑窗啊,这个空洞滑窗其实非常的简单,就是CN里面的空洞卷积,虽然我对空洞卷积呃了解的并不深入,但我知道他是一个什么样的东西,就是说原本我们做卷积就是把你这个呃。这个词周围啊,三左三个右三个去做一个剪辑,那么它空中剪辑就是说把你这个词啊隔一个啊,你看这中间隔掉一个,那么就是白色的,然后呃,Attention这个,然后再隔一个,再attention,那么它其实呃什么东西没有变呢?就是他看到的词的数量是没有变的,你看他可以看到他自己看他左边这个这个和这个以及右边的那个那个一共加起来还是七个没有变,只不过说他这个。
08:19
能够看到的最远的词变远了啊,大家可以看到,比方说原来这一行它可能最远只能看到左边三个,右边三个,但其实到了这边之后呢,空中卷积,它可以看到左边的第六个和右边的第六个,123456,对第六个就是这样的一个意思,但实际上啊,当然作者会做实验发现啊,空洞卷积效果会更好一些,但实际上我对这个是持有怀疑态度的,因为这个我不是说它的效果不好,我只是说它的运气成分很大,呃,为什么会这么说呢?我的想法就是说,凭什么attention某个间隔之外的词就一定比单纯attention周围的词效果会会更好呢?它这个不就是隔了一定的间隔嘛,这里的话,像这个间隔就是一它隔一个,然后再去腾行一个再隔一个,再腾啊,为什么会一定会更好呢?比方说我举个反例啊。
09:08
I lost some money at the,呃,赌城昨天那就说这个其实是有歧义的,这个last他可以说是呃,我在赌城输了一些钱,或者是呃,我在赌城丢了一些钱就丢失,或者是输,输掉了。那么对于传统的滑窗来说,假如说我设的置传统的划窗,呃,窗口大小为五,那么lost。他就可以看到呃,左边五个,那左边没有五个,就只能看到这一个I这个单词,然后看到右边some money at的啊这个12345对吧,那么他就可以刚好看到这个东西,那因此虽然这句话本身就是有歧义的。但是他lost看到了这个词之后呢,他可能大概率就会认为这个lost它的意思是呃。就是啊,赌赌输了啊这么那个意思,但是如果说你用空洞划窗的话,比方说我设置呃,窗口打小还是五,但是呢,我是它间隔是五,那比方说呃,Lost它会隔五个,再去attention,那会隔隔到哪五个呢?12345,这个五个它就不会attention了,他只会去这个词从这开始,往后从这个yesterday,那如果后面还有单词的话,他会从yesterday开始,往后再数四个,加上这个yesterday就是五个了嘛,那么他就关注不到这个赌成这个单词了,那他的意思可能就会认为是呃丢失,传统的一个丢失的意思。
10:31
而这句话来说,是否曾选到这个呃,赌神这个词对于这句话的意思的理解有着至关重要的影响。虽然我一再强调这句话本身就是有歧义的,但是这个例子啊,它就很好的说明了。你不一定用空洞滑窗就一定会比传统的滑窗要好的,这是一个运气的问题。嗯,因为。我也强调过,你空洞滑窗所看到的单词的数量和传统滑窗是根本就没有变的,你们都是看到一辆数量的单词,只不过说你的视野范围变大了,但是你的视野范围变大,呃,所带来的影响就是你可能有些词是看不到的。
11:11
那原来你这里能看到了,你现在看不到了,你就会产生一个啊,所以说到底谁好,其实真的说不好的,这个就是看运气了,所以我确实对这个空洞划窗,呃,他这个。机制是很有意思,但是我还是对他持有怀疑态度。那么这个就那呃,我个人的观点就不多说了吧,大家自己去呃做做实验什么,去验证一下就好了,那么第三个就是说融合了一个全局的呃。全局信息的一个,呃,这个怎么看呢?大家看可以看到,首先它是一个对称矩阵,我说了你啊这里有两个词啊,这这个词和这个词,然后你这个词attention到这个词的时候呢,那么这个词也会attention到这个词,所以说它们之间是一个,所以它产生的这个attention矩阵,它一定是个对称的,当然也有可能说,呃,你这个词成选这个词的时候呢,轮到这个词的它就不反过来了,成选这个词,那么它就不是一个对称级了,也有可能会有这样的情况,嗯,好,那我们看一下这个东西怎么看呢?它主要是为了针对于一些特殊的任务,比方说。
12:13
在be的时候呢,呃,我们如果说用预训练的bet在做下游任务,比方说做文本分类的任务的时候呢,我们一般会用CS。这个token来代表这个整个句子的一个句向量,然后再去做下游的呃传给呃全链接神经网络去做分类,呃这样子那么我们就希望什么呢?希望cos啊,它本身它就必须要呃能够呃,Attention选到其他的所有的词。因为我们就是用CS去代替呃整个句子的向量,那如果说CS都没有办法,没有办法看到所有的词,那你用它到底效果好吗?其实是不一定的,所以说为了解决特定任务的一些问题,那么呃,龙风就提出了这么一个全局,嗯。Attention全局attention也不是说全部都是全局,而是一些特殊,比方说我刚提到的C,它是可以看到的,那么因此的话,第一行和第一列就是全绿的,那它这个图上的第二行,嗯,第二列是全绿的,呃,这个就。
13:17
这个就不一定了,可能它只是画的时候就显示这么一个效果而已,但如果说你只是CS的话,那肯定是只有是只有第一行第一列是全绿的,那其他地方有有绿的表示什么呢?呃,比方说QA任务,也就是question answeringing的一个任务,呃,它可能会就是说对于问题,它会把问题和文档。拼接起来,然后送入模型,那么在呃,那么你这个问题的每一个词可能都会呃参选到所有的那个文档啊,其实这个全局要成写,就是针对于特定任务的一个attention,大家可以这么理解就好了,因此呢,比方说呃,这个地方是问题啊,这个地方也是问题,那么这个问题呢,就要attention到所有词,然后这个问题也要也要attention到所有的词,那反过来所有的词都要被这个问题attention到啊。
14:03
就这就是一个这样的对称矩阵。嗯,这里我也用啊,哎呦,这里有大图我搞忘了,那么这里就是一个呃图大家自己看就好了,呃,包括文本说明。然后呢,最后结果就是。呃,首先作者在两个数据集上做了一个实验,用的是former,呃,一个test吧,一个是呃,English wiy8。啊,这个。这个这两个数据集我都没有见过,然后呢,其他的就是和别人一些对比,然后这个实验效果呢,是一个呃BPC。就是be per character,我也不知道这个是是一个什么样的东西,反正就是说呃越小越好,那它是最小的,所以说它是最好的啊,大概就是这样子。呃其次呢,作者还设置了一些实验啊,就是呃对于不同的层,呃因为我们知道transform有很多层了,像bird的话就是12层,呃,Transform传统的话啊,是六层还是八层来找我搞啊呃它有很多层,那么底呃对于不同的层采用不同的窗口大小是否可以提高性能啊?结果表明,当你从呃最底层到高层依次递增窗口大小的时候,是可以提升性能的。反之,如果说你从底层窗口大小比较呃比较大,然后高层窗口大小比较小,那你的性能就会降低。那么作者这里做了一个实验,呃,Decreasing,就比方说,呃,从下往上,你的窗口大小依次变小。
15:34
那它的BBC就很大,这个我再次强调,这个BBC是越小越好的,而这个increasing就是说啊,从下到上,你的窗口大小是越来越大的啊,从三十二一直到500圈二,那么它就呃是最好的。还有就是说呃,你是否使用空洞滑窗机制可以提高性能的呢?那么结果是呃比较好,但实际上大家可以看到它不使用空中滑窗是1.21,使用了之后呢,呃是更好,只降低了0.01个点,所以说这里还是我提到一个呃问题吧。
16:07
空中华商到底是不是更好呢?这是一个运气问题,可能从长期期望来说,他可能会好那么一点点吧,但是啊,这个真的不好说了。然后呢,作者以呃robot为基础,呃采用龙form的方法,就是划窗的机制,在以下四个文档上面进行一个预训练,然后得到效果,和传统的宝彩去进行对比啊,发现都更好啊,这个就没什么说的,肯定会更好,不好的话发发论文说什么的,然后呢,作者做了一些消融研究啊,呃就是说因为它采用的是预训练的一个呃揉巴塔。在预训练的时候,把它的基础上呃,Checkpoint呃加载它的checkpoint,然后去继续继续训练,所以说他可能会怀疑说嗯,是否是因为呃采用的是预训练的巴塔,所以说效果更好呢?那么作者做了一些研究,我们看到这个呃第三行这里。
17:04
呃,它采用训练的reta,然后呢,S也是512,那并且没有使用,没有使用任何的作者新提出来的三种机制,而是使用传统的attention机制,他发现相比效果更差了,所以说其实呃。并不是由由于robot萨预训练带来的,当然你使用预训练,呃,预训练模型去进行继续训练,肯定效果是更好的,但是是否会,嗯,但是他这个想证明的就是说他自己的滑窗机制是有提升的,而不止而不是由于我使用预训练而带来的,那大家可以继续看到这个图,我不使用这个东西以及之类的,哦,对,这里忘了提了一点,就是说。呃,作者他同时使用两套映射矩阵,这里我使用套这个呃量词,是因为我们知道映射矩阵,像QKV就是映射矩阵,呃是是有三个,那么我们把这三个映射矩阵。
18:05
称为一套,那这里作者这里使用两套,也就是说一个用于局部注意力机制,那就是呃,Q。就是三个Q3个Q,然后呢,另一套用于啊3QKVQKV一套,另一套用于全局注意力机制,那就是另一套QKV了,所以他们用的是不一样的。啊,那么整个呃,龙凤大概也是这么多,其实这个模型呢。呃,可能是我最近我也不知道是不是我看的,呃,论文有有点多了,反正我就感觉我看到什么论文之后都觉得有一点怪怪的,都觉得他们性能好像不是那么的好,有一些问题里面存在一些问题,呃,当然这里我其实当时看到这个东西的时候呢,我想到一个什么呢?我想到的是呃。传统的bet的mask的问题。呃,这里稍微耽误大家一点时间,我我这里提一下。
19:07
呃,就是这里传统的bird mask可能是它是单独mask一个字,那比方对于中文它就可能只会mask一个字了,但是呢,后面有个有个改进,就是说whole world masking mask,整个呃,整个字。呃,整个词,比方说模型,那么bird的话,它就只会mask模,而呃,Whole world masking,它的处理就会mask模和型这两个都会mask,那么还有一种就是叫spab,就是他说嗯,既然你们都不确定到底要mask多少好,那我就干脆设置一个概率,然后然后让他来随机去mask,呃,有这么一个概率,选择这么长的一个长度去mask等等等等,所以我当时想到,呃,其实空洞卷积你这个D,就是你这个间隔到底设置为多少比较好,还是说不设置比较好?呃,你要不然可以说呃,改就是大家如果想要去改进的话,可以说嗯。
20:01
去设置一个可学习的参数,把这个D设置为可学习的参数,呃,让它去慢慢学习到啊,我到底要间隔多少是效果比较好的,或者说你不把它设置为可学习的参数,你就按照这个一样设置为一个概率的去,呃,去采样,比方说我设置D等于一,间隔为一,它的概率是多少啊,D选择D等于二的时候概率是多少?让他去采样,然后让他去呃选择这样的一个呃滑窗,而不是说固定好它的一个呃空洞,整机的这个空洞,它的呃D等于多少,好,那么这个就是啊一些我的个人想法吧,好,那么本期视频就到这儿,谢谢大家。
我来说两句