Transformer详解(三):Transformer 结构

15 篇文章 10 订阅
订阅专栏

Transformer结构是谷歌那篇《Attention is all you need》论文中提到的。论文中提出了transformer这么一种新的结构,将其应用在机器翻译的领域上,取得了很好的效果。本文将分析一下Transformer结构的具体组成部分。

1. 背景

自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型。传统的基于RNN的Seq2Seq模型难以处理长序列的句子,无法实现并行,并且面临对齐的问题。

所以之后这类模型的发展大多数从三个方面入手:

  • input的方向性:单向 -> 双向
  • 深度:单层 -> 多层
  • 类型:RNN -> LSTM GRU

但是依旧收到一些潜在问题的制约,神经网络需要能够将源语句的所有必要信息压缩成固定长度的向量。这可能使得神经网络难以应付长时间的句子,特别是那些比训练语料库中的句子更长的句子;每个时间步的输出需要依赖于前面时间步的输出,这使得模型没有办法并行,效率低;仍然面临对齐问题。

再然后CNN由计算机视觉也被引入到deep NLP中,CNN不能直接用于处理变长的序列样本但可以实现并行计算。完全基于CNN的Seq2Seq模型虽然可以并行实现,但非常占内存,很多的trick,大数据量上参数调整并不容易。

本篇文章创新点在于抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用Attention。文章的主要目的在于减少计算量和提高并行效率的同时不损害最终的实验结果。

2. 整体结构

Transformer 整体结构宏观上看是一个Encoder-Decoder结构,只不过这个结构完全抛弃了常见的RNN,LSTM等结构。

图1 Transformer整体结构

图中左边部分为Encoder 部分,右边部分为Decoder部分和最后的线性输出层。整体模型看上去看上去很复杂,其实这就是一个Seq2Seq模型,左边一个encoder把输入读进去,右边一个decoder得到输出。其中Encoder和Decoder各有6层。

图2 Encoder-Decoder 的6层结构

3. Transformer详细介绍

3.1 输入编码

如图所示,首先通过Word2Vec等词嵌入方法将输入语料转化成特征向量,论文中使用的词嵌入的维度为d_{model}=512

图3 单词的输入编码

3.1.1 Positional Encoding

对于没有Positional Encoding的模型,我们对于输入句子的处理其实忽略了词序问题。
因为按照attention的计算公式,我们只不过是计算了两两之间的attention值。‘I have a dream’ 和 ‘Dream have a I’这两句话对于attention而言是一样。那么截止目前为止,模型还不过是一个复杂的词袋模型,没有考虑到词序。而RNN这种模型的一大特点就是考虑到了词序。为了解决这个问题,transformer模型在数据预处理时就提出了位置编码这个概念。
原文中对于这个位置编码提出了两种方式,第一种是训练出一个位置编码,第二种是原文使用的用三角函数编码的方法。具体公式如下

这里的pos表示单词的位置, i表示embedding的维度。关于位置编码的实现可在Google开源的算法中get_timing_signal_1d()函数找到对应的代码。

位置编码的使用

至于为什么使用三角函数,是三角函数的两条性质可以既考虑到绝对位置又可以考虑到相对位置。

这表明位置k+p的位置向量可以表示为位置k的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。通过这个公式可以用位置k的线性表达来表示位置k+p。
附上pytorch的代码帮助一下理解。

class PositionalEncoding(nn.Module):
    "Implement the PE function."
    def __init__(self, d_model, dropout, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)
        
        # Compute the positional encodings once in log space.
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len).unsqueeze(1)
        div_term = torch.exp(torch.arange(0, d_model, 2) *
                             -(math.log(10000.0) / d_model))
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0)
        self.register_buffer('pe', pe)
        
    def forward(self, x):
        x = x + Variable(self.pe[:, :x.size(1)], requires_grad=False)
        return self.dropout(x)

3.1.2 输入的下流

在最底层的block中,x+positional encoding 将直接作为Transformer的输入,而在其他层中,输入则是上一个block的输出。在这里输入序列中每个位置的单词都有自己独特的路径流入编码器。在自注意力层中,这些路径之间存在依赖关系。而前馈(feed-forward)层没有这些依赖关系。因此在前馈(feed-forward)层时可以并行执行各种路径。

