尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VLA 系统学习第 14 课:Attention 到底在算什么?——真正理解 Q、K、V
第十三课标准答案这一课的核心是把各种原始模态最后统一到\[ X\in\mathbb R^{B\times T\times D} \]这样下一步 Attention 才有明确输入。Token 不能简单等同于“单词”。Token 更准确地说是 Transformer Sequence 中的一个信息单位。语言里可以是词或子词图像里可以是 Patch机器人数据里可以是一个时间步的 State后面甚至还会遇到 Action Query。Token ID 不能直接当连续数值使用因为 ID 只是索引。例如 52 和 17 并不代表前者在语义上是后者的 3 倍。它们必须经过 Embedding变成具有可学习意义的向量。对nn.Embedding(100, 64)其中\[ 100 \]是词表大小num_embeddings\[ 64 \]是每个 Token 的 Embedding Dimension。输入\[ [32,20] \]经过nn.Embedding(1000, 64)以后\[ \boxed{[32,20,64]} \]也就是 32 个 Sample每个有 20 个 Token每个 Token 变成 64 维向量。对\[ state:[32,4,10] \]执行nn.Linear(10, 64)时Linear作用于最后一个维度\[ 10\rightarrow64 \]前面的\[ 32,4 \]保留所以\[ \boxed{[32,4,64]} \]图片\[ 224\times224 \]Patch Size\[ 16\times16 \]那么横向\[ 224/1614 \]纵向也是 14因此\[ 14\times14\boxed{196} \]个 Patch。Visual Patch 可以称为 Token因为每个 Patch 都被编码成一个向量并作为 Transformer Sequence 中的一个信息位置参与后续计算。[B,T,D]中的 \(T\) 更准确地表示Sequence Length不一定是时间。语言中可以是文本 Token 数ViT 中可以是 Patch 数机器人 History 中才可能是时间步数。Transformer 需要 Position Information是因为仅凭 Token Embedding本身并不能明确知道“谁在前、谁在后”。而\[ [A,B,C] \]和\[ [C,B,A] \]显然可能拥有完全不同的含义。对x x pos_embedding[:T]如果\[ x:[B,T,D] \]而\[ pos:[T,D] \]PyTorch 通过 Broadcasting 将同一套位置向量加到每个 Batch 上所以最终仍是\[ \boxed{[B,T,D]} \]Language、Image、Robot State 原始形式虽然不同但分别通过 Embedding、Visual Encoder / Patch Projection、State Projection 后都可以变成统一的 \(D\) 维 Token所以能够进一步交给 Transformer 处理。当我们写\[ QXW_Q \]时\[ X \]应该理解成已经经过编码、具有统一 Embedding Dimension 的一批 Token Sequence。其典型 Shape\[ \boxed{X:[B,T,D]} \]现在我们就从这里正式进入 Transformer 的核心。VLA 系统学习第 14 课Attention 到底在算什么——真正理解 Q、K、V现在假设我们已经拿到\[ X:[B,T,D] \]比如\[ X:[32,4,64] \]含义是32 个样本每个样本有 4 个 Token每个 Token 是 64 维。但新的问题来了。假设某一个 Token 是\[ x_1 \]它做决策的时候究竟应该更多参考\[ x_2 \]还是\[ x_3 \]或者\[ x_4 \]这就是 Attention 真正想解决的问题\[ \boxed{ 当前Token应该从其他Token那里取多少信息 } \]一、Attention 本质上是一次“检索”先不用公式。假设有三个 TokenToken 1当前机器人状态 Token 2过去机器人状态 Token 3某个视觉信息现在 Token 1 想更新自己的表示。它需要问Token 2 和我当前要找的信息相关吗Token 3 和我当前要找的信息相关吗于是 Attention 可以被理解为我想找什么 ↓ 和所有Token逐个匹配 ↓ 计算相关程度 ↓ 相关的多拿一点信息 ↓ 不相关的少拿一点 ↓ 把信息重新组合成新的Token表示这三个角色就分别对应\[ Q,\quad K,\quad V \]二、Q、K、V 到底分别是什么先用一个检索系统类比。QueryQQuery 表示我现在想找什么当前 Token 拿出自己的一个“查询表示”。KeyKKey 表示我有什么特征可以让别人判断要不要关注我每个 Token 都提供自己的 Key。ValueVValue 表示如果你决定关注我我真正提供给你的内容是什么所以可以先记\[ \boxed{ Q\text{我想找什么} } \]\[ \boxed{ K\text{我拿什么和你匹配} } \]\[ \boxed{ V\text{匹配成功以后我真正贡献什么信息} } \]这三个不是三份不同的原始数据。在最基本的 Self-Attention 中它们全部来自同一个\[ X \]只是通过三组不同参数投影以后扮演不同角色。三、为什么同一个 \(X\) 要变三次假设\[ X:[B,T,D] \]我们定义三个 Linearself.q_proj nn.Linear(D, d_k)self.k_proj nn.Linear(D, d_k)self.v_proj nn.Linear(D, d_v)然后Q self.q_proj(X)K self.k_proj(X)V self.v_proj(X)数学上\[ QXW_Q \]\[ KXW_K \]\[ VXW_V \]先忽略 Bias。如果为了教学简单地设\[ Dd_kd_v64 \]那么\[ X:[32,4,64] \]经过三个 Projection 后\[ Q:[32,4,64] \]\[ K:[32,4,64] \]\[ V:[32,4,64] \]Shape 看起来一样。但是它们的数值不一样因为\[ W_Q\neq W_K\neq W_V \]这些都是不同的可训练 Parameter。所以同一个 Token\[ x_i \]会被转换成\[ q_i,\quad k_i,\quad v_i \]三种不同表示。四、为什么非要分成三种表示假设一个 Token 原本包含很多混合信息位置 速度 物体关系 任务相关信息 ...当它作为 Query 时模型可能更想提取“我现在需要什么信息”当它作为 Key 时更适合提取“我具有什么特征可以和别人的需求匹配”而作为 Value 时又需要表达“别人关注我以后我应该实际提供什么内容”所以三套 Linear Projection本质是在让模型学习三种不同的“观察角度”。五、Q 和 K 怎么判断两个 Token 是否相关假设 Token 1 的 Query\[ q_1 \]我们拿它分别和\[ k_1,k_2,k_3 \]做点积\[ q_1\cdot k_1 \]\[ q_1\cdot k_2 \]\[ q_1\cdot k_3 \]点积越大可以粗略理解为两个向量在当前学习出的表示空间中越匹配。所以 Token 1 会得到三个分数\[ [s_{11},s_{12},s_{13}] \]其中\[ s_{12} \]表示Token 1 查询 Token 2 时的匹配分数。六、这里为什么突然出现 \(QK^T\)如果一个一个算太慢。假设\[ Q:[B,T,d_k] \]\[ K:[B,T,d_k] \]我们希望每一个 Query 都和每一个 Key 比较。所以把 K 的最后两个维度交换\[ K^T:[B,d_k,T] \]然后\[ QK^T \]Shape\[ [B,T,d_k] \times [B,d_k,T] \]得到\[ \boxed{ [B,T,T] } \]这就是 Attention 中最重要的一次 Shape 变化。七、[B,T,T]到底是什么意思例如\[ T3 \]那么得到\[ [3,3] \]的矩阵\[ S \begin{bmatrix} s_{11}s_{12}s_{13}\\ s_{21}s_{22}s_{23}\\ s_{31}s_{32}s_{33} \end{bmatrix} \]第一行\[ [s_{11},s_{12},s_{13}] \]表示Token 1 分别怎么看 Token 1、2、3。第二行Token 2 分别怎么看 Token 1、2、3。第三行同理。所以\[ \boxed{ Attention\ Score:[B,T,T] } \]实际上是一张Token 和 Token 之间的关系表。八、代码里到底怎么做假设x.shape [32, 4, 64]我们先得到q q_proj(x)k k_proj(x)v v_proj(x)所以q: [32, 4, 64] k: [32, 4, 64] v: [32, 4, 64]然后scores q k.transpose(-2, -1)注意k.transpose(-2, -1)把\[ [32,4,64] \]变成\[ [32,64,4] \]所以\[ [32,4,64] \times [32,64,4] \]得到\[ \boxed{[32,4,4]} \]这里每个\[ [4,4] \]就是一个 Sample 内 4 个 Token 两两之间的匹配分数。九、为什么用transpose(-2,-1)这里的-1表示最后一个维度。-2表示倒数第二个维度。所以k.transpose(-2, -1)就是交换\[ T \]和\[ D \]即\[ [B,T,D] \rightarrow [B,D,T] \]这种写法比transpose(1, 2)更通用因为即使前面未来再增加 Head Dimension它依然是在交换最后两个维度。这个写法后面 Multi-Head Attention 会经常出现。十、为什么公式还要除以 \(\sqrt{d_k}\)正式公式不是\[ QK^T \]而是\[ \frac{QK^T}{\sqrt{d_k}} \]原因可以先这样理解。如果向量维度\[ d_k \]很大点积实际上是在把很多项相加\[ q\cdot k q_1k_1q_2k_2\cdotsq_{d_k}k_{d_k} \]维度越来越大时这些点积数值的尺度也可能变大。如果把很大的正负数直接送进 SoftmaxSoftmax 很容易变得特别极端0.000001 0.999998 0.000001这会导致梯度等训练行为不够理想。因此除以\[ \sqrt{d_k} \]对分数尺度进行控制。所以叫Scaled Dot-Product Attention缩放点积注意力。十一、代码继续往下import mathscores q k.transpose(-2, -1)scores scores / math.sqrt(q.shape[-1])此时\[ scores:[B,T,T] \]例如\[ [32,4,4] \]但现在这些仍然只是任意实数。例如一行可能是\[ [2.1,-0.5,3.0,0.2] \]我们希望把它变成对不同 Token 的关注比例。这就轮到 Softmax。十二、Softmax 在这里的作用是什么执行weights torch.softmax(scores, dim-1)对于每一个 Query Token都在最后一个维度上做 Softmax。例如\[ [2.1,-0.5,3.0,0.2] \]可能变成\[ [0.27,0.02,0.66,0.05] \]并且\[ 0.270.020.660.051 \]于是可以理解为Token 1 → 27% Token 2 → 2% Token 3 → 66% Token 4 → 5%这就是Attention Weights注意力权重。十三、一个极小数字例子把 Q/K/V 真正跑通假设现在只有三个 Token并且\[ d_k2 \]Token 1 的 Query\[ q_1[1,0] \]三个 Key\[ k_1[1,0] \]\[ k_2[0,1] \]\[ k_3[1,1] \]先算匹配\[ q_1\cdot k_11 \]\[ q_1\cdot k_20 \]\[ q_1\cdot k_31 \]所以\[ scores[1,0,1] \]缩放\[ \sqrt{d_k}\sqrt2 \]得到大约\[ [0.707,0,0.707] \]经过 Softmax大约\[ \boxed{ [0.401,0.198,0.401] } \]也就是说 Token 1 当前认为Token 1 和 Token 3 比较值得关注Token 2 相对少一些。十四、但是 Attention Weight 还不是最终输出现在假设三个 Value 是\[ v_1[1,0] \]\[ v_2[0,2] \]\[ v_3[3,1] \]Attention Weight\[ [0.401,0.198,0.401] \]最终 Token 1 得到的新信息是\[ 0.401v_1 0.198v_2 0.401v_3 \]展开\[ 0.401[1,0] 0.198[0,2] 0.401[3,1] \]得到大约\[ \boxed{ [1.604,0.797] } \]这就是根据注意力权重把不同 Token 的 Value 加权融合。所以 Attention 不是“选一个 Token”。而通常是把所有相关 Token 的信息按不同权重混合起来。十五、这就是为什么最后要乘 \(V\)现在整体公式终于可以真正读懂\[ \operatorname{Attention}(Q,K,V) \operatorname{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)V \]分成三步。第一步\[ QK^T \]问每个 Query 和每个 Key 有多匹配得到\[ [B,T,T] \]第二步\[ softmax \]把匹配分数变成每个 Token 应该关注其他 Token 的比例。仍然\[ [B,T,T] \]第三步\[ AttentionWeights\times V \]即\[ [B,T,T] \times [B,T,d_v] \]得到\[ \boxed{ [B,T,d_v] } \]于是每个 Token 都得到一个融合其他 Token 信息的新表示。十六、完整代码现在只有几行import mathimport torchimport torch.nn as nnclass SimpleSelfAttention(nn.Module): def __init__(self, d_model): super().__init__() self.q_proj nn.Linear(d_model, d_model) self.k_proj nn.Linear(d_model, d_model) self.v_proj nn.Linear(d_model, d_model) def forward(self, x): q self.q_proj(x) k self.k_proj(x) v self.v_proj(x) scores q k.transpose(-2, -1) scores scores / math.sqrt(q.shape[-1]) weights torch.softmax(scores, dim-1) output weights v return output假设x.shape [32, 4, 64]那么整个 Shape 流\[ X:[32,4,64] \]↓\[ Q,K,V:[32,4,64] \]↓\[ QK^T:[32,4,4] \]↓\[ Softmax:[32,4,4] \]↓\[ AttentionWeights\times V \]↓\[ Output:[32,4,64] \]你以后再看到 Attention就应该优先沿这条 Shape 链读。十七、为什么叫 Self-Attention刚才\[ QXW_Q \]\[ KXW_K \]\[ VXW_V \]三者全部来自同一个\[ X \]所以一个 Sequence 内部的 Token 相互关注。因此叫Self-Attention自注意力。例如 Robot History\[ [s_{t-3},s_{t-2},s_{t-1},s_t] \]经过 Self-Attention 后每个时间位置都可以根据其他时间位置重新组织自己的表示。十八、Cross-Attention 又是什么这个概念现在顺便建立因为后面的 Transformer Decoder 和 ACT 会遇到。假设\[ Q \]来自一个 Sequence而\[ K,V \]来自另一个 Sequence。例如Action Query ↓ Q Image / Robot Features ↓ K、V那么含义变成Action Query 去另一个信息序列里寻找自己需要的信息。这就叫Cross-Attention形式仍然是\[ Attention(Q,K,V) \]但\[ Q \]和\[ K,V \]来源不同。这个概念对之后理解 ACT Transformer Decoder 会非常重要。十九、Padding Mask 在 Attention 中终于再次出现上一课我们已经知道 Padding真实 真实 真实 PAD PAD模型不应该关注 PAD。假设 Attention Score\[ [B,T,T] \]那么在 Softmax 前可以把 Padding 对应位置屏蔽掉。概念上scores scores.masked_fill(mask 0, float(-inf))weights torch.softmax(scores, dim-1)因为\[ e^{-\infty}\approx0 \]所以 Softmax 后被 Mask 的位置权重近似\[ 0 \]也就是不允许 Attention 去读这些 Padding Token。于是之前学过的 Mask现在终于和 Transformer 真正连起来了。二十、Attention 和 Position Information是什么关系上一课我们说\[ XXP \]给 Token 加上位置。为什么因为普通 Self-Attention 更关注Token 内容之间的匹配。但 Sequence 顺序本身也非常重要。因此通常在 Attention 前需要给 Token 注入某种 Position Information。于是数据链\[ Raw\ Data \rightarrow Token\ Embedding \rightarrow Position\ Information \rightarrow Attention \]这就是为什么上一课必须先讲 Position而不是现在才突然补。二十一、Attention 到底“学到了”什么注意力权重不是人工写死当前状态必须关注上一帧 80% 必须关注图像 20%真正参与学习的是\[ W_Q,W_K,W_V \]训练过程中\[ Loss \rightarrow Backward \]会计算\[ \frac{\partial L}{\partial W_Q} \]\[ \frac{\partial L}{\partial W_K} \]\[ \frac{\partial L}{\partial W_V} \]Optimizer 再更新它们。于是模型逐渐学习什么样的 Query 和 Key 应该匹配以及被关注以后应该传递什么 Value。所以 Attention 仍然没有脱离我们最早建立的训练逻辑\[ Parameter \rightarrow Forward \rightarrow Loss \rightarrow Backward \rightarrow Parameter\ Update \]二十二、放回机器人 Sequence会发生什么假设\[ X [x_{t-3},x_{t-2},x_{t-1},x_t] \]Shape\[ [B,4,64] \]经过 Self-Attention。那么当前 Token\[ x_t \]可能学到做当前决策时应该高度关注 \(x_{t-1}\)稍微参考 \(x_{t-2}\)而 \(x_{t-3}\) 影响较小。另一个任务中可能完全不同。这些关系不需要人为规定而由\[ W_Q,W_K,W_V \]通过训练学习。这就是 Attention 相比简单固定加权的重要优势。二十三、为什么它对多模态尤其重要假设未来统一 Sequence 中包含Visual Token 1 Visual Token 2 ... Language Token 1 Language Token 2 Robot State Token ...某个 Action-related Token 可以通过 Attention 学习当前动作到底应该关注哪个视觉区域哪段语言最重要当前 Robot State 是否比某些视觉 Token 更关键这就是 Transformer 能够用于 VLA 的一个核心原因\[ \boxed{ 通过Attention在不同Token之间动态建立信息关系 } \]但实际 VLA 架构究竟如何组织 Token、Self-Attention、Cross-Attention需要具体模型具体分析不能一概而论。第十四课整章链路回看现在 Attention 公式不应该再只是需要背的\[ \operatorname{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)V \]而应该能读成\[ X \]先生成\[ Q,K,V \]其中 Q 表示我想找什么。K我拿什么和别人匹配。V被关注后我真正提供什么。然后\[ QK^T \]生成\[ [B,T,T] \]的 Token-to-Token 匹配矩阵。Softmax 把它变成 Attention Weight。最后\[ Weights\times V \]让每个 Token 从其他 Token 中按权重重新汇总信息。最终\[ [B,T,D] \rightarrow [B,T,D] \]Sequence Length 没消失但每个 Token 的内容已经融合了其他位置的信息。第十四课自测Q、K、V 各自可以怎样直观理解为什么 Self-Attention 中 Q、K、V 都来自 \(X\)却仍然不是同一个 Tensor如果\[ X:[32,10,64] \]并且 \(d_kd_v64\)那么 Q、K、V 分别是什么 Shape为什么\[ Q:[32,10,64] \]乘\[ K^T:[32,64,10] \]会得到\[ [32,10,10] \][32,10,10]中最后两个 10 分别代表什么关系Softmax 为什么通常对 Attention Score 的最后一个维度进行为什么要除以\[ \sqrt{d_k} \]Attention Weight 算出来以后为什么还必须乘 VSelf-Attention 和 Cross-Attention 最核心的区别是什么Padding Mask 为什么通常要在 Softmax 之前作用到 Attention ScoreAttention 中真正通过训练学习的 Parameter 主要有哪些请完整解释\[ \operatorname{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)V \]每一部分究竟在做什么。下一课第 15 课——为什么一个 Attention 还不够Multi-Head Attention 与完整 Transformer Block下一课我们正式从\[ Single\ Head\ Attention \]走到真实 Transformer 使用的\[ \boxed{Multi\text{-}Head\ Attention} \]但重点不会是多背一堆公式而是解释为什么同一组 Token 之间不能只学习“一种关系”比如同一个 Robot Sequence 中一组 Attention Head 可能更关注短期时间关系另一组可能学习其他特征关系——这是直觉示例不把具体 Head 功能当成固定事实。然后会穿插代码把\[ [B,T,D] \]真正拆成\[ [B,H,T,d_h] \]再算 Attention最后重新合并成\[ [B,T,D] \]随后把 Attention 放回完整 Transformer Block\[ X \rightarrow Multi\text{-}Head\ Attention \rightarrow Residual \rightarrow LayerNorm \rightarrow FeedForward \rightarrow Residual \rightarrow LayerNorm \]这一课结束之后你看到nn.TransformerEncoderLayer就不会再把它当成黑盒。再往下一步我们就可以开始讲Transformer 为什么适合作为 Robot Policy 的 Sequence Model然后正式向ACT过渡。
RELATED

