Order Matters:面向集合的序列到序列
Oriol Vinyals 等 · arXiv 2015 · 处理「没有天然顺序」的输入——集合
Ilya 为什么选它
序列模型吃顺序,可世界上很多数据没有天然顺序:一袋数字、一桌菜、一堆商品。把它们硬按某个顺序念给模型听,模型学到的本事里就掺进了「念法」这个与任务无关的因素——念法一变,成绩就抖。这篇论文把「顺序污染」问题摆上台面,并给出一种让模型自己决定怎么读的方案。
它与 i18 是同一团队(Oriol Vinyals 等)的前后脚工作,思想一脉相承:i18 解决「输出怎么指回输入」,这一篇解决「输入怎么读进来」。两篇合起来,是书单里早期围绕「结构化输入怎么处理」最清晰的两次思考,也为后来处理集合与图的各种模型埋下了思路源头。
从生活说起
老师统计全班的总分:点名册按座位念也好,按成绩念也好,按姓氏拼音念也好,念的顺序五花八门,但该加出来的总分是同一个数。顺序是「念法」,不是「事实」——事实是这一袋数字加在一起是多少。换任何一种念法都该得到同一个答案,这才叫算得对。
可 seq2seq 模型(序列到序列模型,Seq2Seq)天生把「念法」当「事实」:输入是一个序列,先念谁、后念谁会影响它内部的计算路径。于是出现怪事——同一组数字,按一种顺序念出来求和是对的,换个顺序再念,答案就乱跳。这篇论文要教模型学会一件听起来简单的事:随便从哪个开始念,结果都该一样。就像那个班级总分,不管点名册怎么排,分数不许变。
核心思想拆解
问题设定很简单:给模型一组数字让它求和,答案与念的顺序无关;但 seq2seq 结构天生吃顺序,念法一变,内部状态走的路就变,结果跟着乱跳。数数(数一数这堆元素有几个)、排序等任务上有同样的毛病。根源在于:输入本身是集合(Set),没有天然顺序,却被硬塞进序列模型这条「独木桥」——桥的宽度就成了能力的上限。
论文的解法是给输入加一种「读法」模块,叫 read-up:不再人为规定顺序,而是按内容相关度取用每个元素——模型自己决定关注谁、关注多少。直观地说,读入不再是一条排队前进的队伍,而变成一次「点名后的自由浏览」:每个元素按它自身的内容被赋予关注度,谁与当前任务相关,谁就被多看一眼。顺序因素从源头上被绕开了,模型不必再把念法当成要学的东西。
效果上,论文在数数、排序等任务上取得了稳定提升。更长远的价值是提出了一种自觉:「输入的结构决定读法」——集合就该有集合的读法,不能永远套用序列的读法。这个自觉后来长成了处理集合与图结构的一整条研究脉络,书单里的 i21、i22 都在这条延长线上。
动手算一算
先看「顺序不该影响答案」:三个数 2、3、7。按 2+3+7 算是 12;按 7+2+3 算还是 12;按任何顺序算都是 12——加法交换律保证总分不变。再看模型的毛病:把「2, 3, 7」和「7, 2, 3」分别喂给一个按顺序读入的模型,读第一个数时它的内部状态就已经分岔——一个从「看到 2」出发,一个从「看到 7」出发。学得不扎实时,两条路可能一个通向 12,另一个通向别的数。
read-up 的读法用小例子感受一下:模型读入时不排队,而是对每个元素按内容打关注度。比如当前任务是求和,三个元素各分到 40%、35%、25% 的关注度,随后每个元素带着自己的关注度进入计算。关键在于:你把输入顺序调换,各元素的内容没变,各自分到的关注度也不变——2 还是那个被关注 40% 的 2。顺序从「必经之路」变成了「无关变量」,答案自然稳了。整套算术只有加法和百分比。
它改变了什么
这篇论文把「集合输入」变成一个正经的研究问题,也把 seq2seq 的适用边界划得更清楚:序列归序列,集合归集合。它给出的「让模型自己决定怎么读输入」的思路,与 i18 的「让输出指回输入」一起,构成了处理结构化输入的早期双支柱。
系列内相关阅读:同团队、同主题的前一篇是 i18 指针网络;继续讨论「没有顺序、只有关系」的输入,见 i22 关系推理模块;而把「按内容相关度取用元素」发展成通用机制的,是后来的 i16 Attention Is All You Need。