MCM520 ← 资料站首页 Transformer(自注意力) · 深度手册 打开交互阅读器 →

Transformer(自注意力) · 深度手册

分类:深度学习 | 难度:★★★ 高阶 | 编号:transformer

一、这是什么(一句话用途)

序列/图文统一建模:机器翻译、预训练大模型(GPT/BERT)基石

二、核心思想

Transformer 彻底抛弃了 RNN 的循环结构,用自注意力(Self-Attention)让序列中每个位置直接"看到"所有其他位置,并行计算它们的重要性权重。这样任意两个词之间的依赖只需一步即可建立,既解决了长程依赖,又能完全并行训练、速度远超 RNN。它靠位置编码注入词序信息,靠多头注意力从不同子空间捕捉关系。Transformer 是 BERT、GPT 等所有大语言模型的骨架,也征服了视觉(ViT)与多模态,是现代 AI 的底座。

三、数学原理与推导

自注意力:把每个位置映射为查询 Q\mathbf{Q}、键 K\mathbf{K}、值 V\mathbf{V}(线性投影),注意力权重为查询与键的相似度 softmax:

Attention(Q,K,V)=softmax ⁣(QKTdk)V \mathrm{Attention}(\mathbf{Q},\mathbf{K},\mathbf{V})=\mathrm{softmax}\!\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V}

dk\sqrt{d_k} 缩放防止点积过大致 softmax 饱和。多头并行多个注意力子空间再拼接:

MultiHead=Concat(head1,…,headh)WO,headi=Attention(QWiQ,KWiK,VWiV) \mathrm{MultiHead}=\mathrm{Concat}(\mathrm{head}_1,\dots,\mathrm{head}_h)\mathbf{W}^O,\quad \mathrm{head}_i=\mathrm{Attention}(\mathbf{Q}\mathbf{W}_i^Q,\mathbf{K}\mathbf{W}_i^K,\mathbf{V}\mathbf{W}_i^V)

每个子层外加重残差连接与层归一化(Add&Norm),堆叠 NN 层。位置信息由可学习/正弦位置编码 P\mathbf{P} 加到输入上:X←X+P\mathbf{X}\leftarrow\mathbf{X}+\mathbf{P}。

四、建模 / 求解步骤

  1. 词嵌入 + 位置编码
  2. 多头自注意力(并行算依赖)
  3. 残差+层归一化
  4. 前馈网络(逐位置 MLP)
  5. 堆叠 N 层,输出接任务头

五、关键公式速查

Attention=softmax(QKᵀ/√d_k)V;多头拼接+线性;残差+LN

六、典型示例

翻译任务:源句自注意力+对源句的交叉注意力,逐词生成目标句。

完整算例(数字演示,照着算一遍)

场景:10 词句子做情感分类,4 头自注意力,2 层编码器。

演示:句 '服务好但排队久' → 自注意力把 '好' 与 '服务'、'久' 与 '排队' 加权关联,输出 中性 概率 0.6。

结论:自注意力并行捕捉全局依赖,是 NLP 主干。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
cols = ["t%d" % i for i in range(1,13)]
df = pd.read_csv(os.path.join(HERE,"..","datasets","transformer.csv"))
seq = df[cols].to_numpy(dtype=float); y = df["label"].to_numpy(dtype=float)
seq = (seq-seq.mean(0))/seq.std(0)
N, T = seq.shape
rng = np.random.default_rng(17)
Wq = rng.normal(0,1,(T,8)); Wk = rng.normal(0,1,(T,8)); Wo = rng.normal(0,1,(1,1)); bo = 0
Q = seq@Wq; Km = seq@Wk
A = np.exp(Q@Km.T/np.sqrt(8)); A = A/A.sum(1, keepdims=True)
feat = (A@seq).mean(1, keepdims=True)          # (N,1) 自注意力加权池化
out = feat@Wo + bo
e = 1/(1+np.exp(-out)) - y
Wo -= 0.1*feat.T@e.reshape(-1,1); bo -= 0.1*e.sum()
print("Transformer(自注意力池化+输出层) 准确率=%.3f" % (((feat@Wo+bo).ravel()>0)==y).mean())

配套文件:py_transformer.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% Transformer 自注意力示例(MATLAB/Octave,随机投影+读out层训练)
df = readtable('..\datasets\transformer.csv');
cols = strcat('t',string(1:12));
seq = table2array(df(:,cols)); y = table2array(df(:,13));
seq = (seq-mean(seq,1))./std(seq,1); [N,T]=size(seq);
rng(17); Wq=randn(T,8); Wk=randn(T,8); Wo=randn(1,1); bo=0;
Q = seq*Wq; Km = seq*Wk;
A = exp(Q*Km'); A = A./sum(A,2);
feat = sum(A*seq, 2);
out = feat*Wo + bo; e = 1./(1+exp(-out)) - y;
Wo = Wo - 0.1*(feat'*e); bo = bo - 0.1*sum(e);
pred = (feat*Wo+bo)>0;
fprintf('Transformer(自注意力池化+输出层) 准确率=%.3f\n', mean(pred==y));

配套文件:m_transformer.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

12 步一维序列 + 二分类标签。用于 Transformer 自注意力池化对序列建模。

  • 字段:t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, label
  • 行数:40 行
  • 下载:transformer.csv

十、常见误区与避坑清单

  • 注意力平方复杂度(长序列慢)
  • 需大量数据/算力预训练
  • 位置编码不可省

十一、结果怎么解读

看注意力权重图理解词间关注关系。

十二、常与谁搭配

可取代循环神经网络与卷积处理序列;是预训练大模型基础。

十三、论文写作技巧(怎么把它写进论文)

把 Transformer(自注意力) 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

强调端到端 / 表示学习优势:无需手工特征,Transformer(自注意力) 直接从数据学表征。交代输入形式、网络结构(层数 / 宽度 / 激活)与规模(参数量、FLOPs),并说明相比传统模型的增益。

2. 结果怎么写(图表与指标)

给训练 / 验证损失与指标曲线、混淆矩阵 / 预测对比图;若有可视化(特征图 / CAM / 注意力)必放;做消融实验(去掉某模块性能掉多少)最能服人。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 Transformer(自注意力) 进行序列/图文统一建模:机器翻译、预训练大模型(GPT/BERT)基石。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt Transformer(自注意力) to 序列/图文统一建模:机器翻译、预训练大模型(GPT/BERT)基石. Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

写明超参、优化器、随机种子与硬件,保证可复现;警惕数据泄漏与测试集调参;样本少时给出正则 / 数据增强策略。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

本文采用 Transformer(自注意力) 从原始图像端到端学习特征,在测试集上达到 94.3% 准确率,较 ResNet-18 基线提升 2.1 个百分点;Grad-CAM 可视化显示模型关注病灶区域,符合医学先验。

We employ Transformer(自注意力) to learn features end-to-end from raw images, reaching 94.3% test accuracy—a 2.1-point gain over the ResNet-18 baseline; Grad-CAM visualizations show the model attends to lesion regions, consistent with medical prior.

6. 消融实验怎么写(深度学习必备)

深度学习论文几乎必备消融实验(ablation study):逐次移除一个模块(如注意力、数据增强、预训练),报告性能变化,量化每个组件的贡献。写作范式:① 列出「完整模型」与若干「删减变体」的指标对照表;② 用一句话解释每项移除带来的下降(如「去掉注意力后 mAP 降 3.4,说明全局依赖建模关键」);③ 训练技巧(学习率预热、标签平滑)若有增益也单列。注意:消融必须控制变量——一次只动一处,避免把多个改动混在一起导致无法归因。

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。