这是 BERT 模型里 Self - Attention(自注意力)机制 的计算流程图,理解它就能懂 Transformer 核心逻辑!用大白话拆解每一步:
L:序列长度(一句话拆成多少个词 / 词元,比如 “你好中国” 拆成 3 个词,L=3 )。
h:隐藏层维度(每个词用多长的向量表示,BERT - base 是 768 ,就像用 768 个数描述一个词的语义 )。
X:就是输入的词向量矩阵!比如 3 个词,每个词 768 维,X 就是 3×768 的矩阵。
- 目标:让模型学会 “关注谁”(比如 “中国” 要和 “你好” 关联,就得算注意力 )。
- 操作:
X 分别乘以三个权重矩阵 W^Q、W^K、W^V(形状都是 h×h ),得到:
Q(Query,查询):你当前词 “要查什么”(比如 “中国” 想找相关的词 )。
K(Key,键):其他词 “有什么标签”(比如 “你好” 带的标签是 “问候” )。
V(Value,值):其他词 “具体的语义”(比如 “你好” 实际的语义向量 )。
- 形状变化:
X 是 L×h ,乘 h×h 的矩阵后,Q、K、V 还是 L×h(因为 L×h × h×h = L×h )。
- 目标:算 “当前词和其他词的关联度”(比如 “中国” 和 “你好” 关联有多强 )。
- 操作:
Q(L×h )和 K^T(h×L ,K 的转置 )相乘,得到 L×L 的矩阵(因为 L×h × h×L = L×L )。
- 这个矩阵里的每个值,就是 “当前词的 Query” 和 “其他词的 Key” 的匹配分(比如第 3 行第 2 列,就是 “中国” 和 “你好” 的匹配度 )。
- 除以
√d_k(d_k 是 K 的维度,这里就是 h ):防止数值太大,Softmax 后梯度消失(简单说,让分数更合理,别极端 )。
- Softmax:把
L×L 的注意力分数,转成 概率分布(每行和为 1 ,比如 “中国” 对 “你好” 的注意力概率是 0.6 ,对 “你” 是 0.2 )。
- 加权求和:用 Softmax 后的概率,对
V(L×h )做加权平均。
- 比如 “中国” 要算最终向量,就用 “你好” 的
V 乘以 0.6 ,加上 “你” 的 V 乘以 0.2 … 得到一个 h 维的向量 Z 。
- 所有词都这么算,最终得到
L×h 的输出(和输入 X 形状一样,但每个词的向量融入了 “关注谁” 的信息 )。
一句话:让每个词 “看” 到句子里其他词的重要性,把这些重要信息融合到自己的向量里 。
比如 “中国” 这个词,通过 Self - Attention 发现 “你好” 和自己关联大,就把 “你好” 的语义多融合一点,最终的向量就更准确啦!
这样整个流程就串起来了:输入词向量 → 生成 Q/K/V → 算注意力分数 → 加权求和得到新向量 。这就是 BERT 能理解 “上下文关系” 的核心秘密~