第1篇 · 基础 建议阅读 90–120 分钟 2个交互演示 10篇论文 · 7组源码

CHAPTER 01

注意力机制

早期编码器—解码器常让整段源序列通过一个固定宽度的信息接口。 注意力改变了这条通路:生成每个目标词时,模型都能按当前需要重新读取源端表示。

本章地图

先建立一条不会迷路的主线

本章不从公式起步。先看旧方法为什么受限,再理解注意力增加了哪条信息通路,最后才进入计算流程和论文历史。

先限定“注意力”的范围

本章主角是 Bahdanau 式循环编码器—解码器注意力;缩放点积只作为通往 Transformer 的桥。

主线阅读
名称Query 来自Key / Value 来自本章角色
经典编码器—解码器注意力解码器状态编码器的源端状态本章主线
Transformer 交叉注意力解码器侧表示编码器输出后续架构桥接
自注意力(Self-Attention)当前序列同一序列本章只辨析,不展开
01压缩

编码器把输入汇总成表示

02瓶颈

长句细节在固定向量中竞争

03查找

每个解码步重新读取输入

04对齐

权重显示本次读取的分配

通俗地说

传统Seq2Seq像让翻译员听完整段话后合上笔记本再翻译;注意力允许他每说一句,都重新查看原文的相关位置。

类比的边界

模型不是人,也没有主动“回看”的意识。所谓查找,是一组可微分的向量打分、归一化与加权求和。

1.1 背景知识

Seq2Seq:先把变长序列变成另一个变长序列

经典Seq2Seq由编码器和解码器组成。编码器读取源序列并产生状态,解码器根据这些信息逐步生成目标序列。

动画讲解 · 背景知识:从输入到生成3:03
中文配音 · 中文字幕
打开视频 ↗

1.1.1 Seq2Seq · 从英文到中文的数据流

箭头不是装饰:它们表示信息实际需要经过的路径。

ENCODERTheh1cath2sath3downh4固定向量 c整句都要装进来DECODER那只猫坐下了源序列可以变长但中间通道宽度不随句长增长 → 信息瓶颈
1.1.1

Seq2Seq不是某一种网络

它是一种任务框架:把一个序列映射为另一个序列。早期常用RNN/LSTM实现编码器和解码器,后来也可以用CNN或Transformer。

1.1.2

编码器—解码器是职责分工

编码器负责形成源端表示;解码器在已有输出前缀的条件下,预测下一个目标符号。架构职责和具体神经网络实现要分开理解。

FROM FLOW TO FORMULA

现在再把刚才的数据流正式写下来

前面的图先回答“信息怎么走”。下面的数学只是在给这条路径命名:序列概率怎样拆开、编码器怎样更新、固定上下文怎样进入解码器,以及训练损失最终优化什么。

A

先定义任务:不是把整句一次性分类,而是逐步建模条件概率

对源序列 x=(x1,…,xn)x=(x_1,\ldots,x_n) 和目标序列y=(y1,…,ym)y=(y_1,\ldots,y_m),自回归解码器用概率链式法则把整句概率拆成一连串“下一个Token”预测:

p(y∣x)=∏t=1mp(yt∣y<t,x)p(y\mid x)=\prod_{t=1}^{m}p(y_t\mid y_{<t},x)

这不是神经网络特有技巧,而是概率论的链式分解。网络的职责,是为每一个条件分布p(yt∣y<t,x)p(y_t\mid y_{<t},x) 给出可学习的参数化。

B

编码器把前缀信息递推到隐藏状态

hi=fenc(xi,hi−1)h_i=f_{\mathrm{enc}}(x_i,h_{i-1})

在循环编码器中,hih_i 同时接收当前输入和前一状态。它不是“第 i 个词本身”,而是截至当前位置的连续表示。使用双向RNN时,常把两个方向拼接为 annotation:

hi=[hi→;hi←]h_i=[\overrightarrow{h_i};\overleftarrow{h_i}]
C

固定上下文方案把全部源端信息收束到一个接口

c=q(h1,…,hn),st=fdec(yt−1,st−1,c)c=q(h_1,\ldots,h_n),\qquad s_t=f_{\mathrm{dec}}(y_{t-1},s_{t-1},c)
p(yt∣y<t,x)=softmax⁡(Wost+bo)p(y_t\mid y_{<t},x)=\operatorname{softmax}(W_o s_t+b_o)

