transformer的几种变形
时间: 2025-02-01 09:48:57 浏览: 37
### Transformer模型及其变体
#### 原始Transformer架构
原始的Transformer模型引入了一种全新的神经网络结构,摒弃了传统的循环神经网络(RNN),转而完全依赖于自注意力机制来处理序列数据。这种设计使得Transformer能够在并行化训练方面取得显著优势,并能更有效地捕捉长距离依赖关系[^2]。
```python
import torch.nn as nn
class OriginalTransformer(nn.Module):
def __init__(self, d_model=512, nhead=8, num_encoder_layers=6,
num_decoder_layers=6, dim_feedforward=2048, dropout=0.1):
super(OriginalTransformer, self).__init__()
# 定义编码器和解码器层...
```
#### Decoder-only (仅解码器) 变体
这类变体移除了标准Transformer中的编码器部分,只保留了解码器组件。这不仅简化了整体框架,还允许构建更加灵活的语言生成工具。例如,在大规模预训练语言模型中观察到的现象表明,增加模型规模可以提高性能;因此出现了像GPT系列这样的大型decoder-only模型[^3]。
```python
class DecoderOnlyModel(nn.Module):
def __init__(self, vocab_size, hidden_dim, num_heads, num_layers):
super().__init__()
self.embedding = nn.Embedding(vocab_size, hidden_dim)
decoder_layer = nn.TransformerDecoderLayer(hidden_dim, num_heads)
self.decoder = nn.TransformerDecoder(decoder_layer, num_layers)
def forward(self, tgt, memory=None): # 这里memory通常为空或不使用
return self.decoder(tgt=tgt, memory=memory if memory is not None else tgt)
```
#### GLU变体
门控线性单元(GLU)被应用于改进传统Transformer的表现力。具体来说,GLU变体会利用特定类型的激活函数组合——即ReLU与sigmoid相乘的形式——作为其核心操作之一。研究表明,这种方式可以在保持计算效率的同时增强表达能力,进而改善某些NLP任务上的效果[^1]。
```python
def glu(x, dim=-1):
"""实现简单的GLU"""
a, b = x.chunk(2, dim=dim)
return a * torch.sigmoid(b)
class GLUTransformerEncoderLayer(nn.Module):
def __init__(self, ... ):
...
self.linear1 = nn.Linear(d_model, 2*dim_feedforward)
def forward(self, src):
...
out = glu(self.linear1(src))
...
```
阅读全文
相关推荐


















