文章目录
- 1. 请简述一下Transformer的基本结构和原理
- 2. Transformer为什么使用多头注意力机制
- 3. Transformer计算attention为什么选择点乘而不是加法?两个计算复杂度和效果上有什么区别?
- 4. 为什么在softmax之后要对attention进行scaled(为什么除以d_k的平方根)
- 5. 在计算attention score时,如何对padding做mask操作
- 6. 简单介绍一下Transformer的位置编码,有什么意义和缺点?
- 7. Transformer相比于RNN有什么优势
- 8. encoder和decoder是如何交互的
- 9. decoder里的多头注意力和encoder里的多头注意力有什么区别
- 10. Transformer中的mask是怎么样的?
- 11. Transformer在哪里做了权重共享?
- 12. Transforme中的Q、K为什么使用不同的权重生成,为什么不使用同一个值进行自身的点乘
- 13. 为什么在进行多头注意力的时候需要对每个head降维?
- 14. Transformer如何处理可变长度的数据?
- 15. Transformer为什么要用残差的结构?
- 16. 为什么Transformer用LayerNorm而不用BatchNorm?
- 17. Transformer前馈神经网络用的是什么激活函数?
- 18. Transformer块的输入输出大小有什么关系?
- 19. Transformer有哪些变体?
- 20. Transformer有哪些可调的参数?
1. 请简述一下Transformer的基本结构和原理
具体可以之前的博客:Transformer——逐步详解架构和完整代码搭建
2. Transformer为什么使用多头注意力机制
一方面,多头保证了Transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。假设多头的头数为h,那么就相当于模型有h次的学习机会,有一些类似于卷积的多通道输出。另一方面,多头可以让参数矩阵形成多个子空间,矩阵整体size不变,只改变了每个head对应的维度大小,这样使得矩阵对多方面进行学习,但是计算量和单个head差不多。
3. Transformer计算attention为什么选择点乘而不是加法?两个计算复杂度和效果上有什么区别?
为了计算更快,矩阵加法计算虽然比较简单,但是现代GPU适合矩阵乘法的运算,Transformer中的attention设计多个头的矩阵运算,因此选择点乘更合适一些。点乘的计算复杂度大致是O(n2*d),其中n是序列长度,d是模型的维度。
4. 为什么在softmax之后要对attention进行scaled(为什么除以d_k的平方根)
为了避免softmax输出one-hot从而梯度消失。假设Q、K的均值为0,方差为1,矩阵乘积将有均值为0,方差为d_k,因为使用的d_k的平方根进行缩放。因为Q K的矩阵乘积本应均值为0,方差为1,这样可以获得更平缓的softmax,避免梯度消失。
5. 在计算attention score时,如何对padding做mask操作
将padding需要mask的位置取负无穷,一般去一个负的足够大的数即可,比如-1000,softmax计算之后该位置就会变成0。
6. 简单介绍一下Transformer的位置编码,有什么意义和缺点?
self-attention是位置无关的,即打乱句子的排序,计算出来的self-attention结果是一样的,但是文本信息的前后序列有着很大的语义关系,因此需要加入位置编码来保存这种序列化的信息。Transformer中使用了固定的positional encoding来表示token在句子中的绝对位置,相对位置编码(RPE)针对此做出了改进。绝对位置编码也可以替换成可学习的位置编码。
7. Transformer相比于RNN有什么优势
RNN的计算是有前后依赖关系的,即当前轮的输出必须要等上一轮的输出计算完成之后才可以计算,因此并行能力较差,有序列的依赖关系。Transformer的并行计算能力更强,并且特征提取能力也更好。也正是因为Transformer的并行计算,是的Transformer更能够进行
8. encoder和decoder是如何交互的
在解码器中有一个编码解码多头注意力机制,接受来自编码器的KQ和解码器的V,通过计算来自不同位置的KQV达到编码器和解码器交互的目的。
9. decoder里的多头注意力和encoder里的多头注意力有什么区别
encoder中的都有注意力机制不带mask掩码,而encoder中的第一个多头注意力机制带mask掩码,目的是为了防止模型看到当前时刻之后的信息,encoder中还有个多头注意力机制,接收来自encoder中的KQ以及decoder中的V计算attention score。
10. Transformer中的mask是怎么样的?
Transformer中的mask有两种,分别是padding mask和sequence mask,padding用来处理不定长输入,sequence mask为了防止未来信息被泄露。
11. Transformer在哪里做了权重共享?
两个地方做了权重共享:1)encoder宇decoder间的embedding层共享权重;2)decoder中的embedding与FC权重共享。
12. Transforme中的Q、K为什么使用不同的权重生成,为什么不使用同一个值进行自身的点乘
主要是为了增加模型的表示能力(MLP的作用也是增加模型的学习能力),通过不同的权重Wq和Wk生成对应的Q,K,模型可以在不同的表示空间中学习元素之间的关系。这种设计允许模型学习更复杂的模式。如果用同一个值进行自身的点击,那么他们在同一个表示空间,这样的学习能力就被限制住了。
13. 为什么在进行多头注意力的时候需要对每个head降维?
从模型参数效率的角度看,对每个head进行降维,可以在不显著增加模型参数和计算负担的前提下,提高模型的宽度,使得模型能够在不同的表示子空间中捕获输入之间的不同方面的信息,从而提高学习能力。对每个head进行降维,相当于将原来的空间表示成不同的特征子空间,从而提高模型的表达能力。降维也可以增强模型的泛化能力,降维可以有助于正则化模型,当模型需要学习将信息压缩到一个更小的表示空间,通常能更好地泛化到未见到的数据上,提高模型的鲁棒性。
14. Transformer如何处理可变长度的数据?
对不等长的数据,按最长或者固定长度进行补齐,利用padding mask机制,补齐的数据并不参加训练。
15. Transformer为什么要用残差的结构?
残差结构来源于Resnet论文,可以有效缓解梯度消失的问题。在Transformer中,每个子层的输出都用了残差的结构,在深度网络中,当模型网络层数很深的时候,容易产生梯度消失的问题。通过引入残差的结构,相当于在每个模块中添加了一条直接的通路,减少了每个模块需要学习的内容,使得梯度能够直接传播,从而减少了梯度消失的问题。并且引入残差的结构,也可以显著减少模型训练所需的迭代次数。
16. 为什么Transformer用LayerNorm而不用BatchNorm?
主要是因为LayerNorm更适合处理序列数据,在NLP中输入序列经常会出现序列长度不一的情况。BatchNorm依赖一个批次中的所有数据来计算均值和方差,对于长度不一的序列数据处理起来比较困难。二LayerNorm则对每个样本在特征维度上进行归一化,因此可以自然的处理不同长度的序列。在推理时,BatchNorm在计算均值和方差时依赖整个批次的数据,使得性能收到批大小的影响。如果出现推理的样本长度比批量中文本长很多的话,推理的性能会下降很多。
17. Transformer前馈神经网络用的是什么激活函数?
用的是Relu激活函数,引入激活函数,增加模型非线性变化的能力,后续也有针对激活函数进行的改进,比如GELU函数等。
18. Transformer块的输入输出大小有什么关系?
Transformer块中的输入输出维度是一样的,因为整个Transformer模型是由一个个Transformer块堆叠而成,因此需要保证块的输入输出是一致的,这样才能正确的完成堆叠。
19. Transformer有哪些变体?
Transformer提出之后,引起了巨大的震撼,比较有名的工作包括Bert,GPT,T5,VIT,SwinTransformer等,后两者将Transformer架构引入CV领域。
20. Transformer有哪些可调的参数?
主要有两个可调的参数,一个是N,堆叠块的数量。N越大,模型越深。另外一个参数是d,FFN中隐藏层的维度,d越大模型越宽。