“固定”指同一条源句在所有解码步骤共享同一个 cc,并且cc 的宽度不会随句长增加;并不是说向量里的数值在训练过程中不变。

Sutskever 等人的 2014 模型用一个 LSTM 产生固定维度向量,再用第二个 LSTM 生成输出。 具体实现可以通过初始化状态、持续条件输入或其他接口承载条件;上式是通用抽象,不是唯一历史实现。

D

训练目标把正确译文的概率推高

L=−∑t=1mlog⁡p(yt∗∣y<t∗,x)\mathcal{L}=-\sum_{t=1}^{m}\log p(y_t^{*}\mid y_{<t}^{*},x)

训练时常把真实的前一个目标Token yt−1∗y_{t-1}^{*} 输入解码器,这叫 Teacher Forcing;推理时真实后缀不存在,只能把模型自己的上一步输出喂回去。因此,训练和生成使用的是同一组参数,却处在不同的输入分布中。

1.2 技术挑战

真正的问题不只是“句子太长”

固定压缩、对齐、依赖路径和计算方式相互牵连。下面把书中的五个小节放进同一张因果图里。

动画讲解 · 技术挑战:信息要走多远2:58
中文配音 · 中文字幕
打开视频 ↗
1.2.1
对齐问题

生成“猫”时,源句哪个位置提供主要信息?

1.2.2
长距离依赖

相关词相隔很远时,信息要走多长的路径?

1.2.3
CNN方案

扩大感受野,换来更多层或更宽卷积。

1.2.4
RNN方案

通过状态接力保留顺序,但路径随距离增长。

1.2.5
现有局限

一个固定向量难以同时保留全部细节。

交互演示一:两个位置相隔多远,结构路径有多长?

这是依赖路径的结构示意,不是实际运行时间基准。

可修改

像接力传话:一步一步把状态传下去

并行性
单序列时间轴串行;batch 可并行
优势
天然表达顺序,适合流式序列
代价
距离越远,信息与梯度要经过越多次状态变换

CNN不是“看不到远处”,而是要扩展感受野

对步长为1、无膨胀、卷积核宽度为 kk 的一维卷积,堆叠LL 层后的理论感受野为:

R=1+L(k−1)R=1+L(k-1)

若第 ℓ\ell 层的膨胀率是 dℓd_\ell,则R=1+(k−1)∑ℓdℓR=1+(k-1)\sum_\ell d_\ell。让膨胀率按1,2,4,8,…1,2,4,8,\ldots 增长,可以用较少层覆盖很长范围,但具体信息仍要经过多层变换。

一个具体数值

当 k=3k=3、L=4L=4:

R=1+4×(3−1)=9R=1+4\times(3-1)=9

四层普通卷积只能让一个位置理论上接触9个连续位置;这解释了为什么卷积方案需要更深、膨胀或更宽的核。

深入:为什么“距离远”会成为优化问题?

早期位置 hih_i 若要影响最终摘要 hnh_n,梯度必须穿过后续每一次状态更新。按链式法则:

∂hn∂hi=∏k=i+1n∂hk∂hk−1=∏k=i+1nJk\frac{\partial h_n}{\partial h_i}=\prod_{k=i+1}^{n}\frac{\partial h_k}{\partial h_{k-1}}=\prod_{k=i+1}^{n}J_k

梯度消失

若每个雅可比矩阵的算子范数大致不超过 ρ<1\rho<1,则有上界∥∂hn/∂hi∥≲ρn−i\lVert\partial h_n/\partial h_i\rVert\lesssim\rho^{n-i}。 距离指数增加时,早期位置收到的学习信号会迅速变弱。

梯度爆炸

若多个方向持续放大,矩阵乘积可能快速增长,导致训练不稳定。梯度裁剪能限制数值,LSTM门控能建立更平滑的记忆通路,但都没有把两个远位置间的计算图路径变成一步。

固定压缩与梯度问题不是同一个概念

梯度问题描述“训练信号怎样传播”;固定瓶颈描述“所有源信息必须通过哪个接口”。即使优化完全稳定,一个固定宽度的cc 仍要同时服务所有目标步骤。注意力首先改变的是第二件事:让解码器直接访问整组{h1,…,hn}\{h_1,\ldots,h_n\}。

