
软件模型有过一个很长的阶段:它们能读句子,却不太会“理解句子”。问题不在词表,也不完全在参数规模,而在于早期模型看待语言的方式太像流水线——前一个词处理完,才能轮到后一个词。这样一来,句子一长,前面的信息就会慢慢变模糊。
这就是我看完这期视频后最想记住的一点:Transformer 真正改变局面的地方,不是简单把模型做大,而是把“词与词之间如何互相看见”这件事重新设计了一遍。本文整理自 Visual AI 的视频 Self-Attention Explained: How Transformers Actually Work (Full Visual Breakdown)。它用一套很直观的动画,把 self-attention 从一句英文里的代词指代,一路讲到矩阵乘法、缩放、softmax 和最后的输出向量。原视频:https://www.youtube.com/watch?v=vkhPtpUiLd8
语言理解以前卡在什么地方
视频开头用了一个很经典的句子:The animal didn't cross the street because it was too tired. 这里的 it 指的是谁?人类几乎立刻就知道,它说的是 animal,不是 street。
这个例子看起来简单,却把语言理解最要命的问题暴露出来了。一个词的意思,往往不在它自己身上,而在它和别的词的关系里。it 之所以能被理解,不是因为这个词本身有多丰富,而是因为它会“回头看”前面的上下文。
视频把旧时代的 RNN 讲得很清楚。RNN 是按顺序处理词的,左到右,一个接一个。这样做有一个天然缺陷:等模型读到后面的词时,前面的信息已经被压进一团隐藏状态里。句子一长,最早的语义线索就越来越难保住。这就是 NLP 里常说的 long-term dependency problem,也就是长距离依赖。
作者这里的判断很直接:问题不只是“模型记性不够好”,而是顺序处理这套机制本身有限。你让语言像排队过闸机一样被处理,很多本来应该直接建立的联系,就只能绕远路。
Self-Attention 做的事,其实是让每个词都能直接看全句
视频里最重要的转折,是把“顺序”换成“关系网”。如果不再要求每个词严格排队,而是让句子里的每个词都能同时去看其他词,会发生什么?
Self-attention 给出的答案是:让每个词都拥有一次全局检索的机会。当前词不必靠一层层传递信息,也不用等前文的语义慢慢传到它这里。它可以直接问一句:在整个句子里,谁和我最相关?
这也是 2017 年那篇 Attention Is All You Need 真正有决定性意义的地方。它不只是提出了一个新技巧,更是把语言建模从“时间顺序”改成了“并行关系”。
视频里这段解释很到位:过去是 rigid left-to-right timeline,现在变成 connected web。这个比喻很重要,因为它解释了为什么 Transformer 后来能在长文本、翻译、问答、代码生成这些任务上同时变强。不是因为它突然会了什么神秘能力,而是因为它终于有条件在每一步都访问全局上下文。
Q、K、V 不是术语游戏,它们分别代表“我想找什么”“我能提供什么”“我真正带走什么”
很多 self-attention 教程一上来就开始写公式,结果读者很快只记住了三个字母:Q、K、V,却没搞清它们到底在分工什么。
这期视频的好处,是它先从 embedding 讲起。句子里的每个 token 先变成向量,也就是 embedding。视频把 embedding 形容成“词的 personality fingerprint”,这个说法很形象。cat 会在向量空间里更靠近 dog,而离 satellite 这种词更远。
接着,输入矩阵 X 会分别乘上三组不同的可学习权重矩阵,得到 Q、K、V。
Q(Query)可以理解成:这个词现在在找什么信息。K(Key)可以理解成:这个词身上有哪些信息值得别人来匹配。V(Value)则是:如果别人真的决定关注我,它最终要拿走的内容是什么。
这三个角色分开以后,词与词之间的互动就从“简单相邻传递”变成了“先匹配,再取值”。这是一个很大的建模变化。它的妙处在于,模型不需要预先写死语法规则,也不用规定“主语一定关注动词”“代词一定回看名词”。它只需要通过训练学会:什么样的 Query 应该和什么样的 Key 对齐。
注意力分数本质上是在问:我和谁最像,或者说谁最值得我关注
视频接下来进入了真正的计算过程。Q 矩阵乘上 K 的转置,会得到一个 attention score grid,也就是注意力分数矩阵。
这一步的意义并不复杂。每一行代表一个词在发问,每一列代表一个词被评估。分数越高,说明二者的关系越强。于是,模型可以为句子里任意两个词算出一个“相关程度”。
这个结构里有一个很值得注意的现象,视频也特地强调了:对角线通常比较亮。也就是说,每个词往往都会先关注自己。
这看起来像废话,其实不是。词如果完全不保留自己的原始含义,只靠上下文混合,很容易把本体语义冲淡。自关注保证了“我还是我”,而跨词关注则补充“我和别人有什么关系”。Transformer 处理语言时,靠的正是这两股力量同时存在。
视频还举了 cat 和 sat 的关系分数较高这个例子。模型并没有被喂进显式语法树,但它会从数据里学到:主语和动作之间通常存在重要关系。这一点很关键,因为它说明 self-attention 的强大,不在于人类把语言知识手写进去,而在于数学结构允许这种知识自己长出来。
为什么还要除以 √d_k
如果只看公式,QK^T / √d_k 里的那一项缩放很容易被当成技术细节带过去。但视频专门用了一段时间解释它,这点我很认同。
原因很现实。向量维度一大,点积的数值就会迅速变大。比如 key 的维度是 64,原始相似度分数很容易飙到 20、30 甚至更高。这样一来,softmax 一吃进去,概率分布就会变得极端:一个位置接近 1,其他位置几乎全是 0。
问题不只是输出难看,而是训练会受伤。softmax 过饱和以后,梯度会变差,网络学不动。
所以 Transformer 在这里做了一个很聪明的稳定化处理:把分数除以 √d_k。如果维度是 64,就除以 8。这样分数会被压回一个更健康的范围,softmax 之后的分布不至于一下子塌成单点。
视频把这一段讲得很像“把系统从爆表状态拉回可学习区间”。我觉得这比单纯背公式有用。它提醒你,很多看似不起眼的架构设计,背后其实都是在给训练稳定性兜底。Transformer 不是只靠概念赢,它也靠这些工程上非常精细的处理赢。
Softmax 让“相关性”变成“权重”
缩放之后,下一步是 softmax。视频把 softmax 的作用拆成两件事:一是拉开差异,二是把所有数归一化到总和为 1。
这样一来,每一行 attention score 就不再是随意的分数,而是一组真正可用的注意力权重。每个词在看别的词时,都会得到一个概率分布:我该把多少注意力给自己,多少给旁边的词,多少给更远的词。
这一步非常重要,因为从这里开始,模型不再只是“知道谁相关”,而是获得了一个可以直接参与计算的分配方案。语言中的上下文,不再是模糊印象,而是变成了明确的加权结构。
最后的输出向量,是“原词语义”和“上下文信息”混合后的新表示
有了注意力权重,最后一步就是拿这些权重去加权求和 V。视频把这个过程讲得很直白:每个 value 向量按自己收到的注意力比例参与混合,最后得到一个新的输出向量。
这个新向量最值得注意的地方,是它已经不是原始 token 的孤立表示了。它带着上下文回来。
视频里的几个例子都在强调这一点:the 的输出主要还是自己,但会混进一点 cat 的信息;cat 会混入 sat;sat 也会结合周围上下文。于是,句子里每个词的最终表示,都是“自己是谁”加上“我和整句的关系是什么”的合成结果。
这正是 self-attention 真正有力量的地方。它不是替换词义,而是让词义上下文化。语言在模型里不再是一串孤立符号,而是一组不断相互解释的表示。
热力图最能说明 Transformer 为什么不像规则系统
视频后面用了 attention heatmap 做可视化。我觉得这是整个讲解里最适合初学者的部分,因为它把一堆抽象矩阵瞬间变成了“哪里亮,哪里关系强”。
我们能看到明显的对角线,说明每个词都保留对自身的关注。也能看到非对角线上的亮点,比如 cat 和 sat、on 和 mat、冠词 the 和它修饰的名词之间的联系。
这个画面传递出的真正信息不是“模型学到了语法”,而是:模型并没有被硬编码语法规则,却能通过大量训练数据和这套匹配机制,自己长出一种结构感。
Transformer 和很多传统符号系统最不一样的地方,就在这里。规则系统是先写语法,再匹配句子;attention 系统是给定一个可以表达关系的数学结构,让模型自己在数据里形成这些关系。
整个 self-attention 流程,其实可以压缩成一条非常清楚的主线
如果把视频从头到尾压成一条线,它讲的是这件事:
- 先把 token 变成 embedding,组成输入矩阵
X。 - 再由
X经过三组不同权重,投影成Q、K、V。 - 用
QK^T算出任意词对之间的匹配分数。 - 再除以
√d_k,防止分数过大让 softmax 饱和。 - 通过 softmax 把分数变成每行和为 1 的注意力权重。
- 最后用这些权重去加权汇总
V,得到每个 token 的新表示。
这套流程一旦成立,模型就能在每一层、每一个位置上,不断重新组织“谁和谁有关、关系有多强、我该吸收谁的信息”。
也因为它是并行的,所以 Transformer 不需要像 RNN 那样把时间步一个个串起来。对现代硬件来说,这种结构更容易放大规模,也更适合长文本建模。视频虽然没有展开工程细节,但这已经足够解释:为什么后来大语言模型几乎都建立在 Transformer 系列上。
视频最后抛出的 multi-head attention,暗示了更深一层的问题
视频结尾没有停在单头注意力,而是抛出了一个更有意思的问题:如果一个词有不止一种含义怎么办?
它用 bank 举例。在一个句子里,bank 会被 deposit 拉向金融机构;在另一个句子里,它又会被 river 拉向河岸。一个词,同一个表面形式,却处在完全不同的语义世界里。
单个 attention head 一次只能形成一种观察角度。于是,多头注意力的意义就很自然地出现了:让模型能从多个关系视角同时理解同一个词。
这一点很重要,因为它说明 self-attention 本身不是终点,而是一个更大系统的起点。Transformer 真正厉害的地方,不只是一套注意力公式,而是围绕“关系表示”这件事不断叠加层次和视角。
我的补充:Self-Attention 让语言模型第一次有了“随时查全局”的能力
如果只看这期视频本身,它是一堂很好的入门数学课。但我觉得它最值得带走的,不只是公式推导,而是一个更大的认识:大语言模型之所以突然变得有用,不是因为某个神奇模块替人类理解了世界,而是因为模型终于在架构上拥有了一种能力——它可以在处理每个词时,随时访问整句的其他部分。
这个变化看起来只是从顺序到并行、从 RNN 到 attention,实际更像把一间只能单线操作的车间,改造成一个谁都能随时查全局信息的网络化组织。很多过去要靠“记住前文”硬撑的问题,到了 Transformer 这里,直接变成“按需取用上下文”。
这也解释了为什么 attention 机制后来能超出 NLP,进入图像、语音、代码,甚至多模态模型。只要任务本质上依赖“元素之间的关系”,self-attention 这套结构就有发挥空间。
如果一定要用一句话概括这期视频,我的说法是:Self-attention 不是 Transformer 里的一块零件,它是现代 AI 开始认真处理“关系”这件事的起点。