本文只涉及网络的结构,不讲网络的训练。
transformer由6个编码器和6个解码器组成。
一、self-attention
直接跳过单头self-attention,multi-head的意思是
q
,
k
,
v
q,k,v
q,k,v都不止一个,如图所示为两头的self-attention。
那么为什么不用单头的注意力呢,也许是因为每个
q
q
q与
k
k
k的相关性是不同的,所以综合多种相关性的计算会更有鲁棒性。
位置编码:要明确的是,现在输入的
a
a
a已经是编码后的
a
a
a了,那么其实如果一个一个按时间输入,这个位置信息是没有必要的,但由于self-attention的特殊性,必须添加一个位置信息。它的特殊性就在于self-attention是一视同仁的,第一个单词和最后一个单词在计算相关性的时候也不会因为它们距离很远所以权重很小,这样的操作实际上舍弃了原来的位置信息,所以此处补上。
二、编码器
编码器,顾名思义,就是把你的输入编码(变换)成机器可以容易学习的向量。这里transformer作者认为,如果输入一个语音信号,通过6个编码器之后这个语音信号就变得很容易被机器学习。
1.输入通过一个输入嵌入层,也就是把声音信号或者是文字转变为向量的形式。
2.加入位置编码,这些信号是没有位置信息的,这里加入位置信息。
3.通过multi-head attention层
4.上一步的输出加入一个残差再进行一个layer normalization (对一个样本的所有特征做)
5.通过MLP层
6.上一步输出加入残差在进行layer normalization
上面六步进行六次得到一个输出,这个输出也是一组向量或是说一个序列,只不过编码后的序列提取了某些特征,使得后续放入decoder中效果也许更好。