1.3 原理、结构、流程与效果

注意力增加了一条“按当前需要读取源端”的通路

模型每生成一个目标词,都重新询问一次:“源句中哪些位置对我现在最有用?”先观察这种动态读取怎样变化,再进入它的数学实现。

动画讲解 · 注意力:跟着一个算例走4:29
中文配音 · 中文字幕
打开视频 ↗
1.3.101
原理

每个输出步骤按当前需要,动态选择源端信息。

1.3.202
通用结构

需求表示、可匹配索引与实际内容共同完成读取。

1.3.303
计算流程

打分 → Softmax → 加权求和 → 生成。

1.3.404
效果

缓解固定压缩瓶颈,并提供更短的信息访问路径。

效果的边界:注意力缓解而非无条件消除长依赖问题;经典跨序列注意力形成 m×n 权重矩阵,Transformer 自注意力才形成 n×n 矩阵,不能笼统写成“注意力总是平方复杂度”。

交互演示二:目标词改变时,读取权重怎样移动?

教学合成数据:人工分数只用于观察 Softmax 和动态读取,不是模型实测。

教学合成数据
正在生成
decoder state / query生成“猫”当前解码状态 sₜ₋₁Theα 2.6%blackα 5.3%catα 86.7%satα 2.6%onα 0.9%theα 1.2%matα 0.8%cat 是主要信息源;black 与 sat 仍提供少量上下文。
源位置 i对齐分数 eₜᵢexp(e − max)权重 αₜᵢ在context中的角色
The0.30.0300.026αₜᵢ · hᵢ
black1.00.0610.053αₜᵢ · hᵢ
cat3.81.0000.867αₜᵢ · hᵢ
sat0.30.0300.026αₜᵢ · hᵢ
on-0.80.0100.009αₜᵢ · hᵢ
the-0.50.0140.012αₜᵢ · hᵢ
mat-0.90.0090.008αₜᵢ · hᵢ

教学合成数据 · 人工设定分数,不是论文实验或线上模型输出;权重在舍入误差内和为 1。

FROM OBSERVATION TO MECHANISM

现在解释:这些连线究竟怎样被算出来

刚才看到的变化不是预先写好的词典对齐,而是由当前解码状态和每个源端表示共同计算。下面才引入变量、形状和四步公式,并让每一个符号对应刚才图中的对象。

1

把解码需求和源端表示投影到同一个“匹配空间”

下面采用常见的含偏置实现写法。Bahdanau 原论文展示式未显式包含偏置 bab_a;加入它是常见实现扩展,不改变“投影相加—非线性—压成标量”的结构。

eti=va⊤tanh⁡(Wsst−1+Whhi+ba)e_{ti}=v_a^\top\tanh(W_s s_{t-1}+W_h h_i+b_a)
对象形状作用
st−1s_{t-1}Rds\mathbb{R}^{d_s}当前解码需求
hih_iRdh\mathbb{R}^{d_h}第 i 个源位置表示
WsW_sRda×ds\mathbb{R}^{d_a\times d_s}把解码状态投影到匹配空间
WhW_hRda×dh\mathbb{R}^{d_a\times d_h}把源端状态投影到匹配空间
bab_aRda\mathbb{R}^{d_a}常见实现中的匹配空间偏置
utiu_{ti}Rda\mathbb{R}^{d_a}非线性前的联合匹配表示
vav_aRda\mathbb{R}^{d_a}把匹配表示压成标量
etie_{ti}R\mathbb{R}未归一化对齐分数
αti\alpha_{ti}R\mathbb{R}在有效源位置上归一化的权重
ctc_tRdh\mathbb{R}^{d_h}源端Value的加权和

st−1s_{t-1} 和 hih_i 可能维度不同,不能直接逐元素比较。WsW_s 与 WhW_h 把它们映射到共同的dad_a 维空间;tanh⁡\tanh 允许非线性交互;va⊤v_a^\top 再把匹配表示压成一个标量分数。

分数 etie_{ti} 可以为负,也不要求总和为1。它只是可比较的logit,还不是“读取比例”。

2

Softmax把相对分差变成读取分配

