Q&A:Transformer, Bert, ELMO, GPT, VIT

南方阴雨绵绵的气候出门都成了一种奢望,即便冬季漫长而又枯燥,但那真正意义上的春天也将悄然来临。

这样的开头并不多见,那今天为什么要舞文弄墨呢?因为感冒它终于好了!所以对近期的科研工作做个小结,但是呢很多地方不敢细想,水太深,把握不住,就写写常见的question and answer

一、Q&A:Transformer 

1. Transformer为什么要使用多头注意力机制呢?

你可以想啊,这件事情就是,我们在做self-attention的时候,是用q去找相关的k。但是“相关”这件事情,有很多种不同的形式,有很多种不同的定义。所以呢,也许我们不能只有一个q,应该有不同的q,不同的q负责不同种类的相关性。较为书面的表达就是:多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。

2. Transformer计算attention的时候为何选择点乘而不是加法呢?

KQ计算dot-production是为了得到一个attention score 矩阵,用来对V进行加权。K和Q使用了不同的W^{k}, W^{q}来计算,可以理解为是在不同空间上的投影。正因为有了这种不同空间的投影,增加了表达能力,这样计算得到的attention score matrix的泛化能力更高。

3. 为什么在进行softmax之前需要对attention进行scaled呢?
transformer中的attention为什么scaled?https://www.zhihu.com/question/339723385/answer/782509914

4. Transformer中encoder和decoder是如何进行交互的?

那之前在 Why transformer?(三)有专门提到encoder和decoder之间是怎么传递讯息的,这里呢简单表述一下:q呢来自decoder,k跟v来自encoder,这个步骤就叫做Cross attention。具体参考:Why transformer?(三)https://blog.csdn.net/m0_57541899/article/details/122761220?spm=1001.2014.3001.5501

5. 为什么transformer块使用LayerNorm而不是BatchNorm呢? 

transformer 为什么使用 layer normalization,而不是其他的归一化方法? - 知乎 (zhihu.com)https://www.zhihu.com/question/395811291

二、Q&A:Bert and its family

1.  Bert 在做一件怎样的事情呢?

Bert做的事情就是:丢一个word sequence给Bert,然后每一个word都会吐一个embedding出来给你就结束了。那至于Bert里面的架构长什么样子呢,之前也提到过说Bert的架构跟transformer encoder架构是一样的。那transformer encoder里面有什么东西呢?当然是self-attention layer。那self-attention layer在干什么事情呢?就是input a sequence,然后output a sequence。那现在整个Bert架构就是input word sequence,然后它output对应word的embedding。

2. Bert这个nerve是怎么被训练出来的呢?

第一个训练的方法是掩码语言模型(Mask Language Model,MLM);第二个训练的方法是下一个句子预测(Next Sentence Prediction,NSP);更具体的呢在之前的 Bert and its family——Bert有写到过:Bert and its family——Berthttps://blog.csdn.net/m0_57541899/article/details/122789735?spm=1001.2014.3001.55013. Bert的mask方式有怎样的优缺点呢? 

Bert的mask方式:在选择mask的15%的词当中,80%情况下mask掉这个词,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。优点(1)被随机选择mask的15%的词当中,以10%的概率用任意词替换去预测正确的词,相当于文本纠错任务,为Bert模型赋予了一定的文本纠错能力;(2)被随机选择mask的15%的词当中,以10%的概率保持原词汇不变,缓解了fine-tune时候与预训练时候输入不匹配的问题(预训练时候输入句子当中有mask,而fine-tune时候输入是完整无缺的句子,即为输入不匹配问题)。缺点:对有两个及两个以上连续字组成的词,随机mask割裂了连续字之间的相关性,使模型不太容易学习到词的语义信息。

4. 模型有了,那要怎么使用Bert呢?

一个直观的想法是把Bert的model跟你接下来要做的任务一起做训练,那怎么把Bert跟接下来的downstream的任务结合在一起呢?在Bert and its family——Bert中举了四个例子作为参考:Bert and its family——Berthttps://blog.csdn.net/m0_57541899/article/details/122789735?spm=1001.2014.3001.55015. Bert的两个预训练任务对应的损失函数是什么呢?

Bert的损失函数由两部分组成,第一部分是来自 掩码语言模型(Mask Language Model,MLM)另一部分来自下一个句子预测(Next Sentence Prediction,NSP)。通过这两个任务的联合学习,可以使得 Bert学习到的embedding既有token级别信息,同时也包含了句子级别的语义信息。具体损失函数为:L\left(\theta, \theta_{1}, \theta_{2}\right)=L_{1}\left(\theta, \theta_{1}\right)+L_{2}\left(\theta, \theta_{2}\right)。其中的参数是什么含义呢,动手查一查吧

6. ELMO在做一件怎样的事情呢?

 ELMO要做的事情就是: 

Bert and its family——ELMOhttps://blog.csdn.net/m0_57541899/article/details/122775529?spm=1001.2014.3001.55017. GPT在做一件怎样的事情呢?

你可能猜到我又要给一个链接了对不对,是的,猜到又怎样

Bert and its family——GPThttps://blog.csdn.net/m0_57541899/article/details/122839064?spm=1001.2014.3001.5501

三、Q&A:VIT 

关于vision transformer呢有太多优秀的blog,所以呢这里只写几个常见的问题啦

1. layer normalization & batch normalization的区别?

Layer normalization做的事情比BN更简单输入一个向量,输出另一个向量,不考虑batch,它是对同一个feature里面的不同dimension计算mean跟std,而BN是跟不同feature里面的同一dimension计算mean跟std

2. 为什么需要CLS token呢?

可以类比Bert:Bert在文本前插入一个CLS符号,并将该符号对应的输出向量作为整篇文章的语义表示用于文本分类,可以理解为:与文本中已有的其他字/词相比,这个无明显语义信息的符号会更加“公平”地融合文本中的字/词的语义信息

3. Multi-head Attention的本质

有时候我们不能只有一个q,应该有不同的q,负责不同种类的相关性,其本质就是:在参数总量保持不变的情况下,将同样的q,k,v映射到原来的高纬度的子空间进行attention计算,换句话说,是寻找到了序列之间不同角度的关联关系,并在最后concat中将不同子空间捕获的关联关系再综合起来

4. VIT原理分析

 理论分析

Q&A:Transformer, Bert, ELMO, GPT, VIT_第1张图片

代码实现 :

对于标准的Transformer模块,要求输入的是token (向量)序列,即二维矩阵[num_token, token_dim] =[196,768]

在代码实现中,直接通过一个卷积层来实现。以ViT- B/16为例,使用卷积核大小为16x16stride16卷积核个数为768,[224, 224, 3] -> [14, 14, 768] -> [196, 768]

在输入Transformer Encoder之前需要加上[class]token以及Position Embedding。拼接[class]token:  Cat([1, 768], [196, 768]) -> [197, 768]叠加Position Embedding:  [197, 768] -> [197, 768]

你可能感兴趣的:(知识拓展,transformer,bert,深度学习)