Attention Is All You Need
时间: 2025-01-05 07:17:47 浏览: 5
### Transformer 模型架构解析
#### 输入与输出
Transformer 是一种基于自注意力机制的神经网络模型,旨在解决序列数据处理中的长距离依赖问题。该模型摒弃了传统的循环神经网络(RNN) 和卷积神经网络(CNN),完全依靠自注意力机制实现输入到输出的映射[^1]。
对于给定的一个源语言句子作为输入,Transformer 需要将其转换成目标语言对应的表示形式。具体来说:
- **输入嵌入(Input Embedding)**:将单词转化为向量表示;
- **位置编码(Positional Encoding)**:由于 Transformer 不具备内在顺序感,因此引入位置编码来保留词语的位置信息;
最终通过一系列编码器层和解码器层的操作得到输出结果。
#### 编码器 (Encoder)
编码器由多个相同的层堆叠而成,每一层主要包含两个子模块:
1. 多头自注意(Multi-head Self-Attention): 这部分负责捕捉不同词之间的关系,允许模型并行化训练的同时关注全局上下文特征。
2. 前馈全连接网络(Feed Forward Neural Network, FFN): 对每个位置上的隐藏状态应用线性变换加激活函数操作。
这两者之间以及之后都加入了残差链接(residual connection) 并进行了Layer Normalization 层标准化处理以加速收敛过程。
```python
class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout=0.1):
super().__init__()
self.self_attn = MultiHeadAttention(d_model, num_heads)
self.feed_forward = PositionwiseFeedForward(d_model, d_ff, dropout)
def forward(self, x, mask=None):
attn_output = self.self_attn(x, x, x, mask)
output = self.feed_forward(attn_output)
return output
```
#### 解码器 (Decoder)
解码器同样是由多层相同结构组成,不过每层内部有三个子组件而不是两个:
1. 掩蔽后的多头自注意(Masked Multi-Attention): 为了防止当前位置看到未来时刻的信息而采用掩蔽技术。
2. 编码器-解码器间的多头注意力(Multi-head Attention over the encoder stack outputs): 将来自编码器的最后一层输出作为键(key)和值(value), 当前时间步的状态作为查询(query).
3. 前馈全连接网络(FFN).
同样的,在各子模块间也存在跳跃连接(Skip Connection) 及 LayerNorm.
```python
class DecoderLayer(nn.Module):
def __init__(self, size, self_attn, src_attn, feed_forward, dropout):
"Take in model size and number of heads."
super(DecoderLayer, self).__init__()
self.size = size
self.self_attn = self_attn
self.src_attn = src_attn
self.feed_forward = feed_forward
self.sublayer = clones(SublayerConnection(size, dropout), 3)
def forward(self, x, memory, src_mask, tgt_mask):
m = memory
x = self.sublayer[0](x, lambda x: self.self_attn(x, x, x, tgt_mask))
x = self.sublayer[1](x, lambda x: self.src_attn(x, m, m, src_mask))
return self.sublayer[2](x, self.feed_forward)
```
#### 自注意力机制 (Self-Attention Mechanism)
自注意力机制是整个框架的核心组成部分之一,它使得模型可以更好地理解一句话里各个词汇的重要性及其相互作用。简单来讲就是计算Query(Q)、Key(K)、Value(V)矩阵乘法再除以根号下维度d_k的结果softmax后再与V相乘获得新的表征向量。
\[ \text{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right)V \]
这种设计不仅提高了效率还增强了表达能力,尤其是在处理较长文本时表现尤为突出[^2].
阅读全文