相关推荐

基于SSM框架的高校心理健康管理系统:测评、预约、预警全解析

基于SSM框架的高校心理健康管理系统:测评、预约、预警全解析

每年开学季,高校心理健康中心都要搞一轮新生心理普查,纸质问卷发下去几百份,回收、录入、统计一圈下来,至少折腾一两周。更麻烦的是,普查结果往往只是"测完就完",后续咨询预约、个案跟踪、状态对…

📅 2026/10/9 5:42:26
MySQL进阶实战:从语法到引擎视角的性能诊断与优化

MySQL进阶实战:从语法到引擎视角的性能诊断与优化

1. 为什么“第二篇”比“第一篇”更值得细读——从数据库选型到真实负载的思维跃迁很多人看到《关于我的数据库——MySQL——第二篇》这个标题,第一反应是:“哦,又一篇MySQL入门笔记?”但如果你真这么想,就错过了一个关…

📅 2026/10/9 5:37:26
民心与文脉:穿透华夏千年兴衰的终极密码

民心与文脉:穿透华夏千年兴衰的终极密码

摘要 纵观华夏千年王朝更迭与近代势力兴衰,战争胜负、兵力强弱、疆域大小并非政权成败的核心决定因素。 真正决定历史走向的恒定规律,在于政权是否顺应底层民心、是否扎根华夏本土文脉。 本文以近代多方势力兴衰为样本,逐条拆解历史轮回底层…