αti=exp⁡(eti−mt)∑j=1nexp⁡(etj−mt),mt=max⁡jetj\alpha_{ti}=\frac{\exp(e_{ti}-m_t)}{\sum_{j=1}^{n}\exp(e_{tj}-m_t)},\qquad m_t=\max_j e_{tj}

所有分数同时减去同一个常数不会改变Softmax,因为分子分母会约掉同一倍数;选择最大值只是为了避免exp⁡(e)\exp(e) 溢出。Softmax真正保留的是分数差,而不是绝对大小。

对 padding 位置先加入 −∞-\infty mask,再只沿有效源位置集合 V\mathcal V 归一化;这些无效位置最终权重为 0。

αti≥0,∑i=1nαti=1\alpha_{ti}\ge 0,\qquad \sum_{i=1}^{n}\alpha_{ti}=1
3

上下文向量是Value的加权混合

ct=∑i=1nαtihic_t=\sum_{i=1}^{n}\alpha_{ti}h_i

当Value就是 hih_i 时,ctc_t 与每个hih_i 维度相同。由于权重非负且和为1,它是这些表示的凸组合:通常位于源端表示张成的凸包内,而不是把最高权重位置原样复制出来。

4

解码器把本次读取结果用于状态更新和输出

st=fdec(yt−1,st−1,ct),p(yt)=softmax⁡(Wo[st;ct]+bo)s_t=f_{\mathrm{dec}}(y_{t-1},s_{t-1},c_t),\qquad p(y_t)=\operatorname{softmax}(W_o[s_t;c_t]+b_o)

不同实现会在更新状态之前或之后计算注意力,也可能改变拼接位置。阅读源码时,不应只搜索类名 Attention,而应沿张量流确认 st−1→et→αt→ct→p(yt)s_{t-1}\rightarrow e_t\rightarrow\alpha_t\rightarrow c_t\rightarrow p(y_t)。

从单步公式走到真实批量张量原理深挖 · 广播、mask、Softmax 轴与 bmm

设 batch、目标长度、源长度分别为 B,m,nB,m,n,匹配空间维度为 dad_a。先分别投影目标状态和源端状态:

Ps=SWs⊤∈RB×m×da,Ph=HWh⊤∈RB×n×daP_s=SW_s^\top\in\mathbb R^{B\times m\times d_a},\qquad P_h=HW_h^\top\in\mathbb R^{B\times n\times d_a}
Ubti=tanh⁡(Ps,bt,:+Ph,bi,:+ba),Ebti=Ubti,:⊤vaU_{bti}=\tanh(P_{s,bt,:}+P_{h,bi,:}+b_a),\qquad E_{bti}=U_{bti,:}^{\top}v_a

加性 mask 在数学上让有效位置取 0、padding 位置取 −∞-\infty; 必须先加 mask,再沿源轴做 Softmax:

A=softmax⁡source(E+M)∈RB×m×n,C=AH∈RB×m×dhA=\operatorname{softmax}_{\text{source}}(E+M)\in\mathbb R^{B\times m\times n},\qquad C=AH\in\mathbb R^{B\times m\times d_h}
张量形状含义
SSB×m×dsB\times m\times d_s按顺序产生的目标状态的记号堆叠
HHB×n×dhB\times n\times d_h编码器源端状态
PsP_sB×m×daB\times m\times d_a目标状态投影
PhP_hB×n×daB\times n\times d_a源端状态投影
UUB×m×n×daB\times m\times n\times d_a广播后的匹配表示
EEB×m×nB\times m\times n未归一化分数
MMB×1×nB\times1\times n源端 padding mask,可广播
AAB×m×nB\times m\times n沿源轴归一化的权重
CCB×m×dhB\times m\times d_h每个目标位置的上下文

这里的 SS 只是把依次得到的 sts_t 堆叠起来方便写形状; 它不表示经典 RNN 解码器能沿目标轴 mm 并行。实现也可以逐目标步算,并避免显式物化完整四维 UU。

完整数值算例:从状态一直算到输出概率

为了能手工追踪,下面故意使用两个源位置、二维向量和单位投影;真实模型维度更高,但计算顺序相同。

01

给定解码状态、源端表示和参数

