self attention
Q=K=V :输入一个句子,那么里面的每个词都要和该句子中的所有词进行attention计算,目的是要学习句子内部词之间的依赖关系,捕获句子的内部结构。
首先,要build Q,K,V,对其进行线性变换 for example: dot,reshape, permute_dimensions
然后,我们要对序列做mask,忽略填充部分的影响,一般mask是将填充部分置零,但attention中的mask是在softmax之前,将填充部分减去一个较大的整数(这样softmax后就比较接近0)
之后,call函数
onece encoder:
vector->self attention->feed forward neural network->r
Q可以理解成篇章的词向量序列,K= V, 为问题的词向量序列,那么输入就是aligned question embedding
transform:
就是谷歌提出的transformer 的架构。这其中左半部分是 encoder, 右半部分是 decoder.
Encoder: 这里面有 N=6 个 一样的layers, 每一层包含了两个sub-layers. 第一个sub-layer 就是多头注意力层(multi-head attention layer) 然后是一个简单的全连接层。 这里还有一个残差连接 (residual connection), 在这个基础上, 还有一个layer norm. 这里的注意力层会在下文详细解释。
Decoder: 这里同样是有六个一样的Layer是,但是这里的layer 和encoder 不一样, 这里的layer 包含了三个sub-layers, 其中有 一个self-attention layer, encoder-decoder attention layer 最后是一个全连接层。 前两个sub-layer 都是基于multi-head attention layer. 这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。 比如训练时, 第一个单词是不能参考第二个单词的生成结果的。 Masking就会把这个信息变成0, 用来保证预测位置 i 的信息只能基于比 i 小的输出。
tensor2tensor
可以理解成模型和各类数据集的一个集成库,可以方便的去调用,解决常见的问题。
实践路线
attention->transform->bert
理解原理->用t2t实现transform