算法八股面试——Transformer

1.Transformer为何使用多头注意力机制,不使用一个头?

多头可以使参数矩阵形成多个子空间,矩阵整体的size不变,只是改变了每个head对应的维度大小。这样做使矩阵对多方面信息进行学习,但计算量和使用单个head差不多。

2.Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用一个值进行自身的点乘?

Q和K初始为不同的权重是为了解决可能输入句与输出句长不一致的问题。并且如果Q,K的一致,不用Q而是直接拿K和K点乘的话,attention score矩阵是一个对称矩阵。因为是同一个矩阵都投影到同样的一个空间,所以会导致泛化能力会很差。

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

K和Q点乘是为了得到一个attention score矩阵,用来对V进行提纯。K和Q使用了不同的W_KW_Q来计算,可以理解为是在不同空间上的投影。

点乘操作可以利用高效的矩阵运算实现,尤其在现代GPU上是非常高效的,并且减少了复杂性。

加法注意力机制需要进行额外的前馈网络计算,复杂度较高。

4.为什么在进行softmax之前需要对attention进行scaled?

attention \quad score=QK^T

attention \quad weights=softmax(QK^T)

softmax=\frac{e^{X_i}}{\sum _je^{X_j}}

如果QK^T较大,那么softmax的指数函数e^{X_i}的值将会增长非常快,导致其中一个元素可能会占据绝大多数的权重,而其他元素贡献非常小。这种情况会让注意力机制不稳定,且容易出现梯度消失和梯度爆炸问题。

Q和K是独立的随机变量,QK^T就是随机变量的点积,对于均值为0,方差为1的独立随机变量来说,点积结果的方差与向量的维度d_k成正比:

Var(QK^T)=d_k

当Q和K的维度d_k变大,点积的方差也会增大,从而使QK^T增大。因此,随着d_k增大,softmax的输出会越来越倾向于赋予某些位置极高的权重,削弱其他位置的贡献,造成训练不稳定。为了防止这个问题,就要引入缩放项\frac{QK^T}{\sqrt{d_k}}

5.计算attention score时如何对padding做mask操作?

对需要mask的位置设置负无穷,在对attention score进行相加。

6.为什么在进行多头注意力的时候要对每个head进行降维?

将原有的高维空间转化为多个低维空间并在最后进行拼接,形成同样维度的输出,借此丰富特性信息,降低计算量。

7.Transformer的Encoder模块

  • 输入嵌入(Input Embedding)+位置编码
  • 多头自注意力机制
  • 前馈神经网络
  • 残差连接和层归一化
  • 多层堆叠

输入嵌入(Inuput Embedding)+位置编码

输入序列中的每个词语通过embedding层映射为一个固定维度的向量表示。同时,为捕捉输入序列中词的位置信息,Transformer使用了位置编码,将位置信息与词embedding相加。(因为Transformer没有RNN那样的顺序信息机制,所以需要显示注入位置信息)

多头自注意力机制

自注意力:给定书UR向量序列,计算每个词和其他词之间的相似性,生成一个权重矩阵。然后用这个权重矩阵对序列进行加权求和,使得每个词的表示不仅包含自己的信息,还包含上下文中其他词的相关信息。

多头自注意力:不是单一的进行一次自注意力,而是将输入向量分为多个部分,分别计算不同的子空间上的注意力。这可以让模型从多个角度学习不同的特征,然后将这些head的输出拼接起来。

前馈神经网络(两个线性层+一个非线性激活层)

对注意力机制的输出进行进一步非线性变换,增加模型表达能力,能在局部区域上进行共复杂特征处理。

残差连接(Residual Connection)和层归一化(Layer Normalization)

每个子层(包括多头自注意力和FFN)都通过残差连接加上原始输入,然后在经过层归一化。残差连接的作用是防止深层网络中的梯度消失问题。层归一化则有助于加速训练并提高模型的稳定性。

残差连接:将子层的输入与子层的输出相加,确保梯度可以更好的反传。

层归一化:使模型训练更加平稳。

堆叠多个Encoder层

Transformer的Encoder模块由多个Enocoder层堆叠而成。

8.为何在获得输入词向量后需要对矩阵乘以embedding size的开方(\sqrt {d_{model}})?