s=[1,0]⊤,h1=[1,0]⊤,h2=[0,2]⊤,Ws=Wh=I,va=[1,1]⊤s=[1,0]^\top,\quad h_1=[1,0]^\top,\quad h_2=[0,2]^\top,\quad W_s=W_h=I,\quad v_a=[1,1]^\top
02

计算两个源位置的加性注意力分数

e1=[1,1]tanh⁡([2,0]⊤)=0.964027580e_1=[1,1]\tanh([2,0]^\top)=0.964027580
e2=[1,1]tanh⁡([1,2]⊤)=0.761594156+0.964027580=1.725621736e_2=[1,1]\tanh([1,2]^\top)=0.761594156+0.964027580=1.725621736

第二个位置分数更高,不是因为它永久“更重要”,而是当前状态 ss 与它经过共同投影后的匹配结果更大。

03

Softmax得到读取比例

α=softmax⁡([0.964027580,1.725621736])=[0.318300258,0.681699742]\alpha=\operatorname{softmax}([0.964027580,1.725621736])=[0.318300258,0.681699742]

Softmax依赖分差 1.726−0.964=0.7621.726-0.964=0.762。较低分位置仍保留31.8%的贡献,所以这是软读取,不是二选一。

04

对Value加权求和

c=0.318300258[1,0]⊤+0.681699742[0,2]⊤=[0.318300258,1.363399484]⊤c=0.318300258[1,0]^\top+0.681699742[0,2]^\top=[0.318300258,1.363399484]^\top
05

观察Context怎样改变输出分布

z=c,p=softmax⁡(z)=[0.260167294,0.739832706]⊤z=c,\qquad p=\operatorname{softmax}(z)=[0.260167294,0.739832706]^\top

这个玩具输出头故意只使用 cc,以隔离注意力的影响;真实解码器通常同时使用sts_t、上一Token表示和 ctc_t。因此,注意力权重不能单独等同于最终词概率。

y=[0,1]⊤,L=−log⁡p2=0.301331191y=[0,1]^\top,\qquad \mathcal L=-\log p_2=0.301331191

为什么软对齐能端到端学出来?

关键不是权重“看起来像概率”,而是从损失到分数的每一步都可导。Softmax的雅可比元素为:

∂αi∂ej=αi(δij−αj)\frac{\partial\alpha_i}{\partial e_j}=\alpha_i(\delta_{ij}-\alpha_j)

当 i=ji=j 时,导数为 αi(1−αi)\alpha_i(1-\alpha_i);当i≠ji\ne j 时为 −αiαj-\alpha_i\alpha_j。提高一个位置的权重会相对压低其他位置,这正符合“总和保持为1”的约束。

预测损失

指出目标词概率偏低

Context

把误差信号分到各Value

Score参数

调整下次的匹配与权重

梯度有两条主要路径

  • Value路径:损失通过 ctc_t 直接影响被加权的编码器表示。
  • Score路径:损失通过 ct→αt→etc_t\rightarrow\alpha_t\rightarrow e_t 调整投影矩阵和打分向量。
∂ct∂hi=αtiI⏟Value直接路径+∑jhj∂αtj∂hi⏟Score间接路径\frac{\partial c_t}{\partial h_i}=\underbrace{\alpha_{ti}I}_{\text{Value直接路径}}+\underbrace{\sum_j h_j\frac{\partial\alpha_{tj}}{\partial h_i}}_{\text{Score间接路径}}

如果Softmax极度饱和,很多权重接近0或1,上式中的部分导数也会很小。这说明注意力“可导”不等于任何初始化和数据条件下都容易训练。

完整数值反传:损失怎样改动权重、参数与源状态原理深挖 · 默认展开损失到 score 的主链

沿用上面的玩具例子。Softmax 与交叉熵合并后,输出 logit 梯度可直接写成:

gz=p−y=[0.260167294,−0.260167294]⊤,gc=gzg_z=p-y=[0.260167294,-0.260167294]^\top,\qquad g_c=g_z

因为 c=∑iαihic=\sum_i\alpha_i h_i,先把误差信号投向两个权重:

gα1=gc⊤h1=0.260167294,gα2=gc⊤h2=−0.520334587g_{\alpha_1}=g_c^\top h_1=0.260167294,\qquad g_{\alpha_2}=g_c^\top h_2=-0.520334587
gej=αj(gαj−∑iαigαi),ge=[0.169357360,−0.169357360]⊤g_{e_j}=\alpha_j\left(g_{\alpha_j}-\sum_i\alpha_i g_{\alpha_i}\right),\qquad g_e=[0.169357360,-0.169357360]^\top

