type
status
date
slug
summary
tags
category
icon
password
comment
Status
Transformer 核心结构

1. 词嵌入 (Token Embeddings)
- 函数:
get_token_embeddings(vocab_size, num_units, zero_pad=True)
• 作用:生成词向量矩阵,支持零填充(padding符号的向量设为全零)。 • 流程:
- 使用Xavier初始化创建嵌入矩阵。
- 若开启零填充,首行(索引0)设为全零。 • 用途: • 将离散的词汇ID映射为连续向量。 • 零填充用于处理变长序列的掩码。
2. 位置编码 (Positional Encoding)
- 函数:
positional_encoding(inputs, maxlen, masking=True)
• 作用:为序列添加位置信息,弥补无时序结构的不足。 • 生成规则: • 偶数位置用正弦,奇数位置用余弦。 • 频率随维度增加递减,捕获不同粒度的位置关系。 • 掩码处理:屏蔽padding位置的位置编码。
3. 层归一化 (Layer Normalization)
- 函数:
ln(inputs, epsilon=1e-8, scope="ln")
• 作用:对输入进行层归一化,稳定训练过程。 • 流程:
- 计算输入最后一个维度的均值和方差。
- 使用可学习的参数
gamma
和beta
进行缩放和偏移。 • 关键点: • 归一化沿特征维度(最后一个维度)进行。 • 防止梯度消失/爆炸,加速收敛。
4. 缩放点积注意力 (Scaled Dot-Product Attention)
- 函数:
scaled_dot_product_attention(Q, K, V, key_masks, causality=False, dropout_rate=0, training=True)
• 作用:计算注意力权重并聚合上下文信息。 • 流程:
- 点积缩放:计算Q和K的点积,除以√d_k(防止梯度消失)。
- 掩码处理: ◦ Key掩码:屏蔽padding位置。 ◦ 因果掩码:防止未来信息泄漏(用于解码器)。
- Softmax:归一化注意力权重。
- Dropout:训练时随机丢弃部分权重。
- 加权求和:用权重对V聚合,得到上下文向量。 • 关键点: • 掩码通过添加极大负值实现,Softmax后对应位置接近零。
5. 多头注意力 (Multi-Head Attention)
- 函数:
multihead_attention(queries, keys, values, key_masks, num_heads=8, ...)
• 作用:将输入拆分到多个子空间并行计算注意力,增强模型表达能力。 • 流程:
- 线性投影:通过全连接层生成Q、K、V。
- 拆分多头:沿特征维度切分张量,拼接批次维度。
- 并行注意力:每个头独立计算缩放点积注意力。
- 合并输出:拼接所有头的输出,通过全连接层整合。
- 残差连接 & 层归一化:保留原始信息,稳定训练。 • 关键点: • 多头机制允许模型关注不同子空间的信息。
6. 前馈网络 (Feed-Forward Network)
- 函数:
ff(inputs, num_units, scope="positionwise_feedforward")
• 作用:对每个位置独立进行非线性变换。 • 结构:
- 全连接层(扩大维度)+ ReLU激活。
- 全连接层(恢复原始维度)。
- 残差连接 & 层归一化。 • 关键点: • 提供模型非线性能力,独立处理每个位置。
7. 编码器 (encode
方法)
- 处理输入序列 (
xs
),包括词嵌入、位置编码、掩码(masking)。
- 经过多个自注意力(self-attention)和前馈(feed-forward)层后,返回编码后的表示
memory
。
8. 解码器 (decode
方法)
- 处理目标序列 (
ys
),包括词嵌入、位置编码、掩码(masking)。
- 先进行 masked self-attention,再与编码器
memory
进行 cross-attention。
- 经过前馈层后,得到最终的预测
logits
。
训练 (train
方法)
- 计算目标
y
的标签平滑 (label_smoothing
)。
- 计算交叉熵损失 (
cross-entropy loss
) 并进行梯度优化(Adam)。
- 记录训练指标(学习率
lr
、损失loss
)。
推理 (eval
方法)
- 采用 自回归(autoregressive) 方式预测序列:
- 先用
<s>
作为起始符。 - 逐步生成下一个 token,直到达到最大长度或遇到
<pad>
结束。
BERT
ERT(Bidirectional Encoder Representations from Transformers, 2018) 主要基于 Transformer 的 Encoder 部分,用于预训练文本表示。
BERT 的特点
- 双向(Bidirectional)
- BERT 的核心创新是双向预训练,即在处理一个单词时,它不仅看左侧的上下文,也看右侧的上下文(相比之下,GPT 只能看左侧)。
- 这让 BERT 能够更好地理解句子含义,特别是填空任务和文本分类任务。
- 预训练任务
- 掩码语言模型(Masked Language Model, MLM)
- 训练时随机遮蔽(mask)输入中的部分单词,要求模型预测被遮蔽的单词。
- 例如:
- 下一句预测(Next Sentence Prediction, NSP)
- 判断两句话是否是连续的,比如:
- 这个任务有助于文本匹配和问答系统。
- 应用场景
- 文本分类(情感分析、主题分类)
- 机器阅读理解(如 SQuAD)
- 命名实体识别(NER)
- 句子匹配(如搜索引擎)
GPT
GPT(Generative Pre-trained Transformer, 2018) 主要基于 Transformer 的 Decoder 部分,用于生成任务。
GPT 的特点
- 单向(Autoregressive, Left-to-Right)
- 在处理一个 token 时,GPT 只看它前面的 token,而不会看到右侧的 token。
- 例如:
- 这种自回归(Autoregressive)方式非常适合文本生成任务。
- 预训练任务
- 自回归语言模型(Causal Language Modeling, CLM)
- 目标是预测下一个 token:
- 只看过去的 tokens,不看未来的 tokens。
- 应用场景
- 文本生成(如 ChatGPT)
- 代码生成(如 Codex)
- 对话系统(如 ChatGPT)
- 文章续写
ㅤ | BERT | GPT |
架构 | Transformer Encoder | Transformer Decoder |
方向 | 双向(Bidirectional) | 单向(Left-to-Right, Autoregressive) |
目标任务 | 语言理解(NLU) | 语言生成(NLG) |
预训练 | Masked Language Model (MLM) & Next Sentence Prediction (NSP) | 自回归语言模型 (Causal LM) |
应用 | 句子分类、阅读理解、NER | 文本生成、对话、代码生成 |
- Author:小灰
- URL:https://blog.opencontent.cn//article/llm-transformer
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!