|
|
@@ -106,7 +106,7 @@ N-gram 模型虽然简单有效,但有两个致命缺陷:
|
|
|
|
|
|
**(2)神经网络语言模型与词嵌入**
|
|
|
|
|
|
-N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的**前馈神经网络语言模型 (Feedforward Neural Network Language Model)** 是这一领域的里程碑^[1]^。
|
|
|
+N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的**前馈神经网络语言模型 (Feedforward Neural Network Language Model)** 是这一领域的里程碑<sup>[1]</sup>。
|
|
|
|
|
|
其核心思想可以分为两步:
|
|
|
|
|
|
@@ -166,7 +166,7 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
**(3)循环神经网络 (RNN) 与长短时记忆网络 (LSTM)**
|
|
|
|
|
|
-前一节的神经网络语言模型虽然引入了词嵌入解决了泛化问题,但它和 N-gram 模型一样,上下文窗口是固定大小的。为了预测下一个词,它只能看到前 n−1 个词,再早的历史信息就被丢弃了。这显然不符合我们人类理解语言的方式。为了打破固定窗口的限制,**循环神经网络 (Recurrent Neural Network, RNN)** 应运而生,其核心思想非常直观:为网络增加“记忆”能力^[2]^。
|
|
|
+前一节的神经网络语言模型虽然引入了词嵌入解决了泛化问题,但它和 N-gram 模型一样,上下文窗口是固定大小的。为了预测下一个词,它只能看到前 n−1 个词,再早的历史信息就被丢弃了。这显然不符合我们人类理解语言的方式。为了打破固定窗口的限制,**循环神经网络 (Recurrent Neural Network, RNN)** 应运而生,其核心思想非常直观:为网络增加“记忆”能力<sup>[2]</sup>。
|
|
|
|
|
|
如图3.3所示,RNN 的设计引入了一个**隐藏状态 (hidden state)** 向量,我们可以将其理解为网络的短期记忆。在处理序列的每一步,网络都会读取当前的输入词,并结合它上一刻的记忆(即上一个时间步的隐藏状态),然后生成一个新的记忆(即当前时间步的隐藏状态)传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。
|
|
|
|
|
|
@@ -177,7 +177,7 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
然而,标准的 RNN 在实践中存在一个严重的问题:**长期依赖问题 (Long-term Dependency Problem)** 。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(**梯度消失**)或变得极大(**梯度爆炸**)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。
|
|
|
|
|
|
-为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来^[3]^。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)** 。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
|
|
|
+为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来<sup>[3]</sup>。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)** 。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
|
|
|
|
|
|
- **遗忘门 (Forget Gate)** : 决定从上一时刻的细胞状态中丢弃哪些信息。
|
|
|
- **输入门 (Input Gate)** : 决定将当前输入中的哪些新信息存入细胞状态。
|
|
|
@@ -185,7 +185,7 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
### 3.1.2 Transformer 架构解析
|
|
|
|
|
|
-在上一节中,我们看到RNN及LSTM通过引入循环结构来处理序列数据,这在一定程度上解决了捕捉长距离依赖的问题。然而,这种循环的计算方式也带来了新的瓶颈:它必须按顺序处理数据。第 t 个时间步的计算,必须等待第 t−1 个时间步完成后才能开始。这意味着 RNN 无法进行大规模的并行计算,在处理长序列时效率低下,这极大地限制了模型规模和训练速度的提升。Transformer在2017 年由谷歌团队提出^[4]^。它完全抛弃了循环结构,转而完全依赖一种名为**注意力 (Attention)** 的机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。
|
|
|
+在上一节中,我们看到RNN及LSTM通过引入循环结构来处理序列数据,这在一定程度上解决了捕捉长距离依赖的问题。然而,这种循环的计算方式也带来了新的瓶颈:它必须按顺序处理数据。第 t 个时间步的计算,必须等待第 t−1 个时间步完成后才能开始。这意味着 RNN 无法进行大规模的并行计算,在处理长序列时效率低下,这极大地限制了模型规模和训练速度的提升。Transformer在2017 年由谷歌团队提出<sup>[4]</sup>。它完全抛弃了循环结构,转而完全依赖一种名为**注意力 (Attention)** 的机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。
|
|
|
|
|
|
**(1)Encoder-Decoder 整体结构**
|
|
|
|
|
|
@@ -477,7 +477,7 @@ class PositionalEncoding(nn.Module):
|
|
|
|
|
|
前面一节中,我们动手构建了一个完整的Transformer 模型,它能在很多端到端的场景表现出色。但是当任务转换为构建一个与人对话、创作、作为智能体大脑的通用模型时,或许我们并不需要那么复杂的结构。
|
|
|
|
|
|
-Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 **GPT (Generative Pre-trained Transformer)** 时,提出了一个更简单的思想^[5]^:**语言的核心任务,不就是预测下一个最有可能出现的词吗?**
|
|
|
+Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 **GPT (Generative Pre-trained Transformer)** 时,提出了一个更简单的思想<sup>[5]</sup>:**语言的核心任务,不就是预测下一个最有可能出现的词吗?**
|
|
|
|
|
|
无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。基于这个思想,GPT 做了一个大胆的简化:**它完全抛弃了编码器,只保留了解码器部分。** 这就是 **Decoder-Only** 架构的由来。
|
|
|
|
|
|
@@ -647,7 +647,7 @@ How are you?
|
|
|
|
|
|
**3.2.2.2 字节对编码算法解析**
|
|
|
|
|
|
-字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一^[6]^,GPT系列模型就采用了这种算法。其核心思想非常简洁,可以理解为一个“贪心”的合并过程:
|
|
|
+字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一<sup>[6]</sup>,GPT系列模型就采用了这种算法。其核心思想非常简洁,可以理解为一个“贪心”的合并过程:
|
|
|
|
|
|
1. **初始化**:将词表初始化为所有在语料库中出现过的基本字符。
|
|
|
2. **迭代合并**:在语料库上,统计所有相邻词元对的出现频率,找到频率最高的一对,将它们合并成一个新的词元,并加入词表。
|
|
|
@@ -719,8 +719,8 @@ for i in range(num_merges):
|
|
|
|
|
|
后续的许多算法都是在BPE的基础上进行优化的。其中,Google 开发的 WordPiece 和 SentencePiece 是影响力最大的两种。
|
|
|
|
|
|
-- **WordPiece**: Google BERT 模型采用的算法^[7]^。它与 BPE 非常相似,但合并词元的标准不是“最高频率”,而是“能最大化提升语料库的语言模型概率”。简单来说,它会优先合并那些能让整个语料库的“通顺度”提升最大的词元对。
|
|
|
-- **SentencePiece**: Google 开源的一款分词工具^[8]^,Llama 系列模型采用了此算法。它最大的特点是,将空格也视作一个普通字符(通常用下划线 `_` 表示)。这使得分词和解码过程完全可逆,且不依赖于特定的语言(例如,它不需要知道中文不使用空格分词)。
|
|
|
+- **WordPiece**: Google BERT 模型采用的算法<sup>[7]</sup>。它与 BPE 非常相似,但合并词元的标准不是“最高频率”,而是“能最大化提升语料库的语言模型概率”。简单来说,它会优先合并那些能让整个语料库的“通顺度”提升最大的词元对。
|
|
|
+- **SentencePiece**: Google 开源的一款分词工具<sup>[8]</sup>,Llama 系列模型采用了此算法。它最大的特点是,将空格也视作一个普通字符(通常用下划线 `_` 表示)。这使得分词和解码过程完全可逆,且不依赖于特定的语言(例如,它不需要知道中文不使用空格分词)。
|
|
|
|
|
|
**3.2.2.3 分词器对开发者的意义**
|
|
|
|
|
|
@@ -872,15 +872,15 @@ print(response)
|
|
|
|
|
|
**缩放法则(Scaling Laws)**是近年来大语言模型领域最重要的发现之一。它揭示了模型性能与模型参数量、训练数据量以及计算资源之间存在着可预测的幂律关系。这一发现为大语言模型的持续发展提供了理论指导,阐明了增加资源投入能够系统性提升模型性能的底层逻辑。
|
|
|
|
|
|
-研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系^[9]^。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。
|
|
|
+研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系<sup>[9]</sup>。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。
|
|
|
|
|
|
-早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正^[10]^。该定律指出,在给定的计算预算下,为了达到最优性能,**模型参数量和训练数据量之间存在一个最优配比**。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
|
|
|
+早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正<sup>[10]</sup>。该定律指出,在给定的计算预算下,为了达到最优性能,**模型参数量和训练数据量之间存在一个最优配比**。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
|
|
|
|
|
|
缩放法则最令人惊奇的产物是“能力的涌现”。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,**链式思考 (Chain-of-Thought)** 、**指令遵循 (Instruction Following)** 、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。这种现象表明,大语言模型不仅仅是简单地记忆和复述,它们在学习过程中可能形成了某种更深层次的抽象和推理能力。对于智能体开发者而言,能力的涌现意味着选择一个足够大规模的模型,是实现复杂自主决策和规划能力的前提。
|
|
|
|
|
|
### 3.3.2 模型幻觉
|
|
|
|
|
|
-**模型幻觉(Hallucination)**通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型^[11]^,例如:
|
|
|
+**模型幻觉(Hallucination)**通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型<sup>[11]</sup>,例如:
|
|
|
|
|
|
- **事实性幻觉 (Factual Hallucinations)** : 模型生成与现实世界事实不符的信息。
|
|
|
- **忠实性幻觉 (Faithfulness Hallucinations)** : 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
|
|
|
@@ -888,14 +888,14 @@ print(response)
|
|
|
|
|
|
幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而“编造”出错误的结论。例如:一个旅游规划 Agent,可能会为你推荐一个现实中不存在的景点,或者预订一个航班号错误的机票。
|
|
|
|
|
|
-此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见^[12]^。
|
|
|
+此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见<sup>[12]</sup>。
|
|
|
|
|
|
为了提高大语言模型的可靠性,研究人员和开发者正在积极探索多种检测和缓解幻觉的方法:
|
|
|
|
|
|
-1. **数据层面**: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式^[13]^,从源头减少幻觉。
|
|
|
+1. **数据层面**: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式<sup>[13]</sup>,从源头减少幻觉。
|
|
|
2. **模型层面**: 探索新的模型架构,或让模型能够表达其对生成内容的不确定性。
|
|
|
3. **推理与生成层面**:
|
|
|
- 1. **检索增强生成 (Retrieval-Augmented Generation, RAG)** ^[14]^: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
|
|
|
+ 1. **检索增强生成 (Retrieval-Augmented Generation, RAG)** <sup>[14]</sup>: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
|
|
|
2. **多步推理与验证**: 引导模型进行多步推理,并在每一步进行自我检查或外部验证。
|
|
|
3. **引入外部工具**: 允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。
|
|
|
|