00:00
呃,大家好,今天这期视频啊,是给大家讲一下t and its family啊,这个视频就是我这期视频啊,其实是呃,在我学习了李宏毅老师的这一期视频的讲解之后的一个精简版吧,因为呃老师还是讲了很多东西的,呃,但是呢,我觉得里面有些重点我会呃再提出来讲一下,呃然后呢,他的视频的话,大老师的视频大概有60多分钟吧,然后我讲的话也就非常快,可能几呃几十分钟就讲完了,那我们先看一下吧,首先大名鼎鼎芝麻节。哦,对了,在讲这个之前呢,这个图片是什么意思啊?呃,这个是李宏毅老师本人啊,这是他自己的一个,呃,调侃的一张图,然后呢,他买了一件T恤,这个T恤里面全部是芝麻街的人物,呃,然后我去淘宝上搜了一下,这个T恤非常的贵啊,你如果说算上运费要运到内地来的话,大概要400块钱。嗯,大家去搜stereo啊,Steo加芝麻街这样关键词就可以搜到了,300多块钱一件T恤,呃,然后呢?
01:03
这个大平帝女芝麻街就是说,呃,因为一开始elmo,他这个命名EL Mo,然后他是以芝麻街的人物命名的,后来贝尔特等等,哎,有earlier等等等等。啊,这个就不说了,大家自己看一眼就好了,呃,我会挑一些比较重点的东西说,然后呢,因为这些模型呢太大了,所以说大家要去用,或者是呃,从头与训练的话就非常的困难,那有没有什么能够让我们穷人也能够呃用得起的呢?那就有这么一些好心人在研究这个问题,那比方说啊这些。呃,本着授人以鱼不如授人以渔的一个思想吧,所以说呃,我们是得到了别人的一个小的模型,但如果说我们自己想要让模型变小,有哪些方法呢?那我们可以看一下这期视频,呃,这个是,嗯,大家可以看下这个视里面一共有六节啊。或者是看一下这篇文章,就是说呃,关于压缩part的所有的各种方法,这里总结的也非常的好,然家可以看一下,呃,那么具体来说就有这么几个方法,呃,更详细的话可以看这个视频和这个文章,那么下面的话就是说,嗯。
02:14
除了模型压缩啊,现在还有更多的研究是关于呃,一些结构化的设计,比方说transform XL,它解决的问题是什么呢?呃,它解决是说本没有办法一次性读入特别长的文本的问题,比方说呃。法律文,呃,法律文献吧,它可能是非常非常长的一篇文档。你没有办法融入进去,因为有,因为自注意机,自注意力机制,它非常消耗呃时间和空间。呃,它是N平方级别的,所以说就嗯非常非常吃内存。呃,那么就有这么几个,呃,一个叫reformer,还有former transformer XL这几篇文章就提出来一些解决办法。
03:00
使他们的呃复杂度变得更低。呃,后面的话就是说如何去做翻tune啊,这个地方李红英老师讲的非常多啊,但是呃,我个人觉得有有非常多都是比较简单的内容,比方说你要做一个句子分类,呃。那么其实我们用bet拿来之后呢,我们常见的做法就是说利用CS单词的输出,然后后面跟一个FC,然后做一个分类,这个其实都非常简单了,所以我就没有在这儿列出来了,我列,呃,我这唯独写了一个任务,就是基于一个抽取的一个,呃。呃,问答问题,比方说嗯,现在有一篇文档是这个,然后呢,有一个问题,或者说有两个问题。然后你要把这个文档和这些问题啊送入模型,然后模型会输出两个integer,两个数,那这两个数表示什么呢?表示说呃,这个问题的答案,这个问题的答案它是在文档的第S个词到第一个词之间,那这个S和E是一个B区间。
04:05
啊,也就是这样的一个意思,比方说这个文档,然后是这个问题,那么这个问题的答案就是第,嗯,S是77是七九,那就是第77个词,然后第79个词就是这样子。那具体来说怎么做呢?呃,首先我们这里有个预训练模型,然后呢,你这里啊,把问题和文档进行输入,当然我看了这个图之后,我觉得,呃,似乎把文档和问题这两个输入的顺序交换一下,应该也没有什么问题。然后中间以sep风格,那么你这个地方,呃,最后呢,我要把这个所有文档里面单词的输出。啊,我先讲这里这里这里有两个向量是我们生成的,呃,是可训练的,然后呢,这个橙色的向量和这个文档所有单词的输出。啊,它的向量每橙色的和每一个向量做一个dot,那这里呃,它们相乘之后呢,再做一个ma,得到这么一些概率值,然后取这个概率值的max,也就是概率值最大所在的下标。
05:05
啊,最大值所在的下标,那表示这个0.5是最大的,然后下标从一开始,那么这个0.5它对应的下标就是二,那表示说这个S就是二。然后这个E也是同理的,呃,你用E去乘以这些向呃单词的向量,然后呢,呃,再做一个soft max,呃,你取它的阿max0.7,它最大值它所的下表是三,那就是说S2S等于二,一就等于三了,那么这个答案就是第二,第三,呃,当然其中会有一些问题,比方说我们。呃,我们知道,呃,这个开始结束,那么开始一定要小于等于结束的,但是如果说Y1S大于一,怎么怎么办呢?其实这个呃也是也是有这种情况的,因为比方说这个问题啊和这个。文档它根本就是不匹配的,呃,这个问题问的东西根本就不在这个文档里面,或者说这个问题本来就没有答案,呃,那么你这个输出就是对的,S大于一的话就是对的,呃,因为这个问题本来就没有答案。
06:07
好,那么这个就是我专门提出来的一个下游任务,呃,就是QA问题吧,这个因为我见的比较少,然后呢,就是说。呃,你去翻tu你的模型的时候呢,有两种方法,一种是说把你这个train的模型里面的参数也进行更新,另一种是不更新这个参数,那么呃,这两种方法有什么样的区别呢?就我个人的经验来看啊。就是,嗯,如果说你的显存。呃,比方说2080T,我呃我们实验是2080T的显存是11个G,如果说你的显存不够报显存的话,那么建议你首先调小by size,如果说都调到一了,还是显存,比方说很大的模型,呃,像呃large等等,它这些模型参数都是非常多,而且模型的整体结构非常大的话,你可能BY塞调到一都都没有办法去,嗯跑跑动。
07:04
那么这个时候就你就没有办法选择了,只能去,呃,固定住print train模型的一个参数,呃,如果说你的显存够大,呃,那么建议你还是去整体都做一个更新,包括模型的参数要更新,呃,从效果来讲的话,整体全部更新,所有参数都更新的效果是要好一些的。是要明显比这个固定住模型的不更新的话要好很多的。好,那么就是这个,呃,下一个问题就是说如何去选择你的下任务的一个future。呃,这里有一张图,这个图表示什么呢?比方说这个是一个birdt模型。然后这里共有13层,为什么会有13层呢?因为贝特原本有12层对吧?还有一层就是向量,那表示inding,呃。然后呢,这个这个人做了一个实验,就是在NR任务上做了一个实验,他他在想到底选取哪些层的输出,或者是哪一层的输出啊,或者是什么样的组合使得在ne err任务上呃去做效果最好呢?那么或或者你换成你的呃分类任务也可以,那你到底是选智慧层的呃特征拿去做一个分类,还是说呃选1BY定层的呃特征拿去分类更好呢?那么这个人就做了一个任务呃实验,就是说他发现呃这么多种组合之后呢,发现他用倒数四层它的一个向量的拼接。
08:29
呃,也就是contact,然后得到的效果是最好的96.1,当然这个东西的话,还是要看你的任务,他这个是NR任务,可能说换一个简单的句子,分类任务就不是这样子了。呃,那么呃,这个东西的话呢,有一个人呃,肖寒,他在他的get up上创建了一个项目。啊,就是这个项目。不是这个,是这个。它就是去帮助你这个项目啊,就是帮助你去选择呃,到底哪些呃,哪些层的特征去做一个组合会比较好,呃当然他有一个观点就是说使用倒数第二层是比较合理的啊,为什么这样讲,我们可以想一下,假如说你使用第一层,或者我们把这个下面叫做下层,上面的输出叫做上层,那你如果用下层的呃输出,比方呃,In be层,或者第一层,第二层,第三层它好像呃关于这个它就是假如说这是个birdt,然后并且你现在下游的任务是n err,呃,我们先讲上层吧。
09:28
你如果说用最后一层的输出去做一个特征啊,做一个NR任务的话呢,其实不是特别的好,为什么我们可以这么想,呃,在原始的bet它的模型当中,它最后一层是用来做他的预训练任务的,它的预训练任务是什么?一个mask,一个是nest,呃,An NP就是next sentence prediction的问题,这两个问题他是用它最后一层去做这两个预训的任务,而你现在是拿你的拿这个最后一层去做你的任务。好像并不是特别好,因为他他他的最后一层特征是比较针对于他自己的预训练任务的,那现在换一个任务了,可能它效果就不是特别好了,那再比方说下层的一些东西,比方说你用呃第一层的输出。
10:12
第一层的输出,好像关于整个任务他都没有学到很多东西,不管是你这个n err啊,还是说他原本的这个bet的预训练任务,他好像都没有学到什么东西,他只是学到的是说哦,我怎么样去表示一个单词就可以了,所以说好像下层的一些东西也不是特别好,那么萧寒就认为,呃,下层东西不是特别好,呃上层最最后一层也不是特别好,所以说呃,倒数第二层可能会稍微好一些,因为倒数第二层的话。嗯。它既有很多句子的信息啊,也有同时也会含有一点点预训练任务的呃信息,那么在你自己的任务上去做会好一些,因此他这个呃项目啊。你调用的时候默认的它使用的就是倒数第二层的一个特征。
11:03
呃,当然李宏毅老师这里讲的并不是这样的,呃,李宏毅老师讲的是什么呢?李红老师讲的就是说,呃,有些人做了一个实验,就是说把这个呃各层的输出啊。比方说比方说就是第六层,呃,第六层和第七层他们的输出做一个组合,那首先用第六层乘以一个值,然后呢,第七层乘以一个值,那么这个第七层它里面的向量的值就变了,然后这个值就变了,然后再把这两个的输出呢,再做一个相加或者是拼接。那么同时呢,呃,我们乘以的这两个数啊,都是参数啊,它是可学习的啊,然后呢,再去做一个下游任务,可能这样会比较好一些,当然这个东西的话就呃,有很多种排列组合了,而且不一定可能对他的任务好,对你的任务就不好了,所以说这个东西还是比较呃比较难选择的,应该是没有一个统一的标准答案的这个东西。呃,那么下面就是说,呃,为什么要使用呃预训练模型呢?那么这里有一张图啊,这上面所有的虚线都表示说没有做预训练,而是直接在你的任务上去进行一个训练的情况,就是training loss,我们发现没有做预训练,比方说像这个东西他们都嗯,他的loss啊。
12:18
下降的都比较慢,收敛的比较慢,而且有些时候还会有些问题,而做预训练的,呃,模型呢,他在他在再去训练的时候呢,就会稍微你看大家可以看到就会平缓很多啊,这就是为什么要使用训练模型。还有一点就是说,左边这个图是loss它的图啊,右边也是loss,然后呢,左边这个表示说没有做过预训练的啊,右边表示说做过预训练的,那么他们的开始点,然后这个是训练结束的时候,他们的点,我会看到左边这个是没有做过预训练的,呃,没有做过预训练的时候呢。它最后可以到达一个谷底,也就是落非常低的地方啊,右边也是,但是呢,它的区别在于左边这个非常陡峭,右边在于呃,它的它的这个loss非常平缓,在最低点附近它是比较平缓的,那这样表表示什么呢?
13:12
我们可以想象,假如说你这个输入稍微改变一下,那么对于这个没有预训练过的模型,它可能就。呃,因为它这个loss面非常陡峭嘛,他可能就这个loss就跑的非常大,因此它这个效果可能就不是特别好,它的泛化能力就不好。而对于这个运训练过的模型呢,你如果说把你的输入稍微改变一下,那它可能还是在这个谷底的附近,因为它是个比较平缓的一个面嘛,其实它的loss还是呃,Loss还是非常的低的。所以说它对于预训练过的模型,预训练过的模型对于呃,你的任务可能就泛化能力比较比较好啊,这是这么一种说法。啊,后面开始的话就讲解一些,呃,波尔特家族啊,那么首先一开始就是elmo,呃。
14:04
E呢,就其实就是一个传统非常非常简单的一个by directional ls TM,这个我相信大家都呃已经非常。非常了解这个东西了,LSTM,其实就是一个双向的啊,首先我把这个句子啊,正向的读入一遍,然后得到一个in bedding,然后把这个句子反向输入一遍,得到一个in bedding,然后将这两个in bedding进行一个拼接,拼接完了之后再去做我的下任务,呃,但是呢。好像这个东西看起来好像是个双向的模型,对,他也写了班级。但实际上他在。底层就在下层的时候,其实并不是双向的,因为我可以这么想,在你下层的时候,也就假如说你这个STM有非常多层。在第一层的时候呢,你这个单词输入从左往右,然后你要预测W4啊,也就说你输入W4的时候得到这个inbding,那这个inbding它看到了后面的单词吗?并没有,所以说他他这个LTM在第一层的时候,从做网络的LTM它是个单向的,呃,他只能看到左边信息,而反向的LTM呢。
15:09
他也只能看到你这个右边的信息,他也看不到左边的信息,所以说在下层的时候呢,它好像并不是真正的双向,而只是说随着层数越来越高啊,随着层数越来越深,它这个越来越往上层走,它这个向量才会越来越获得,呃,对于双向的信息越来越敏感,嗯,所以说这个almo呢。呃,很多人说它是一个双向的模型,但是它其实嗯算嗯,应该不算一个双向的模型。啊,然后就是贝贝的话,大家都了解非常多了,这里我就。不讲了吧,这个没什么好说的不是。但是呢,这里有一点啊,呃,大家可以就是说bird,它里面有预训练任务是mask嘛,然后它是要通过左右,就是说整个这个呃,Mask周围的词。呃来预测这个mask它的单词到底是什么,这个其实和呃以前在呃。
16:05
七八年以前。的一个呃,Word vector这个任务非常相像,它们唯一的不同点在于什么呢?Word vector,我们会设定一个窗口大小,然后呢,让这个词它只能看到呃。呃,比上这个窗口的还是二,呃,是是T啊,不,不是二,那就说我要预测T这个单词到底是什么,那WT对吧?那就是这里WT,然后呢,我只能看到这个窗口,呃,左边两个,右边两个它的词,然后呢,通过这些词的信息,然后来预测出WT是什么,那其实和这个呃,Bet的mask任务非常非常相像,只不过有一点他们区别在于这个bet,它这个窗口大小是无限的,多长都可以,而这个呃,Word to after呢?也就是C,它的任务呢,它设定好了窗口大小是二,那左边两个,右边两个只能看到这么长的一个,呃,左右的文本的信息。
17:00
呃,下一个是whole world markets,呃,这个。用的也呃它是解决bet一个什么样的问题呢?因为我们知道birdt它是以字为或者说s former它是以字为单位去呃呃处理呃一个句子的,那比方说对于中文来说。呃,像它就会把每一个字啊,它会它都会,它都会拆开,它不会是以词为单位,那我们比方说它这个mask bet mask的时候,它就会把一个字去mask掉,那比方说使用语言,然后什么型来测什么下一个单词的什么什么东西,那好像非常简单,But对于中,对于中文上来说非常简单,他就知道这个mask是什么东西了,而这个whole world masin,就是说它要预测整个词,嗯。呃,不对,他预测整个词,它把整个词都mustk掉,这样的话使得birdt这个预训的任务变得更加困难,使得这个birdt他学到的东西更多,比方说这里,呃,像这种whole world masking,它的方法的话就是说他把这个模型这个词完全去mask掉,那就mask mask,然后来呃预测他把这个实验mask mak啊,这样去替换。
18:15
这就是这样一个东西,那么简称叫WWM,其实大家都可以看到很多地方,呃,它会以WWM。比方这里呢,中文WWM其实就是呃,Whole world,呃,Mask这样的一个缩写。那么下面还有一个呃模型叫SPA,呃就是说呃前面不是提到whole world markets吗?那么SPA就是说嗯,我是否我如果说随机的去选择多长的一个单呃字被mask掉,是否效果会更好呢?那么它就做了一个这样的东西,这个是sample的probability。也就是说你这个比方说一的话,那就是mask一个字,然后呢,二的话就比MASK2个字,然后这两个字是连续的,然后比方十的话,就是连续mask掉十个字,那它是以服从这样的一个概率使用一个random函数,然后呃至式子扔出来什么值,那么就是什么值了。
19:14
然后它在它的,呃,他发现它的效果呢,也还是比较好的,当然其中有一些效果不是特别好,呃,李宏毅老师也说了,就是到了bet这一步啊,其实已就是说去改进bet的一些模型,其实或多或少很难去在所有的任务上都取得非常好的成绩了。啊,就是那么其中他提出来一个东西叫做也就是span boundary object这样一个目标。他具体来说什么呢?比方说我呃随机到四,那么我就呃呃连续MASK4个字,然后呢,我去呃。我这个时候呢,不使用这个mask,它它的位置得到的这个输出,它的特征去预测这是什么词,而是以这一个连续的被mask到的区域的左右两边的词,他们的一个输出来预测这个中间到底是什么东西。这个也是非常。
20:10
啊,令人匪夷所思吧。也觉得很很。很奇怪为什么要这样子做,嗯,当然大家可以理解,就是说呃,可能是说这个词这一块区域左右两边可能会包含这个东西吧,但是呢,那你照你这么说,为什么不使用其他,就是说呃,这个we must,左右两边所有的词去做一个整合,然后再去做一个预测呢,为什么一定要用左右两边单独的词呢?啊,不管了,反正他就是这么设计的,然后呢,你去。比方说你要去呃预测这里面123第三个词,那你就呃第三个字,那你就要以啊这两个单词的输出,然后再输入一个三,然后得到啊,这是W6,那比方说你要预测第二个词,那你这就输入二,也就说你一共会输入三个东西,一个是左边这个词的的输出,一个是右边的词的输出,还有一个是你的索引,这个索引表示你要预测这个we mask叫第几个位置啊。
21:06
他的一个索引。然后下面就是XL了,当然我前面我先说一下我个人观点啊,其实我特别不喜欢。也不是特别不喜欢,就是特别不相信l XL net,为什么这么说呢?呃,其实关于更详细XL net视频,呃就讲解可以看我的文章,或者是我在B站录的那个视频,呃,他是说将这个句子啊打乱,然后去进行一个预测,呃为什么会这样子呢?啊,其实为了就是为了解决bet预训,呃训练和测试的时候阶段不统一的一个问题,因为他在bet在训练的时候啊,它有mask这么一个token。而你在测试的时候呢,又没有mask这个头了。嗯。但是呢,XRNE还有一个改进,就是说它既结合了呃auto in,又结合了auto regressive,呃,具体来说是这样子的,它是怎么做的呢?大家可以看到这样子,嗯,看这个图的话,感觉它好像是一个auto regressive对吧?通过前两个词,然后预测下一个词,然后再通过前两个词预测下一个词,呃,有点像STM了,其实但是呢,它会把这个句子啊打乱一遍,打乱顺序,嗯,然后呢,再取出这几个打的顺序的一些东西,最后输入,比方说他把原来深度学习这样的词打案顺序变成升学度习,然后呢,他输入深,希望他预测出学,然后呢,呃。
22:31
或者是,当然,其实啊,XL net并不是呃这么夸张,没有这么夸张效果。一般来说,XL net都会把末尾的一些词让他去预测,而不是说一开始才输入一个词就让你去预测,他也没有这么强的能力了,那么他可能是说呃,预测深学度。然后呢,就会让他预测出企嗯这样子,那么我们可以这是一个autoresive的图嘛,那如果说按照呃,Auto,呃,Encoder的角度去看呢,就是说然后它输入是嗯。
23:05
深度学习对吧。然后他只去采用度和习他们的一个特征来预测学,那其实它的一个句子的顺序可能就是呃度袭生,呃度袭学生。因为为什么要这样子呢?因为你只采用这两个的特征的话,其实就是相当于说你还没有看到生这个字,那也就是说你没有办法,你没有看到这个字,那你就没有办法去采用这个字它的一个特征,所以说它的输入可能就是肚脐。学。深或者是齐度学生等等都可以,那再比方说这个样子,他只用一个深,然后就预去预测这个mask,那可能这个呃,它输入的序列的顺序可能就是。嗯。
24:01
学习或者升学习度都有可能啊,总之就是这个样子啊。那再比方说这个图,它可能输入的顺序就是啊,总之就是深度习学,反正就是这三个词。124这三个词,它们的顺序都是摆在这个mask,这个呃,学这个单词,呃这个字它的前面的,呃,它就是一个打乱proation language model,就打乱这个句子,然后让他去进行一个预测。嗯,这样的话就既统一了auto in,也统一了auto ress,但是呢,呃。他这样做是否真的好呢?因为你去打乱句子之后呢,模型可能就觉得说你这个你这个世界好像句子都是这样子的一个顺序,那当你真正让他去预测。呃,在下个任务的时候,你肯定输入一个正常的句子嘛,然后你把这个正常句子输入的时候呢,模型可能就懵了,因为你预训练的时候给他都是这种乱序的句子。那他可能觉得说,呃。
25:01
他反正就可能一时间反应不过来吧,所以说对你这个下游任务就不是特别好,但是呢,它的在训练的效果是要比bird好的,不过这个地方有一点就是说他用的数据,它训练的数据比T多的多的多啊,所以说我个人其实不是特别喜欢ne这个模型。然后接下来就是ma和啊massk,呃,这两个模型是为了解决一个什么样的问题呢?就是T不善的问题,因为我们知道T它其实就是。啊,通过一些token,然后呢,去预测一个token,他并没有说,呃,通过一些token,啊通或者是通过一个句子再去生成下一个句子,他只是通过一些token预测一个token而已,他并没有预测一个句子,所以说他并不擅长生成任务。而ma和ma和bar。就是解决这样的一个问题,呃,具体来说这是一个模型,这也是一个模型,然后呢,你输入是WW2 W3 W4,然后呢,通过一个腾啊,再传一个模型,这个其实非常像sequence to sequence啊,然后呢,你这个模型要输出啊,W5WW7W8。
26:13
但是呢,我们希望这个5678啊,它其实就是1234,他们是一模一样的,所以我们希望说呃,我输入了之后呢,啊得到一个呃,然后这个attention传入下面去,然后呢,它能够还原我这个原来的呃呃单词,并且顺序啊是一模一样的。但是这样看来好像比较简单,因为模型可能就直接啊,把这个W1COPY过来,W2COPY过来,呃,好像模型就没有学到什么东西,呃也非常简单,这样是不是就没有效果呢?所以说我们要对大呃原始这个输入啊,对它做一些破坏,那么具体来说有哪些破坏方法呢?就是这里,呃,这个我在bart那篇文章或者是那个视频里面我也讲了,这篇我就讲的快一些,首先是比方说你把这个呃。单词给must掉对吧,然后呢,还还有就是比方说你删除一个单词啊,Abcde,那你把D给must掉,或者你把D删掉,或者是你把这个abcde,把这两篇文章顺序交换一下,或者是你直接做一个旋转怎么样子,或者是in feeling,呃,这个test in feeling,就是说呃,可能你原来中间AB本来就不差,不差死的,但是呢,我就是要添加一个mask,然后呢,让模型去看他能不能发现这里本来就不差死,如果说模型还是认为这里差死了,那就说明模型呃,没有一所好。
27:32
呃,或者说这里原本是CDE,对吧,那你只用一个mask去替换掉那模型啊,当它读abcde,呃读读到AB的时候呢,发现这里只有一个mask,但是他觉得这里好像应该有两个词才对,所以他可能会预测出两个词,那这个还是非常困难的一个任务啊,台词林feeling,因为他我感觉他结合了这个,呃,Mask和delete这样的一个两个任务,那么它最后的结果就是说,呃,旋转,呃,Protation和rotation都不是特别好,Or test in feeling非常非常好。呃,这个还是我前面说的问题啊,就是模型认为他在训练的时候,他发现你这个句子啊都是乱序的,其实他学到一个乱序的一个语言信息。
28:13
那么他认为你这个世界的语言都是乱的,当你在测试的时候呢,你输入一个正序的句子,他可能就一时间反应不过来了,就是这样的一个事情。呃,那么下面有一个叫UN language model,这个东西就非常厉害了。它既是T也是呃,它既是Co也是Co,它也是一个coco,也是sequence to sequence,那么具体来说怎么做呢?呃,你是encounter对吧,那就是其实就是一个传统的bird,那它是通过这样的一个mask矩阵来实现的,呃。是这样的,UN language model,它解决的问题就是说,呃,大家有的人用啊,像有的人用,像gpt啊,有的人用sequence to sequence就是bar和mass,那他有没有办法去统一起来,用一个模型去解决呢?那么这个就是呃,由你,呃呃常物质model。
29:07
它主要的通过方式就是说,呃,使用这么一个mask矩阵,呃,比方说这个birdt啊,它其实所有的词都能看到,对吧?呃,不管你这里是有没有mask掉,那你比方说你这里mask掉,那你其实也是能看到其他单词的信息的,所以说这里mask全部都是空的,不需要对某一个词或者是怎么样子去mask掉,而对于decoder呢,你这个decoder啊,比方说你这个这个单词你只能看到所有单词都只能看到你左边的单词,因为你要去做一个decoder嘛,你要去啊这里输出,然后呢,再传入这里,然后这里再输入,再输出,再传入这里,你需要通过一个自左向右的一个生成的一个问题的,所以说你不能提前就看到右边的东西。因为你是自自左到右去一步一步去吐出单词的,你如果说提前就看到右边的东西,那你还有什么必要嘛,你直接把右边这个东西你看到的你给它呃,抄过来不就好了,所以说我们不能让模型看到这个单词每个单词右边的东西,那么它就会生成一个上上交矩阵。
30:06
具体来说,比方说这是第一个词,然后这是第一个词,那第一个词可以看到第一个词信息量当然可以,那第一个词可以看到第二个词的信息吗?是不可以的,因为你这个第一词我说了,你只能看到你左边的信息,不能看到右边的信息,所以说你第一个词不能看到第二个词,第三个词,第四个词、第五个词都不可以。那比方说你第二个词可以看到第一个词的信息吗?当然可以,那你第二个词可以看到第二个词的信息吗?当然可以。因为你第一个词在第二个词的左边嘛,当你第二个词可以看到第三个词,第四个词,第五个词嘛,当然是不行的,因为都在右边,所以说这就是一个呃,这样的一个mask。那还有一种,呃,最后一个就是sequence to sequence呃,Sequence to sequence里面,它既呃in,呃,Sequence to sequence就是一个encoder结构嘛,那么在inder里面呢,它是可以看到它这个呃这个句子里面所有的词的,而在decoder里面呢,它还是它就是这样子,不能看到你的呃右边的词,你只能看到你左边的词,那么它这个mask矩阵啊,就是这样子,所以你在encoder里面啊,因为你是encoder,所以说你不能看到decoder里面所有东西,那么这个S1是一句话,S2是一句话,那么这个S1这句话呢,它对于他自己就没有任何限制,但是S1这句话他不能看到S2的所有的呃所有的句子,因为你如果看到S2所有句子,那你这个attention的时候呢,你可能就专注于attention这个S2的句子,然后你把这个attention传入S2,那不就相当于也是作弊了嘛,然后呢,这个S2啊,他在做S2就是底扣ta的部分了,S2的他当然可以看到S1的所有的单词啊,因为它都在左边,但是呢,S2也不能看到S2的右边的词,所以说呃,它这个。
31:39
这里是一个,但是看到S2S2这一块,它是一个上角上三角矩阵,在这里must掉了。那么这个就是一个,呃,UN language language model,那么最后呃还还有几个,还有两个,呃倒数第二个这个模型呢,是electron,呃,这个模型呃,非常有意思啊,它有点类似于干怎么说呢。
32:01
因为我们说要预测一个呃单词啊,它是就比方说这里mask掉,那这里不是it是mask,然后呢,我们要通过左右的词,然后去预测这个被mask的的单词,他可能非常的困难,这个任务因为看这里,比方说呃,这个厨师呃呃吃呃这个肉,那厨师怎么肉呢?比方说厨师在切肉,或者说师厨师在吃肉等等等等,他有很多种答案,他可能都非常的好,呃就就是说非常非常预测来说非常困难,因为他有很多种答案嘛,那么这个electron,它就把这个任务变成说,呃,我把这个单词啊,我替换成别的单词,而不使用这个呃。而不使用mask呃来盖住,然后呢,我要让模型判断这个单词是否被替换过,因为比方说这个厨师,呃,吃过这个肉。听起来好像怪怪的,然后如果说厨师他原本是eat,呃,E正在吃这个肉,可能就是正确的一个呃句子,那如果说模型呃厨师吃过这个肉,那可能觉得呃好像听起来有点怪怪的,所以说他就会觉得嗯,这个it这个单词是不是被替换过,那么它就会输出啊,Yes,然后其他词没有被替换过,输出no,这是有点耍。那么现在问题在于呃你如何去?
33:15
生成这样的一个,呃,被替换的单词呢?它这里就做了一个使用了一个比较小的bet,为什么要使用比较小的bet,因为如果说你用非常非常好的一个bet,它可能就呃把这个mask直接就输出一个it e出来了,那你还有什么训练的必要吗?因为你都全部都是正确的句子,那都是no了,所以你你就学不到呃它会它被替换掉的部分了,至要用一个比较差一点的模型啊small bur小一点的让他去预测,呃预测出来呢,这个语法。呃,比较正确,然后呢,看起来又有点怪怪的,就是这样的一个感觉,呃,不知道大家能不能理解。呃,然后呢,传入这个it,然后输出yes,但是呢,这里有个李红老师的一个注注释啊,他说这并不是一个干,因为干的目标是generator,要骗过这个discri,呃,Discriminator就是呃,生成器啊,要骗过这个判别期,而这个elect它在训练的时候呢,就是这个small bird自己训练自己的,他跟这个后面这个模型完全没有关系,他就自己啊,你输入个句子,然后得到这个东西,然后我这个东西传入下面去,然后他得到的一个loss呢,他只会更新这个呃,Discriminator,不会更新这个呃,Generator。
34:30
所以他就只是自己玩自己的,然后去生生词说说词。然后给我就可以了,我你至于你到底输出怎么样,我也不管,然后你的目标也没有,你的目标就是预测mask,而没有说想要去骗过这个,呃下面这个模型,所以说这并不是一个干,那么这里呃提到这儿我就会想说一下,就是在比方说大家会呃用一些预训练模型嘛,Elect对吧,那你到底要用elect的什么部分去做一个下游任务呢?你到底是用这个部分还是说用这个部分去做一个下游任务呢?那么因为大家呃可能会见到有些呃跟他像吗?他会同时提供给你啊,Generator和discriminator,那你到底有哪个呢?其实这里用discriminator去做你下个任务,比方说你要去做呃,句子分类也好,或者说前面提到的。
35:19
问答任务也好,都是要用discrimination会比较好的,不要去用这个generator。呃,那么大家这里就选择discrimin就可以了,好,那么呃,这个就是。然后呢,Electtra有非常好的效果,大家这个图自己看一下就好了,然后结合下面的文字,呃,最后一个模型就是t five,呃,T five也是谷歌出的,它就是做了什么呢?他把所有的排列组合全部试了一遍,比方说他在这个整个模型的架构,他可能用了一个bet类的模型,那么然后呢,他选择bet类模型,它到底有哪些呃破坏的方式呢?比方说mask或者是呃,Span或者是drop等等,然后他选择这些东西之后呢,再选择它这个破坏的概率是多大呢?然后这样,然后再去选择它这个破坏的长度是多大呢?那么它就有非常非常多种排列组合,比方说这一共三三,呃四四,那就是三乘三乘四乘四等等等等各种各样的排列组合,那这完全就是一个非常庞大的计算任务,那也就只有像谷歌这样的一个,呃,有有这么有钱的公司才能做到的。
36:24
所以让别人,呃,他们研究完了,让别人没有研究可以做了,好那么整个就是一个呃,Birth and family的一个讲解,呃讲的可能会比较快,因为我想要,因为想节约大家时间嘛,好那么本期视频就到这儿,谢谢大家。
我来说两句