📅 2026/10/9 5:37:26
MORE NEWS

更多资讯

📰

Inkscape与GIMP免费组合:矢量绘图与位图编辑实战指南

1. 为什么要聊聊Inkscape和GIMP这套组合这几年打工人越来越明白一个道理:不是所有公司都愿意给设计软件付年费,也不是所有项目和“简单美工”这个需求,都需要动用那套庞大的商业设计套件。我自己接过不少小活儿——修个产品图、给公众号排个题…

📰

函数式编程如何实现高效复用与模块化设计

接手过一个订单系统的历史模块,那段代码让我印象很深。六个功能函数长得几乎一模一样——外层都是循环,中间换个判断条件,内部塞了一段完全相同的字段拼接逻辑。当时我改一个公共方法,结果五个调用方跟着出问题,排查了…

📰

Kubernetes Pod故障诊断六步法:从Pending到CrashLoopBackOff的根因定位

简介:本资源是一份面向Kubernetes运维工程师、云计算平台管理员及中高级DevOps实践者的故障排查实战笔记,系统梳理k8s集群中五大类高频异常——连接异常(集群级)、通信异常(网络插件/跨Pod)、内部异常&…

📰

Kafka消费者组、Exactly-Once与事务:构建可靠消息链路的关键实践

把消费者组、Exactly-Once 和事务摆在一起,很多人第一反应是:这不就是 Kafka 官方文档里三个互不相干的章节吗?直到你真正在订单、库存、支付这类核心链路上把消息和数据库放在一起调,才会发现这三个概念是同一个修罗场里的三根柱…

📰

空标题项目落地指南:从需求拆解到技术选型的实战方法论

点开一个项目文档,标题栏就孤零零地写着“......”三个点,既没有名字,也没有一句描述。这种界面我在实际项目里见过太多次,通常出现在需求还没对齐、技术方案也没定的阶段。很多人拿到这种空标题会愣住,不知道从哪里下…

📰

MySQL命令实战指南:从安装部署到高并发故障排查

做了这么多年后端,MySQL几乎是我每天都要打交道的工具。不管新项目搭环境,还是老系统查性能问题,绕来绕去都离不开那几条MySQL命令。这篇稿子不打算写成一本文档手册式的命令大全,而是把我在实际项目里反复用过、踩过坑、最后验证…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