美文网首页Machine Learning & Recommendation & NLP & DL
自然语言处理N天-再次学习Transformer04

自然语言处理N天-再次学习Transformer04

作者: 我的昵称违规了 | 来源:发表于2019-03-17 10:30 被阅读0次
    新建 Microsoft PowerPoint 演示文稿 (2).jpg

    从今天开始,我会再看一遍Transformer(这是第3遍了吧……)。
    这次是依据Transformer 模型的 PyTorch 实现进行学习,再梳理一下Transformer模型的重点,最后用Pytorch实现。
    本来想用AllenNLP一步到位,但是前天敲了一天发现不行,我对Pytorch不懂,同时还是不了解AllenNLP,干脆从头再来。

    7. Position-wise Feed-Forward network

    除了attention子层之外,encoder和decoder中的每个层都包含一个完全连接的前馈网络(Feed-forward network),该网络分别和相同地应用于每个位置。这包括两个线性变换和一个ReLU激活。
    FFN(x)=max(0,xW1+b1)W2+b2
    虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。另一种描述这种情况的方法是两个内核大小为1的卷积。输入和输出的维数是512,而中间层维度为2048。

    8. Embeddings和Softmax

    与其他序列转导模型类似,我们使用学习嵌入(learned embeddings)将输入标记和输出标记转换为维度dmodel的向量。我们还使用通常学习的线性变换和softmax函数将decoder输出转换为预测的下一个token的概率。
    模型中在两个嵌入层和pre-softmax线性变换之间共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以\sqrt{d_{\text{model}}}

    9.位置编码Positional encoding

    在处理完模型的各个模块后,开始关注数据的输入部分,在这里重点是位置编码。与CNN和RNN不同,Transformer模型对于序列没有编码,这就导致无法获取每个词之间的关系,也就是无法构成有意义的语句。
    为了解决这个问题。论文提出了Positional encoding。核心就是对序列中的词语出现的位置进行编码。如果对位置进行编码,那么我们的模型就可以捕捉顺序信息。
    论文使用正余弦函数实现位置编码。这样做的好处就是不仅可以获取词的绝对位置信息,还可以获取相对位置信息。
    PE(pos,2i) = sin(pos/10000^{2i/d_{model}})
    PE(pos,2i+1) = cos(pos/10000^{2i/d_{model}})
    其中,pos是指词语在序列中的位置。可以看出,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码。

    相对位置信息通过以下公式实现
    sin(\alpha+\beta) = sin\alpha cos\beta + cos\alpha sin\beta
    cos(\alpha+\beta) = cos\alpha cos\beta - sin\alpha sin\beta
    上面的公式说明,对于词汇之间的位置偏移k,PE(pos+k)可以表示成PE(pos)PE(k)的组合形式,这就是表达相对位置的能力。

    10. 模块的整合

    这部分是为了凑整,其实就是代码实现整合。

    相关文章

      网友评论

        本文标题:自然语言处理N天-再次学习Transformer04

        本文链接:https://www.haomeiwen.com/subject/cliymqtx.html