在上一篇文章中我们从整体上介绍了大语言模型的发展路线。大语言模型并不是突然出现的它背后经历了一个长期演进过程统计语言模型↓神经网络语言模型↓RNN / LSTM / GRU↓Seq2Seq↓Attention↓Transformer↓BERT / GPT / T5↓大语言模型如果想真正理解大语言模型不能一上来就只看 GPT、LLaMA、Qwen 或 DeepSeek。我们需要先理解一个更基础的问题为什么早期的 RNN、LSTM、Seq2Seq 结构不够用了为什么后来 Transformer 会成为大语言模型的核心架构这一章我们就沿着这个问题展开。本文不急着深入 Transformer 的完整结构而是先从历史背景出发理解从 RNN 到 Transformer 的技术演进逻辑。一、语言建模最早要解决什么问题语言模型最基本的任务是根据前面的词预测下一个词。例如给定一句话我今天下午准备去模型需要预测后面可能出现上课吃饭图书馆公司从概率角度看语言模型要估计一个文本序列的概率也就是说一个句子的整体概率可以拆成每个 token 在前文条件下出现的概率。对于 GPT 这类自回归语言模型来说核心训练目标就是这就是 next token prediction。问题在于模型如何有效利用前面的上下文早期统计语言模型通常使用 n-gram。比如 bigram 只看前一个词trigram 只看前两个词这种方法简单但上下文窗口太短。例如下面这个句子我昨天在图书馆借了一本关于深度学习的书今天终于把它看完了。这里的“它”指的是“书”。如果模型只看前两个或前三个词很难判断“它”到底指代什么。所以语言建模从一开始就面对一个核心问题如何建模长距离上下文依赖二、RNN按顺序读取文本RNN全称是 Recurrent Neural Network循环神经网络。它的基本思想非常自然既然文本是一个序列那就按顺序一个词一个词地读。假设输入序列为RNN 在第 t 个时间步读取当前输入同时保留前一个时间步的隐藏状态然后更新得到新的隐藏状态​其中​是当前输入 token 的向量表示是上一时刻的隐藏状态是当前时刻的隐藏状态是输入权重矩阵是隐藏状态权重矩阵b 是偏置f 通常是 tanh 或其他非线性激活函数。从直觉上看RNN 的隐藏状态就像模型的“记忆”。例如模型依次读入我 / 今天 / 去 / 学校 / 上课每读一个词隐藏状态就更新一次。理论上最后的隐藏状态可以包含整个句子的历史信息。RNN 的优势是明显的它适合处理变长序列它可以复用同一套参数它能够逐步积累上下文信息所以在早期 NLP 任务中RNN 曾经非常重要。但是RNN 也有一个非常关键的问题它必须按顺序计算。也就是说要计算必须先算出要算出必须先算出计算链条是h1 → h2 → h3 → ... → hn这导致 RNN 很难充分并行。对于短句子这个问题不明显但对于大规模语料和超长文本顺序计算会严重限制训练效率。1、RNN 的第一个问题长距离依赖困难RNN 理论上可以记住所有历史信息但实际上很难。原因在于信息需要通过隐藏状态一步一步传递。假设一个句子很长小明昨天在书店买了一本关于人工智能发展历史的书回家之后认真读了很久最后发现它非常有启发。这里的“它”指的是前面的“书”。如果模型要正确理解“它”就需要把很早之前的信息一路传递到后面。但是 RNN 中的信息传递路径很长书 → ... → ... → ... → 它。中间经过很多时间步后早期信息可能会逐渐衰减。这就是长距离依赖问题。在训练时这个问题通常和梯度消失、梯度爆炸有关。反向传播需要沿着时间步一层层传回去如果链条太长梯度可能越来越小导致模型很难学习远距离关系。可以直观理解为短距离依赖模型容易记住 长距离依赖模型容易遗忘例如我喜欢吃苹果因为它很甜。这里“它”距离“苹果”很近比较容易处理。但如果句子变成我昨天在超市买了一袋苹果回家以后放在桌子上晚上看电视时突然想起来于是拿了一个出来吃发现它很甜。这里“它”距离“苹果”较远RNN 就更难稳定建模。三、LSTM为了解决 RNN 的记忆问题为了解决普通 RNN 难以建模长距离依赖的问题LSTM 被提出。LSTM 的全称是 Long Short-Term Memory。Hochreiter 和 Schmidhuber 在 1997 年提出 LSTM用来缓解普通循环网络在长时间跨度任务中由于误差信号衰减导致学习困难的问题。LSTM 的核心思想是给模型增加一个更稳定的记忆单元让信息可以更长时间地保留下来。普通 RNN 只有隐藏状态而 LSTM 额外引入了 cell state1. 遗忘门决定忘掉什么遗忘门决定上一时刻的记忆中哪些信息需要保留哪些需要丢弃其中是遗忘门σ 是 sigmoid 函数输出范围在 0 到 1 之间越接近 1表示越保留越接近 0表示越遗忘。2. 输入门决定写入什么新信息输入门决定当前输入中哪些信息应该写入记忆同时生成候选记忆3. 更新记忆状态LSTM 的记忆更新为这个公式非常关键。它表示新的记忆 保留下来的旧记忆 写入的新记忆.4. 输出门决定输出什么输出门决定当前隐藏状态输出哪些信息通过这种门控机制LSTM 比普通 RNN 更擅长保留长期信息。可以简单理解为RNN每一步都重新混合全部信息容易遗忘LSTM有专门记忆通道和门控机制更容易保留长期依赖因此在 Transformer 之前LSTM 是 NLP 中非常重要的结构。四、GRU更简化的门控循环网络除了 LSTM还有一种常见结构叫 GRUGated Recurrent Unit。GRU 可以理解为 LSTM 的简化版本。它没有单独的 cell state而是通过更新门和重置门来控制信息流动更新门 update gate重置门 reset gateGRU 的参数通常比 LSTM 少结构更简单训练速度可能更快。在很多早期 NLP 任务中LSTM 和 GRU 都是非常常用的序列建模结构。但是不管是普通 RNN、LSTM还是 GRU它们都有一个共同特点计算过程仍然是按时间顺序递推的。也就是说它们仍然很难彻底摆脱顺序计算瓶颈。五、Seq2Seq从单句建模到序列转换随着机器翻译、摘要、对话生成等任务发展NLP 需要处理一种更复杂的问题输入是一个序列输出也是一个序列。例如机器翻译输入I love machine learning.输出我喜欢机器学习。文本摘要输入一篇长文章输出一段简短摘要对话生成输入你今天感觉怎么样输出我感觉还不错。这类任务被称为 sequence-to-sequence简称 Seq2Seq。Seq2Seq 的基本结构是Encoder 读取输入序列Decoder 生成输出序列早期 Seq2Seq 模型通常使用 LSTM 作为 Encoder 和 Decoder。Sutskever、Vinyals 和 Le 在 2014 年提出的 Seq2Seq 方法使用多层 LSTM 将输入序列编码为固定维度向量再用另一个 LSTM 从该向量解码目标序列并在机器翻译任务中取得了重要结果。基本流程如下输入序列 x1, x2, ..., xn↓Encoder LSTM↓固定长度向量 c↓Decoder LSTM↓输出序列 y1, y2, ..., ym用公式表示Encoder 将输入序列压缩成一个上下文向量Decoder 根据 ccc 生成输出这里的 ccc 非常重要。它是整个输入序列的压缩表示。