• 【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 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;
      在这里插入图片描述

    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;
      在这里插入图片描述

    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层。

    在这里插入图片描述

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

      在Train阶段,如下图所示。这时是知道label的,decoder的第一个输入是begin字符,输出第一个向量与label中第一个字符使用cross entropy loss。Decoder的第二个输入是第一个向量的label,Decoder的第N个输入对应的输出是End字符,到此结束。这里也可以看到,在Train阶段是可以进行并行训练的。
      在这里插入图片描述

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

      在这里插入图片描述

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

      在这里插入图片描述

      对于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呢?如下图所示。

      在这里插入图片描述

    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 的加权和,即得到当前位置的输出。

  • 相关阅读:
    各种位置编码
    Redis_02_Redis五种基本类型
    【Linux】基本指令(四)
    期 货 跟 单/资 管 分 仓/镜像跟单/外 盘 分 仓的全面介绍!
    算符优先语法分析
    【Unity】Inspector排版扩展学习初探
    studio one 6正版多少钱?怎么购买studio one 更便宜,有优惠券哦
    [Java/力扣160]相交链表
    K8S-EverNote同步
    [oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
  • 原文地址:https://blog.csdn.net/m0_37605642/article/details/133820919