主要是为了数值平衡,保证:词embedding的值与自注意力机制中的点积操作结果保持适当的幅度;避免在softmax中梯度消失;保证词embedding和位置编码在数值上处于同一水平。

*位置编码的幅度通常是经过设计的,且不依赖于词语的特定语义。如果词嵌入的数值非常小,加上位置编码后,位置信息可能在数值上主导了词语的语义信息,乘以\sqrt {d_{model}}可以放大词embedding的幅度,使他与位置编码的数值处于同一量级,从而保证位置编码不会压制embedding的语义信息。

9.简单介绍下Transformer的位置编码,有什么意义和优缺点?

自注意力是位置无关的,无论句子的顺序是什么样的,通过自注意力计算的token的hidden embedding都是一样的,这不符合人类的思维。因此要有一个办法能够在模型中表达出一个token的位置信息。Transformer使用了固定的位置编码来表示token在句子中的绝对位置信息。

Transformer使用正弦函数和余弦函数来生成不同维度的位置信息。给定位置pos和embedding维度i,位置编码:

PE_{(pos,2i)}=sin(\frac{pos}{10000^{2i/d_{model}}})

PE_{(pos,2i+1)}=cos(\frac{pos}{10000^{2i/d_{model}}})

意义:引入顺序信息

           相对距离信息

            易于计算

优点:无需额外学习

           保持相对位置信息

           轻量化

缺点:固定编码:位置编码是静态的,即生成后不会随着训练动态调整,可能不能在复杂句子结构中灵活捕捉长依赖

           对长序列处理优先:对于非常长的句子,固定的正、余弦编码可能不能很好的捕捉远距离词语信息

10.Transformer中残差结构及意义?

Encoder和decoder的自注意力层及FFN层都有残差连接。残差结构的核心思想是将输入信息直接传递到输出,而不是完全通过网络进行变换。这种方式允许网络在训练过程中更容易学习到残差,即输入和输出之间的差异,而不是直接学习复杂的变换。

意义:反向传播时不会造成梯度消失,使得算法收敛速度更快。

11.为什么transformer使用LayerNorm而不是BatchNorm?

Transformer处理的是变长的序列数据,而BN在处理变长序列时会面临挑战。因为它依赖于整个batch的统计信息。当序列长度变化时,BN的统计信息可能会变得不稳定。而LN是对每个序列样本进行独立归一化,不依赖于batch。

12.简述下BN技术,以及它的优缺点?

BN是对每一批的数据在进入激活函数前进行归一化,可以提高收敛速度,防止过拟合、梯度消失,增加网络对数据的敏感度。

缺点:依赖于batch的大小;

           时间和计算成本:BN需要在每个mini-batch上计算均值和方差,并执行归一化操作,增加计算开销;

           不适合序列和变长输入。

13.简单描述下transformer中的FFN,使用了什么激活函数?

全连接层——非线性激活层——全连接层

第一个全连接层:d_{ff}>d_{model},其中d_{ff}是输出维度,d_{model}是输入维度

非线性激活函数:ReLU

第二个全连接层:将维度还原回d_{model}d_{model}

FFN作用:提升模型表达能力;增强非线性性

14.Encoder端和decoder端是如何进行交互的?

Encoder输出:K和V

Decoder的自注意力层输出:Q

Decoder的每个位置会通过计算Q和K之间的相似性分数来确定该位置应该关注输入序列中的哪些部分,然后将这些attention score与对应的V加权求和,生成新的表示。

15.Decoder阶段的多头自注意力和encoder阶段的自注意力有什么区别?

Decoder有两层多头自注意力,encoder有一层多头自注意力。

Decoder第一层多头自注意力(自注意力层):与encoder类似,但有掩码机制

Decoder第二层多头自注意力(跨注意力层,encoder-decoder attention):decoder的自注意力层输出Q,encoder输出K,V。Decoder可以在生成每个目标序列中的元素时,参考输入序列的全局信息,从而生成与输入序列匹配的输出。

Encoder的多头自注意力:所有输入序列的元素都可以相互“看到”,它们可以关注到整个输入序列。

16.Transformer的并行化体现在哪里?

Transformer的并行化主要体现在自注意力模块,在encoder端Transformer可以并行处理整个序列,并得到整个输入序列经过encoder端的输出。

17.Decoder端可以做并行化处理吗?

训练时可以,但交互时不可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值