想象你是一位金牌导游,第一天带团就接到一张特殊的任务单:“带客人走到红房子前,左转经过蓝色椅子,最后在喷泉边停下。”你站在陌生的街口,眼前是一条条岔路和风格各异的建筑。你需要用眼睛扫视周围的环境(视觉),把任务单上的每句话记在脑子里(语言),然后不断将“任务单上说的”和“眼前看到的”对应起来——哪座房子是红的?哪把椅子是蓝的?——最后一步步迈出正确的腿。这个过程,就是视觉语言导航(Vision-and-Language Navigation,VLN)。 VLN 的模型架构,本质上就是为这位“AI 导游”打造的三件套:一双看懂画面的眼睛(视觉编码器)、一对听懂指令的耳朵(语言编码器),以及一个把两者对齐并指挥脚步的大脑(解码器)。而注意力机制,就是导游在岔路口瞬间的“灵光一现”——知道此刻该把目光投向哪里、把任务单上的哪句话放在心上。这篇内容,就把这套架构拆开给你看。

岗位关联

对 AI 从业者而言,VLN 是具身智能与多模态融合的典型战场。看懂编码器、解码器与注意力如何协作,等于掌握了让智能体“听懂指令、看懂世界、迈对步子”的核心方法论,这也是做机器人导航、智能助手落地绕不开的底层认知。

目录
  1. 可视化演示
  2. 任务定义
  3. 整体架构
  4. 视觉编码器
  5. 语言编码器
  6. 注意力机制
  7. 导航解码器
  8. 训练策略
  9. 架构对比
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

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

VLN模型架构流程 视觉编码器+语言编码器双路输入 跨模态注意力融合后解码动作 a_t = Decode(Attn(V_E,T_E)) VLN通过跨模态注意力实现视觉语言对齐

任务定义

导游上岗的第一天,拿到的不再是纸质地图,而是一张“活”的任务单:一条自然语言指令(“走到红房子前,左转,在蓝色椅子旁停下”)加上眼前不断变化的第一视角图像。这就是 VLN 的任务定义——智能体要根据语言指令在未知的视觉环境中自主导航到目标位置。它跟传统导航的根本区别在于:没有预先给好的地图和路线,只有“听懂话”和“看懂路”两件事。

在数学上,这个任务被建模为一个条件概率问题。智能体观察到的所有信息,包括图像序列 $I$ 和语言指令 $L$,是已知条件;它需要输出一整串动作 $a_1, a_2, \dots, a_T$,让这串动作整体的概率最大。

任务单上每个字、眼前每一帧画面,都被编码成数字信息供模型使用。但这种“输入输出”的定义只是起点——真正让 AI 导游跑起来的,是下一步的流水线架构。

P(a1:T∣I,L)=∏t=1TP(at∣a1:t−1,I1:t,L)\displaystyle P(a_{1:T} \mid I, L) = \prod_{t=1}^{T} P(a_t \mid a_{1:t-1}, I_{1:t}, L)
这个公式的本质是“一步一步做决定”:每一步动作的概率,都建立在过去所有动作、当前看到的画面和整条指令的基础上。
  1. 整体概率模型要最大化整条动作序列出现的概率。
    P(a1:T∣I,L)\displaystyle P(a_{1:T} \mid I, L)
  2. 分解为每一步一整串动作太复杂,把它拆成每个时刻 $t$ 的逐步决策。
    ∏t=1TP(at∣⋯ )\displaystyle \prod_{t=1}^{T} P(a_t \mid \cdots)
  3. 条件依赖每一步动作依赖之前做过的动作、当前看到的图像和完整指令。
    P(at∣a1:t−1,I1:t,L)\displaystyle P(a_t \mid a_{1:t-1}, I_{1:t}, L)

整体架构

一位资深导游的脑子里有一套固定的工作流程:先看(收集视觉信息),再听(理解指令),然后想(把两边对上),最后走(迈出脚步)。VLN 的整体架构正是这条流水线的抽象——编码器-解码器结构。编码器像导游的眼睛和耳朵,负责把原始图像和文本“翻译”成计算机能运算的特征向量;解码器像导游的腿和嘴,负责把特征向量“翻译”成具体的动作。

这个流水线有两个关键模块。输入端,视觉编码器和语言编码器可以并行工作,互不干扰——眼睛看它的风景,耳朵听它的指令;输出端,解码器拿到融合后的特征,在动作空间里做选择。中间的跨模态注意力则像导游大脑里的“对照表”,把“指令里提到的词”和“画面里的物体”一一挂钩。

如果把整个 VLN 模型比作一家旅行社,编码器是“信息采集员”,解码器是“执行领队”,而注意力机制就是中间的“调度台”。理解了这条流水线,接下来要钻进每个岗位,看看它们各自是怎么工作的。

h=Encoder(I,L),at=Decoder(h,a1:t−1)\displaystyle h = \text{Encoder}(I, L), \qquad a_t = \text{Decoder}(h, a_{1:t-1})
编码器把原始世界的信号压缩成紧凑的特征向量 $h$,解码器再基于这个向量和历史的动作,逐步生成下一步动作。
  1. 编码器输出把图像 $I$ 和指令 $L$ 映射成统一特征表示 $h$。
    h=Encoder(I,L)\displaystyle h = \text{Encoder}(I, L)
  2. 解码器迭代每一步根据特征 $h$ 和之前动作生成新动作。
    at=Decoder(h,a1:t−1)\displaystyle a_t = \text{Decoder}(h, a_{1:t-1})

视觉编码器

导游的眼睛不会一秒把整条街都“看完”,而是先扫视全局,再聚焦到红房子、蓝色椅子这些具体物体上。视觉编码器做的正是这件事:把一张高像素图片压缩成一组紧凑的特征向量,每个向量代表图像上某个区域或某个物体的“视觉含义”。

早期 VLN 模型常用 CNN 作为视觉编码器,像一张网格在图上滑动,提取局部纹理和结构信息;后来研究者引入目标检测器,先把“红房子”“蓝色椅子”这类物体框出来,再逐个编码,得到更语义化的物体级特征。为了提升泛化能力,现代模型还会直接采用在 ImageNet 等大数据集上预训练好的骨干网络,让模型从“见过世面”的初始化开始学。

眼睛看到的一切最终化作一组数字矩阵。但这些数字只是“画面”,导游还得听懂任务单上的话——这就轮到语言编码器登场了。

vi=fcnn(Ii)\displaystyle v_i = f_{\text{cnn}}(I_i)
公式的含义:图像的第 $i$ 个区域(或物体)$I_i$,经过卷积网络 $f_{\text{cnn}}$ 变成一个向量 $v_i$,这个向量保留了该区域的视觉信息。
  1. 图像切分把画面分成多个区域或检测出多个物体。
    Ii\displaystyle I_i
  2. 卷积提取每个区域经过卷积网络处理。
    fcnn(Ii)\displaystyle f_{\text{cnn}}(I_i)
  3. 输出特征得到一个可供后续模块使用的向量。
    vi\displaystyle v_i

语言编码器

导游耳朵里听到的不是一段录音,而是一句有结构的指令:“向右走,到红房子左转。”语言编码器的任务,就是把这句话里每个词转成向量,再把这些词向量汇聚成一个代表整句语义的向量。词与词不是孤立的——“红”和“房子”要组合起来才是一个完整的地标概念。

早期方法用 RNN/LSTM 逐词读取指令,像导游顺着句子一个字一个字听下去,靠内部的隐藏状态累积语义;后来 Transformer 成为主流,它并行处理所有词,并用自注意力捕捉词与词之间的长距离关系——比如“左转”真正修饰的对象可能隔了好几个词。无论哪种结构,最后都要输出一个(或一组)语义向量,供后续与视觉特征对齐。

耳朵听懂了,眼睛也看到了,但两者怎么配对?比如指令说“蓝色椅子”,画面里恰好有三张椅子,哪张是蓝色的?导游需要一种能力——把注意力精准地投向正确的位置。

hl=Enclang(w1,w2,…,wn)\displaystyle h_l = \text{Enc}_{\text{lang}}(w_1, w_2, \dots, w_n)
语言编码器把 $n$ 个词编码成语义向量 $h_l$,它是整条指令在模型内部“心里的那句话”。
  1. 词序列输入指令由 $n$ 个词组成,每个词转成词向量。
    w1,w2,…,wn\displaystyle w_1, w_2, \dots, w_n
  2. 序列编码RNN 或 Transformer 按顺序(或并行)处理这些词。
    Enclang(w1,w2,…,wn)\displaystyle \text{Enc}_{\text{lang}}(w_1, w_2, \dots, w_n)
  3. 语义输出得到整条指令的压缩表示。
    hl\displaystyle h_l

注意力机制

设想导游站在岔路口,任务单上写着“走向蓝色椅子”。此刻他的目光不会平均扫过所有物体,而是先锁定画面里所有蓝色的东西,再和“椅子”这个语义比对,最后把注意力集中在目标上。这就是注意力机制:它让模型在每一步都学会“该看哪里、该关注指令里的哪个词”。

在 VLN 中,注意力机制的核心是跨模态对齐。视觉特征和语言特征分别被投射成 Query(我要找什么)、Key(我有什么)、Value(我的信息内容)。模型用“问题”去匹配“钥匙”:如果视觉区域的特征与指令中某个词的语义越匹配,打分就越高,softmax 归一化后,该区域获得更大的加权权重,最终把加权后的视觉信息当作“当前最该关注的环境状态”。

注意力机制让模型每次只“盯住”关键信息,同时整个过程可解释——研究者能画出注意力热力图,看模型到底在关注什么。对齐做好之后,真正的挑战来了:下一步,脚该往哪迈?

Attention(Q,K,V)=softmax(QK⊤d)V\displaystyle \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d}}\right)V
这条公式是注意力机制的“心脏”:先算相关性($QK^\top$),再缩放($\sqrt{d}$)防止数值过大,然后归一化成权重,最后按权重聚合信息。
  1. 计算匹配分数用 Query 与每个 Key 做点积,得到相关性分数。
    QK⊤\displaystyle QK^{\top}
  2. 维度缩放除以 $\sqrt{d}$,防止向量维度大时分数爆炸。
    QK⊤d\displaystyle \frac{QK^{\top}}{\sqrt{d}}
  3. 归一化权重softmax 将分数变成总和为 1 的权重分布。
    softmax(QK⊤d)\displaystyle \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d}}\right)
  4. 加权聚合按权重把 Value 混合成最终输出。
    softmax(QK⊤d)V\displaystyle \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d}}\right)V

导航解码器

导游想好了目标,但迈出哪条腿、走多远,还得看路况和任务进度。解码器就是负责“迈步子”的模块。它接收注意力融合后的特征向量以及历史动作信息,输出一个动作概率分布——比如“向前走 0.6、左转 0.3、停止 0.1”——模型按概率采样或取最大值作为当前步动作。

导航解码器通常是一个循环神经网络。它维护一个内部状态 $h_t$,每走一步就更新一次,相当于导游脑中的“当前位置感”。这种记忆对导航至关重要:模型必须知道“我已经走过红房子了”,才不会在原地绕圈。解码器最后还会输出一个特殊的停止信号,告诉系统“任务完成,不用再走了”。

从“看懂”到“走对”,解码器把一切信息转化为行动。但一个新导游怎么学会这些?就像人类导游要经过培训、带团实践,VLN 模型也需要一套训练策略来调教。

P(at∣ht)=softmax(Wht+b)\displaystyle P(a_t \mid h_t) = \text{softmax}(W h_t + b)
解码器把当前导航状态 $h_t$ 通过一个线性映射 $W h_t + b$ 变成每个动作的打分,再用 softmax 转成概率。
  1. 导航状态解码器内部状态 $h_t$ 汇总了注意力特征与历史信息。
    ht\displaystyle h_t
  2. 线性打分用权重 $W$ 和偏置 $b$ 给每个候选动作打分。
    Wht+b\displaystyle W h_t + b
  3. 概率化softmax 把打分数变成概率分布,供采样或取最大。
    softmax(Wht+b)\displaystyle \text{softmax}(W h_t + b)

训练策略

新导游不可能天生知道“蓝色椅子”长什么样、该怎么拐弯。旅行社培训导游通常分几步:先让资深导游带着走几遍(模仿学习),再放手让新人独立带团、走错了扣绩效(强化学习),上岗前还要去总部强化训练(预训练微调)。VLN 模型的训练策略也是这三板斧。

模仿学习最直观:数据集里记录着专家(人或仿真器)走的轨迹,模型直接学习“专家在某个画面下会做什么动作”,用交叉熵损失度量模型预测与专家动作的差距。强化学习则让模型自己试错:走对了给正奖励,撞墙、迷路给负奖励,在探索中优化策略。实际中两者常结合——先用模仿学习快速起步,再用强化学习精调,同时用预训练的视觉/语言骨干让模型从更好的起点出发。

训练完成的导游千千万,带团风格却各不相同——有的导游喜欢把所有信息混在一起记,有的喜欢分门别类记。VLN 模型也有不同的架构流派。

L=−∑t=1Tlog⁡P(at∗∣I,L,a1:t−1)\displaystyle \mathcal{L} = -\sum_{t=1}^{T} \log P(a_t^* \mid I, L, a_{1:t-1})
这是模仿学习常用的损失函数:$a_t^*$ 是专家在第 $t$ 步的真正动作,模型预测越接近专家,损失越小。
  1. 专家动作$a_t^*$ 是训练数据里专家在时刻 $t$ 的动作。
    at∗\displaystyle a_t^*
  2. 预测概率模型给出当前条件下做出该动作的概率。
    P(at∗∣I,L,a1:t−1)\displaystyle P(a_t^* \mid I, L, a_{1:t-1})
  3. 负对数求和对所有时刻取负对数损失并求和,最小化它等于最大化预测概率。

架构对比

旅行社里有两类导游:一类新人导游喜欢把所有资料贴在同一本笔记本上,边看边写(单流架构);另一类资深导游习惯把地图和客户资料分开整理,需要时再对照(双流架构)。这两种风格在 VLN 里各有拥趸。

单流架构把图像的 patch 和指令的词 token 拼接在一起,送进同一个 Transformer 编码器。好处是视觉和语言从第一层就开始交互,融合得非常早,参数也更紧凑;缺点是输入序列长,计算开销大。双流架构让视觉编码器和语言编码器各自独立处理,只在某个中间层通过注意力做跨模态融合。好处是两种模态各自的特征更纯粹,可以分别用大规模预训练模型初始化,灵活性高;缺点是交互时机晚,早期层之间互不知晓。

无论是单流还是双流,都是为了让“AI 导游”更快更准地带客人到达目的地。选哪种架构,取决于你要带的是什么样的团、走的是什么样的路。

y=ffuse(gvis(I), glang(L))\displaystyle y = f_{\text{fuse}}\left( g_{\text{vis}}(I),\, g_{\text{lang}}(L) \right)
双流架构的抽象表示:视觉、语言分别用 $g_{\text{vis}}$、$g_{\text{lang}}$ 编码,再通过融合函数 $f_{\text{fuse}}$ 交互;单流则是把输入直接拼接后统一编码。
  1. 视觉编码视觉编码器 $g_{\text{vis}}$ 将图像变为特征。
    gvis(I)\displaystyle g_{\text{vis}}(I)
  2. 语言编码语言编码器 $g_{\text{lang}}$ 将指令变为特征。
    glang(L)\displaystyle g_{\text{lang}}(L)
  3. 融合决策融合函数 $f_{\text{fuse}}$ 决定两者如何交互。
    ffuse(gvis(I), glang(L))\displaystyle f_{\text{fuse}}\left( g_{\text{vis}}(I),\, g_{\text{lang}}(L) \right)

AI 应用场景

场景 1:商场导购机器人

阶段:多模态输入编码 → 跨模态对齐 → 导航动作解码

解决的问题:传统导购机器人只能按固定路线巡游,顾客问“我在找三楼的女装区”时无法理解。VLN 架构让机器人先编码顾客语音转成的文本指令,再编码周围环境的摄像头画面,通过注意力机制把“三楼女装区”与画面中的扶梯、楼层标识对齐,最后解码出前往扶梯的导航动作。

具体案例:某商场部署的导购机器人接收到顾客语音“带我去奶茶店”,视觉编码器识别出面前的扶梯和指示牌,注意力机制将“奶茶店”与记忆地图中的店铺位置匹配,解码器输出“直行 5 米后左转乘扶梯上楼”的动作序列,最终顺利带顾客抵达。

场景 2:仓储物流 AGV 指令导航

阶段:语言编码器解析指令 → 视觉编码器识别货架 → 解码器规划避障动作

解决的问题:传统 AGV 需要预先铺设磁条或二维码,改线路成本高。VLN 架构让工人直接用自然语言下指令(“把 3 号货架的蓝色箱子送到打包台”),AGV 通过语言编码器理解指令,视觉编码器实时识别货架号和箱子颜色,注意力机制动态决定当前该看哪个货架,解码器输出前进、转向、停止等动作来应对动态障碍。

具体案例:某电商仓库使用 VLN 驱动的 AGV,工人语音指令下达后,AGV 在 30 秒内自主穿行三个巷道,准确停在指定货架前,摄像头对准蓝色箱子完成搬运,全程无需改装地面设施。

场景 3:AR 眼镜虚拟导游

阶段:视觉编码器理解画面 → 注意力对齐指示目标 → 解码器生成引导动作

解决的问题:游客在景区看 AR 眼镜,但眼镜不知道游客在看哪、想去哪。VLN 架构让眼镜实时编码游客视野画面,结合游客说的“带我去最近的洗手间”,通过注意力机制锁定画面中的指示牌方向,解码器生成“向右转 45°,直行 20 米”的增强现实箭头。

具体案例:某博物馆 AR 导览应用中,游客说“我想看青铜器展区”,眼镜画面中的展馆地图自动高亮路径,虚拟箭头引导游客穿过长廊,在岔路口注意力机制重新对齐“青铜器”与前方展区标志,更新引导方向。

Python 演示

python76 行
import numpy as np class MiniVLN:    """极简 VLN:视觉编码器 + 语言编码器 + 注意力 + 解码器"""     def __init__(self, vocab_size, feat_dim=25, hidden=32):        self.vocab_size = vocab_size        self.lang_proj = np.random.randn(vocab_size, hidden) * 0.1        self.vis_proj = np.random.randn(feat_dim, hidden) * 0.1        self.decode_w = np.random.randn(hidden, 4) * 0.1     def encode_lang(self, token_ids):        vec = np.mean(self.lang_proj[token_ids], axis=0)        return vec / (np.linalg.norm(vec) + 1e-8)     def encode_vis(self, feats):        return self.vis_proj.dot(feats.T).T     def attend(self, lang_vec, vis_feats):        scores = vis_feats.dot(lang_vec)        probs = np.exp(scores - scores.max())        probs /= probs.sum()        context = vis_feats.T.dot(probs)        return context, probs     def decode(self, context):        logits = self.decode_w.T.dot(context)        logits = logits - logits.max()        probs = np.exp(logits)        return probs / probs.sum()     def forward(self, token_ids, vis_feats):        lang_vec = self.encode_lang(token_ids)        vis_vecs = self.encode_vis(vis_feats)        context, attn = self.attend(lang_vec, vis_vecs)        probs = self.decode(context)        return probs, attn     def train_step(self, token_ids, vis_feats, target, lr=0.2):        probs, attn = self.forward(token_ids, vis_feats)        grad = probs.copy()        grad[target] -= 1.0        lang_vec = self.encode_lang(token_ids)        vis_vecs = self.encode_vis(vis_feats)        context, _ = self.attend(lang_vec, vis_vecs)        self.decode_w -= lr * np.outer(context, grad)  def build_vis_feats(grid_size=5):    feats = []    for x in range(grid_size):        for y in range(grid_size):            f = np.zeros(grid_size * grid_size)            f[x * grid_size + y] = 1.0            feats.append(f)    return np.array(feats)  def main():    np.random.seed(0)    vocab = {"去": 0, "右边": 1, "角落": 2, "停": 3}    token_ids = np.array([vocab["去"], vocab["右边"], vocab["角落"]])    vis_feats = build_vis_feats(5)    model = MiniVLN(vocab_size=len(vocab), feat_dim=25)     target = 1  # 动作 1 = 向右    print("训练前:", model.forward(token_ids, vis_feats)[0].round(3))    for _ in range(200):        model.train_step(token_ids, vis_feats, target)    probs, attn = model.forward(token_ids, vis_feats)    print("训练后:", probs.round(3), " 目标动作概率:", round(probs[target], 3))    print("注意力分布:", attn.round(3))  if __name__ == "__main__":    main()
目的:用纯 NumPy 实现一个微型 VLN 模型,演示“视觉编码 → 语言编码 → 注意力对齐 → 解码动作”的完整前向流程,并用简化梯度更新训练模型,让“向右走”的动作概率上升。
  1. self.lang_proj[token_ids]查词向量表,把指令中的词变成稠密向量
  2. np.mean(..., axis=0)对所有词向量取平均,得到整句指令的语义向量
  3. scores = vis_feats.dot(lang_vec)计算每个视觉位置与指令语义的匹配分数
  4. probs = np.exp(scores - scores.max()); probs /= probs.sum()softmax 归一化成注意力权重
  5. context = vis_feats.T.dot(probs)按注意力权重加权求和,得到上下文向量
  6. logits = self.decode_w.T.dot(context)解码器用当前上下文给每个动作打分
  7. grad[target] -= 1.0构造交叉熵的简化梯度:目标位置减 1
  8. self.decode_w -= lr * np.outer(context, grad)梯度下降更新解码权重

常见误区

误区“视觉语言导航不就是导航软件吗?给机器人装个 GPS,再喂一张地图,它就能找到路了。”

正解VLN 的核心难点恰恰在于“没有现成地图”。模型必须从第一视角图像中实时理解环境,并把自然语言指令与视觉内容对齐。GPS 提供的是绝对坐标,而 VLN 里的“红房子”“左转”是语义概念,需要模型具备跨模态理解能力。就像导游不能只看地图坐标,他要能认出“那座红房子”才行。

为何常见:因为日常接触的导航软件太普及,人们容易把“导航”等同于“路径规划”,忽略了 VLN 中语言理解和视觉感知这两大核心。

误区“注意力热力图显示模型在关注某个地标,那就说明它真正理解了指令和画面的关系。”

正解注意力权重是可解释性的辅助工具,并非模型理解的完整证据。权重高只代表“计算上相关”,不保证语义上正确。有时模型会学到投机取巧的模式,比如总是关注画面中心区域。真正的理解需要通过导航成功率、路径长度等任务指标来验证。就像导游目光停在某个店铺招牌上,不代表他真的知道该往哪走。

为何常见:注意力热力图直观、好看,人脑天然倾向于用可视化结果推断模型“思考过程”,但模型内部的实际表征比热力图复杂得多。

误区“反正编码器就是提取特征,解码器就是输出动作,两个模块分开训练,最后组装起来不就行了?”

正解VLN 的关键在于跨模态对齐,而这个对齐能力必须在联合训练中才能学到。单独训练的视觉编码器不懂“蓝色”这个语义对应什么像素模式,单独训练的语言解码器也不懂如何把“左转”映射成动作。它们必须在同一个任务目标下协同优化,让特征空间逐渐对齐。就像导游的眼睛和耳朵要在一次次带团中配合默契,而不是各自培训后直接上岗。

为何常见:深度学习里很多模块确实可以独立预训练再微调,人们容易把这种范式推广到所有架构,忽略了 VLN 特有的模态对齐需求。

误区“环境信息才是导航的关键,语言指令就那么几个词,随便处理一下就行。”

正解语言指令是 VLN 的任务定义本身,它决定了导航目标和路径约束。没有指令,“走到蓝色椅子旁”和“走到喷泉边”就是完全不同的任务。语言编码器的质量直接影响导航表现——指令中“红房子前左转”与“在红房子旁左转”的细微差别,需要模型精确捕捉。这就像导游如果把“左转”听成“右转”,整个团就带偏了。

为何常见:视觉信息占画面比例大,人更容易被“看得见”的信息吸引,忽略了语言指令作为任务输入的源头作用。

面试题

Q1. 在视觉语言导航(VLN)中,模型的主要输入是什么?

单选题 · easy

  • A.仅有视觉图像
  • B.仅有语言文本
  • C.图像加语言指令← 正确答案
  • D.音频加视频数据

答案:C。VLN 的任务定义是“根据自然语言指令在视觉环境中导航”,所以输入必须同时包含图像和指令文本。选项 A 只有图像、B 只有文本都缺了另一半;D 的音频视频属于其他多模态任务。

Q2. VLN 架构中“编码器”主要负责什么?

