00:01
大家好,欢迎来到我们大模型公开课的第二节,也就是标题是transformer。然后我们先从上一节最后留的疑问讲起来,不知道小伙伴们还记不记得,上一节的末尾就是提到有一个即将改变世界的东西出现,它就是transformer,也就是我我们这节课的主角,那么在说它之前呢,我们想先从上一节提到的这个。就是R从它的缺陷弹起来,对,我们上一节其实讲了,就是R的这种Co的一个结构,然后然后搭配注意力机制,它其实已经非常厉害了,对,难道他还能改进吗?对,我们想想他有什么缺点。诶,其实我们也写出来了,就是说RN它本身有个绕不过去的缺陷是什么呢?那就是它无法进行并行计算,我们看一下右边的。
01:02
呃,这张图你看我们先incoder部分,我们比如输入一个翻译任务,知识就是力量,你看我们必须要先输入值,然后然后参与第一个in include的二值,就RN模块的运算,然后它的它必须运算完啊,它的结果结合着下一个下一个字符10输进来,然后以此类推,也就是。每个字儿输进去,运算的时候,必须你得等前面的运算完毕之后,然后才能接下来跟着运算。那这。无,无疑会就限制我们的一个运算速度,对有,换言之,他没法没办法进行并行运算,就他必须得必须得先算一个,再算另一个,哎,这就会导致其实训练起来还蛮慢的。好。那么我们这节的主主角,也就是谷歌在17年提出的。呃,当时论文论文名字也很嚣张,Attention is all you need.
02:02
就是这个注意力机制。是你唯一需要的。那么我们先大概快速列一遍论文,论文提出了一个什么样的网络架构吧。对,首先它有一个非常呃惊世骇俗的创新点,它就是完全舍弃了用的非常广泛的就是CNN,对。然后还有RN,然后他转而只用了一个DN,然后DN的话,小伙伴可以回忆一下,其实就是我们提到的,呃,对连接,也就是矩阵成对,这个乍一看好像模型结构非常的复古,对,好像是走回了老路。对,那我们先简单看一看,像它这个transformer的一个整体架构,它整体还是遵循这种incode decode的架构,就是你看比如比如他这边的一个翻译任务,比如incoder也是若的部分算完之后给到decoder。对,那么详细展开来说的话,就是每一个coder或decoder。
03:04
它的结构就是右面的这部分。对,它其实展开就是,就是你看我们从这里先是左边的inputs,然后输入到这个。对,做一个编码,然后再加上一个所谓的位置编码。然后然后就送进去这个multi headde attention, 对,这这个这也是论文的一个核心的地方,我们后面再展开述啊,对,然后然后再后面再送进去加,然后做nor规划,呃,然后然后feed forward的前辈,呃,其实就是诶可以可以理解为就是就是过了一些非线性的计划函数吧,这是最核心的。对,然后decota其实跟跟incota这个部分是类似的,就右边的这个,唯一不同的是是多了一个ma mask就是码的一个单身。好,那么我们再再说回到这个DNN,对就问就对他为什么提出用DNN呢?我们我们还记得我们最开始提出RN的缺陷时吗?诶,它没办法进行并行运算,对,我们我们要知道算力就是一切,算力就是力量,对那么DN它为什么可以并行呢?因为DN的本质啊,它其实是一个矩阵成,你看像我们举这个例子,还是这个翻译任务,我有一只猫,然后我们根据上节课,哎,我们我们讲过的environment,其实我们就可以把它。
04:32
呃,就是就是变换成呃对应的四个向量,比如我是对应的第一行的这个颜色深一点的向量,有的话是第二行,一知的话也是他他作为一个。呃,看诶就是变成第3行猫第4行。对,然后那这个整个数,它就可以变换成一一整个这么一个,呃,就比如我们的图中的是一个4×6的矩阵啊。然后跟跟这个。
05:01
Wait相乘,对,然后因为矩阵成我们知道是可以是可以随便并行的。对,也就是换换另外一个说法,就是说输入顺序其实是没有是没有先后的一个概念的,对,因为因为矩阵程某种程度上啊,就是说你其实你交换你交换两行输入的位置,而是是不妨碍最终的结果的,对,当然呃,当然这是只是简单提的,其实这里有,这里严格来说是不是可以展开一系列数学推导,就是我们其实可以从数学上证明啊,就是对于对于神经网络来说,如果如果你只是单纯的就是把这边的输入顺序调换一下,它其实最终学到的东西是不一样的。对,那么这儿就引出了一个问题啊,因为你看我我们举这个例子,如果输入我有一只猫,或者猫有一只我或者什么猫,我一只有什么一只有猫,我就反正我们这就我们这四个ton随便组合就这几种输入啊,我们刚提到对网络来说没有任何的区别。
06:05
北京因为因为它怎么输入他都没有先后学到的是一样的,但是含义显然是不同啊,因为对我们人来说,对吧,就是说你你的这个词的顺序是非常非常重要的一个信息,那网络又学不到,那么该怎么办呢?对,就是位置信息这个事儿非常非常重要,怎么解决好,那么他就提出了一个方案,什么方案呢?也就是说引入一个位置embedding的概念。对,就也就是我们第一,我们第章其实其实学过了一些,嗯,就in的变化方式,比如这里它可以用A,比如word to vect, 哎,就是是个原来原始的词,我有一只猫,然后分别用之前的方案,然后变成了四个向量,好那么我在你这个基础上。然后我,然后我根据你词的出现的顺序,我再给你再再加一个向量,对,也就是我们所谓的位置embedding,对就是词embedding加上位置embedded,他俩加一起,然后作为我们的网络也是transformer它的一个。
07:13
呃,整体的输入,诶他诶他这个设计就很巧妙,就是我我既然我就是我单纯的输入词in bedding, 就是我学的东西都一样,但是位置信息又很重要,那我干脆就是我涉及我涉及套位置in bedding的编码。然后我用词,用词的词就是词向量加位置向量作为一个最终的输入,嗯,那这样的话,网络其实就可以有效的,诶学到这个东西,他他对他可以看就知道哦,你这个可能是第一个出现的,诶就是他能学到这个信息的。诶,对,然后然后这个same beding怎么出现,对,我们上一章也简单说过啊,就是他既可以通过一些比如word VE得到,也可以训练的,然后这个位置inding。
08:04
论文中是是怎么设计的呢?它设计的一个呃这个三角函数,对,但咱这边展开来说的话,其实有几点可说的,就是第一是呃,就是为什么这个位置embing它它不用这种呃学习的方法就是训练去得到呢,其实。我们去翻看,呃,原始论文啊,他其实就提到了,就训练也可以,对,但是他实验出来说是你训练出来的位置in bedding, 跟我这种直接用数学方案设计的这种,比如基于三角函数的embedding,效果是一样的,就对模型来说无所谓。但是,但是用这个数学推导的in bedding有个好处,也就是它这个位置是可以是可以无限长的,对,就比如说我的我的训练数据里面,假设我训练数据里最长的一个文本只有就只有300个字儿吧,那我网络其实最多也就见过300个位置到300的一个em白点。
09:03
嗯,对,他你万一用户用的时候输入了一个长度1000的,那可能模型没见过,那这个后面的em bed可能就乱给了,这这不行了,那么位置regard定,那如果用数学推导的话,它有个好处是对吗?因为我数学推导我我长度可以无限,我不管你是。长度300还是1万,我我都可以,呃,轻松的拿捏,对,所以就中上,就是最终其实选用了一个数学方案推导。对,然后然后其实为什么是选这种这种s coing, 对这个有兴趣的小伙伴下去可以自己研究一下,它其实主要是相对一个它它们之间有有位置编码的一个相对关系,就是说通过这个能换算出来两个词之间的相对关系,那这边就不深入展开说了。好,我们我们再回过头来看看这个传former的一个核心网络结构啊,我们最左边这个图,对它它其实就是每一个coder或对就就Co模块吧,对就是具体来说是左左边这个其实是是一个的。
10:08
呃,一个模块的样子,右边的话是一个deota的模块样子,其实可以看到他们长的几乎是完全一样的啊,就唯一唯一不一样的其实是我们画红框的这个就是就是论文的最核心的所有的attention的部分,就是in框的部分,它是就是它它这个多头注意力,右边的是mask的,就是加了野马的多头主意力,对,就是。我们这儿捋清楚就是coder,呃,是没有mask decoder加了mask,这个mask具体干嘛呢?我们后面再说到。好,那么我们先看看这种不加ma不加mask的一个一个一个多头注意力展开,就我们最左边红框展开之后,其实中间这个图啊,它其实可以看看做了做了什么运算,就是原始的原始的输入X,然后然后各自乘以一个边外矩针,就变成了我们的所谓的QKV。
11:02
好,然后我们的我们的QKV再再都单独送到这个所谓的attention模块,就是中间画红框这个,然后然后得出了各种结果,然后再contact拼起来。然后再送,最后送Li层,好,那么我们中间这个画横框的地方展开来说,那就是右面这个图啊对,这个这个也是很经典的,呃,Attention的核心公式,对,其实也就是Q跟K,我们可以看看,做了个矩阵,成矩阵成之之后,然后成了一个呃,K列为固定的数,Q对就做一个缩放变化。然后如果如果是抵扣的部分呢,还要再成立一个MAS,我们现在就呃先讲inco的,就先不管这个mask就跳过,那么接下来就做一个soft max soft max其实就是小伙伴们都知道是归一化,就是归一化之后再跟V去相乘。好。
12:00
我们我们再进一步放大看一看。对,就是我,你看我们这边左边有三个框,蓝的黄的红的,其实它跟最左边的红黄蓝是对应的,就我们还拿那个我有一只猫举例子啊对,比如我有一只猫,它它原始输入他,他跟一个就是。就是Q的变换,时针乘完之后我们就得到了Q。然后同理,这个这个X跟K的变量矩阵乘完之后就得到了K,然后V也是同理,就是QKV首先是这么来的,对,我们要明白是怎么来的,就是数输入数据乘以变换矩阵。对,这个边缘矩阵也是模型学习来的。好,那么得到QKV之后,好,我们我们就把QKV其实就就送到送到这一步了,最左边的这个图跟右边这个公式是完全等价,我们先你看看右边这个公式其实就是就是Q×Q矩阵乘以Q矩阵的转置,其实也就是俩矩阵相乘嘛,在我我们左边的图里面就是这个,就是这一块Q这个K,好,然后然后这边除了一个根号D对应我们布里最左边就是黄色这个Q。
13:17
好,然后做一个soft max, 对,就是绿色的soft max, 然后soft max soft max完之后,然后再跟V型,跟V做一个矩阵差就是就是。右边公式里的s max完成V。对,然后这边对DK有个解释,就是跟Q,就QV的矩阵列数,向量维度,对,再说通俗点,其实就是一个固定的数,因为你模型训练完对这个数是固定的,你就是简单理解为成一个固定数就好了。好,那么我们这边再再展开,呃,看看这个公式啊,你看我们先说soft max, 小伙伴们都知道它是归一化,对,那那么其实它的attention体验在哪边呢?那那其其实体验的就是soft soft max完之后,它其实是一个就是000~1之间的各种就是概率嘛。
14:10
然后跟V相乘呢,其实就是说对V实现了一个一个加权,对就是啊,但是呢,核心是什么呢?呃,但是呢,本质就是说对,就是某些信息你认为重要,那么你给他的权重就高一点,如果某些信息不重要,那么你给给他的权重就低一点,这个东西就是s max完之后,它其实就是就是概率嘛。对,那对,也或者说叫权重,然后这个权重这个V相乘,以此来实现了一个所谓的attention。好对,我我我们这儿举了一个举的举的一个例子啊,比如先画红框,这部分开盘怎么算,比如说哎,还是这QPKQNK相乘之后,你看是是变成了一个方阵,对对,也也就是一个我们这个图里面画的是4×4的。
15:01
对,然后就4×4的方阵,做完soft max之后,哎,那我们知道这个就变成了一个对,就变成了一个,就是就0~1之间的一个方阵,也就是规划后的方阵对,换言之,它其实就是可以作为一个。呃,就是就是一个一个权重系数一样,然后对V,如果跟V后一后一步相乘,就是进行一个加权。对,你看我们这边举的一个呃详细的例子,就比如呃这呃呃最左边呃这个是就是上一步算出来的一个。呃,就是一个规划后的矩阵,然后跟微相程,最终得出了最终结果的Z,我们比如把比如把这个Z的第一行单独拿出来看看它是怎么算,你看我们比如哎,对,我们也把这个这个规划后的矩阵拿出来,我们假设这它规划是这个数0.30.2 0.20.3,然后跟V相乘,那么是,那么它就等价于啥呢?它其实就等价于你看它就假如V这边有四行,就我我有一只猫嘛,四行对吧。
16:04
那就是对他可能这一步运算,他认为这个,诶这个我的权重可能是,哎还00.3。然后加上这个有乘以0.2,一只乘以0.2,加上猫再乘0.3,哎,对有小伙伴们就看明白了,也就是也就是这边是啥,其实的最核心的就是对这个的理解。也就是我们通过算出来的,呃,就是就是0~1的s max之后的概率矩阵跟V相乘,然后然后对V的不同行去赋予它一个不同的权重,就是你认为它重要的,你给它乘一个大点的数,小的就乘一个小点的数,对以此来实现一个就是对,就是对不同的内容,然后有的权重高,那么说明认为这个更重呀,哎,我的我的attention就多注意这边一点。对,然后数数小的,那么就认为没有那么没有那么重要的,对。
17:03
好,那么attention的最核心的理解就是这个,好,那么我们看看这个唯一媒体的这个mask。呃,他是在说什么?对,那么那么这个mask它其实就是只存在这个比coder结构中啊,Co是没有的。好,那么mask他其实做一个什么事儿呢?对,我们记不记得最开始还提到了这个,呃,Transformer的,呃一个一个大创新是啥?它其实就是可以并行运算了,也是解放了呃运算能力,呃就是换言之,比如说我,我输了,我有一只猫,那么我们前面前面推导的时候说过,我们再看一眼。呃,对,你看它就是它这边是可以并行运算的,就是有输入我有一只猫,它可以这个我有一只和猫就直接一个矩阵成就,就就这四个词就同时在参与运算的,对。呃,我想期望模型的训练的目标是我有一只猫,比如翻译成I have a catite, 对,那么如果我们把答案也直接输进去,I have a cat, 对,就它翻译的时它它翻译到比如I的时候,他就他就只他就只能只能看到I,那么它翻译have的时候,它就只能看到就I have, 也就是他。
18:22
不允许模型在训练的时候就是看到后面的答案,以此来完成作弊,对,也就是它翻译到哪个位置,哎,然后我然后我们就把它后面的位置,呃,对应位置的mask掩码都置为0,这样就看不到后面就是就是每每加一个磁层的mask掩码就就由0改为1,这样他就能就能多看一个。对,以以此类推,一直到最后一个词,它就能才能看到完整的信息,对,他其实就是说白了,它其实就是训练的时候为了防止模型作弊,如果是在部署模型的时候,就不用关注这个问题。
19:01
好,那么这节课就到这里。
我来说两句