ge1+ge2≈0g_{e_1}+g_{e_2}\approx0。这与 Softmax 对全部 logits 同时平移不变相一致; 第二项为负,表示梯度下降会提高 e2e_2。

继续查看打分参数的全部梯度
gva=[0.034283590,−0.163265166]⊤g_{v_a}=[0.034283590,-0.163265166]^\top
gu1=[0.011965237,0.169357360]⊤,gu2=[−0.071125746,−0.011965237]⊤g_{u_1}=[0.011965237,0.169357360]^\top,\qquad g_{u_2}=[-0.071125746,-0.011965237]^\top
gWs=[−0.05916050800.1573921230]g_{W_s}=\begin{bmatrix}-0.059160508&0\\0.157392123&0\end{bmatrix}
gWh=[0.011965237−0.1422514910.169357360−0.023930474]g_{W_h}=\begin{bmatrix}0.011965237&-0.142251491\\0.169357360&-0.023930474\end{bmatrix}
gba=gs=[−0.059160508,0.157392123]⊤g_{b_a}=g_s=[-0.059160508,0.157392123]^\top
查看每个源端状态的两条梯度路径

Value 直接路径:ghi(value)=αigcg_{h_i}^{(\mathrm{value})}=\alpha_i g_c

gh1(value)=[0.082811317,−0.082811317]⊤,gh2(value)=[0.177355977,−0.177355977]⊤g_{h_1}^{(\mathrm{value})}=[0.082811317,-0.082811317]^\top,\quad g_{h_2}^{(\mathrm{value})}=[0.177355977,-0.177355977]^\top

Score 间接路径:ghi(score)=Wh⊤guig_{h_i}^{(\mathrm{score})}=W_h^\top g_{u_i}

gh1(score)=[0.011965237,0.169357360]⊤,gh2(score)=[−0.071125746,−0.011965237]⊤g_{h_1}^{(\mathrm{score})}=[0.011965237,0.169357360]^\top,\quad g_{h_2}^{(\mathrm{score})}=[-0.071125746,-0.011965237]^\top
gh1=[0.094776554,0.086546043]⊤,gh2=[0.106230231,−0.189321214]⊤g_{h_1}=[0.094776554,0.086546043]^\top,\qquad g_{h_2}=[0.106230231,-0.189321214]^\top

“可微”只说明梯度能沿计算图传播;Softmax 高度饱和时,许多导数仍可能接近零,训练还受初始化、表示质量、数据和优化器影响。

并行性与复杂度:先说清是哪一种注意力原理深挖 · 展开可查完整符号和工程代价

经典加性注意力为 mm 个目标步骤和 nn 个源位置形成 mnmn 个分数。只计匹配空间核心逐元素操作,粗略计算量和分数存储分别为:

compute=O(Bmnda),scores=O(Bmn)\text{compute}=O(Bmnd_a),\qquad \text{scores}=O(Bmn)

同一个目标步骤内,源轴 nn 的打分可并行;但循环状态 sts_t 依赖 st−1s_{t-1},所以目标轴仍串行。 Transformer 自注意力才在单个长度 nn 的序列中形成 n×nn\times n 分数矩阵:

compute=O(Bn2dk),scores=O(Bn2)\text{compute}=O(Bn^2d_k),\qquad \text{scores}=O(Bn^2)
  • 投影矩阵乘法另有成本,是否预计算源投影会影响实际开销。
  • padding 必须在 Softmax 前屏蔽,否则无效位置会分走概率质量。
  • 混合精度下要注意极大负 mask、Softmax 溢出和 dtype 转换。
  • 交叉注意力不自动消除自回归生成的目标侧串行性。

它直接改变了什么

  • 每个目标步骤都有不同的上下文,不再只共享一个永久固定摘要。
  • 解码器获得到任一源表示的直接读取边。
  • 软对齐可由翻译损失端到端共同训练。
  • 权重矩阵留下本次信息汇总的可观察记录。

