R43 · 多头先分别读取,再让通道重新混合
最小模型用一路读取闭合了预测。现在让同一位置保留多路内容,看看它们怎样合并回原来的表示宽度。
状态 b4
默认图为同一位置画出两路投影与读取。两路结果仍是内容向量,不是两个词表答案。
多头本身不改变哪些位置合法可读;这个范围仍由任务和mask决定。
状态 b5
两路结果在concat处并列保留,观察通道如何从各自输出进入同一行。
状态 b6
输出投影将合并内容变回模型宽度,为下一页与原表示相加作准备。
状态 b0
备用数值态追踪“我”的第一头:按给定特征投影,读取三个来源并形成二维读出。
状态 b1
第二套投影形成另一组权重与读出。比较两头的输入角色相同、参数不同。
状态 b2
两份二维结果拼接成四维,分别保留各头通道。拼接没有把两头逐项相加。
状态 b3
W_O混合拼接通道得到O₁。这一行接着进入R44,与同位置原x₁相加。
公式与算例详情
两头读取怎样合成一个位置的输出
以下是 R43–R45 连续使用的全可见、未训练 post-norm 局部算例,关闭 dropout;与 B01 的 causal 模型仅作算子对应,不是同一次前向。可从 b0 逐步复算,或回到默认解释 b4。
输入三行 $X=[(1,0,1,0);(0,1,0,2);(1,1,0,1)]$,分别标记我、给、书;标记只是保持 token 对应,数字不声称表达其真实语义。$d_{model}=4$,两个 head 各取 $d_k=d_v=2$,各自点积分数都除以 $\sqrt2$ 后再沿 key 轴做 softmax。
用从0开始、右端不含的 Python 切片记法,Head 1 的投影为 $Q_1=K_1=X[:,0:2]$,即取第一、第二特征;$V_1=X[:,2:4]$,即取第三、第四特征。Head 2 的 $Q_2$ 取第三、第四特征,$K_2$ 取第二、第一特征,$V_2$ 取第一、第二特征。写成参数矩阵时每个 W 都是 $4\times2$;源数值记录给出了这些矩阵,图中显示了投影等价的特征选择。对第一个 token,head 1 的权重约为 $(0.401112,0.197776,0.401112)$,读出 $(0.401112,0.796664)$;head 2 的权重为 $(0.197776,0.401112,0.401112)$,读出 $(0.598888,0.802224)$。
拼接得到 $r=(0.401112,0.796664,0.598888,0.802224)$。令 $W^O$ 的四行依次为 $(1,0,1,0),(0,1,0,1),(1,0,-1,0),(0,1,0,-1)$,则 $rW^O=(1.000000,1.598888,-0.197776,-0.005560)$。两头先各自产生结果,再由输出投影组合,而不是简单平均热图。真实 head 也不必固定承担“语法头”“语义头”等人工职业。
参考与采用
- Vaswani et al. · Attention Is All You Need:原始 encoder–decoder Transformer:信息来源、并行性、路径和代价。 复核位置:§3、Table 1/2;本轮核对v7 PDF;首次提交2017-06-12
原课页采用记录:M22 矩阵与读取对应、M26 多头 attention。页码均按PDF物理页计。
继续学习
如果两头结果怎样合并仍不清楚,先从完整局部数值核对两个 2 维读出、concat 与 Wᴼ;Transformer 的信息流的“沿一行目标表示走一遍”将其接回整块。CLS 02“7 · 多头、残差、FFN,各自改变什么”解释职责,LAB 03“F · 跟着一个 token 穿过完整 encoder block”复算同一链;之后另开 causal 配置时须重新检查 mask,不能混用全可见结果。