Transformer的原理与历史
1. Transformer的原理
Transformer是一种深度学习模型,由Vaswani等人在2017年的论文《Attention Is All You Need》中提出。其核心思想是通过自注意力(Self-Attention)机制处理序列数据,而不依赖于循环神经网络(RNN)或卷积神经网络(CNN)。
Transformer主要由以下几个部分组成:
- 输入嵌入(Input Embedding):将输入序列转换为固定维度的向量表示。
- 位置编码(Positional Encoding):因为Transformer没有循环结构,因此需要添加位置编码来表示单词的顺序。
- 自注意力(Self-Attention):计算每个词对序列中所有其他词的重要性,生成新的表示。
- 多头注意力(Multi-Head Attention):多个独立的注意力头并行计算,从不同角度提取信息。
- 前馈神经网络(Feed-Forward Network, FFN):对每个注意力计算后的向量进行进一步的非线性变换。
- 归一化与残差连接(Layer Normalization & Residual Connection):稳定训练并加速收敛。
- 输出层:通过Softmax生成最终的预测。
自注意力的公式
自注意力的计算可以表示为:
其中:
- QQ(Query):查询矩阵
- KK(Key):键矩阵
- VV(Value):值矩阵
- dkd_k:注意力维度
2. Transformer的发展历史
- 2017年:Transformer模型提出,突破了RNN在长距离依赖问题上的限制。
- 2018年:BERT(Bidirectional Encoder Representations from Transformers)发布,首次采用双向Transformer编码器,提高了NLP任务的性能。
- 2019年:GPT-2(Generative Pre-trained Transformer 2)发布,展示了大规模自回归语言模型的强大生成能力。
- 2020年:T5(Text-To-Text Transfer Transformer)和GPT-3发布,推动NLP迈向大规模预训练时代。
- 2021年至今:更大规模的模型(如GPT-4、PaLM、LLaMA等)不断涌现,Transformer在多模态、代码生成、医疗等领域拓展。
Transformer的QKV机制
在自注意力机制中,每个输入向量都会通过三个权重矩阵变换成查询(Query, Q)、键(Key, K)和值(Value, V):
其中 XX 是输入序列的表示,WQ,WK,WVW_Q, W_K, W_V 是可训练的权重矩阵。
自注意力计算基于 Q 和 K 之间的点积相似度来决定每个词的重要性,最终结合 V 生成输出。
Transformer的Mask类型
Transformer通常使用三种Mask:
- Padding Mask:用于掩盖填充(padding)位置,确保模型不会将填充的0值误认为有效信息。
- Look-Ahead Mask(或Causal Mask):用于自回归任务(如GPT),保证每个位置只能看到之前的单词,而不会看到未来的信息。
- Attention Mask:用于限制某些特定单词之间的注意力(如T5中不同任务的指定注意力模式)。
BERT和GPT的区别
特性 |
BERT |
GPT |
结构 |
仅使用Transformer的编码器(Encoder) |
仅使用Transformer的解码器(Decoder) |
训练方式 |
双向(Bidirectional) |
自回归(Autoregressive) |
目标任务 |
掩码语言模型(Masked Language Model, MLM) |
语言建模(Language Modeling, LM) |
输入 |
整个句子(可看见左、右两侧) |
逐词生成(只能看到左侧上下文) |
适用任务 |
适合理解任务(如文本分类、阅读理解) |
适合生成任务(如文本生成、对话) |
是否可以用BERT替换Transformer
BERT本质上是Transformer的一个变体(专注于Encoder部分),如果目标任务需要一个完整的Transformer架构(Encoder-Decoder或Decoder-only),直接替换可能会导致架构上的不匹配。例如:
- 在大模型(如T5、GPT)中,直接用BERT替换Transformer是不现实的,因为BERT缺乏解码器部分,无法执行生成任务。
- 但如果是在Encoder部分使用BERT(如BART、T5的Encoder),则是可行的。
GQA和自注意力机制的差别
GQA(Grouped Query Attention) 是一种优化自注意力计算的方法,主要用于大规模模型,以减少计算复杂度。其主要区别在于:
- 传统自注意力(Self-Attention):每个查询(Q)都会与所有键(K)进行点积计算,计算复杂度为
。 - GQA:多个查询可以共享同一组键值(K, V),从而减少计算量,使得计算复杂度降低到 O(n) 级别。
在千问1.5等大模型中,GQA可以大幅减少计算量,提高推理速度,同时保持注意力机制的有效性。