它没有自动解决什么

  • 不提供无限记忆,也不保证长关系一定学对。
  • Bahdanau 注意力没有取消循环解码器的串行性。
  • 全局比较仍有随序列长度增长的计算和存储成本。
  • 高权重不等于复制该 token,更不等于完整因果解释。

图书馆类比

Query像检索需求,Key像目录索引,Value像书中内容。相关性决定“借阅比例”,加权结果形成context。

类比的边界

早期Bahdanau注意力并不使用后来Transformer中标准化的Q/K/V线性投影。这里借用检索角色帮助建立直觉,不混同具体公式。

常见误解:注意力权重不自动等于完整解释

权重准确描述这次加权读取的归一化系数,但最终预测还取决于隐藏表示、Value内容、解码器状态和后续变换。 它可以作为诊断证据;若要提出解释性结论,还必须说明比较基线、干预方法、层/头聚合方式和预测稳定性。Jain 与 Wallace(2019)和 Wiegreffe 与 Pinter(2019)应成对阅读,不能把争议压成新的绝对结论。

1.4 限定时间线

从神经机器翻译注意力到 Transformer

技术演进不是突然出现一个万能公式,而是信息通路一步步改变。

动画讲解 · 发展历史:从接口到架构2:48
中文配音 · 中文字幕
打开视频 ↗
2014
固定向量Seq2Seq

编码器最后状态承担整句摘要;证明端到端序列映射可行。

2014 / ICLR 2015
Bahdanau 软对齐

解码器每一步动态计算源位置权重,缓解固定向量瓶颈。

2015
Luong系统化比较

统一讨论global/local attention及dot、general、concat等打分。

2017
Transformer

用自注意力与交叉注意力替代循环主干,注意力从辅助模块变成架构中心。

从加性注意力走向缩放点积

方法打分结构含义
Bahdanau Additivev⊤tanh⁡(Wqq+Wkk)v^\top\tanh(W_q q+W_k k)先投影、非线性交互,再压成标量
Luong Dotq⊤kq^\top k维度相同后直接内积,计算简单
Luong Generalq⊤Wkq^\top Wk在点积前学习一个线性变换
Scaled Dot Productq⊤k/dkq^\top k/\sqrt{d_k}控制高维点积的数值尺度

为什么Transformer要除以 dk\sqrt{d_k}?

这是近似尺度分析:假设 Query 与 Key 各维零均值、单位方差,并且乘积项之间近似独立或至少不相关。点积是 dkd_k 个乘积之和:

q⊤k=∑r=1dkqrkr,Var⁡(q⊤k)≈dkq^\top k=\sum_{r=1}^{d_k}q_rk_r,\qquad \operatorname{Var}(q^\top k)\approx d_k

因而点积的标准差约为 dk\sqrt{d_k}。维度越高,未缩放logit越容易幅度过大,使Softmax接近one-hot并进入低梯度区域。除以dk\sqrt{d_k} 后,方差重新约为1,训练尺度更稳定。这不是为了让权重和为1——Softmax本来就负责归一化。

Attention⁡(Q,K,V)=softmax⁡ ⁣(QK⊤dk)V\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

历史叙述提醒

“为了解决某问题,所以研究者设计了某结构”常常是便于理解的事后重构。除非论文或作者材料明确说明,我们会把设计动机标记为教学推导,而不是历史事实。

论文与源码地图

读原始证据,不把链接堆成收藏夹

首要论文按“支持什么结论、应该读哪里、出版记录是什么”组织;源码固定到提交和核心文件,避免主分支漂移。

P012014 · 起点
已核查

Sequence to Sequence Learning with Neural Networks

Ilya Sutskever, Oriol Vinyals, Quoc V. Le · NeurIPS 27

支持结论
固定维度向量连接两个 LSTM;源句反转缩短部分依赖。
建议阅读
Abstract、Figure 1、Section 2 与源句反转说明。
DOI 口径
会议出版页未提供 DOI;arXiv 记录 DOI 不是会议 DOI
P032014/15 · 突破
已核查

Neural Machine Translation by Jointly Learning to Align and Translate

Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio · 2014 arXiv / ICLR 2015

支持结论
固定长度向量的潜在瓶颈;可微软搜索、上下文和双向 annotation。
建议阅读
Sections 2、3.1,Figures 1、3,Appendix A。
DOI 口径
ICLR 归档未提供会议 DOI;arXiv 记录 DOI 单列
P042015 · 系统化
已核查

