• 对Transformer中的MASK理解



    上一篇文章我们介绍了 对Transformer中FeedForward层的理解,今天我们来介绍一下对MASK的理解
    老规矩,还是先放一张Transformer的图片
    在这里插入图片描述
    Transformer结构主要分为两大部分,一是Encoder层结构,另一个则是Decoder层结构,而所谓的MASK在Encoder和Decoder两个结构中都有使用。

    Transformer中的MASK主要分为两部分:Padding Mask和Sequence Mask两部分

    Padding Masked

    对于Transformer而言,每次的输入为:[batch_size,seq_length,d_module]结构,由于句子一般是长短不一的,而输入的数据需要是固定的格式,所以要对句子进行处理。
    通常会把每个句子按照最大长度进行补齐,所以当句子不够长时,需要进行补0操作,以保证输入数据结构的完整性
    但是在计算注意力机制时的Softmax函数时,就会出现问题,Padding数值为0的话,仍然会影响到Softmax的计算结果,即无效数据参加了运算。
    为了不让Padding数据产生影响,通常会将Padding数据变为负无穷,这样的话就不会影响Softmax函数了

    Self-Attention Masked

    Self-Attention Masked只发生在Decoder操作中,在Decoder中,我们的预测是一个一个进行的,即输入一个token,输出下一个token,在网上看到一个很好的解释如下:
    假设我们当前在进行机器翻译
    输入:我很好
    输出:I am fine
    接下来是Decoder执行步骤
    第一步:
    ·初始输入: 起始符 + Positional Encoding(位置编码)
    ·中间输入:(我很好)Encoder Embedding
    ·最终输出:产生预测“I”
    第二步:
    ·初始输入:起始符 + “I”+ Positonal Encoding
    ·中间输入:(我很好)Encoder Embedding
    ·最终输出:产生预测“am”
    第三步:
    ·初始输入:起始符 + “I”+ “am”+ Positonal Encoding
    ·中间输入:(我很好)Encoder Embedding
    ·最终输出:产生预测“fine”
    上面就是Decoder的执行过程,在预测出“I”之前,我们是不可能知道‘am’的,所以要将数进行Mask,防止看到当前值后面的值,如下图所示:当我们仅知道start的时候,后面的关系是不知道的,所以start和“I”以及其它单词的Score都为负无穷,当预测出“I”之后,再去预测“am”,最终得到下面第三个得分矩阵。

    最后经过Softmax处理之后,得到最终的得分矩阵

    最后不要忘了Decoder中依然采用的是Masked Multi-Head Attention,即多次进行Mask机制

  • 相关阅读:
    spark on yarn 的 executor、cores、driver 作用及配置
    Vue学习体验
    Swappin.gifts 在 Ambire dApp 中推出独家促销活动
    【C/C++】带你快速掌握 使用—增强for(范围for循环)
    go中的rune类型
    【无标题】
    liunx docker 安装 nginx:stable-alpine 后报500错误
    WPF handyControl 学习样例
    nacos注册中心AP核心源码
    【谐云课堂】Cilium 流量治理功能与部署实践
  • 原文地址:https://blog.csdn.net/weixin_51756104/article/details/127812557