当前位置:   article > 正文

深度学习:transformer模型

transformer模型

        Google于2017年6月发布在arxiv上的一篇文章《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果,创新之处在于提出了两个新的Attention机制,分别叫做 Scaled Dot-Product Attention 和 Multi-Head Attention。

        考虑到RNN(或者LSTM、GRU等)的计算限制是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:1 时间片t的计算依赖t-1时刻的计算结果,这样限制了模型的并行能力;2 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。

transformer模型结构

        论文中的验证Transformer的实验室基于机器翻译的,其本质上是一个Encoder-Decoder的结构,编码器由6个编码block组成(encoder每个block由self-attention,FFNN组成),同样解码器是6个解码block组成(decoder每个block由self-attention,encoder-decoder attention以及FFNN组成),与所有的生成模型相同的是,编码器的输出会作为解码器的输入。Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence aligned RNNs or convolution。

Transformer可概括为:

所有的编码器在结构上都是相同的,但它们没有共享参数。 

具体模型结构如下图:

illustration from Lin et al,, "A Survey of Transformers"比原文图好看

Note:这里需要说明一下,原始transformer中的隐层向量维度hidden_size=d_model=512,multihead个数n_head=8;而bert中hidden_size=d_model=768,multihead个数n_head=12。

Transformer Encoder

        Encoder由Nx个相同的layer组成,layer指的就是上图左侧的单元,最左边有个“Nx”(论文中是6个)。每个Layer由两个sub-layer组成,分别是multi-head self-attention mechanism和fully connected feed-forward network。

其中每个sub-layer都加了residual connection和normalization,即在两个子层中会使用一个残差连接,接着进行层标准化(layer normalization)。因此可以将sub-layer的输出表示为: 

bert里面实现时的一般结构

BertLayer
    BertAttention
        BertSelfAttention(即去除最后那个linear后的multi-head)
        BertSelfOutput(multi-head最后那个linear + dropout + LN)
    BertIntermediate
        FNN的前一半nn.Linear(hidden_dim, intermediate_dim) + 激活
    BertOutput
        FNN的后一半(nn.Linear(intermediate_dim, hidden_dim))linear + dropout + LN

绘成图就是这样:[Bert 主体模型]

多头注意力Multi-head attention:Models context

即加了最后那个linear层后的multi-head

        一句话概括做了啥:attention就是将每个word的词向量,通过seq中其它词的加权来表示。

        Transformer所使用的注意力机制的核心思想(也是注意力机制有效的解释)是去计算一句话中的每个词对于这句话中所有词的相互关系,然后认为这些词与词之间的相互关系在一定程度上反应了这句话中不同词之间的关联性以及重要程度,因此再利用这些相互关系来调整每个词的重要性(权重)就可以获得每个词新的表达,这个新的表征不但蕴含了该词本身,还蕴含了其他词与这个词的关系,因此和单纯的词向量相比是一个更加全局的表达。使用了Attention机制,将序列中的任意两个位置之间的距离缩小为一个常量,Attention层能够一步到位捕捉到全局的联系,因为它直接把序列两两比较(代价是计算量变为

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/487225
推荐阅读
相关标签