Effective Approaches to Attention-based Neural Machine Translation

Minh-Thang Luong, Hieu Pham, Christopher D. Manning · EMNLP 2015

支持结论
global/local attention 与 dot、general、concat 等打分函数。
建议阅读
Figure 2、Sections 3.1—3.3 与 score function 表。
DOI 口径
10.18653/v1/D15-1166
P082017 · 转折
已核查

Attention Is All You Need

Ashish Vaswani et al. · NeurIPS 30

支持结论
缩放点积、自注意力/交叉注意力与 Table 1 的路径、并行和复杂度比较。
建议阅读
Sections 2—3,尤其 3.2;Table 1。
DOI 口径
会议出版页未提供 DOI;arXiv 记录 DOI 不是会议 DOI
扩展论文 · 6 篇参考资料 · 长路径、卷积与解释性争议
源码证据地图 · 7 组固定提交、核心文件、许可证与身份边界

核查日期:2026-09-01。本站只链接、摘要和重绘机制图;源码许可证不等于论文插图可直接复制。

知识回顾与阅读笔记

把整章收束成一条可回查的脉络

这里不设置题目、评分或打卡;保留可检索的判断、术语、误解边界,以及继续核对纸书与论文时的个人记录。

五个常见误解参考资料 · 用边界替代口号
01
“注意力就是找出最重要的词”

权重相对于特定 Query、层、头、参数和 mask 定义,描述的是本次加权汇总。

02
“权重最大的位置就是模型复制的位置”

上下文通常混合多个 Value,最终输出还依赖解码状态和后续变换。

03
“有了注意力就没有长距离依赖问题”

短访问路径不保证关系一定学对,长序列仍有计算、显存、优化和数据难题。

04
“Seq2Seq 就是编码器最后状态”

Seq2Seq 是条件建模框架;固定最后状态只是某些早期实现的接口。

05
“Bahdanau 注意力就是 Transformer 注意力”

二者共享相关性加权读取,但打分、参数化、并行轴和架构角色不同。

本章术语表参考资料 · 中文、英文与严格含义
序列到序列Sequence to Sequence · Seq2Seq

从一个序列条件建模另一个序列的任务或框架

annotation / 源端表示annotation / encoder state

供解码器读取的源位置连续表示,不是原始 token

对齐分数alignment score / energy / logit

Query 与某源位置的未归一化匹配标量

注意力权重attention weight

分数经有效源位置 Softmax 后的读取系数

上下文向量context vector

Value 按注意力权重形成的加权和

软对齐soft alignment

连续、可微的多位置权重分配

交叉注意力cross-attention

Query 与 Key / Value 来自不同表示集合

自注意力self-attention

Query、Key、Value 来自同一序列表示

01 · 问题

固定压缩让全句信息竞争同一接口;循环网络的长路径还会带来雅可比矩阵连续相乘。

02 · 机制

解码状态和源端表示先投影到共同匹配空间,再得到每个源位置的对齐logit。

03 · 计算

Softmax保留相对分差并产生和为1的权重,Context是Value表示的凸组合。

04 · 学习

预测损失同时通过Value直接路径和Score间接路径更新编码器与对齐参数。

05 · 演进

加性、点积和缩放点积共享相关性读取思想,但参数化和数值尺度不同。

06 · 边界

短访问路径不等于无限记忆;注意力权重也不能单独代表最终决策因果。

与后续章节的接口

第2章 Transformer 架构

自注意力、交叉注意力、残差与 FFN 怎样组合

第3章 编码器与解码器

两侧状态来源与信息接口

第4章 训练与推理

teacher forcing、自回归和损失归约

第9—11章 注意力纵深

Q/K/V、mask 与多头形状

第16—17章 FlashAttention

中间分数矩阵为何成为显存瓶颈

原书核对状态

当前只确认公开目录中的 1.1—1.4 及子项。原书对 Seq2Seq、CNN/RNN 路径、公式次序、历史节点和术语的具体表述仍待纸书到手后逐页核对。本站内容依据公开论文和源码独立编写,不是原书正文复刻。

我的第1章笔记

只保存在当前设备,适合记录自己的类比、疑问和纸书页码。

LOCAL ONLY