Transformer
-
Q:Transformer如何解决梯度消失问题的?
A:残差连接 -
Q:为何Transformer中使用Layer Normalization而不用Batch Normalization?
A:BatchNorm是对一个batch-size样本内的每个特征做归一化,LayerNorm是对每个样本的所有特征做归一化。
形象点来说,假设有一个二维矩阵。行为batch-size,列为样本特征。那么BN就是竖着归一化,LN就是横着归一化。
它们的出发点都是让该层参数稳定下来,避免梯度消失或者梯度爆炸,方便后续的学习。但是也有侧重点。
一般来说,如果你的特征依赖于不同样本间的统计参数,那BN更有效。因为它抹杀了不同特征之间的大小关系,但是保留了不同样本间的大小关系。(CV领域)
而在NLP领域,LN就更加合适。因为它抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系。对于NLP或者序列任务来说,一条样本的不同特征,其实就是时序上字符取值的变化,样本内的特征关系是非常紧密的。 -
Q:Layer Nomalization的作用是什么:
A:允许使用更大的学习率,加速训练。有一定的抗过拟合作用,使训练过程更加平稳 -
Q:多头自注意力层中的“多头”如何理解,有什么作用?
A:有点类似于CNN的多个卷积核。通过三个线性层的映射,不同头中的Q、K、V是不一样的,而这三个线性层的权重是先初始化后续通过学习得到的。不同的权重可以捕捉到序列中不同的相关性。多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息,匹配到不同的模式。 -
Q:Transformer是自回归模型还是自编码模型?
A:自回归模型。所谓自回归,即使用当前自己预测的字符再去预测接下来的信息。Transformer在预测阶段(机器翻译任务)会先预测第一个字,然后在第一个预测的字的基础上接下来再去预测后面的字,是典型的自回归模型。Bert中的Mask任务是典型的自编码模型,即根据上下文字符来预测当前信息。 -
Q:原论文中Q、K矩阵相乘为什么最后要除以 d k \sqrt{d_k} dk?
A:当 d k \sqrt{d_k} dk特别小的时候,其实除不除无所谓。但是当维度大的时候,其方差为 [公式] 。小了还好说,大的话会使得后续做softmax继续被放大造成梯度消失,不利于梯度反向传播。除以 d k \sqrt{d_k} dk让方差回归为1。有效减少梯度消失问题的出现。原文:
-
Q: 原论中编码器与解码器的Embedding层的权重为什么要乘以 d m o d e l \sqrt{d_{model}} dmodel?
A:为了让embedding层的权重值不至于过小,乘以 d m o d e l \sqrt{d_{model}} dmodel后与位置编码的值域差不多,可以保护原有向量空间不被破坏。
在学embedding的时候,多多少少会把每一个向量的L2 long学成相对比较小的,比如1,不管你的维度多大最后都会等于1,维度变大的时候,权重值就会变小,但是只会要加上位置编码的值,而位置编码的值不会随着你的长度变长而把long固定住,所以乘了 d m o d e l \sqrt{d_{model}} dmodel之后,使得embedding值和position encoding值在数值尺度上差不多 -
Q:Transformer在训练与验证的时候有什么不同
A:Transformer在训练的时候是并行的,在验证的时候是串行的。这个问题与Transformer是否是自回归模型考察的是同一个知识点。Transformer在训练、评估时编码器,解码器分别如何工作的? -
Q:Transformer模型的计算复杂度是多少?
A: n 2 d n^2d n2d,n是序列长度,d是embedding的长度。Transformer中最大的计算量就是多头自注意力层,这里的计算量主要就是QK相乘再乘上V,即两次矩阵相乘。
QK相乘是矩阵【n d】乘以【d n】,这个复杂度就是 n 2 d n^2d n2d。 -
Q:Transformer中三个多头自注意力层分别有什么意义与作用?
A:Transformer中有三个多头自注意力层,编码器中有一个,解码器中有两个。
编码器中的多头自注意力层的作用是将原始文本序列信息做整合,转换后的文本序列中每个字符都与整个文本序列的信息相关(这也是Transformer中最创新的思想,尽管根据最新的综述研究(MetaFormer is Actually What You Need for Vision)表明,Transformer的效果非常好其实多头自注意力层并不占据绝大贡献)。示意图如下:
解码器的第一个多头自注意力层比较特殊,原论文给其起名叫Masked Multi-Head-Attention。其一方面也有上图介绍的作用,即对输入文本做整合(对与翻译任务来说,编码器的输入是翻译前的文本,解码器的输入是翻译后的文本)。另一个任务是做掩码,防止信息泄露。拓展解释一下就是在做信息整合的时候,第一个字符其实不应该看到后面的字符,第二个字符也只能看到第一个、第二个字符的信息,以此类推。
解码器的第二个多头自注意力层与编码器的第一个多头自注意力层功能是完全一样的。不过输入需要额外强调下,我们都知道多头自注意力层是通过计算QKV三个矩阵最后完成信息整合的。在这里,Q是解码器整合后的信息,KV两个矩阵是编码器整合后的信息,是两个完全相同的矩阵。QKV矩阵相乘后,翻译前与翻译后的文本也做了充分的交互整合。至此最终得到的向量矩阵用来做后续下游工作。 -
Q:Transformer中的mask机制有什么作用?
A:对不等长的序列做padding补齐,掩码防止信息泄露,在预测第t个时刻的输出的时候,你不应该看到t时刻以后的那些输入,从而保证训练和预测的行为一致
具体来说,假设Q和K是等长的,都为n,且在时间上是对应起来的,对于第t时间的 Q t Q_t Qt,在做计算的时候,应该只能看到 K 1 K_1 K1到 K t − 1 K_{t-1} Kt−1,而不应该去看到 K t K_t Kt和 t t t 时间之后的东西,因为 K t K_t Kt在当前时刻还没有,但是注意力机制是能一次性看到所有东西的,所以必须加上mask,当然计算还是能算的,只需要加上一些处理,在t时刻之后计算出来的数值,用-inf来代替就可以了,在进入softmax的时候就会变成0,导致在softmax之后出来对应的那些东西权重都会变成0,而只有前面的值生效。 -
Q:mask机制分别用在了哪里?
A:mask机制的作用1在三个多头自注意力层中都用了,作用2只用在了解码器的第一个多头自注意力层。 -
Q:Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?
A:使用Q/K/V不相同可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力。 -
Q:在计算attention score的时候如何对padding做mask操作?
A:padding位置置为负无穷(一般来说-1000就可以)。对于这一点,涉及到batch_size之类的,具体的大家可以看一下抱抱脸实现的源代码,位置在这里:huggingface-bert -
Q:为什么transformer中要有position encoding?
A:因为注意力机制是没有时序信息的,它的输出是value的加权和,权重是query和key之间的距离(欧式或cosine距离),是与序列信息无关的。
给你一句话,把顺序任意打乱后,经过attention出来的结果都是一样的,但是实际上在语义上已经发生了改变,RNN是把上一个时刻的输出作为下一个时刻的输出而处理时序信息,
部分问题及答案摘自: Transformer你问我答
BERT
- Q:Bert和Elmo的异同点有哪些?
A:
相同点 | 不同点 | Bert | Elmo |
---|---|---|---|
都是预训练模型 | 模型结构 | 基于Transformer的Encoder结构 | 基于RNN的结构 |
都是芝麻街人物的人名 | 特征表示方法 | 基于Fine-tune | 基于特征 |
-
Q:为什么 Bert 的三个 Embedding 可以进行相加?
A:这是个好问题。虽然在深度神经网络里变得非常复杂,本质上神经网络中每个神经元收到的信号也是“权重”相加得来。具体细节的分析这里就不提了,有兴趣的同学可以自己推一推。这里想说一下宽泛一点的分析(瞎扯)。在实际场景中,叠加是一个更为常态的操作。比如声音、图像等信号。一个时序的波可以用多个不同频率的正弦波叠加来表示。只要叠加的波的频率不同,我们就可以通过傅里叶变换进行逆向转换。一串文本也可以看作是一些时序信号,也可以有很多信号进行叠加,只要频率不同,都可以在后面的复杂神经网络中得到解耦(但也不一定真的要得到解耦)。在BERT这个设定中,token,segment,position明显可以对应三种非常不同的频率。由此可以再深入想一想,在一串文本中,如果每个词的特征都可以用叠加波来表示,整个序列又可以进一步叠加。哪些是低频信号(比如词性?),哪些是高频信号(比如语义?),这些都隐藏在embedding中,也可能已经解耦在不同维度中了。说不定可以是一种新的表示理论:)该解释来自:邱锡鹏老师对此问题的回答 -
Q:Bert的训练方式?
A:1.Masked LM, 2.Next Sentence Prediction (NSP) -
Q:Bert的mask策略是怎样的?
A:15%的概率替换成mask,在这15%被选中成为mask的词中,80%概率真的被替换成[mask],10%的概率替换成一个随机的token,10%的概率什么都不干
原文:
-
Q:Bert的NSP任务是怎么训练的?
A:有句子a和b,50%的概率b真的在a之后,50%的概率b是随机从别的地方选取出来的句子
原文: