想象你是电影导演,面前摊开一整卷刚冲洗出来的胶片。每一格画面都清晰:有人在街头奔跑,有人在屋檐下躲雨。你的任务是把它们剪成一部流畅的电影,可你面临两难——同一格画面里,该把观众的视线聚焦在谁身上?不同格画面之间,又如何保证奔跑的姿势、雨滴的方向始终连贯?AI 视频生成模型面对的任务和你一模一样,只不过它不只是剪辑,而是要凭空“画”出一整卷新胶片。它既要决定每一格里该关注哪个细节,又要在时间线上回想之前的画面。这个能力,来自一个叫“时空注意力”的机制。它就像你的导演直觉:知道往哪儿看,知道该回忆什么,还能把两件事拧成一股绳。 本文用一个贯穿始终的比喻——导演调度的艺术——带你彻底看透视频生成模型的核心设计。学完你不仅能听懂 Sora 这类模型的架构讲解,还能在实际工作中理解“为什么视频会穿帮”“为什么长视频这么贵”,以及“算力不够时该怎么优化”。

岗位关联

时空注意力是视频生成模型的“导演调度术”。搞懂它,你就拿到了理解 Sora、Runway、可灵等视频生成模型底层设计的钥匙,这是从事 AIGC 算法、视频生成应用开发的必修课。

目录
  1. 可视化演示
  2. 注意力机制基础
  3. 空间注意力
  4. 时间注意力
  5. 时空协同融合
  6. 视频生成应用
  7. 计算效率优化
  8. 局限与未来
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示核心概念的关键机制与实践应用,交互切换理解不同模式下的核心原理与扩展机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+modeData.m0.caption+'

注意力机制基础

新来的场记第一次跟组,导演递给他三个本子:请柬、名牌和台词。请柬上写着导演此刻最想问的问题——“这段戏谁最要紧”;每位演员胸前挂着名牌,写着“我是谁、我在画面哪个位置”;台词本则是演员真正能贡献的内容。场记要做的事很简单:拿着请柬逐一对照名牌,给每位演员打个“相关性分”,再按分数高低决定把多少镜头分量分给谁。分数最高的演员,获得最多的画面时长。

这段“提问—对照—分配”的流程,就是注意力机制的核心。在 Transformer 架构里,它被抽象成三个矩阵:Q(Query)相当于请柬,K(Key)相当于名牌,V(Value)相当于台词内容。视频生成模型把每一帧切成一个个小方块(patch),每个 patch 编码成一个向量,然后让任意两个 patch 之间“互相对照”,算出它们彼此的相关性。

具体计算分三步:先用 Q 和所有 K 做点积得到相关性分数;再除以一个缩放因子防止分数过大;接着用 softmax 把分数变成一组和为 1 的权重——相当于在全部候选之间“分票”;最后用这些权重去加权求和所有 V,得到经过“择优”后的输出。

场记终于明白:所谓注意力,就是让模型在浩瀚信息里“择优而听”。可这只是第一课——因为导演手里的素材不是一张照片,而是一整卷会动的胶片。接下来,他要学着在“画面内”和“时间线上”分别调度。

Attention(Q,K,V)=softmax(QK⊤dk)V\displaystyle \mathrm{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
这个公式的直觉:左边的 Q 是导演的问题,中间的配对打分是“谁和这个问题最搭”,最后的加权求和是“把最搭的人的内容多采用一些”。
  1. 生成三份视图输入特征 X 分别乘三个可学习矩阵,得到 Q、K、V,分别对应“问题清单、候选名牌、可用内容”。
    Q=XWQ,K=XWK,V=XWVQ = XW_Q, \quad K = XW_K, \quad V = XW_V
  2. 点积打分用 Q 与所有 K 做点积,数值越大表示该候选与当前问题的相关性越强,相当于导演逐一向演员“对名牌”。
    scores=QK⊤\mathrm{scores} = QK^\top
  3. 缩放防溢出除以 $\sqrt{d_k}$,把点积的量纲拉回合理范围,避免后续 softmax 进入饱和区。
    QK⊤dk\frac{QK^\top}{\sqrt{d_k}}
  4. 归一化分票逐行做 softmax,把原始分数变成和为 1 的权重分布,权重代表“该给谁多少镜头时间”。
    softmax(QK⊤dk)\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)
  5. 加权聚合用权重对 V 加权求和,相关性高的内容在输出里占比更大,得到这一层“择优”后的特征。
    Attention(Q,K,V)=softmax(QK⊤dk)V\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

空间注意力

排练第一场戏时,导演把目光化作一束聚光灯,在舞台同一格画面内扫视:主角开口时,灯打向主角的脸;道具意外掉落时,灯立刻扫向那只手。空间注意力要学的正是这件事——在同一帧画面内部,决定哪些区域值得重点关注。

在技术实现上,模型把每一帧切成 P×P 的 patch 网格,每个 patch 是一个 token。空间注意力让这一帧内的所有 token 两两计算相关度,于是“主角脸上的 patch”会与“他旁边路人身上的 patch”产生高分,表示它们属于同一段重要剧情。为了不让模型把所有 patch 看成乱序碎片,还需要给每个 patch 加上空间位置编码——相当于在名牌上标注“我站在舞台第几排第几列”,这样模型才知道上下左右的关系。

有了空间注意力,导演的聚光灯就能在每一格画面里灵活走位。但只靠它还不够——电影的灵魂在于“动”。下一格画面里,同样的主角应该延续上一格的姿态,这就要靠导演去“回忆”了。

zt,i=∑j∈Ωtsoftmaxj(qt,i⊤kt,jd)vt,j\displaystyle z_{t,i} = \sum_{j \in \Omega_t} \mathrm{softmax}_j\left(\frac{q_{t,i}^\top k_{t,j}}{\sqrt{d}}\right)v_{t,j}
这个公式只做“帧内”的加权聚合:当前帧 t 的某个位置 i,去关注同一帧里的所有位置 j,输出是这一帧内部“重点区域被加强”后的特征。
  1. 候选集合固定当前帧 t,位置 i 的 token 只与同一帧内的所有位置 j 比较,Ω_t 表示帧内全部位置。
    Ωt={1,2,…,HW}\Omega_t = \{1, 2, \ldots, HW\}
  2. 帧内点积打分当前 token 的查询与帧内各个位置的键做缩放点积,得到“这格画面里谁和我最相关”的分数。
    scoresij=qt,i⊤kt,jd\mathrm{scores}_{ij} = \frac{q_{t,i}^\top k_{t,j}}{\sqrt{d}}
  3. 帧内归一化对帧内所有位置做 softmax,权重表示“这一格画面里哪个区域最值得看”。
    at,ij=softmaxj(qt,i⊤kt,jd)a_{t,ij} = \mathrm{softmax}_j\left(\frac{q_{t,i}^\top k_{t,j}}{\sqrt{d}}\right)
  4. 聚合输出按权重把帧内的值向量加权求和,得到携带“画面内重点”的新表示。
    zt,i=∑j∈Ωtat,ijvt,jz_{t,i} = \sum_{j \in \Omega_t} a_{t,ij} v_{t,j}

时间注意力

拍第二场戏时,导演突然喊“停”,转身对场记说:去把五秒前楼梯那场戏的素材给我调出来。原来,主角此刻走进客厅的姿势,取决于他刚才在楼梯上的位置。时间注意力干的正是这件事——让当前帧去“回忆”其他帧发生了什么,并判断哪些历史片段对当下最重要。

技术上的做法是:把每一帧整体看作一个“时间 token”,当前帧的查询 q_t 去和所有帧的键 k_{t'} 做点积打分。分数高,说明那一帧对当前帧的信息补全最有帮助。这里既可以关注过去,也可以参考“未来”(在生成完整视频时,模型常常是双向的,可以看到整段素材),这与人类导演既能回忆素材、又能预演后续镜头非常相似。

导演把空间和时间分开调度固然清晰,但真正的大师从不做二选一。当镜头里的人物一边转身一边走上台阶,导演必须在同一瞬间既判断“手该往哪放”,又回忆“刚才迈的是哪只脚”——把两件事合二为一,才是时空注意力的精髓。

zt=∑t′=1Tsoftmaxt′(qt⊤kt′d)vt′\displaystyle z_t = \sum_{t'=1}^{T} \mathrm{softmax}_{t'}\left(\frac{q_t^\top k_{t'}}{\sqrt{d}}\right)v_{t'}
时间注意力让每一帧不再是孤岛:当前帧会从整段时间线上收集线索,再把“前面发生了什么”揉进自己身上,从而保证动作连贯、因果自洽。
  1. 跨帧候选当前帧的特征作为查询 q_t,对所有历史(及未来)帧的特征 k_{t'} 打分。
    t′∈{1,2,…,T}t' \in \{1, 2, \ldots, T\}
  2. 时间维度打分衡量“另一帧发生的事对当前帧有多重要”,类似导演判断该回放哪段素材。
    st′=qt⊤kt′ds_{t'} = \frac{q_t^\top k_{t'}}{\sqrt{d}}
  3. 帧间归一化softmax 在时间维上归一化,得到各帧的参考权重。
    at′=softmaxt′(qt⊤kt′d)a_{t'} = \mathrm{softmax}_{t'}\left(\frac{q_t^\top k_{t'}}{\sqrt{d}}\right)
  4. 时间聚合把所有帧的值向量按权重加起来,当前帧因此“看见”了整段时间线。
    zt=∑t′=1Tat′vt′z_t = \sum_{t'=1}^{T} a_{t'} v_{t'}

时空协同融合

真正的大导演不会把“画面内选重点”和“时间线回忆”分成两件事来做。他会把整卷胶片铺满一整面墙:横向是时间轴,纵向是每一帧的舞台构图,然后他的目光可以在任意一个“帧 × 位置”的交叉点上肆无忌惮地跳动。时空注意力做的就是这样一件事——把 T 帧、每帧 HW 个位置,总共 THW 个 token 全部展开,让任意一个 token 都能同时“看到”所有帧的任意位置。

这就是“三维注意力”的含义:候选池不再是“同一帧内”或“跨帧”,而是“时空全展开”。对于视频生成模型,这个操作让第 5 秒画面里主角的手,可以直接从第 2 秒画面里对手的姿势获取线索,也可以从第 5 秒画面里背景的某个角落获取空间线索——时间与空间在同一个打分矩阵里被统一调度。

到这一步,导演终于掌握了完整的“时空调度术”。接下来的问题是:这套调度术在真实的视频生成模型里,究竟是怎么被用起来的?Sora 一类的模型给出了答案。

zt,i=∑t′=1T∑j=1HWsoftmax(t′,j)(qt,i⊤kt′,jd)vt′,j\displaystyle z_{t,i} = \sum_{t'=1}^{T}\sum_{j=1}^{HW} \mathrm{softmax}_{(t',j)}\left(\frac{q_{t,i}^\top k_{t',j}}{\sqrt{d}}\right)v_{t',j}
这是时空注意力的“完全体”公式:查询 q_{t,i} 要与所有帧、所有位置的键逐一对比。它同时回答了“哪一帧重要”和“哪个位置重要”两个问题。
  1. 统一候选池把 T 帧 × HW 个位置全部展开成 N=THW 个时空 token,构成候选池。
    N=T×H×WN = T \times H \times W
  2. 时空联合打分查询 q_{t,i} 与每一个时空位置的键 k_{t',j} 做缩放点积,同时考虑“哪一帧+哪个位置”。
    scores=qt,i⊤kt′,jd\mathrm{scores} = \frac{q_{t,i}^\top k_{t',j}}{\sqrt{d}}
  3. 全局归一化softmax 作用在全部时空候选上,得到一组覆盖“时间×空间”的权重。
    at′,j=softmax(t′,j)(qt,i⊤kt′,jd)a_{t',j} = \mathrm{softmax}_{(t',j)}\left(\frac{q_{t,i}^\top k_{t',j}}{\sqrt{d}}\right)
  4. 双重聚合对时间维和空间维同时加权求和,输出同时携带“当前帧哪块重要”和“哪一帧重要”的信息。
    zt,i=∑t′=1T∑j=1HWat′,jvt′,jz_{t,i} = \sum_{t'=1}^{T}\sum_{j=1}^{HW} a_{t',j} v_{t',j}

视频生成应用

Sora 这类模型就像一位“从噪声里洗照片”的导演。它一开始拿到的是整卷充满雪花噪点的胶片,什么都看不清。导演的工作是:反复端详这卷噪点胶片,每一轮都问自己“这里该清晰吗?那边该连贯吗?”,然后一点点把噪点抹去,让清晰的画面和连贯的动作浮现出来。这个过程叫扩散去噪,而每一轮“端详”,都要用时空注意力来调度。

具体架构上,视频先被切成 3D patch(每个 patch 同时覆盖一小块空间和一小段时间的画面),展平成 token 序列。模型把时空注意力块嵌在扩散模型的去噪网络里,一层层地交替处理:先做时间注意力吸收帧间线索,再做空间注意力精修帧内细节。Sora 正是靠着这种“时间+空间”交替堆叠的 transformer 块,才能生成一分钟以上人物、光影始终一致的视频。

导演的调度术终于落地成产品。但很快他会发现一个残酷的现实:如果每一格画面都要跟整卷胶片的每一格逐一比对,就算给他一百年也排不完一部电影。算力,成了时空注意力最大的敌人。

O=Attnspatial(Attntemporal(X))\displaystyle O = \mathrm{Attn}_{spatial}\left(\mathrm{Attn}_{temporal}(X)\right)
这个公式是工程上最常用的“分解式”实现:先让每一帧看看其他帧(时间),再在同一帧内部仔细端详(空间)。视频模型用这种交替堆叠的方式,在每一轮去噪中反复应用时空注意力。
  1. 时间注意力先行输入 X 先经过时间注意力,让每个空间位置吸收其他帧的信息。
    X′=Attntemporal(X)X' = \mathrm{Attn}_{temporal}(X)
  2. 空间注意力精修再在同一帧内部做空间注意力,整合帧内细节。
    X′′=Attnspatial(X′)X'' = \mathrm{Attn}_{spatial}(X')
  3. 交替堆叠视频模型里这样的“时间+空间”注意力块交替堆叠多层,构成完整的时空建模。
    O=Attnspatial(Attntemporal(X))O = \mathrm{Attn}_{spatial}\left(\mathrm{Attn}_{temporal}(X)\right)

计算效率优化

我们前面说的“全时空注意力”,每个 token 都要和全部 THW 个 token 两两配对。一部 10 秒、每秒 30 帧、每帧 32×32 个 patch 的视频,token 总数达到 30 万个,两两配对就是 900 亿次计算——这相当于让导演把整卷胶片拆成单格,再把每一格跟另外 30 万格各比对一次,显然不可行。

聪明的导演改用“分场排练”的策略:先把所有演员叫到同一格画面里排练走位(空间注意力),再让同一演员跨不同场次串联动作(时间注意力)。这就是分解式时空注意力:不再要求“全时空两两配对”,而是拆成“帧内两两”加“跨帧逐位置两两”两步。计算量从 (THW)² 的平方级,降到 T(HW)² + HW·T² 的量级,在长视频上能省下几十倍算力。

导演学会了用排练成本交换全局调度精度。但即便如此,时空注意力依然有它的天花板——素材太长会忘掉开头,场次太多照样排不起。这位导演的极限,也恰恰是整个行业的攻坚方向。

Cfull=O((THW)2d),Cfact=O(T(HW)2d+HW⋅T2d)\displaystyle C_{full} = O\left((THW)^2 d\right), \qquad C_{fact} = O\left(T(HW)^2 d + HW \cdot T^2 d\right)
全时空注意力要 N=THW 个 token 两两配对,成本随 N 平方增长;分解式只保留“同一帧内”和“同一位置跨帧”两类配对,把不可承受的平方级降为可接受的两项之和。
  1. 全时空注意力成本N=THW 个 token 两两配对,总计算量达平方级。
    Cfull=O((THW)2d)C_{full} = O\left((THW)^2 d\right)
  2. 分解后的成本先对每帧做帧内空间注意力 T 次,再做跨帧时间注意力 HW 次,总配对数为两项之和。
    Cfact=O(T(HW)2d+HW⋅T2d)C_{fact} = O\left(T(HW)^2 d + HW \cdot T^2 d\right)
  3. 差距直观理解当 T 和 HW 都很大时,分解式只保留“同帧内两两”与“逐位置的跨帧两两”,丢弃“跨帧×跨位置”的联合配对。
    T(HW)2+HW T2≪(THW)2T(HW)^2 + HW\,T^2 \ll (THW)^2

局限与未来

再资深的导演也有力所不及之处。第一个局限是“长程遗忘”:当视频长达几分钟时,softmax 的权重往往被最近的帧占据,遥远的开头细节会被稀释成近似零,模型就会忘掉“第 1 秒主角穿的是红衣服”这个事实,导致第 150 秒穿帮。第二个局限是算力:哪怕是分解式注意力,token 数量依然随视频长度线性上涨,每多一秒视频,内存和算力都跟着涨。

未来的方向,正是要给导演配一个“更会记事的备忘录”。思路包括线性注意力(把两两配对近似成低秩分解,让复杂度从 O(N²) 降到 O(N))、窗口/局部注意力(只允许相邻帧和相邻区域互相看,模拟导演“先管好眼前这场戏”)、以及因果掩码(生成时只允许看过去,配合自回归式生成长视频)。这些方向本质上都在回答同一个问题:如何在可控的算力内,让模型记住更久、看得更全。

导演的时空调度术,从一张照片级的“择优而听”,进化为可以调度整部电影时空的“全局视角”,再在算力约束下不断精进。理解它的局限,才能设计出下一代更聪明的“导演”。这份认知,就是你在 AI 视频领域深度工作的起点。

Cfull=O(N2),Clinear=O(N)\displaystyle C_{full} = O(N^2), \qquad C_{linear} = O(N)
N 是视频展平后的总 token 数。全注意力的复杂度随 N 平方爆炸,而未来高效注意力的目标是把成本压成线性,让视频想多长就多长。
  1. 总 token 数把视频展平成 N 个 token,N=THW,一切复杂度讨论都围绕 N 展开。
    N=T×H×WN = T \times H \times W
  2. 平方级全配对全时空注意力让每个 token 与其他 N 个 token 两两计算,总配对数为 N² 量级。
    Cfull=O(N2)C_{full} = O(N^2)
  3. 线性化目标未来的高效注意力(线性注意力、稀疏窗口)希望把复杂度压到与 N 成线性关系。
    Clinear=O(N)C_{linear} = O(N)

AI 应用场景

文生视频长镜头合成

阶段:视频生成推理阶段

解决的问题:传统影视制作要人工拼接大量素材,才能保证同一辆车在不同镜头里位置、光影不穿帮;AI 用一句提示词直接生成连贯长镜头。模型在去噪的每一轮里用时空注意力核对“前一帧的车应该在哪个位置”,确保车辆跨帧位置一致、光影连续。

具体案例:某广告团队用 Sora 类模型生成“一辆红色跑车沿海岸公路行驶”的 30 秒长镜头。模型通过时空注意力在约 900 帧中维持车漆反光与路灯光影的连续变化,无需人工逐帧修正。

视频补帧与慢动作生成

阶段:视频后处理增强阶段

解决的问题:传统光流法在人物遮挡区域容易产生“鬼影”;时间注意力让缺失帧直接“参考”前后若干帧的 token,把前后文信息揉进新帧,遮挡处也能生成自然的中间过渡。

具体案例:体育赛事回放中,用带时空注意力的模型把 30fps 镜头补到 120fps,慢动作播放时球员的肢体动作依然平滑,球体轨迹没有断裂。

视频风格迁移与局部编辑

阶段:视频编辑与风格化阶段

解决的问题:传统逐帧风格迁移会让画面在帧与帧之间闪烁;时空注意力让“风格”在时间维上保持一致,同一人物在连续帧中获得统一的风格描述,同时保留空间细节不糊掉。

具体案例:电影调色团队对一段夜景视频统一改成赛博朋克风,模型通过跨帧注意力锁定霓虹灯的相对位置,避免灯光在帧与帧之间明暗闪烁。

Python 演示

python61 行
import numpy as np  def softmax(x, axis=-1):    # 数值稳定的 softmax    e = np.exp(x - x.max(axis=axis, keepdims=True))    return e / e.sum(axis=axis, keepdims=True)  class SpatiotemporalAttention:    # 模拟导演的三件法宝: Q 提问 / K 名牌 / V 台词    def __init__(self, d_model=16):        self.wq = np.random.randn(d_model, d_model) * 0.02        self.wk = np.random.randn(d_model, d_model) * 0.02        self.wv = np.random.randn(d_model, d_model) * 0.02        self.scale = d_model ** 0.5     def full_attention(self, x):        # x: (T, H, W, C) 全时空注意力        T, H, W, C = x.shape        x_flat = x.reshape(T * H * W, C)        q = x_flat @ self.wq        k = x_flat @ self.wk        v = x_flat @ self.wv        scores = q @ k.T / self.scale        weights = softmax(scores, axis=-1)        return (weights @ v).reshape(T, H, W, C)     def factorized_attention(self, x):        # 分解式: 先时间再空间        T, H, W, C = x.shape        HW = H * W        x_f = x.reshape(T, HW, C)        # 时间注意力: 同一位置跨帧        q_t = x_f @ self.wq        k_t = x_f @ self.wk        v_t = x_f @ self.wv        w_t = softmax(q_t @ k_t.transpose(0, 2, 1) / self.scale, axis=-1)        y_t = w_t @ v_t        # 空间注意力: 同一帧内跨位置        q_s = y_t @ self.wq        k_s = y_t @ self.wk        v_s = y_t @ self.wv        w_s = softmax(q_s @ k_s.transpose(0, 2, 1) / self.scale, axis=-1)        y_s = w_s @ v_s        return y_s.reshape(T, H, W, C)  if __name__ == "__main__":    np.random.seed(42)    T, H, W, C = 4, 4, 4, 16    video = np.random.randn(T, H, W, C)    attn = SpatiotemporalAttention(C)    full_out = attn.full_attention(video)    fact_out = attn.factorized_attention(video)    n_full = (T * H * W) ** 2    n_fact = T * (H * W) ** 2 + H * W * T ** 2    print("full out shape:", full_out.shape)    print("fact out shape:", fact_out.shape)    print("mean abs diff:", round(float(np.abs(full_out - fact_out).mean()), 6))    print("pairs full:", n_full, "| pairs fact:", n_fact)
目的:用 NumPy 从零实现“全时空注意力”与“分解式时空注意力”,对比两者的输出差异和计算量差距,直观验证正文中的复杂度公式。
  1. q = x_flat @ self.wq把每个时空 token 映射成“导演的问题清单”(Q)。
  2. scores = q @ k.T / self.scale让每个 token 与所有时空位置的“名牌”两两打分。
  3. weights = softmax(scores, axis=-1)把分数变成和为 1 的权重,完成“分票”。
  4. return (weights @ v).reshape(T, H, W, C)按权重聚合“台词内容”,再还原成视频形状。
  5. w_t = softmax(q_t @ k_t.transpose(0, 2, 1) / self.scale, axis=-1)分解式的第一步:同一位置跨所有帧打分,对应“导演回忆素材”。
  6. n_fact = T * (H * W) ** 2 + H * W * T ** 2分解式只保留“帧内两两”与“跨帧逐位置”两类配对,验证复杂度差距。

常见误区

误区初学者以为时空注意力就是一个即插即用的“注意力层”,随便加在网络的哪个位置都能生效。

正解时空注意力是“在哪两个维度上计算相关性”的结构性设计,它必须配合输入的组织方式(patch 化、位置编码)才能发挥。就像导演的调度术必须建立在“胶片已按帧编号、演员已站好位置”的基础上。加错位置(比如只在最后一层加一次)效果会大打折扣,甚至不如普通的空间注意力。

为何常见:“注意力”这个名字听起来像一种万能插件,让人误以为它是和 BatchNorm 一样的通用组件。

误区“分解式又省算力,效果肯定全面超越全时空,那直接用分解式就好了。”

正解分解式是效率上的近似。它把“同时考虑所有时空位置”简化成“先帧内、再跨帧”,丢弃了“跨帧×跨位置”的联合交互,精度通常略低于全时空注意力。真实产品(如 Sora)要在效果和算力之间权衡,而不是无脑选快的那一个。

为何常见:论文常宣传分解式“大幅省算力”,读者容易把“省算力”误听成“更优”。

误区看到注意力热力图,就以为模型会把视频里权重高的地方“点亮”或“变清晰”。

正解注意力的输出是“用权重对内容向量做加权求和”,权重决定的是特征层面的重视程度,不是原始像素的亮度。热力图只是把抽象的权重可视化,用来近似解释模型“参考了什么”,并不代表模型真的在画面里打了一束光。

为何常见:热力图高亮区域太直观,让人产生“字面意义打聚光灯”的错觉,混淆了特征空间与像素空间。

误区“我只要把每帧都切成 patch,模型自然知道第 3 帧的人和第 10 帧的人是同一个。”

正解patch 之间默认是无序的。必须靠位置编码告诉模型“这是哪一帧、哪个位置”,再靠时间/时空注意力建立跨帧关系。如果缺少位置编码,模型会把所有帧看成“一大袋乱序碎片”,同一物体在不同帧的 patch 根本无法对应起来。

为何常见:人类看视频天生理解连续性,很容易把自己“自动追踪物体”的先验强加给模型,忘了模型一开始看到的只是扁平向量。

误区“生成更长的视频只需要更大的 GPU 显存,瓶颈只是钱。”

正解显存只是表面瓶颈。全时空注意力的复杂度随 token 数平方级增长,哪怕显存翻十倍,计算时间也会爆炸式上涨。真正要解决的是注意力结构的效率问题——分解式、窗口化、线性注意力,这些才是让长视频可行的关键。

为何常见:算法工程师常把“显存不够”当成第一直觉,忽略了复杂度量级才是更深层的墙。

面试题

Q1. 在注意力机制中,Q、K、V 分别对应导演的“提问、名牌、台词”,它们的作用是?

单选题 · easy

  • A.提问对照名牌,再按名牌取台词← 正确答案
  • B.名牌对照台词,再按台词取提问
  • C.台词对照提问,再按提问取名牌
  • D.三者互相独立,互不关联

答案:A。Q(查询/提问)与 K(键/名牌)做相似度打分,得到权重后再对 V(值/台词)加权求和。A 准确描述了这个流程,B、C 把三者的角色颠倒了,D 否定了注意力机制最基本的“对照—分配”关系。

Q2. softmax 在注意力打分后起什么作用?

单选题 · easy

  • A.把分数变成和为 1 的权重← 正确答案
  • B.把权重全部变成负数
  • C.让所有分数完全相等
  • D.直接输出原始打分值

答案:A。softmax 将原始分数指数化并归一化,使所有候选权重非负且总和为 1,相当于导演在多个候选之间“按比分票”。其他选项都没有体现归一化的本质。

Q3. 某视频共 4 帧、每帧 16 个 token,全时空注意力的候选配对数是多少?

单选题 · easy

  • A.(4×16)² 即 4096← 正确答案
  • B.4×16 即 64
  • C.4² 加 16² 即 272
  • D.16² 即 256

答案:A。全时空注意力把所有 THW=4×16=64 个 token 两两配对(含自身),配对数等于 N²=64²=4096。B 只是总 token 数,C、D 是错误地把时间和空间分别平方再加总。

Q4. 空间注意力主要回答什么问题?

单选题 · mid

  • A.当前帧内哪些区域更关键← 正确答案
  • B.哪些历史帧对当前更关键
  • C.哪些音频片段更关键
  • D.哪种压缩格式更关键

答案:A。空间注意力的候选集合是“同一帧内的所有位置”,回答“这一格画面里该看哪里”,对应导演的帧内聚光灯。跨帧问题属于时间注意力,音频和压缩格式与画面空间建模无关。

Q5. 时间注意力主要帮助视频模型获得什么能力?

单选题 · mid

  • A.跨帧参考运动与因果信息← 正确答案
  • B.提升单帧画面的清晰度
  • C.降低视频编码的码率
  • D.改变视频的分辨率大小

答案:A。时间注意力让当前帧从其他帧收集线索,从而理解运动趋势和因果顺序,保证动作连贯。清晰度、码率、分辨率都是画面处理而非时序理解范畴。

Q6. 在时间注意力中,softmax 是在哪个维度上归一化的?

单选题 · mid

  • A.在所有帧的时间维度上← 正确答案
  • B.在单帧内的位置维度上
  • C.在视频的通道维度上
  • D.在 batch 的样本维度上

答案:A。时间注意力中查询 q_t 要与 t'=1..T 所有帧的键打分,softmax 自然作用在“帧”这个时间维度上,决定每帧分到多少参考权重。位置维度是空间注意力的归一化方向,通道和 batch 与分票语义无关。

Q7. 以下哪些是位置编码在时空注意力中的作用?

多选题 · mid

  • A.区分 token 属于哪一帧← 正确答案
  • B.区分 token 在帧内的坐标← 正确答案
  • C.让所有 token 权重相等
  • D.帮助建模运动先后顺序← 正确答案

答案:ABD。位置编码给每个 token 标注“哪一帧、哪个位置”,模型才能知道时间先后和空间布局,从而建模运动顺序。C 与位置编码的作用完全相反——位置编码正是为了让 token 因位置不同而区分。

Q8. 视频生成模型(如 Sora 类架构)使用时空注意力时通常会怎么做?

多选题 · mid

  • A.将视频切成时空 patch 序列← 正确答案
  • B.在去噪过程中反复应用← 正确答案
  • C.完全去掉时间维信息
  • D.用分解式注意力控制开销← 正确答案

答案:ABD。视频先切成覆盖小段时空的 patch,再把时空注意力块嵌入扩散去噪网络反复使用,并常用分解式(先时间后空间)控制算力。C 等于抛弃视频的时序本质,与题目直接矛盾。

Q9. 分解式时空注意力相比全时空注意力的主要优势是?

单选题 · hard

  • A.从平方级降到分解式量级← 正确答案
  • B.从平方级升到立方级
  • C.计算量与总帧数无关
  • D.不再需要键和查询矩阵

答案:A。全注意力复杂度约 (THW)²,分解式只做“帧内两两”加“跨帧逐位置”两类配对,即 T(HW)²+HW·T²,量级显著降低。B 方向相反,C 与 token 总数随帧数增长的事实矛盾,D 误以为省掉了注意力本身的原料。

Q10. 关于全时空注意力的特点,下列说法正确的有?

多选题 · hard

  • A.对所有时空 token 统一打分← 正确答案
  • B.同时建模帧内与帧间关系← 正确答案
  • C.只处理单帧画面内容
  • D.计算量随 token 数平方增长← 正确答案

答案:ABD。全时空注意力把 T 帧 × HW 位置全部展开成候选池,查询与所有时空位置打分,自然同时建模帧内与帧间关系,复杂度 O(N²)。C 是空间注意力甚至单帧处理的局限,与“全时空”矛盾。

Q11. 某视频 T=8 帧、每帧 HW=1024 个 token,全注意力与分解式注意力的配对数量之比约为?

单选题 · extreme

  • A.约 8 倍← 正确答案
  • B.约 32 倍
  • C.约 0.5 倍
  • D.约 1024 倍

答案:A。全注意力配对数为 (8×1024)²≈6710 万;分解式为 8×(1024)²+1024×8²≈845 万,比值约 7.94,即约 8 倍。这说明帧数越多、分辨率越高,分解式省下的算力越可观。

Q12. 时间注意力在长视频生成中面临的局限有哪些?

多选题 · hard

  • A.长程依赖容易遗忘← 正确答案
  • B.计算成本随帧数上升← 正确答案
  • C.帧间信息必然完全冗余
  • D.无法建模任何运动

答案:AB。softmax 权重常被近邻帧占据,遥远的开头被稀释导致长程遗忘;token 数随帧数线性涨,计算成本水涨船高。C 说“必然完全冗余”过于绝对且错误,D 则与时间注意力建模运动的本职相悖。