从计数到可学习状态¶
语言模型的早期演化不是一条按年份首尾相接的直线。统计估计、连续分布式表示和循环状态曾长期并行发展:Elman 的循环网络与 LSTM 分别发表于 1990 和 1997 年,都早于 2003 年的前馈神经概率语言模型。更有解释力的读法,是观察模型怎样在“可靠计数、跨上下文共享和长程记忆”之间移动瓶颈。
有限历史让概率可以估计¶
链式法则本身不限制上下文:
\(n\)-gram 用有限阶 Markov 假设换取可估计性:
最大似然计数对见过的上下文有效,却会给未见组合零概率。Katz backoff 对可靠计数折扣,把剩余概率质量交给更短历史:
\(\alpha(h)\) 负责重新归一化,而不是任意的回退权重。Brown 等人的 class-based \(n\)-gram 进一步让词类共享统计。平滑和聚类缓解了稀疏性,但没有移除固定窗口,也不能让语义相近的词自然共享连续参数。
连续表示让相似历史共享参数¶
Bengio 等人的神经概率语言模型把离散词映射到连续向量,再用前馈网络预测下一个词:
相近词和相近历史可以通过 embedding 与隐藏层共享统计强度,组合不再彼此完全独立。代价也随之变化:上下文仍被窗口截断,词表 softmax 昂贵,网络只会处理训练时定义好的固定长度输入。
循环状态把窗口变成动态记忆¶
Elman 1990 展示了循环隐藏状态怎样保存序列中的动态结构;Mikolov 等人 2010 则把简单 RNN 与经典 backoff 语言模型作了有影响力的语言建模比较:
模型不再显式截断到 \(n-1\) 个词,但“可读取整个历史”和“能可靠保存整个历史”并不是一回事。反向传播包含许多状态 Jacobian 的连乘:
其范数可能迅速消失或爆炸。历史还必须被压进固定维度的 \(h_t\),并沿时间步串行更新。
LSTM 改写梯度路径¶
Hochreiter 与 Schmidhuber 1997 以加性的 cell path 改善长时间间隔上的误差信号。现代常用记号可写为
这里的 \(f_t\) 是后来成为标准组件的 forget gate;它应追溯到 Gers、Schmidhuber 与 Cummins 2000,而不能倒写进 1997 年原始结构。门控让模型学习保留、写入和读出,但没有消除固定状态容量与时间串行。
原始 cell、后来补入的 forget gate 与现代常用方程之间的区别见 LSTM 深读。
瓶颈怎样继续迁移¶
这些路线留下了三种持久思想:
- embedding 把离散符号映射为可共享的连续几何;
- recurrent state 把历史压成可增量更新的有限状态;
- gated update 让模型决定哪些信息应保留或覆盖。
encoder–decoder 随后把 recurrent state 用作条件生成接口,却把整个输入压成一个向量;注意力机制转而保留一张可寻址的状态表。更晚的状态空间与线性注意力又回到有限状态,但用结构化动力学、并行 scan 和输入相关选择重新设计它。
概率分解、困惑度和 tokenizer 口径见语言建模、概率、损失与梯度与分词;可执行递推 reference 见手撕:递推与记忆。