从 Bit 到 AGI第四章:神经元(Neuron)

Attention 为什么出现

从 Bit 到 AGI · 第四章:神经元(Neuron) · Attention 为什么出现

作者 David更新于 第 54 篇(共 186 篇)

LSTM 把信息压缩进固定长度向量 hh,解码长句时像「把整个句子塞进一个手提箱」——容量瓶颈。Attention 允许解码第 tt 步直接查看编码器所有位置,用可学习的权重加权求和。路径长度从 O(n)O(n) 降到 O(1)O(1),这是 Transformer 与 modern LLM 的核心动机。

直觉

开卷考试 vs 闭卷:RNN 编码器闭卷,只带摘要 hh;Attention 开卷,每写一个字都可以翻回原文任意句。对齐「它」指代哪个人,不必靠 hh magically 记住——算一遍相似度即可。

定义

加性 Attention(Bahdanau, 2015):

eti=v⊤tanh⁡(Wsst−1+Whhi),αti=exp⁡(eti)∑jexp⁡(etj),ct=∑iαtihie_{ti} = v^\top \tanh(W_s s_{t-1} + W_h h_i), \quad \alpha_{ti} = \frac{\exp(e_{ti})}{\sum_j \exp(e_{tj})}, \quad c_t = \sum_i \alpha_{ti} h_i

缩放点积 Attention(Transformer 基础):

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V
  • QQ:查询(我想找什么)
  • KK:键(各位置的标签)
  • VV:值(各位置的内容)
  • αti\alpha_{ti}:注意力权重,∑iαti=1\sum_i \alpha_{ti}=1

例子

例 1:手算 3 位置注意力

dk=2d_k=2,一个 query,三个 key/value:

import numpy as np

def softmax(x):
    e = np.exp(x - x.max())
    return e / e.sum()

Q = np.array([[1.0, 0.0]])
K = np.array([[1.0, 0.0],
              [0.0, 1.0],
              [1.0, 1.0]])
V = np.array([[10.0, 0.0],
              [0.0, 20.0],
              [5.0, 5.0]])

scores = Q @ K.T / np.sqrt(2)   # [0.707, 0, 0.707]
alpha = softmax(scores)         # [0.401, 0.198, 0.401]
context = alpha @ V
print(f"α={alpha.round(3)}, context={context.round(2)}")

Query 与位置 0、2 的 key 更相似 → 输出偏向 10 与 (5,5) 的混合。

例 2:路径长度对比

机制位置 ii 到 jj 的信息路径最长路径
RNN需经 ∥i−j∥\|i-j\| 步传播O(n)O(n)
Attention一步 αij\alpha_{ij} 连边O(1)O(1)

序列长 n=512n=512:RNN 有效梯度路径 512 步;Self-Attention 一步可达任意对。

例 3:机器翻译对齐

「我 / love / you」→「我 / 爱 / 你」:生成「爱」时 α\alpha 峰值常在 「love」——可视化注意力矩阵呈对角线。

量化

  • Self-Attention 一层(单头):Q,K,V∈Rn×dQ,K,V \in \mathbb{R}^{n \times d},QK⊤QK^\top 为 n2dn^2 d MAC;n=2048,d=64n=2048, d=64 → ≈268\approx 268M MAC/头/层
  • 内存:注意力矩阵 n×nn \times n,n=4096n=4096 float32 → 64 MB/头(训练存多份)
  • Multi-Head:hh 头并行,dmodel=h⋅dkd_{\text{model}} = h \cdot d_k;GPT-3 96 层 × 96 头量级
  • 2017 Transformer 英德 WMT:BLEU 28.4,训练成本低于 LSTM seq2seq 大集群

第五章会展开 QKV、Multi-Head 与 Transformer 块。本章只需记住:Attention = 软寻址 + 内容寻址 的加权读。

常见误区

  1. 「Attention = 人类注意力」——是可微的加权平均,无 consciousness。
  2. 「Attention 权重 = 解释性」——相关不等于因果;解释需额外方法。
  3. 「Attention 取代 RNN 因 RNN 慢」——O(n2)O(n^2) 的 Attention 在长序列上也可更慢;胜在并行与长程。

动手试一试

实现缩放点积 attention:

import numpy as np

def scaled_dot_product_attention(Q, K, V):
    d_k = Q.shape[-1]
    scores = Q @ K.T / np.sqrt(d_k)
    weights = softmax(scores)
    return weights @ V, weights

Q = np.random.randn(4, 8)   # 4 个 token, d=8
K = np.random.randn(4, 8)
V = np.random.randn(4, 8)
out, w = scaled_dot_product_attention(Q, K, V)
print(out.shape, w.shape)    # (4,8), (4,4)
print(w.sum(axis=1))         # 每行和为 1