单选题 · easy

  • A.解码导航动作
  • B.提取多模态特征← 正确答案
  • C.规划最短路径
  • D.执行底层控制

答案:B。编码器把视觉图像和语言指令转换成特征向量,是“看懂画面、听懂指令”的模块;动作解码由解码器负责,路径规划和底层控制属于下游环节,不是编码器的职责。

Q3. 跨模态注意力机制在 VLN 中起到什么作用?

单选题 · mid

  • A.压缩图像分辨率
  • B.视觉语言特征对齐← 正确答案
  • C.加速模型推理
  • D.扩充训练数据量

答案:B。跨模态注意力的核心是让视觉区域与指令中的词汇互相打分匹配,找出“指令说的东西在画面哪里”。A 是图像预处理任务,C、D 与注意力机制的功能无关。

Q4. VLN 中常见的视觉特征提取方式有哪些?

多选题 · mid

  • A.卷积网络提取特征← 正确答案
  • B.目标检测器定位物体← 正确答案
  • C.随机噪声生成图像
  • D.预训练骨干提取特征← 正确答案

答案:ABD。CNN 和预训练骨干网络(如 ImageNet 预训练模型)用于提取全局视觉特征,目标检测器提供物体级别的区域特征。随机噪声不包含图像语义信息,不能用于特征提取。

Q5. 哪种解码结构更适合建模导航过程中的历史信息?

单选题 · mid

  • A.多层全连接网络
  • B.循环神经 LSTM← 正确答案
  • C.单层线性感知机
  • D.随机森林分类器

答案:B。导航是序列决策任务,LSTM 的隐状态能在时间维度上累积“走过哪里”的记忆;全连接网络和感知机没有时序建模能力,随机森林是静态分类器,都不适合建模历史信息。

Q6. 为什么 VLN 训练常采用模仿学习?

单选题 · hard

  • A.专家示范轨迹易得← 正确答案
  • B.完全无需视觉特征
  • C.可以有效防止过拟合
  • D.可完全替代强化学习

答案:A。VLN 数据集通常由专家在真实或仿真环境中走出的轨迹构成,模仿学习直接拟合这些轨迹,训练稳定。B 错误因为模仿学习同样需要视觉输入;C、D 不符合事实,强化学习的探索和奖励信息是模仿学习难以完全替代的。

Q7. 关于单流与双流架构,以下说法正确的有?

多选题 · hard

  • A.先融合再统一编码← 正确答案
  • B.分别编码再融合← 正确答案
  • C.单流双流架构等价
  • D.单流交互发生更早← 正确答案

答案:ABD。单流把图像和文本拼接后送进同一模型,交互发生在第一层;双流各编码各的,在后期才融合。两者各有利弊、并不等价,因此 C 错误。

Q8. 注意力公式中除以 √d 的主要目的是什么?

单选题 · easy

  • A.能够加速模型训练过程
  • B.防止点积过大损害梯度← 正确答案
  • C.增加神经网络的参数量
  • D.降低计算精度要求

答案:B。向量维度 d 越大,Query 与 Key 点积的数值越大,softmax 容易进入饱和区导致梯度消失。除以 √d 把分数拉回合适范围。A、C、D 都与缩放操作的实际目的无关。

Q9. VLN 解码器需要输出哪些信号来完成导航?

多选题 · hard

  • A.输出动作概率分布← 正确答案
  • B.输出下一步坐标位置
  • C.输出停止决策信号← 正确答案
  • D.输出图像分割结果

答案:AC。解码器输出离散动作(转向、前进等)的概率分布,并通过特殊的停止信号(类似 EOS token)终止导航;坐标位置通常是动作与环境动力学推导的结果,图像分割是视觉模块的分析产物而非解码器输出。

Q10. VLN 训练中"teacher forcing"策略指的是什么?

单选题 · extreme

  • A.完全无监督自主学习
  • B.用专家动作引导训练← 正确答案
  • C.仅训练视觉编码模块
  • D.只优化语音识别部分

答案:B。teacher forcing 在训练时把专家的真实动作作为解码器下一步的输入,而不是让模型用自己上一步的预测继续生成,这样可以防止误差在序列中累积,是模仿学习在序列生成中的标准做法。其他选项描述的训练方式均与 teacher forcing 无关。