人类的心智是如何处理时间的?这个问题看似简单,却又无比复杂。我们所做的许多事情——从理解一段旋律、接住一个球到进行一次对话——都依赖于随着时间推移处理事件序列的能力。
语言尤其如此,它就像一条信息之河在时间中流动。一个句子的含义不仅取决于词语本身,还取决于它们的顺序。**“狗咬人”是平常新闻;“人咬狗”**就是头条新闻。
对于早期的人工智能与神经网络研究者来说,这个序列顺序问题是一个重大障碍。大多数模型被设计用来处理静态数据 (例如一张图片) 并对其分类。然而,你该如何赋予一个网络历史感?它怎样才能理解当前看到的内容与刚才看到的内容是相互关联的?
早期一个常见的“取巧”方法是将时间表示为空间。比如,把一部电影的每一帧并排铺开,再试图一次性通过观看这幅巨大的马赛克来理解剧情。这种“空间表示”在短的、固定长度的序列中或许可行,但笨拙又脆弱: 它需要庞大的输入层,无法处理可变长度的序列 (如句子) ,也难以识别只是时间上平移了的同类模式。
1990年,Jeffrey L. Elman 在 Cognitive Science 杂志发表了一篇里程碑式论文,题为 Finding Structure in Time (在时间中寻找结构) 。他通过一个极其简单的架构改动,为标准神经网络赋予了某种形式的记忆。这种网络——如今被称为简单循环网络 (Simple Recurrent Network,SRN) 或Elman 网络——不仅能处理序列,还能发现其中隐藏的结构。仅仅通过学习预测句子中的下一个词,Elman 的网络便自学了语法的基本构件,从零开始发现了“名词”“动词”等概念。
本文将带你深入探索这一经典工作。我们将解析 SRN 背后的精巧思想,回顾 Elman 为测试其极限而设计的一系列聪明实验,并揭示这项研究如何为当今主导性的序列模型——如 LSTM 和 Transformer——奠定了基础。
一个有记忆的网络
在 Elman 之前,已有研究者在探索循环结构。1986年,Michael Jordan 提出了一个网络架构,将网络的输出在下一时间步反馈到一组特定的“状态单元”中。
图 1: Jordan (1986) 提出的架构。某一时间步的输出被用作下一时间步的上下文。这是 Elman 模型的重要前身。
这种反馈使得网络的下一步动作能够受到先前动作的影响——对于如运动控制这样的任务,这是关键的一步。
Elman 对这一思想做了一个微妙而深刻的改变: 他反馈的不是网络的*输出 (即显性的动作) ,而是它的内部状态 *(即“思想”) 。
下面展示的简单循环网络 (SRN) 与标准的前馈网络几乎完全相同,只多了一个组件:** 上下文单元 (context units)** 。
图 2: SRN 的关键创新在于反馈回路: 时间 t 的隐藏层激活被复制到上下文单元,成为时间 t+1 输入的一部分。
它的工作原理如下:
- 在时间 \(t\),一个输入 (例如一个代表单词的向量) 被送入输入单元。
- 输入单元与上下文单元共同激活隐藏单元,形成网络对输入的内部表示。
- 隐藏单元激活输出单元,产生结果。
- 在下一个周期开始之前,隐藏层的激活模式被一对一复制回上下文单元。
上下文单元充当网络的短期记忆。在任意时刻,隐藏层不仅能够感知当前输入,还能接收它在前一时刻的激活快照。这意味着,网络对输入的内部表示始终受到过去信息的影响。时间被内嵌于处理过程之中,而不是一个需要单独管理的外部维度。
在训练中,Elman 使用了一个强力的学习信号:** 预测**。在每一个时间步,网络必须预测序列中的下一个元素。要预测明天,首先要理解今天。
从简单节奏到隐藏规则
Elman 在多个任务上测试了他的网络,每一个任务都比前一个更复杂,以检验这种简单的记忆机制能否揭示更抽象的结构。
实验 1: 时间异或
异或 (XOR) 问题是经典的基准测试: 给定两个比特,若它们不同输出 1,相同则输出 0。
Elman 构造了一个时间版异或,生成一个连续比特流,其中每第三个比特是前两个比特的异或。例如:
1, 0 → 1
0, 0 → 0
1, 1 → 0
形成的数据流为: 1, 0, 1, 0, 0, 0, 1, 1, 0 ...
。网络每次只接收一个比特,任务是预测下一个比特。
图 3: 时间异或任务的平均预测误差。在每第三个比特 (可预测) 处,误差下降,表明网络学会了这种依赖关系。
这种高-高-低的周期性误差模式显示网络已掌握 XOR 规则: 前两个比特不可预测,第第三个 (异或) 比特可预测。重要的是,依靠上下文单元提供的记忆,SRN 足以解决这一需要回溯两步的问题。
实验 2: 在人造词汇中寻找结构
接着,Elman 创建了一种由辅音 (b, d, g
) 和元音 (a, i, u
) 组成的迷你语言。每个字母用一个 6 比特特征向量表示。
表 1: 人造字母表,每个字母由六个类似音素的二进制特征定义。
规则定义为:
b → ba
d → dii
g → guuu
随机生成的辅音序列按此规则扩展,得到类似 diibaguuubadi...
的数据流。
SRN 每次读取一个字母,并预测下一个字母。
图 4: 预测误差随时间的变化。不可预测的辅音处出现峰值;可预测的元音序列处出现低谷。
这种模式合理: 辅音随机出现,元音紧随其后,具有可预测性。但更深刻的洞见来自于按特征分析的误差。
图 5(a):
辅音性
(Consonantal) 特征 (比特1) 的误差始终较低——在元音之后,网络可可靠预测下一个是辅音。
图 5(b):
高元音
(High) 特征 (比特4) 的误差在预测辅音时出现峰值,因为这些辅音在此特征上有所不同。
这表明 SRN 不只是记忆序列,它还掌握了有关特征的抽象规则,能够依据结构规律性进行部分预测。
实验 3: 从连续文本中发现“单词”
在口语中,单词之间是没有空格分隔的。为模拟这一点,Elman 将简单句连接成一串长长的字母流,没有空格和标点。网络的任务是预测下一个字母。
图 6: 字母预测任务中的误差变化。峰值常对应单词边界,可预测性在此最低。
误差峰值与单词边界对齐: 单词开头不可预测性最高,随着单词展开,可预测性增加。这提示误差信号可以成为学习分词的线索——即便从未显式告知“单词”是什么。
压轴大戏: 从词序中学习语法
最后,Elman 让网络处理完整单词。他建立了简单语法,用 29 个词的词汇生成数千个短句。
表 3: 语法所用的词汇类别。网络从未见过这些标签——它必须自行推断。
表 4: 规定了词序的句子模板。
每个词被随机分配一个独热向量 (one-hot vector) ,没有任何内在相似性。man
与 woman
在原始表示中与 rock
或 eat
一样毫无关联。分组必须来自它们在句子中的分布。
训练网络预测连接句流中的下一个词后,它为每个词形成了隐藏层内部表示。Elman 将这些表示在不同上下文中取平均 (得到类型级表示) ,并进行层次聚类。
图 7: 网络的概念地图。单词按语法和语义角色分组——完全通过预测学习得出。
该树的结构惊人地贴近语言学:
- 首次分裂:** 名词** vs 动词
- 名词分为有生命 vs 无生命;有生命的再分为人类 vs 动物。
- 动词按句法行为划分: 及物动词、不及物动词、可选宾语动词。
SRN 仅凭分布统计就能推断语法的关联特性。
类型、实例与上下文
图 7 展示的是类型: 即不同上下文中多个实例的平均表示。但 SRN 的表示总是与先前上下文密切相关。因此,“boy chases…”中的 boy
与“…chases boy”中的 boy
是不同的。
图 9:
BOY
和GIRL
的单个实例按句中位置和前文上下文进行聚类。
实例根据情境相似性聚类——例如句首 vs 句末——反映了上下文如何塑造词的表示。
为强调这一点,Elman 引入了一个新词:** zog
**。他将 zog
插入所有 man
可以出现的位置,并将这些句子输入训练好的网络 (未重新训练) 。
图 8: 新词
ZOG
被归入人类名词,位于MAN
旁——完全基于上下文用法。
网络将 zog
分类为人类名词,这与它在句子中的分布一致——这正是人类依靠上下文推测新词意义的方式。
结论: 一个简单思想的遗产
在时间中寻找结构 证明了:
- 时间可隐式表示在网络的内部状态中,无需依赖空间化的取巧方法。
- 预测是强大的训练信号,迫使网络捕捉时间结构。
- 语法类别可从分布模式中涌现,无需显式规则。
- 表示既可具备范畴性又可具上下文敏感性,能自然区分类型与实例。
SRN 是现代循环架构 (如 LSTM 和 GRU) 的始祖。如今的 Transformer 虽以不同方式解决序列问题,但依旧面临同一关键挑战: 如何将上下文融入每个元素的表示中。
Elman 的这一简洁改动,为神经网络赋予了内在的声音,能够记忆、预测并抽象。这是迈向教会机器不仅看,还能理解事件流——即体验本质——的重要一步。