Transformer
把 Attention 堆起来——完全抛弃 RNN,所有位置同时互相"看",让并行训练成为可能
✦ 先看效果:多头注意力的不同视角
切换不同的注意力头,观察同一句话中不同头关注的模式——有的关注相邻词,有的捕捉长距离依赖。
悬停 token 查看注意力权重,线条粗细表示权重大小
01 大白话讲 Transformer
RNN 的问题:只能一步步走
RNN 处理句子就像在读一本书,必须从第一个字读到最后一个字,前一步没读完就不能读下一步。这导致两个问题:
GPU 有成千上万个核心,但 RNN 每次只用一个,浪费严重
句子开头的信息要经过几十步才能影响结尾,沿途不断被稀释
Transformer 的解法:所有位置同时互相看
Transformer 直接用 Self-Attention 让句子中每个词同时关注所有其他词,没有时序依赖,整句话一次并行处理完。
代价是:必须人工告诉模型词的顺序——这就是位置编码的作用。
位置编码:给词打上"座位号"
Transformer 用正弦/余弦函数生成每个位置的唯一编码,叠加到词向量上:
就像时钟的秒针、分针、时针——组合起来可以精确表示任意时刻(任意位置)
任意两个位置的编码之差是固定的,让模型能感知相对距离,不只是绝对位置
多头注意力:多角度理解
单个 Attention 一次只能关注一种模式。多头注意力并行运行多个 Attention,每个"头"学会关注不同类型的关系:
关注相邻词(局部语法)
关注同类词(语义相似)
关注句法依存(主谓宾)
关注长距离指代(代词消歧)
最后把所有头的输出拼接起来,得到更丰富的表示。
为什么 Transformer 这么强?
全并行,充分利用 GPU——GPT-3 这种千亿参数模型只有 Transformer 才能训出来
任意两词之间路径长度为 1,不再有梯度消失问题
GPT(纯解码器)、BERT(纯编码器)、T5(编码器+解码器)都是 Transformer 变体
一步步构建位置编码
Transformer 没有循环结构,靠位置编码注入序列顺序信息。
偶数维用 sin、奇数维用 cos,频率随维度增大而降低。
生成 [MAX_LEN × D_MODEL] 的位置编码矩阵,加到词嵌入上。
用热力图观察每个位置、每个维度的编码值——越靠右的维度变化越慢。
02 代码
03 学术性讲解
Transformer(Vaswani et al., 2017 "Attention Is All You Need")完全基于自注意力机制构建,彻底抛弃循环和卷积,通过多头注意力、残差连接和层归一化实现高效的序列建模。
整体架构:编码器–解码器
核心组件详解
PE(pos, 2i) = sin(pos / 10000^(2i/d)),PE(pos, 2i+1) = cos(...)。不同频率的正弦波叠加,使模型能通过线性变换计算相对位置差
将 Q/K/V 分别投影到 h 个低维子空间,各自做 Attention 后拼接:MultiHead(Q,K,V) = Concat(head₁,...,headₕ)·W_O,其中 headᵢ = Attention(QWᵢ_Q, KWᵢ_K, VWᵢ_V)
每个子层输出为 LayerNorm(x + Sublayer(x))。残差防止深层网络梯度消失,层归一化稳定训练
解码器在生成第 t 个词时,只能看到位置 1~t-1 的词(未来词被掩盖),保证自回归生成的因果性
解码器的 Q 来自自身,K/V 来自编码器输出——这是解码器"查阅"源序列信息的通道
与 RNN 对比
RNN O(n);Transformer O(1)——任意两词直接相连
RNN 顺序依赖无法并行;Transformer 全并行
RNN O(nd²);Transformer O(n²d)——短序列 Transformer 更快,超长序列反之
GPT/BERT/T5 均基于 Transformer,已成为 NLP 默认架构
总结
抛弃循环,全局并行
正弦波注入顺序信息
多角度捕捉依赖关系
稳定深层网络训练