什么是 Transformer 架构?
Transformer 是谷歌研究人员在 2017 年的论文《Attention Is All You Need》中提出的一种革命性的神经网络架构。它彻底改变了自然语言处理(NLP)领域,因为它摒弃了序列到序列模型中传统使用的循环和卷积层。取而代之的是,它完全依赖于一种名为“自注意力”的机制,该机制允许它在生成输出时权衡输入序列中不同单词的重要性。这种设计实现了更高程度的并行化,使研究人员能够用前所未有的大量数据训练规模大得多的模型。
主要特点
- 自注意力机制: Transformer 的核心。它允许模型在处理特定单词时查看输入序列中的其他单词,从而捕捉上下文关系,无论它们之间的距离有多远。
- 多头注意力: 对自注意力的一种增强,将注意力机制并行运行多次。这使得模型能够共同关注来自不同位置的不同表示子空间的信息。
- 编码器-解码器堆栈: 原始架构由一个用于处理输入序列的编码器和一个用于生成输出序列的解码器组成。许多现代模型,如 BERT(仅编码器)和 GPT(仅解码器),只使用这个堆栈的一部分。
- 位置编码: 由于模型不包含循环结构,它注入了关于序列中标记的相对或绝对位置的信息。这些编码被添加到输入嵌入中。
- 并行化: 通过消除 RNN 的顺序性,Transformer 可以同时处理序列中的所有标记,从而大大缩短了训练时间。
应用场景
- 机器翻译: Transformer 最初设计的任务,它在该领域创造了新的技术水平。
- 文本生成: 像 GPT 这样的模型使用 Transformer 的解码器来生成连贯且与上下文相关的类人文本。
- 文本摘要: 通过理解长文档的要点来创建简洁的摘要。
- 现代大语言模型的基础: Transformer 架构是大多数现代大型语言模型(包括 BERT、GPT-3、T5 等)的基础构建模块。
入门指南
这是一个在 PyTorch 中如何使用 Transformer 编码器和解码器层的简化“Hello World”示例。它展示了基本组件的运作方式。
```python import torch import torch.nn as nn
Define a simple Transformer model
class SimpleTransformer(nn.Module): def init(self, input_dim, model_dim, num_heads, num_layers): super(SimpleTransformer, self).init() self.embedding = nn.Embedding(input_dim, model_dim) self.pos_encoder = nn.Parameter(torch.zeros(1, 5000, model_dim)) # Positional Encoding
encoder_layers = nn.TransformerEncoderLayer(d_model=model_dim, nhead=num_heads)
self.transformer_encoder = nn.TransformerEncoder(encoder_layers, num_layers=num_layers)
self.fc_out = nn.Linear(model_dim, input_dim)
def forward(self, src):
src = self.embedding(src) + self.pos_encoder[:, :src.size(1), :]
output = self.transformer_encoder(src)
output = self.fc_out(output)
return output
Example Usage
Parameters
input_vocab_size = 1000 # Size of input vocabulary d_model = 512 # Embedding dimension n_heads = 8 # Number of heads in multi-head attention n_layers = 6 # Number of encoder layers
Create a model instance
model = SimpleTransformer(input_vocab_size, d_model, n_heads, n_layers)
Create a dummy input tensor (batch_size=1, sequence_length=10)
src_input = torch.randint(0, input_vocab_size, (1, 10))
Get the model output
output = model(src_input)
print(“Input Shape:”, src_input.shape) print(“Output Shape:”, output.shape)
Expected Output Shape: torch.Size([1, 10, 1000])
此代码定义了一个基本的 Transformer 编码器堆栈,处理一个输入序列,并产生一个相同长度的输出。
定价
Transformer 是一个研究概念和开源架构。它可以免费使用、实现和修改。与之相关的主要成本不是架构本身,而是训练基于它的大规模模型以及运行它们进行推理所需的计算资源(GPU/TPU)。
《Attention Is All You Need》论文
Transformer 在 2017 年发表的一篇题为《Attention Is All You Need》的论文中被引入。这篇论文是现代计算机科学中被引用最多的著作之一,被认为是任何在人工智能和自然语言处理领域工作的人的必读之作。它为当前一代的大型语言模型奠定了基础,并从根本上改变了人工智能研究的方向。