Self-Attention vs Cross-Attention

  • Self-Attention:Q,K,VQ,K,V 来自同一序列——每个 token 看全句其他 token(GPT 解码器 masked 版本只看左侧)。
  • Cross-Attention:QQ 来自 decoder,K,VK,V 来自 encoder——翻译时 decoder 查源句。

两者数学形式相同,只是 Q,K,VQ,K,V 的来源不同。Transformer 编码器只用 self-attention;原始 seq2seq Transformer 解码器两种都有。

并行性与 O(n2)O(n^2) 代价

RNN 第 tt 步依赖 ht−1h_{t-1},无法并行时间维。Self-Attention 一次矩阵乘 QK⊤QK^\top 算齐所有位置对——训练可完全并行,GPU 利用率高。代价是 O(n2)O(n^2) 内存与计算;n=8192n=8192 时 attention 矩阵 67M 元素/头,促生 FlashAttention、稀疏 Attention、线性 Attention 等优化(第八章推理专题)。

Luong vs Bahdanau Attention

Bahdanau(additive):eti=v⊤tanh⁡(Wsst+Whhi)e_{ti}=v^\top\tanh(W_s s_t + W_h h_i)——MLP 打分。Luong(dot/multiplicative):eti=st⊤hie_{ti}=s_t^\top h_i 或 st⊤Whis_t^\top W h_i——更省算力。Transformer 用 scaled dot-product 是 Luong 系扩展。

Attention 可视化:热力图 αti\alpha_{ti} 常呈 近似对角(对齐翻译);但 注意力 ≠ 解释——权重可转移,因果解释需 caution。

Sparse Attention(Longformer、BigBird):只算局部 + 全局 token 子集,把 O(n2)O(n^2) 降到近线性——长文档 LLM 工程必知(第八章)。

动手与阅读建议

建议对照 PyTorch 文档 torch.nn 模块,把本篇公式与 Linear、ReLU、LSTM、MultiheadAttention 的 forward 签名一一对应。读论文时先圈出 张量 shape(如 (B,T,d)(B, T, d))再读公式,比死记符号快得多。

若训练 loss 不降:先画 train loss 曲线(逐步、非 epoch 平均),看是震荡、plateau 还是 NaN。NaN 从 lr 减半 与 gradient clip 开始试;plateau 查 wd 是否过大 或 数据是否标错。验证集只用于 选超参,勿反复调 test。

本章内容在第五章 Transformer 会全部复现:QKV 是 Attention,FFN 是 MLP,Pre-LN 是 LayerNorm。掌握本章 = 读 GPT 论文的最低门槛。完成 MNIST 或 XOR 小实验(CPU 即可)再进入下一章,手感差异很大。

术语对照(中英)

Neuron/Unit 神经元;Activation 激活函数;Hidden layer 隐藏层;Logit 预激活 zz;Embedding 把离散 id 映射为连续向量;Epoch 全数据扫一遍;Iteration/Step 一个 batch 更新一次;Learning rate 学习率 η\eta;Weight decay 权重衰减(L2 或 AdamW);Fine-tune 微调预训练权重。读英文文档时这些词与中文教材一一对应,避免混用「单元/神经元/节点」造成概念漂移。

算力与显存(复习)

参数量 PP 个 float32 权重约占 4P4P 字节。训练显存粗估:权重 + 梯度 + 优化器状态(Adam 约 3×3\times 权重)+ 激活(与 batch、序列长度、层数成正比)。推理 mainly 权重 + KV cache(生成式 LLM)。先会估算 PP 和一次 forward 的 FLOPs,再读第九章 GPU 与第七章分布式,数字才能对齐。

下一篇链接在文末 小结 中;建议按 meta.json 顺序阅读,跳读易漏掉「RNN 消失 → LSTM → Attention」这条叙事链。遇到公式卡住,回第二章查 链式法则 与 softmax。

量化自检:本篇至少包含两个带数字的例子(参数量、FLOPs、梯度量级或准确率)。复现时请用自己的随机种子跑代码,核对数量级一致即可,不必逐位相同——浮点顺序会导致末位差异。

写笔记时用一句话概括本篇核心定理或结论,便于复习。

2017 年「Attention Is All You Need」标题即宣言:递归可完全移除,Attention 足以担纲序列建模。

本章各篇互有引用,建议开侧边栏按顺序阅读,形成完整知识链。

Cross-attention 在 Stable Diffusion 里连接文本与图像 latent,是同一机制的跨模态实例。

阅读第五章时请对照本篇的 scaled dot-product 公式与 QKV 符号。

小结

Attention 出现因为:固定瓶颈 hh 不够、长程路径要短、训练要并行。它从 seq2seq 对齐机制长成 Self-Attention,统一了 NLP 与 CV 的主干——通向 Transformer 与 GPT。

→ 下一篇:前向传播是什么

本页目录