顺序很重要:把序列到序列模型扩展到集合
Order Matters: Sequence to sequence for sets
- 作者
- Oriol Vinyals, Samy Bengio, Manjunath Kudlur
- 依据版本
- arXiv v4
- 30u30 单元
- 16_order_matters(讲解、实现与练习请到原仓库查看,本站不翻译、不改编,见导读)
本页目录(17)
一句话总结#
数据没有天然顺序时,喂给模型和让模型输出的顺序依然会影响学习效果;输入集合可以用“反复注意力读取”来得到与顺序无关的编码,输出集合可以让模型在训练中自己挑一个好学的顺序。
解决什么问题#
seq2seq 框架用链式法则把输出序列的联合概率拆成逐个生成:
P(Y | X) = ∏_t P(y_t | y_1, …, y_{t−1}, X)
编码器 RNN 逐个读入 x,解码器 RNN 逐个生成 y。数据本身是序列(比如句子)时,这样做很自然。但很多问题的输入或输出其实是集合:
- 排序任务的输入是一组数字,应该按什么顺序读进去?
- 图片里检测到的物体没有固定顺序,应该按什么顺序输出?
- 一组随机变量的联合分布,应该按什么顺序套用链式法则?
论文有两个目标:先用实验说明“即使没有天然顺序,也可能存在一个效果更好的顺序”,即顺序很重要;再分别给出处理输入集合和输出集合的方法。
核心思想#
1. 输入顺序会影响结果#
论文先汇总了此前的观察:
- 机器翻译中把英文源句倒过来输入,Sutskever 等人(2014)得到 5.0 BLEU 的提升。
- 成分句法分析中同样倒序输入,F1 绝对提升 0.5%。
- 凸包任务中先把点按角度排序,问题从 O(n log n) 变成 O(n),模型训练更快、更准,最难的情况下准确率最多提高 10 个百分点。
RNN 理论上是通用逼近器,顺序不该有影响。作者认为原因在于非凸优化,以及某些顺序提供了更合适的先验。
2. 读取—处理—写出(Read-Process-and-Write)#
输入是集合时,编码必须满足:交换任意两个元素,表示不变。最简单的做法是把各元素的嵌入相加(词袋),但作者认为这样不论集合多大都只用固定维度的向量,表示能力有限:编码长度为 T 的集合所需的记忆应该随 T 增长。
论文的结构分三块:
- 读取:同一个小网络把每个元素 x_i 嵌入成记忆向量 m_i。
- 处理:一个没有输入也没有输出的 LSTM,做 T 步计算,每步用基于内容的注意力读一遍全部记忆。因为注意力读出的是加权和,打乱记忆的顺序不改变读出结果,所以最终状态与输入顺序无关。
- 写出:一个指针网络(见 Day 18),每步指向一个输入元素。作者还在每次指向之前加了一次额外的注意力读取,称为 glimpse。
作者指出这个结构可以看成神经图灵机或记忆网络的一个特例。
3. 输出顺序也会影响结果#
- 语言建模(PTB):按自然顺序和完全倒序训练,验证集困惑度都是 86;把每 3 个词倒过来这种打乱结构的顺序,困惑度升到 96,训练困惑度也高 10 点。
- 句法分析:把句法树按深度优先线性化,F1 89.5%;按广度优先,F1 只有 81.5%,而且解码器常常生成不合法的树。
- 组合问题:排序的输出如果允许任意 n! 种排列,模型就得把概率平均分给所有等价答案,统计效率很低;n 只有 5 时也达不到固定顺序的效果。
- 图模型:构造“星形”随机变量组(一个中心变量,其余都依赖它)。训练数据足够多(20000)或分布几乎确定时,哪种顺序都学得会;其余情况下,先输出中心变量总是更容易学。
4. 训练时搜索输出顺序#
既然存在更好学的顺序,就让模型在训练中自己选:
θ* = argmax_θ Σ_i max_{π(X_i)} log p(Y_{π(X_i)} | X_i; θ)
直接取最大值有两个问题:n! 太大;而且模型会锁死在初始化时偶然偏好的顺序上,因为训练会不断强化它。作者的办法:
- 先用均匀分布的顺序预训练 1000 步(把 max 换成对所有顺序求和);
- 之后按与
p(Y_π | X)成正比的概率采样一个顺序,用祖先采样只需评估一次模型,代价从 O(n!) 降到 O(1)。
关键公式或机制#
处理块的注意力(论文式 3–7)#
q_t = LSTM(q*_{t−1})e_{i,t} = f(m_i, q_t)(如点积)a_{i,t} = softmax_i(e_{i,t})r_t = Σ_i a_{i,t} m_iq*_t = [q_t, r_t]
排序实验(论文表 1)#
任务:给 N 个 0 到 1 之间的随机浮点数,输出排好序的索引;按整体是否全部排对计算准确率。
- 不做处理步骤(P = 0)时,基线(LSTM 编码 + 指针网络)比新结构好;只要允许至少 1 步处理,新结构就反超,且步数越多越好。
- N = 5、带 glimpse 时:基线 90%,P = 10 步 94%。N = 10 时分别是 28% 和 50%(P = 5 步时最高,57%)。N = 15 时所有模型都在 10% 以下。
- glimpse 对基线和新结构都有明显帮助,最难的情况下准确率翻倍不止。
5-gram 顺序搜索(论文表 2)#
把 5 个词带上位置编号变成集合。固定用自然顺序训练,验证困惑度 225;固定用 (5, 1, 3, 4, 2),困惑度 280。让模型在两种顺序中自己选(Easy)或在全部 5! 种中选(Hard),最后困惑度都是 225,Hard 情况下模型停在自然顺序、完全倒序及其小变体上。
图解#
flowchart LR
X["输入集合 x_1 … x_n"] --> R["读取:同一个小网络嵌入成记忆 m_i"]
R --> P["处理:无输入 LSTM,T 步注意力读取全部记忆"]
P --> Q["与顺序无关的表示 q*_T"]
Q --> W["写出:指针网络 + glimpse"]
W --> Y["逐步指向输入元素"]
图解:读取块把每个元素嵌入成记忆,处理块用注意力反复读取记忆得到与顺序无关的表示,写出块用指针网络逐个指向输入元素。
关键原话#
“we show that order matters to obtain the best performance.”
和 Anthropic 笔记的对应#
| Anthropic 笔记 | 对得上的地方 |
|---|---|
| 面向 AI 智能体的上下文工程 | 本文说明,即使信息内容相同,呈现的顺序也会影响模型学得好不好。上下文工程同样关心把什么信息、以什么结构放进上下文,而不只是放进去多少。只是类比:本文讨论训练时的数据顺序,那篇讨论推理时的上下文。 |
| 为智能体编写工具 | 本文发现约束输出的等价类(比如固定从编号最小的城市出发)能显著加快学习。那篇也建议工具的返回格式要清晰、少歧义,让模型更容易用对。 |
读的时候要注意#
- “顺序很重要”主要是经验结论:作者把原因归于非凸优化和参数化方式,没有给出理论证明。
- 论文中的措辞小问题:5-gram 实验里,困惑度从 225 变成 280 是变差,原文却写成“drops”,读的时候以表 2 的数字为准。
- 实现细节当时未公开:论文说读取—处理—写出的精确公式和实现会在附录中给出,arXiv 现行版本中没有找到这个附录(待核实)。
- 排序实验规模很小:N = 15 时所有模型几乎都失败,说明这个结构还远不能真正“学会排序”。
- 后续发展:与顺序无关的集合编码后来在 Transformer 等结构中更常见(待核实:本笔记未打开相关论文,只作提示)。
30u30 对应单元#
延伸阅读#
- Day 18:指针网络:本文写出块直接用了指针网络。
- Day 15:Bahdanau 注意力:基于内容的注意力读取。
- Day 17:神经图灵机:作者把本文结构看成神经图灵机的一个特例。
- Day 13:Attention Is All You Need:后来完全基于注意力的结构。
本笔记依据 2026-10-18 抓取的在线原文撰写,仅为导读与总结。原文:Oriol Vinyals, Samy Bengio, Manjunath Kudlur,《Order Matters: Sequence to sequence for sets》, ICLR 2016。