为了画图更简单,我们使用更简单的例子来表示接下来的过程。

图4 每一层的Encoder

Encoder的输出,会和每一层的Decoder进行结合。我们取其中一层进行详细的展示:

图5 Encoder的输出连接到Decoder的每一层

整体框架细节展示:

图6 整体框架

3.2 Encoder部分

Encoder有N=6层,前面几层的encoder的输出,会作为输入给下一层的encoder。这里要注意,每一个encoder里的两层的输出,都会进入一个add&Norm。最后的encoder会输出给后面的decoder模型。

每层包括两个sub-layers:

第一个sub-layer是multi-head self-attention mechanism,用来计算输入的self-attention
第二个sub-layer是简单的全连接网络。

3.2.1 Add & Normalize

在每个sub-layer我们都模拟了残差网络,每个sub-layer的输出都是:

LayerNorm(x+Sublayer(x))

其中Sublayer(x) 表示Sub-layer对输入 x 做的映射,为了确保连接,所有的sub-layers和embedding layer输出的维数都相同。

图7 Encoder中的每一层

3.2.2 Position-wise Feed-forward Networks

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出(输入输出层的维度都为512,中间层为2048):

FFN(x)=max(0,xW_1+b_1)W_2+b_2

3.3 Decoder部分

Decoder部分和Encoder一样,也是有6层,但是每一个单独的decoder层与encoder层相比,在self-attention层(decoder层中叫masked self-attention)和全连接网络层之间,多了一层Encoder-Decoder-Attention 层。


每层包括3个sub-layers:

  第一个是Masked multi-head self-attention,也是计算输入的self-attention,这个与encoder中的区别是这里是masked-multi-head-self-attention。使用mask的原因是因为在预测句子的时候,当前时刻是无法获取到未来时刻的信息的。上一篇文章提到self-attention会生成一个attention map,并以‘I have a dream’为例生成了一个4*4的attention map,这次生成的4*4的attention map因为有mask的原因,未来的信息全部被隐藏掉了。

图8 当前预测的时候是无法获取未来信息的

       第二个sub-layer是一个正常的multi-head attention层。但是这里Q,K,V来源不同。Q来自于上一个Decoder层的输出,而K,V则来自于encoder的输出。剩下的计算就没有其他的不同了。
  第三个sub-layer是全连接网络,与Encoder相同
  
  关于这两个attention层,可以理解为 mask-self-attention是计算当前翻译的内容和已经翻译的前文之间的关系,而encoder-decoder-attention 是计算当前翻译内容和编码的特征向量之间的关系。

       参考上述总体框架细节图6。

3.3.1 The Final Linear and Softmax Layer

图9 Linear and Softmax

 

3.4 Muti-Head Attention

       模型中使用的是multi-head-Attention。其实就是多个self-attention,可以把每个self-attention理解为一个head,多个self-attention自然就是多头了。在上一篇文章中我们已经提到了self-attention的计算,经过计算,一个self-attention会输出一个结果z。那么,multi-head-attention的输出是什么呢? 答案是把每一个self-attention的输出结果拼接起来。然后输入给后面的全连接网络。

       通过增加一种叫做“多头”注意力(“multi-headed” attention)的机制,论文进一步完善了自注意力层,并在两方面提高了注意力层的性能:

       1.它扩展了模型专注于不同位置的能力。在上面的例子中,虽然每个编码都在图4的z1中有或多或少的体现,但是它可能被实际的单词本身所支配。如果我们翻译一个句子,比如“The animal didn’t cross the street because it was too tired”,我们会想知道“it”指的是哪个词,这时模型的“多头”注意机制会起到作用。

       2.它给出了注意力层的多个“表示子空间”(representation subspaces)。接下来我们将看到,对于“多头”注意机制,我们有多个查询/键/值权重矩阵集(Transformer使用八个注意力头,因此我们对于每个编码器/解码器有八个矩阵集合)。这些集合中的每一个都是随机初始化的,在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。

    在这里我们以h=8 举例说明。就是说不仅仅只初始化一组Q、K、V的矩阵,而是初始化多组,tranformer是使用了8组,所以最后得到的结果是8个矩阵。

