【Transformer系列】关于Transformer的若干问题FAQ解析

一、参考资料

Transformer的细节到底是怎么样的?Transformer 18问

答案解析(1)—史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer
关于Transformer的若干问题整理记录
Transformer的细节与技巧

二、FAQ

Q:什么是Transformer?

Transformer可以理解为一个函数,输入是“我爱学习”,输出是“I love study”。

Transformer是一种由Encoder和Decoder组成的架构,如果把Transformer架构进行拆分,如下图所示:

【Transformer系列】关于Transformer的若干问题FAQ解析_第1张图片

Transformer = Transformer Encoder + Transformer Decoder;

Transformer Encoder = Embedding + Positional Encoding + N*(Transformer Encoder block);

Transformer Decoder = Embedding + Positional Encoding + N*(Transformer Decoder block) + Linear + Softmax;

Transformer Encoder block = 子Encoder block1 + 子Encoder block2;

子Encoder block1 = Multi-Head Attention + Add&Norm;

子Encoder block2 = Feed Forward + Add&Norm;

Q:什么是Transformer Encoder?

  1. 从功能角度,Transformer Encoder的核心作用是提取特征。例如,一个人学习跳舞,Encoder是看别人是如何跳舞的,Decoder是将学习到的经验和记忆,展现出来。

  2. 从结构角度,Transformer Encoder = Embedding + Positional Embedding + N*(子Encoder block1 + 子Encoder block2);
    子Encoder block1 = Multi head attention + Add&Norm;
    子Encoder block2 = Feed Forward + Add&Norm;
    【Transformer系列】关于Transformer的若干问题FAQ解析_第2张图片

  3. 从输入输出角度,N个Transformer Encoder block中的第一个Encoder block的输入为一组向量 X = (Embedding + Positional Embedding),向量维度通常为512*512,其他N个TransformerEncoder block的输入为上一个 Transformer Encoder block的输出,输出向量的维度也为512*512(输入输出大小相同)。

  4. 为什么是512*512?前者是指token的个数,如“我爱学习”是4个token。这里设置为512是为了囊括不同的序列长度,不够时padding。后者是指每一个token生成的向量维度,也就是每一个token使用一个序列长度为512的向量表示。人们常说,Transformer不能超过512,否则硬件很难支撑;其实512是指前者,也就是token的个数,因为每一个token要做self attention操作;但是后者的512不宜过大,否则计算起来也很慢。

Q:什么是Transformer Decoder?

  1. 从功能角度,相比于Transformer Encoder,Transformer Decoder更擅长做生成式任务,尤其对于自然语言处理问题。

  2. 从结构角度,Transformer Decoder = Embedding + Positional Embedding + N*(子Decoder block1 + 子Decoder block2 + 子Decoder block3)+ Linear + Softmax;
    子Decoder block1 = Mask Multi head attention + Add&Norm;
    子Decoder block2 = Multi head attention + Add&Norm;
    子Decoder block3 = Feed Forward + Add&Norm;
    【Transformer系列】关于Transformer的若干问题FAQ解析_第3张图片

  3. 从(Embedding+Positional Embedding)、(N个Decoder block)、(Linear + softmax) 这三个每一个单独作用角度:

    Embedding + Positional Embedding:以机器翻译为例,输入“Machine Learning”,输出“机器学习”;这里的Embedding是把“机器学习”也转化成向量的形式。

    N个Decoder block:特征处理和传递过程。

    Linear + softmax:softmax是预测下一个词出现的概率,如图7所示,前面的Linear层类似于分类网络(ResNet18)最后分类层前接的MLP层。

【Transformer系列】关于Transformer的若干问题FAQ解析_第4张图片

  1. Transformer Decoder的输入、输出是什么?在Train和Test时是不同的。

    在Train阶段,如下图所示。这时是知道label的,decoder的第一个输入是begin字符,输出第一个向量与label中第一个字符使用cross entropy loss。Decoder的第二个输入是第一个向量的label,Decoder的第N个输入对应的输出是End字符,到此结束。这里也可以看到,在Train阶段是可以进行并行训练的。
    【Transformer系列】关于Transformer的若干问题FAQ解析_第5张图片

    在Test阶段,下一个时刻的输入时是前一个时刻的输出,如图9所示。因此,Train和Test时候,Decoder的输入会出现Mismatch,在Test时候确实有可能会出现一步错,步步错的情况。有两种解决方案:一种是train时偶尔给一些错误,另一种是Scheduled sampling。

    【Transformer系列】关于Transformer的若干问题FAQ解析_第6张图片

  2. Transformer Decoder block内部的输出和输出是什么?

    【Transformer系列】关于Transformer的若干问题FAQ解析_第7张图片

    对于N=6中的第1次循环(N=1时):子Decoder block1 的输入是 embedding +Positional Embedding,子Decoder block2 的输入的Q来自子Decoder block1的输出,KV来自Transformer Encoder最后一层的输出。

    对于N=6的第2次循环:子Decoder block1的输入是N=1时,子Decoder block3的输出,KV同样来自Transformer Encoder的最后一层的输出。

    总的来说,无论在Train还是Test时,Transformer Decoder的输入不仅来自(ground truth或者上一个时刻Decoder的输出),还来自Transformer Encoder的最后一层

    训练时第i个decoder的输入 = encoder输出 + ground truth embedding

    预测时第i个decoder的输入 = encoder输出 + 第(i-1)个decoder输出

