Transformer学习
一、输入
第一步:获取输入句子的每一个单词的表示向量 X,X由单词的 Embedding(Embedding就是从原始数据提取出来的Feature) 和单词位置的 Embedding 相加得到
(词向量和位置编码相加,得到输入的Embedding )
一个编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,对每个单词都输出一个向量传递到前馈神经网络中,将输出结果传递给下一个编码器
1. Word Embedding
- 将每个单词都变成特定维度的embedding(向量),Transformer中词向量使用512位
- 词嵌入只发生在最底层的编码其中,上面的编码器的输入都是之前编码器的输出
- 向量的列表大小是可以设置的,超参数一般是训练集中最长句子的长度
- 每一个词经过Self-Attention后,都会生成对应的向量Z1/Z2/Z3,这些向量会输入到Feed Forward中完成数字序列的编码,就是Word Embedding
2. Positional Encoding
- Positional Encoding存在意义:串联结构RNN中当前步骤的计算总会依赖上一个时间步的计算,这其中隐含了一个时序信号的过程,Transformer中并没有时序信息,因此要手动添加时序信息,让其知道当前的单次在整个句子中的位置
- 位置编码的维度和Word Embedding相同,在TR中也是512位,通过和Word Embedding相加才得到具有时序信号的Embedding
Positional Encoding的计算方法
- TR中使用的Positional Encoding是sin和cos三角函数
- pos是当前词在句子中的范围,取值范围是0-当前句子长度
i是位置编码维度,取值范围是0-dmodel/2(dmodel是事先定义好的,TR中是512位) - 偶数维度sin函数计算,奇数维度cos函数计算
- 对于不同维度三角函数周期不同,随着维度i变大,周期也变大
- 通过这种方式得到的位置编码对于句子中的每个单词来说是独一无二的
- 使用的相对位置编码,不是绝对位置编码
- TR中使用这种位置编码的优势是,它能够扩展到未知的序列长度。pos的取值范围是零到句子的长度,那这个句子的长度是我们事先定义的,且没有一个绝对的范围,定义多少都可以。好处是当我们训练出的模型需要翻译,翻译的句子远比训练集体的句子更长时,这种位置编码就体现出它的优势
二、自注意力机制
对每个向量使用qk v这三个向量来辅助计算注意力机制
- 第一步:
生成QKV三个向量,生成方法:对每个单词乘对应的权重矩阵,权重矩阵3个WQ WK WV
embeddingWQ = Q (查询向量)
embeddingWK = K(键向量)
embedding*WV = V(值向量)