图10 在每一个Attention Head中,为每一个token产生query,key和value

       在“多头”注意机制下,我们为每个头保持独立的查询/键/值权重矩阵,从而产生不同的查询/键/值矩阵。和之前一样,我们拿X乘以WQ/WK/WV矩阵来产生查询/键/值矩阵。

      如图10,X中的每一行,Q_0中的每一行,K_0中的每一行,V_0中的每一行都对应一个token(或者一个词)。

       如果我们做与上述相同的自注意力计算,只需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵。

图11 Muti-Head 中计算Attention values

这给我们留下了一个小的挑战,前馈神经网络没法输入8个矩阵呀,这该怎么办呢?所以我们需要一种方式,把8个矩阵降为1个,首先,我们把8个矩阵连在一起,这样会得到一个大的矩阵,再随机初始化一个矩阵W^O(权值矩阵)和这个组合好的矩阵相乘,最后得到一个最终的矩阵。

图12 Multi-head-Attention的拼接过程

这就是multi-headed attention的全部流程了,这里其实已经有很多矩阵了,我们把所有的矩阵放到一张图内看一下总体的流程。

图13 Multi-Head 全部流程

 

这里附上pytorch版本的multi-head attention版本

class MultiHeadedAttention(nn.Module):
    def __init__(self, h, d_model, dropout=0.1):
        "Take in model size and number of heads."
        super(MultiHeadedAttention, self).__init__()
        assert d_model % h == 0
        # We assume d_v always equals d_k
        self.d_k = d_model // h
        self.h = h
        self.linears = clones(nn.Linear(d_model, d_model), 4)
        self.attn = None
        self.dropout = nn.Dropout(p=dropout)
        
    def forward(self, query, key, value, mask=None):
        "Implements Figure 2"
        if mask is not None:
            # Same mask applied to all h heads.
            mask = mask.unsqueeze(1)
        nbatches = query.size(0)
        
        # 1) Do all the linear projections in batch from d_model => h x d_k 
        query, key, value = \
            [l(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
             for l, x in zip(self.linears, (query, key, value))]
        
        # 2) Apply attention on all the projected vectors in batch. 
        x, self.attn = attention(query, key, value, mask=mask, 
                                 dropout=self.dropout)
        
        # 3) "Concat" using a view and apply a final linear. 
        x = x.transpose(1, 2).contiguous() \
             .view(nbatches, -1, self.h * self.d_k)
        return self.linears[-1](x)

以上的过程可以用文章中的图表示。

图14 对应文章中的流程

3.5 动图表示

个人表达能力有限,这里用博客 The Illustrated Transformer中动图来表示decoder阶段,输出第一个词和输出剩下词的过程。

图15 动图表示

3.6 详细解释Transformer输入和输出

3.6.1 Encoder输入输出

让我们从输入开始,再从头理一遍单个encoder这个过程:

  • 输入x    [batch_size, seq_length, embedding_size or 512]
  • x 做一个层归一化: x1 = norm(x)
  • 进入多头self-attention: x2 = self_attention(x1)       #   multi-headed attention (假设8个头)的每个头的Qi/Ki/Vi的参数矩阵WQi/WKi/WVi大小是[batch_size,embedding_size, embedding_size/8]    #x2: [batch_size, seq_length, embedding_size]
  • 残差加成:x3 = x + x2
  • 再做个层归一化:x4 = norm(x3)
  • 经过前馈网络: x5 = feed_forward(x4)
  • 残差加成: x6 = x3 + x5           #[batch_size, seq_length, embedding_size]
  • 输出x6                                         #[batch_size, seq_length, embedding_size]

注意,输入和输出的维度大小是一样的。

3.6.2 Decoder

注意,encoder的输出并没直接作为decoder的直接输入。

训练的时候,1.初始decoder的time step为1时(也就是第一次接收输入),其输入为一个特殊的token,可能是目标序列开始的token(如<BOS>),也可能是源序列结尾的token(如<EOS>),也可能是其它视任务而定的输入等等,不同源码中可能有微小的差异,其目标则是预测翻译后的第1个单词(token)是什么;2.然后<BOS>和预测出来的第1个单词一起,再次作为decoder的输入,得到第2个预测单词;3后续依此类推;

具体的例子如下:

样本:“我/爱/机器/学习”和 "i/ love /machine/ learning"

训练:
1. 把“我/爱/机器/学习”embedding后输入到encoder里去,最后一层的encoder最终输出的outputs [10, 512](假设我们采用的embedding长度为512,而且batch size = 1),此outputs 乘以新的参数矩阵,可以作为decoder里每一层用到的K和V;

2. 将<bos>作为decoder的初始输入,将decoder的最大概率输出词 A1和‘i’做cross entropy计算error。

3. 将<bos>,"i" 作为decoder的输入,将decoder的最大概率输出词 A2 和‘love’做cross entropy计算error。

4. 将<bos>,"i","love" 作为decoder的输入,将decoder的最大概率输出词A3和'machine' 做cross entropy计算error。

5. 将<bos>,"i","love ","machine" 作为decoder的输入,将decoder最大概率输出词A4和‘learning’做cross entropy计算error。

6. 将<bos>,"i","love ","machine","learning" 作为decoder的输入,将decoder最大概率输出词A5和终止符</s>做cross entropy计算error。

Sequence Mask

上述训练过程是挨个单词串行进行的,那么能不能并行进行呢,当然可以。可以看到上述单个句子训练时候,输入到 decoder的分别是

<bos>

<bos>,"i"

<bos>,"i","love"

<bos>,"i","love ","machine"

<bos>,"i","love ","machine","learning"

那么为何不将这些输入组成矩阵,进行输入呢?这些输入组成矩阵形式如下:

【<bos>

<bos>,"i"

<bos>,"i","love"

<bos>,"i","love ","machine"

<bos>,"i","love ","machine","learning" 】

怎么操作得到这个矩阵呢?

将decoder在上述2-6步次的输入补全为一个完整的句子

【<bos>,"i","love ","machine","learning"
<bos>,"i","love ","machine","learning"
<bos>,"i","love ","machine","learning"
<bos>,"i","love ","machine","learning"
<bos>,"i","love ","machine","learning"】

然后将上述矩阵矩阵乘以一个 mask矩阵

【1 0 0 0 0

1 1 0 0 0

1 1 1 0 0

1 1 1 1 0

1 1 1 1 1 】

这样是不是就得到了

【<bos>

<bos>,"i"

<bos>,"i","love"

<bos>,"i","love ","machine"

<bos>,"i","love ","machine","learning" 】

这样的矩阵了 。这就是我们需要输入矩阵。这个mask矩阵就是 sequence mask,其实它和encoder中的padding mask 异曲同工。

这样将这个矩阵输入到decoder(其实你可以想一下,此时这个矩阵是不是类似于批处理,矩阵的每行是一个样本,只是每行的样本长度不一样,每行输入后最终得到一个输出概率分布,作为矩阵输入的话,一下可以得到5个输出概率分布)。

这样我们就可以进行并行计算进行训练了。

测试

训练好模型, 测试的时候,比如用 '机器学习很有趣'当作测试样本,得到其英语翻译。

这一句经过encoder后得到输出tensor,送入到decoder(并不是当作decoder的直接输入):

1.然后用起始符<bos>当作decoder的 输入,得到输出 machine

2. 用<bos> + machine 当作输入得到输出 learning

3.用 <bos> + machine + learning 当作输入得到is

4.用<bos> + machine + learning + is 当作输入得到interesting

5.用<bos> + machine + learning + is + interesting 当作输入得到 结束符号<eos>

我们就得到了完整的翻译 'machine learning is interesting'

可以看到,在测试过程中,只能一个单词一个单词的进行输出,是串行进行的。

4. 扩充内容

4.1 Layer Normalization

在transformer中,每一个子层(self-attetion或者ffnn)之后都会接一个残缺模块,并且有一个Layer normalization,见图7。

残缺模块相信大家都很清楚了,这里不再讲解,主要讲解下Layer normalization。Normalization有很多种,但是它们都有一个共同的目的,那就是把输入转化成均值为0方差为1的数据。我们在把数据送入激活函数之前进行normalization(归一化),因为我们不希望输入数据落在激活函数的饱和区。

说到 normalization,那就肯定得提到 Batch Normalization。BN的主要思想就是:在每一层的每一批数据上进行归一化。我们可能会对输入数据进行归一化,但是经过该网络层的作用后,我们的数据已经不再是归一化的了。随着这种情况的发展,数据的偏差越来越大,我的反向传播需要考虑到这些大的偏差,这就迫使我们只能使用较小的学习率来防止梯度消失或者梯度爆炸。BN的具体做法就是对每一小批数据,在批这个方向上做归一化。如下图所示:

图16 Batch Normaliztion

可以看到,右半边求均值是沿着数据 batch_size的方向进行的,其计算公式如下:

 

BN(x_i)=\alpha \times \frac{x_i-\mu_b}{\sqrt{\sigma^2_B+ \varepsilon }}+ \beta

那么什么是 Layer normalization 呢?它也是归一化数据的一种方式,不过 LN 是在每一个样本上计算均值和方差,而不是BN那种在批方向计算均值和方差!

图17  Layer Normalization

下面看一下 LN 的公式:

LN(x_i)=\alpha \times \frac{x_i-\mu_L}{\sqrt{\sigma^2_L+ \varepsilon }}+ \beta

4.2 Mask

可以看到decoder部分其实和encoder部分大同小异,不过在最下面额外多了一个masked mutil-head attetion,这里的mask也是transformer一个很关键的技术,我们一起来看一下,见图1。

Mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。其中,padding mask 在所有的 scaled dot-product attention 里面都需要用到,而 sequence mask 只有在 decoder 的 self-attention 里面用到。

 

4.2.1 Padding Mask

什么是 padding mask 呢?因为每个批次输入序列长度是不一样的。也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。

具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0!而我们的 padding mask 实际上是一个张量,每个值都是一个Boolean,值为 false 的地方就是我们要进行处理的地方

4.2.2 Sequence mask

文章前面也提到,sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。

那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

对于 decoder 的 self-attention,里面使用到的 scaled dot-product attention,同时需要padding mask 和 sequence mask 作为 attn_mask,具体实现就是两个mask相加作为attn_mask。

其他情况,attn_mask 一律等于 padding mask。

 

5. 总结

以上就是transformer结构的基本讲解。更深入细节的了解还是要继续研读论文和代码了。

 

参考文献

[1] Attention Is All You Need
[2] 详解Transformer (Attention Is All You Need)
[3] The Illustrated Transformer
[4] Visualizing A Neural Machine Translation Model
[5] 在NLP中广泛应用的transformer(Self-Attention)剖析笔记
[6] Attention is all you need模型笔记
[7] The Annotated Transformer

Transformer结构
Raina_qing的博客
05-30 3226
文章目录Transformer结构0. RNN的缺点1. 整体结构域2. Encoder部分2.1. multi-head-Attention层2.1.1 插入讲解self-attention2.1.2. 回到多头2.2. 全连接层3. Decoder部分4. Generator部分5. Positional Encoding参考文献: Transformer结构 与Bert论文相关,Bert中也插入了相关连接。 0. RNN的缺点 RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两
Transformer入门(一)——结构
yeen123的博客
06-02 8729
Transformer入门介绍篇,分别介绍了Transformer的总体结构与每个模块的实现原理
一文搞懂 Transformer(总体架构 & 种注意力层)
2401_84033492的博客
05-25 9510
本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__个方面,带您一文搞懂Transformer(总体架构 & 种注意力层)。节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。
一文搞懂 Transformer(总体架构 & 种注意力层)_transformer架构
最新发布
qkh1234567的博客
08-01 2437
本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__个方面,带您一文搞懂Transformer(总体架构 & 种注意力层)。
Transformer架构解析
wdn blog
05-21 5757
Transformer 是第一个完全依赖自注意力来计算其输入和输出表示,而不是使用序列对齐 RNN 或卷积的模型。
Transformer(二)--论文理解:transformer 结构详解
12-10 1万+
文章目录1. transformer的基本结构2. 模块详解2.1 模块1:Positional Embedding(以下简称PE模块):2.2 模块2:Multi-Head Attention(多头注意力机制)2.2.1 Scaled Dot-Product Attention(缩放的点积注意力机制)2.2.2 Multi_Head(多头机制)2.3 模块3:ADD2.4 模块4:Layer Normalization2.5 模块5:Feed Forward NetWork2.6 模块6:Masked M
Transformer各层网络结构详解!面试必备!(附代码实现)
mantch
09-26 1万+
1. 什么是Transformer 《Attention Is All You Need》是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型,叫 Transformer,抛弃了以往深度学习任务里面使用到的 CNN 和 RNN。目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等...
史上最小白之Transformer详解
热门推荐
Tink1995的博客
03-27 33万+
1.前言 博客分为上下两篇,您现在阅读的是史上最小白之从Attention到Transformer详解(下) 上篇博客地址:史上最小白之从Attention到Transformer详解(上) 在上篇中我们已经介绍了Encoder-Decoder,Attention机制,self-Attention,今天就来一起看看近两年大火的Transformer。 2.Transformer 原理 2.1 Tr...
Swin Transformer详解: Hierarchical Vision Transformer using Shifted Windows
qq_45122568的博客
05-16 1万+
这篇文章使用和CNN类似的分层提取特征,来达到扩大感受野的效果。是一个特征提取的主干网络,backbone。分层特征提取,不断减小“feature map”的大小(token的数量)。关键部分是Shift window移动窗口(W-MSA、SW-MSA)ViT中使用不重叠的窗口,但是忽略了相邻窗口间的相关性,而Swin-T使用shfit windown移动(M/2)来弥补。但这样会引入很大的计算量,那么作者又提出了cyclic-shift 循环位移,保证计算量不变,但是这样的移动会使得相邻窗口间不相关的部.
Transformer详解.pptx
06-15
它摒弃了传统的循环神经网络(RNN)和长短期记忆网络(LSTM)结构,转而依赖于自注意力(Self-Attention)机制,极大地提升了模型的并行计算能力,从而提高了效率。 Seq2Seq(Sequence to Sequence)模型通常用于...
transformer详解transformer/ universal transformer/ transformer-XL
彼得.攀的blog
10-08 1968
首发自彼得攀的小站 特别鸣谢刘陆琛@Mayouji在本文写作过程中的帮助 Attention机制在NLP领域的应用最早可以追朔到2014年,Bengio团队将Attention引入NMT(神经机器翻译)任务 [1]。之后更是在深度学习的各个领域得到了广泛应用:如CV中用于捕捉图像上的感受野;NLP中定位关键token/feature. 作为某种程度上可以称为当下NLP领域最强的特征抽取器的tran...
transformer详解
08-18
transformer 详解 Transformer 模型是一个 Encoder-Decoder 架构,由编码组件和解码组件组成。编码组件由多层编码器(Encoder)组成,解码组件也是由相同层数的解码器(Decoder)组成。编码器的输入会先流入 Self-...
Transformer架构详解
m0_63260018的博客
12-18 3972
Transformer是一种深度学习模型,最初是由Vaswani等人在2017年的论文《Attention Is All You Need》中提出的。这种模型在自然语言处理(NLP)领域特别流行,它引入了一种新的机制——自注意力(self-attention),使得模型能够更加高效和有效地处理序列数据。
Transformer结构详解【学习笔记】
qq_23022733的博客
01-11 1481
然后再对Encoders(编码),Decoders(解码)进行细化,如下图,需要注意Encoders之间的结构是相同的,Decoders之间的结构也是相同的,虽然Encoders和Decoders之间各自的结构是相同的,但是是单独训练的,Encoders和Decoders的数量是超参数,可以自己定义,,依次对输入的【我爱你。下面再举一个NLP的例子,Query代表【爱】,分别与Key1,Key2,Key3,Key4代表的【我】,【不】,【爱】,【你】做点乘,具体步骤如下2图,比如输入的词是【我爱你。
Transformer结构详解
LitraLIN的博客
12-26 1万+
Transformer结构详解1.ransformer整体结构2.Transformer的输入2.1单词Embedding2.2 位置Embedding3.self-attention(自注意机制)3.1 self-attention结构3.2 Q,K,V的计算3.3self-atttention的输出3.4 Multi-Head Attention4.Encoder结构4.1 Add & Norm4.2 Feed Forward4.3 组成Encoder5.Decoder结构5.1 第一个Mul
Transformer结构解析
codelady_g的博客
11-03 7639
Transformer模型的结构和计算过程
Transformertransformer模型结构学习笔记
shuaixio的博客
07-07 1477
transformer架构,encoder-decoder层,encoder子层介绍,decoder子层介绍,注意力机制,自注意力,交叉注意力,因果注意力,多头注意力,掩码注意力,前馈神经网络,非线性
Transformer 结构
si_ying的博客
06-27 1190
这个部分类似于我们最开始讲的端到端模型中的注意力机制,它是为了帮助 Decoder 端每一步的生成都可以关注和整合每个 Encoder 端每个位置的信息。和 Encoder block 一样,这样的 Decoder block 也可以进行堆叠,如上图我右方标记了“Nx”。在原论文中,Decoder block 也是一共堆叠了 6 层。
写文章

热门文章

  • CUDA版本不同:nvidia-smi和nvcc -V 34352
  • 注意力机制基本原理详解及应用 30560
  • LSTM模型结构讲解 29185
  • 数据增强mixup技术 27152
  • 语音识别(一):介绍和简单实现 12592

分类专栏

  • ASR 3篇
  • 强化学习 24篇
  • Linux服务器配置 1篇
  • 微服务 7篇
  • 语音
  • 计算机视觉 7篇
  • Tensorflow 8篇
  • NLP 15篇
  • 机器学习-李宏毅
  • 小样本学习 2篇
  • 系统配置 1篇
  • 神经网络 9篇
  • 数据库 18篇
  • C++
  • Python 14篇
  • Java 2篇
  • 大数据 3篇
  • Scala 2篇
  • Flink 2篇
  • 企业信息 1篇
  • 云计算应用 2篇
  • Spark 2篇
  • PyTorch 4篇
  • 正则表达式 1篇
  • Scrapy 9篇
  • Knowledge Graph 8篇
  • Spring-Boot 1篇
  • 数学知识 2篇

最新评论

  • 注意力机制基本原理详解及应用

    豆宝别出bug了: 谢谢,这是最详细的一篇了,博主肯定是真的理解了,感激不尽

  • 语音识别(一):介绍和简单实现

    weixin_44592863: 请问有完整的代码吗

  • 语音识别(一):介绍和简单实现

    YLTommi: 请问有完整的代码吗

  • CUDA版本不同:nvidia-smi和nvcc -V

    阿朴朴: 最后一步卸载cuda真是舒服,一把成功

  • CUDA版本不同:nvidia-smi和nvcc -V

    yechengda: 配置环境时候要加:,**:$PATH

最新文章

  • 莫烦强化学习视频笔记:第六节 6.6 Asynchronous Advantage Actor-Critic (A3C)
  • 莫烦强化学习视频笔记:第六节 6.5 什么是 Asynchronous Advantage Actor-Critic (A3C)
  • 莫烦强化学习视频笔记:第六节 6.4 Deep Deterministic Policy Gradient (DDPG)
2021年65篇
2020年45篇
2019年11篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家阿城植物玻璃钢雕塑玻璃钢人物镂空不锈钢雕塑厂天心区宁乡玻璃钢雕塑公司南宁春节商场美陈玻璃钢雕塑艺术家玻璃钢雕塑景观设计公司哪家好舟山玻璃钢仿铜雕塑价格厦门玻璃钢艺术雕塑湖州玻璃钢仿真水果雕塑玻璃钢人物雕塑哪里买福建人物玻璃钢雕塑供应商曲阳做玻璃钢雕塑公司广州玻璃钢雕塑报价德阳公园玻璃钢雕塑漯河雕工精湛玻璃钢雕塑恩施玻璃钢雕塑考拉定制玻璃钢雕塑设计怎么做宜宾玻璃钢雕塑生产厂家成品玻璃钢雕塑摆件定制玻璃钢人物雕塑专业平台耒阳玻璃钢花盆花器鼎湖玻璃钢浮雕雕塑价格广州玻璃钢雕塑摆件制造成都公园玻璃钢雕塑价格六安大型户外玻璃钢雕塑报价弥勒市玻璃钢雕塑设计厂家都匀玻璃钢雕塑制作电话奉贤区知名玻璃钢雕塑推荐玻璃钢浮雕不锈钢公园雕塑厂天津玻璃钢雕塑施工香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化