Q:Transformer Encoder和Transformer Decoder有哪些不同?

  1. 作用上,Transformer Encoder常用来提取特征,Transformer Decoder常用于生成式任务。Transformer Encoder和Transformer Decoder是两条不同的技术路线,Bert采用的前者,GPT系列模型采用的是后者。

  2. 结构上,Transformer Decoder block包括了3个子Decoder block,而Transformer Encoder block 包括2个子Encoder block,且Transformer Decoder中使用了Mask multi-head Attention。

  3. 从二者的输入输出角度,N个Transformer Encoder运算完成之后,它的输出才正式输入进Transformer Decoder,作为QKV中的K和V,给Transformer Decoder使用。

    那么TransformerEncoder最后层的输出是如何送给Decoder呢?如下图所示。

    【Transformer系列】关于Transformer的若干问题FAQ解析_第8张图片

Q:Transformer是如何训练出来的?

  1. 数据上,在Transformer论文中有提到,用到了4.5M和36M的翻译句子对。

  2. 硬件上,base模型是8个P100 GPU训练了12个小时,大模型是训练了3.5天。

  3. 模型参数和调参层面:

    第一,可训练的参数包括WQ、WK、WV、WO,换包括FFN层的参数。

    第二,可调的参数包括:每一个token向量表示的维度(d_model)、head的头数、Encoder和Decoder中block重复的次数N、FFN中间层向量的维度、Label smoothing(置信度0.1)和dropout(0.1)。

Q:为什么需要Multi-head Attention?

为什么Transformer 需要进行 Multi-head Attention?

Transformer论文中说到进行Multi-head Attention的原因是将模型分为多个头,形成多个子空间,可以让模型去关注不同方面(从不同角度)的信息,最后再将各个方面的信息综合起来。其实直观上也可以想到,如果自己设计这样的一个模型,必然也不会只做一次attention,多次attention综合的结果至少能够起到增强模型的作用,也可以类比CNN中同时使用多个卷积核的作用。直观上讲,多头注意力保证了Transformer可以注意到不同子空间的信息,有助于网络捕捉到更丰富的特征/信息

Q:为什么Q和K使用不同的权重矩阵?

transformer中为什么使用不同的K 和 Q, 为什么不能使用同一个值?

简单理解,使用Q/K/V不同权重矩阵,可以保证在不同空间进行投影,增强表达能力提高泛化能力

Q:计算Attention的时候为何选择点乘积而不是加法?

为了计算更快。矩阵加法的计算量确实简单,但作为一个整体计算Attention时,相当于一个隐层,整体计算量和点乘积相似。在效果上来说,两个的效果与 d k d_k dk 向量维度相关, d k d_k dk 维度越大,加法的效果越显著。

Q:进行softmax之前需要对attention进行scaled?

请参考博客:【Transformer系列】深入浅出理解Transformer网络模型(综合篇)中的【Scaled Dot-Product Attention】章节。

scaled操作的目的是为了防止内积过大,从梯度角度考虑,避免靠近1,易训练;与batch normalization(BN)有一些相似的功能。

Q:为什么要尺度缩放?

避免较大的数值,较大的数值会导致 softmax 之后值更极端,Softmax 极端值会导致梯度消失。

Q:为什么尺度缩放的缩放因子是 d k \sqrt{d_k} dk

假设q,k满足均值为0,方差为1的标准正态分布,那么q、k点积的均值和方差分别为0以及 d k d_k dk
详细证明,可参考:Statistical-Properties-of-Dot-Product

Q:如何理解 Q、K、V矩阵,如何得到 Q、K、V矩阵?

在 Self-Attention 中,Q、K、V 是在同一个输入序列(比如序列中的一个单词)上计算得到的三个向量。具体来说,可以通过对原始输入词的 embedding 进行线性变换(比如使用一个全连接层),来得到 Q、K、V。

Q: Q、K、V矩阵有什么作用,如何通过 Q、K、V矩阵得到最后的输出?

在计算 Self-Attention 时,Q、K、V 被用来计算注意力分数,即用于表示当前位置和其他位置之间的关系。注意力分数可以通过 Q 和 K 的点积来计算,然后将分数除以 8,再经过一个 softmax 归一化处理,得到每个位置的权重。然后用这些权重来加权计算 V 的加权和,即得到当前位置的输出。

你可能感兴趣的:(深度学习,transformer,深度学习,人工智能)