Transformer 笔记总结

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

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

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

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

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

第五步,将softmax分值与value-vec按位相乘。保留关注词的value值,削弱非相关词的value值。
第六步,将所有加权向量加和,产生该位置的self-attention的输出结果。
Transformer 笔记总结_第8张图片
上述就是self-attention的计算过程,生成的向量流入前向网络。
计算self-attention的具体公式如下所示:
Transformer 笔记总结_第9张图片
论文中还使用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

你可能感兴趣的:(语音识别)