Transformer 笔记总结

    技术2022-07-12  72

    transformer这一概念来自于原文attention is all you need

    在机器翻译中,输入是一个句子,输出是另一种语言的句子,如下图所示: 即由编码组件、解码组件以及连接层构成,如下图所示: 其中编码器由6个编码器单元构成,解码器由6个解码器单元构成,如下图所示: 其中,编码器单元结构完全相同,但是不共享参数,由self-attention和feedforward组成,self-attention的输出流向一个前向网络,每个输入位置对应的前向网络是独立互不干扰的。如下图左部分所示,解码器增加了一个attention层,该层有助于解码器能够关注到输入句子的相关部分,如图右部分所示:

    词的词向量化只发生在最底层的编码器,此时,每个编码器都会接收向量的list(每个list都是512的词向量),只不过其他编码器向量的输入是上一个编码器的输出。list的尺寸是可以设置的超参,通常是训练集的最长句子的长度。

    计算attention的分值时,对"Thinking machine"这一句话来说,对thinking计算attention的分值,我们要计算每个词与thinking的评分,这意味着在编码thinking时,每个输入词有多少集中关注度,这个分值,通过“Thinking”对应query-vector与所有词的key-vec依次做点积得到。所以当我们处理位置#1时,第一个分值是q1和k1的点积,第二个分值是q1和k2的点积。 除以8(=对key的维度开根号的值),这样梯度会更稳定。然后加上softmax操作,归一化分值使得全为正数且加和为1。

    softmax分值决定着在这个位置,每个词的表达程度(关注度)。这个位置的词应该有最高的归一化分数,但大部分时候总是有助于关注该词的相关的词。

    第五步,将softmax分值与value-vec按位相乘。保留关注词的value值,削弱非相关词的value值。 第六步,将所有加权向量加和,产生该位置的self-attention的输出结果。 上述就是self-attention的计算过程,生成的向量流入前向网络。 计算self-attention的具体公式如下所示: 论文中还使用multi-headed引入到self-attention中,如下两个方面提高了attention层的效果: 多头机制扩展了模型集中于不同位置的能力。在上面的例子中,z1只包含了其他词的很少信息,仅由实际自己词决定。在其他情况下,比如翻译 “The animal didn’t cross the street because it was too tired”时,我们想知道单词"it"指的是什么。 多头机制赋予attention多种子表达方式。像下面的例子所示,在多头下有多组query/key/value-matrix,而非仅仅一组(论文中使用8-heads)。每一组都是随机初始化,经过训练之后,输入向量可以被映射到不同的子表达空间中。

    解码端

    编码器从输入序列的处理开始,最后的编码器的输出被转换为K和V,它俩被每个解码器的"encoder-decoder atttention"层来使用,帮助解码器集中于输入序列的合适位置。

    在解码器中的self attention 层与编码器中的稍有不同,在解码器中,self-attention 层仅仅允许关注早于当前输出的位置。在softmax之前,通过遮挡未来位置(将它们设置为-inf)来实现。 "Encoder-Decoder Attention "层工作方式跟multi-headed self-attention是一样的,除了一点,它从前层获取输出转成query矩阵,接收最后层编码器的output做key和value矩阵。

    参考文章: 【1】The Illustrated Transformer 【2】 Attention和Transformer 【3】The Illustrated Transformer

    Processed: 0.019, SQL: 9