Transformer编码器-解码器(Encoder-Decoder)架构介绍+代码实现

一,Transformer架构介绍:

      Transformer的编码器-解码器是基于自注意力的模块叠加而成的,源序列(Input)和目标序列(Target)的嵌入(Embedding)表示将加上位置编码(Positional encoding),再分别输入到编码器和解码器中。从宏观角度来看,Transformer的编码器是由多个相同的层叠加而 成的,每个层都有两个子层(子层表示为sublayer)。第一个子层是多头自注意力(multi‐head self‐attention

汇聚;第二个子层是基于位置的前馈网络( positionwise feed‐forward network )。具体来说,在计算编码器 的自注意力时,查询、键和值都来自前一个编码器层的输出, 每个子层都采用
了残差连接( residual connection )。在 Transformer 中,对于序列中任何位置的任何输入 x R d ,都要求满 足sublayer ( x ) R d ,以便残差连接满足 x + sublayer ( x ) R d。在残差连接的加法计算之后,紧接着应用层 规范化(layer normalization)。因此,输入序列对应的每个位置,Transformer编码器都将输出一个 d维表示向量。 Transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。除了编码器中 描述的两个子层之外,解码器还在这两个子层之间插入了第三个子层,称为编码器-解码器注意力(encoder‐ decoder attention)层。在编码器-解码器注意力中,查询来自前一个解码器层的输出,而键和值来自整个 编码器的输出。在解码器自注意力中,查询、键和值都来自上一个解码器层的输出。但是,解码器中的每个位 置只能考虑该位置之前的所有位置。这种掩蔽(masked)注意力保留了自回归(auto‐regressive)属性,确 保预测仅依赖于已生成的输出词元。

二,嵌入层和位置编码的作用:

举个例子,假设我们正在处理一个英语到西班牙语的翻译问题,其中一个样本的源序列是 "The ball is blue",目标序列是 "La bola es azul"。

源序列首先通过 Embedding 和 Position Encoding 层,为序列中的每个单词生成嵌入。随后嵌入被传递到编码器,到达 Attention module.

Attention module 中,嵌入的序列通过三个线性层(Linear layers),产生三个独立的矩阵--Query、Key、Value。这三个矩阵被用来计算注意力得分。这些矩阵的每一 "行 "对应于源序列中的一个词。

位置编码的简单图示:

三,多头自注意力网络(MultiHead Self-Attention):

多头点积注意力:

Query 与 Key 的转置进行点积,产生一个中间矩阵,即所谓“因子矩阵”。因子矩阵的每个单元都是两个词向量之间的矩阵乘法。

如下所示,因子矩阵第 4 行的每一列都对应于 Q4 向量与每个 K 向量之间的点积;因子矩阵的第 2 列对应与每个 Q 向量与 K2 向量之间的点积,这个“因子矩阵”就是注意力分数(Attention Score)

因子矩阵再经过Softmax函数生成一组概率分布也就是注意力权重(Attention Weights)再和 V 矩阵之间进行矩阵相乘,产生注意力池化(Attention Pooling)输出。可以看到,输出矩阵中第 4 行对应的是 Q4 矩阵与所有其他对应的

### Transformer架构中的编码-解码工作原理 Transformer是一种基于注意力机制的神经网络模型,它通过编码器Encoder)和解码器Decoder)来实现输入序列到目标序列的转换。其核心在于自注意力机制(Self-Attention Mechanism),这使得模型能够并行处理整个输入序列而无需依赖于循环结构。 #### 编码器部分 编码器由多个相同的层堆叠而成,每一层主要包含两个子层:多头自注意力机制(Multi-head Self-Attention)和前馈全连接网络(Feed Forward Neural Network)。 - **多头自注意力机制**允许模型关注输入序列的不同位置,从而捕获全局上下文信息[^1]。 - **残差连接(Residual Connection)**被应用于每个子层之后,并配合层归一化(Layer Normalization)以稳定训练过程[^2]。 以下是编码器的主要操作流程: 1. 输入嵌入向量经过位置编码(Positional Encoding)后送入第一个编码器层。 2. 多头自注意力机制计算当前词与其他词之间的关系权重。 3. 前馈全连接网络进一步提取特征。 4. 输出作为下一层编码器的输入,直到最后一层完成编码。 #### 解码器部分 解码器同样由多个相同层组成,每层除了具有与编码器类似的两种子层外,还额外增加了一个“编码器-解码器注意力”子层。该子层用于捕捉源序列和目标序列之间跨语言的信息关联[^3]。 具体来说: - 首先,在解码过程中应用掩码多头自注意力机制(Masked Multi-head Self-Attention),防止当前位置看到后续单词的内容。 - 接着,“编码器-解码器注意力”利用来自编码器的最后一层表示生成加权平均值。 - 最终,通过线性变换和Softmax函数预测下一个可能的目标词概率分布。 #### 架构图解说明 下面是一个简单的代码示例展示如何构建基本的Transformer模块: ```python import torch.nn as nn from transformers import BertTokenizer, BertModel class SimpleTransformer(nn.Module): def __init__(self, vocab_size, d_model=512, num_heads=8, num_layers=6): super(SimpleTransformer, self).__init__() self.embedding = nn.Embedding(vocab_size, d_model) encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=num_heads) self.encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers) def forward(self, src): embedded_src = self.embedding(src) # (batch_size, seq_len, d_model) encoded_output = self.encoder(embedded_src) # Encoder processing return encoded_output ``` 此代码片段仅展示了编码器的部分功能;完整的Transformer还需要加入解码器以及相应的交叉注意机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值