Transformer 模型(能理解“句子顺序”和“上下文”的神经网络架构)
- 1. 起源与发展
- 2. Transformer 模型分类
- 3. 核心概念
- 3.1 自监督学习
- 3.2 迁移学习与微调
- 3.3 注意力层(Attention Layer)
- 4. 模型结构
- 4.1 Encoder
- 4.2 Decoder
- 4.3 Encoder-Decoder
- 5.Transformer Encoder
- 5.1 输入与嵌入
- 5.2 Encoder 层结构(每一层相同)
- 5.3 Encoder 层总结
- 5.4 Encoder 流程图(简化)
Transformer 是自 2017 年提出以来,取代 RNN 和 CNN 的主流 NLP 模型架构,广泛应用于文本理解与生成任务。
1. 起源与发展
- 2017 年:Google 提出《Attention Is All You Need》,用于序列建模和机器翻译任务。
- ULMFiT:Fast AI 提出基于 LSTM 的迁移学习方法,用少量标注数据即可高效训练文本分类模型。
- 标志性模型:
- GPT (Generative Pretrained Transformer)
- BERT (Bidirectional Encoder Representations from Transformers)
- 优势:
- Transformer + 自监督学习 → 不依赖人工标注数据
- 可迁移到各种 NLP 下游任务
- 支持并行计算,加快训练速度
2. Transformer 模型分类
- 三种模型框架
类别 | 架构 | 代表模型 | 适用任务 |
---|---|---|---|
纯 Encoder | Auto-Encoding | BERT、RoBERTa、ALBERT、ELECTRA | 文本理解、分类、NER、抽取式问答 |
纯 Decoder | Auto-Regressive | GPT 系列、CTRL、GPT-Neo | 文本生成、续写、代码生成 |
Encoder-Decoder | Seq2Seq | T5、BART、M2M-100、BigBird | 翻译、摘要、生成式问答 |
3. 核心概念
预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练。自监督学习是一种训练目标可以根据模型的输入自动计算的训练方法。也就是说,训练这些 Transformer 模型完全不需要人工标注数据。
3.1 自监督学习
- MLM: Masked Language Modeling,遮盖语言建模(Word2Vec 模型提出的 CBOW),基于上下文(周围的词语)来预测句子中被遮盖掉的词语 (masked word),被 BERT 首次广泛使用
- CLM: Causal Language Modeling, 因果语言建模(统计语言模型),根据
前文
预测下一个词,自回归语言建模,用于 GPT
3.2 迁移学习与微调
-
预训练模型:从头开始训练,需要海量的训练数据,而且时间和经济成本都非常高。
-
迁移学习:在预训练模型基础 上使用
少量标注数据
微调下游任务(将别人预训练好的模型权重通过迁移学习应用到自己的模型中,即使用自己的任务语料对模型进行“二次训练”,通过微调参数使模型适用于新任务。) -
避免从头训练,节省时间、数据和计算成本
3.3 注意力层(Attention Layer)
-
核心思想
模型像“专注力”,自动判断哪些词最重要并重点关注。 -
基本概念
- Query - Q:想问的内容
- Key - K:每个词的标签或特征
- Value - V:每个词的实际信息
- Attention:权重矩阵,相关性强的该关注的信息权重大;计算每个 Query 对所有 Key 的相关性,加权求 Value,得到最重要的信息
简单理解:“我想知道当前词最应该关注哪些词,然后把它们的信息加权合成输出。”
-
多头注意力(Multi-Head Attention)
- 多个视角同时观察句子,每个头关注不同关系模式,合并后理解更全面上下文
-
作用
- 抓住长距离关系:可以让句子开头和结尾的词互相关注
- 灵活分配关注:重要词得到更多权重
- 加速训练:比 RNN 并行计算更高效
- 掩码机制:可以屏蔽不该看的词,比如未来的词或填充的空位
4. 模型结构
4.1 Encoder
- 功能:理解输入文本,生成语义表示
- 典型模型:
- BERT:MLM + NSP 预训练
- RoBERTa:去掉 NSP、加大训练数据和批次
- ALBERT:参数共享、降低维度
- DistilBERT:知识蒸馏压缩模型
- 适用任务:文本分类、NER、抽取式问答
4.2 Decoder
- 功能:生成文本,逐步预测下一个词
- 典型模型:
- GPT 系列:纯自回归生成
- CTRL:条件生成,控制文本风格
- GPT-Neo / GPT-J:开源替代 GPT-3
- 适用任务:文本生成、续写、代码生成
4.3 Encoder-Decoder
- 功能:同时理解输入并生成输出
- 典型模型:
- T5:将所有 NLU 和 NLG 任务转为 Seq2Seq
- BART:结合 Encoder 和 Decoder 预训练,适用于理解与生成任务
- M2M-100:多语言翻译模型
- BigBird:处理超长文本,线性稀疏注意力
- 适用任务:机器翻译、文本摘要、生成式问答
5. Transformer Encoder
5.1 输入与嵌入
- 输入序列:原始文本 →(将原始文本切分成模型可以处理的最小单元。Tokenization)→ 词元 /分词(token)
- 词向量嵌入: Embedding(词向量),每个词映射为一个向量,把 离散的Token 映射成一个连续高维向量,用数字表示 Token 的语义信息。
- 位置编码:Positional Encoding,加入词在句子中的顺序信息
- 组合:input_embedding + positional_encoding
词向量表示词语含义,位置编码表示词语顺序 → 让模型既知道“词是什么”,也知道“词在哪”。
5.2 Encoder 层结构
每层 Encoder 主要包含两个子层:多头自注意力层 + 前馈网络。
5.2.1 多头自注意力 (Multi-Head Self-Attention)
- 输入:上一层输出 (或者最初的 embedding)
- 作用:捕捉句子中任意两个词之间的关系
- 计算步骤:
- 将输入投影为 Q、K、V:
- Q - Query:当前词想问的问题
- K - Key:每个词的标签或特征
- V - Value:每个词的实际信息
- 计算注意力权重
-
QK^T → 衡量每个 Query 和所有 Key 的相关性
-
Softmax (常用的归一化函数,用于将一个向量转换成概率分布(0~1,总和 = 1))
→ 把相关性归一化,得到注意力权重
-
权重矩阵 × V → 得到融合上下文的最终 Token 表示
- 多头机制:
- 不同头关注不同关系模式
- 最后合并各头信息,形成更丰富的上下文表示
直观理解:模型问“这个词应该关注哪些词?”,再把关注的词信息加权合并。
5.2.2 前馈网络 (Feed-Forward Network)
- 作用:对每个词的表示做非线性变换,提高表达能力
- 结构:通常是两层全连接 + 激活函数
- 残差连接 + 层归一化: output = LayerNorm(x + FFN(x))
- 残差连接:保留原输入信息,防止梯度消失
- Layer Norm:稳定训练,加快收敛
Token embeddingx
│
▼
LinearW1 + b1 (扩维)
│
激活函数 ReLU/GELU
│
LinearW2 + b2 (降维)
│
残差连接: x + FFN(x)
│
LayerNorm
│
输出表示 → 下一个 Encoder 层
5.3 Encoder 层总结
每层 Encoder 的输入 → 自注意力捕捉上下文 → 前馈网络增强表示 → 输出给下一层。
- 多层堆叠 → 捕捉深层次语义与长距离依赖
- 输出最终语义表示 → 可用于分类、序列标注、抽取式问答等任务
5.4 Encoder 流程图(简化)
输入序列
│
Embedding + Positional Encoding
│
┌───────────────────────────┐
│ Encoder Layer 1 │
│ ┌───────────────┐ │
│ │ Multi-Head │ │
│ │ Self-Attn │ │
│ └───────────────┘ │
│ ┌───────────────┐ │
│ │ Feed Forward │ │
│ └───────────────┘ │
└───────────────────────────┘
│
▼
──> Encoder Layer 2 → … → Encoder Layer N
│
▼
输出语义表示