你有没有好奇过:ChatGPT、Claude、DeepSeek这些AI,明明只是在做“文字接龙”——根据上文猜下一个最合理的词——为什么却能写代码、做翻译、解数学题,甚至和你谈人生谈理想?

秘密就藏在大语言模型(Large Language Model,简称LLM)的底层原理里。

这篇文章会带你从零开始,一步步拆解大语言模型的四大核心问题:

  • 它怎么“学会”了人类语言? ——从N-gram到Transformer的演进
  • 它为什么能看懂你的任何指令? ——提示工程与分词的艺术
  • 它为什么什么都能干? ——缩放法则与能力涌现
  • 它为什么有时会胡说八道? ——幻觉与局限性

准备好了吗?我们一起揭开大语言模型的神秘面纱。

📊 全文知识框架图

大语言模型基础

语言模型演进

N-gram统计模型

神经网络语言模型

RNN与LSTM

Transformer架构

Transformer核心

自注意力机制

多头注意力

前馈网络

残差连接与层归一化

位置编码

Decoder-Only架构

自回归生成

掩码自注意力

与大模型交互

提示工程

采样参数

文本分词

模型选择

缩放法则与局限

缩放法则

能力涌现

模型幻觉

知识时效性

一、什么是语言模型?——从“猜词”说起

语言模型的核心任务,用一句话概括就是:计算一个句子出现的概率

比如,下面两个句子:

  • “今天天气真好”
  • “今天天气真好吧啦吧啦”

你的直觉会告诉你:第一个句子更“通顺”、更“自然”。语言模型要做的,就是用数学方法量化这种“通顺程度”——给更通顺的句子打出更高的概率。

1.1 统计语言模型与N-gram:最早的“猜词”方法

在深度学习兴起之前,统计方法是语言模型的主流。它的核心思想是:一个句子出现的概率,等于该句子中每个词依次出现的条件概率的连乘

对于一个由词 w1,w2,...,wmw_1, w_2, ..., w_mw1,w2,...,wm 构成的句子 SSS,其概率可以表示为:

P(S)=P(w1)⋅P(w2∣w1)⋅P(w3∣w1,w2)⋯P(wm∣w1,...,wm−1)P(S) = P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1,w_2) \cdots P(w_m|w_1,...,w_{m-1})P(S)=P(w1)P(w2w1)P(w3w1,w2)P(wmw1,...,wm1)

这个公式叫概率的链式法则。但问题来了:像 P(wm∣w1,...,wm−1)P(w_m|w_1,...,w_{m-1})P(wmw1,...,wm1) 这样的条件概率,几乎不可能从语料库中准确估计——因为 w1,...,wm−1w_1,...,w_{m-1}w1,...,wm1 这个组合可能在训练数据中从未出现过

为了解决这个问题,研究者引入了马尔可夫假设(Markov Assumption):一个词的出现概率,只与它前面有限的 n−1n-1n1 个词有关。基于这个假设建立的模型,就叫 N-gram模型

下面用三个独立的示意图来说明:

图1:马尔可夫假设——一个词的出现只依赖前面的词

w₁

w₂

w₃

w₄

...

图2:Bigram(N=2)——只看前1个词

只看前1个

wᵢ₋₁

wᵢ

图3:Trigram(N=3)——只看前2个词

只看前2个

wᵢ₋₂

wᵢ₋₁

wᵢ

N-gram对比表

模型 依赖的上下文 条件概率公式
Bigram(N=2) 只看前 1 个词 P(wi∣wi−1)P(w_i \mid w_{i-1})P(wiwi1)
Trigram(N=3) 只看前 2 个词 P(wi∣wi−2,wi−1)P(w_i \mid w_{i-2}, w_{i-1})P(wiwi2,wi1)
N-gram(通用) 只看前 N−1N-1N1 个词 P(wi∣wi−N+1,...,wi−1)P(w_i \mid w_{i-N+1}, ..., w_{i-1})P(wiwiN+1,...,wi1)

这些概率怎么算?通过最大似然估计(Maximum Likelihood Estimation,简称MLE)——简单说就是“数数”。例如,对于Bigram模型:

P(wi∣wi−1)=Count(wi−1,wi)Count(wi−1)P(w_i|w_{i-1}) = \frac{Count(w_{i-1}, w_i)}{Count(w_{i-1})}P(wiwi1)=Count(wi1)Count(wi1,wi)

分子是词对 (wi−1,wi)(w_{i-1}, w_i)(wi1,wi) 在语料库中出现的次数,分母是词 wi−1w_{i-1}wi1 出现的总次数。

💡 一个具体的计算例子

假设我们有一个迷你语料库,只包含两句话:

datawhale agent learns
datawhale agent works

用Bigram模型估算句子 datawhale agent learns 的概率:

第一步P(datawhale)=2/6≈0.333P(\text{datawhale}) = 2/6 \approx 0.333P(datawhale)=2/60.333(datawhale出现2次,总词数6个)

第二步P(agent∣datawhale)=Count(datawhale agent)/Count(datawhale)=2/2=1P(\text{agent}|\text{datawhale}) = Count(\text{datawhale agent}) / Count(\text{datawhale}) = 2/2 = 1P(agentdatawhale)=Count(datawhale agent)/Count(datawhale)=2/2=1

第三步P(learns∣agent)=Count(agent learns)/Count(agent)=1/2=0.5P(\text{learns}|\text{agent}) = Count(\text{agent learns}) / Count(\text{agent}) = 1/2 = 0.5P(learnsagent)=Count(agent learns)/Count(agent)=1/2=0.5

最后P(datawhale agent learns)≈0.333×1×0.5≈0.167P(\text{datawhale agent learns}) \approx 0.333 \times 1 \times 0.5 \approx 0.167P(datawhale agent learns)0.333×1×0.50.167

import collections

corpus = "datawhale agent learns datawhale agent works"
tokens = corpus.split()
total_tokens = len(tokens)

# 计算 P(datawhale)
count_datawhale = tokens.count('datawhale')
p_datawhale = count_datawhale / total_tokens
print(f"P(datawhale) = {count_datawhale}/{total_tokens} = {p_datawhale:.3f}")

# 计算 P(agent|datawhale)
bigrams = list(zip(tokens, tokens[1:]))
bigram_counts = collections.Counter(bigrams)
p_agent_given_datawhale = bigram_counts[('datawhale', 'agent')] / count_datawhale
print(f"P(agent|datawhale) = {bigram_counts[('datawhale', 'agent')]}/{count_datawhale} = {p_agent_given_datawhale:.3f}")

# 计算 P(learns|agent)
count_agent = tokens.count('agent')
p_learns_given_agent = bigram_counts[('agent', 'learns')] / count_agent
print(f"P(learns|agent) = {bigram_counts[('agent', 'learns')]}/{count_agent} = {p_learns_given_agent:.3f}")

# 连乘
p_sentence = p_datawhale * p_agent_given_datawhale * p_learns_given_agent
print(f"P('datawhale agent learns') ≈ {p_sentence:.3f}")

输出

P(datawhale) = 2/6 = 0.333
P(agent|datawhale) = 2/2 = 1.000
P(learns|agent) = 1/2 = 0.500
P('datawhale agent learns') ≈ 0.167

N-gram模型虽然简单有效,但有两个致命缺陷:

缺陷 通俗解释 后果
数据稀疏性 如果一个词组合从未在语料库中出现,概率就是0 明明合理的句子被判“不可能”
泛化能力差 模型无法理解词与词之间的语义相似性 “agent learns”见过很多次,但“robot learns”就是0

1.2 神经网络语言模型与词嵌入:让词“活”起来

N-gram的根本问题在于:它将词视为孤立的、离散的符号——“agent”和“robot”是两个完全无关的ID。

2003年,Bengio等人提出了前馈神经网络语言模型,带来了一场革命。它的核心思想分为两步:

第一步:构建一个“语义空间”。将每个词映射到一个高维连续向量空间中的一个点——这个点(向量)就叫词嵌入(Word Embedding)或词向量。在这个空间里,语义相近的词位置也相近。

第二步:用神经网络学习“上下文→下一个词”的映射。输入是前 n−1n-1n1 个词的词向量,输出是词汇表中每个词的概率分布。

词向量空间示意

👑 国王

0.2, 0.8, 0.1, ...

👸 王后

0.3, 0.7, 0.2, ...

🤴 王子

0.1, 0.6, 0.3, ...

🍎 苹果

-0.5, 0.2, 0.8, ...

💡 通俗理解:想象把所有的词都放在一张巨大的“语义地图”上——意思相近的词(如“国王”“王后”“王子”)聚在一起,意思不同的词(如“苹果”)离得很远。

词向量最神奇的地方是:它不仅能表示“同义词”,还能捕捉类比关系

Vector(国王)−Vector(男人)+Vector(女人)≈Vector(王后)Vector(\text{国王}) - Vector(\text{男人}) + Vector(\text{女人}) \approx Vector(\text{王后})Vector(国王)Vector(男人)+Vector(女人)Vector(王后)

import numpy as np

# 假设我们已经学习到了简化的二维词向量
embeddings = {
    "king": np.array([0.9, 0.8]),
    "queen": np.array([0.9, 0.2]),
    "man": np.array([0.7, 0.9]),
    "woman": np.array([0.7, 0.3])
}

def cosine_similarity(vec1, vec2):
    return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

result_vec = embeddings["king"] - embeddings["man"] + embeddings["woman"]
sim = cosine_similarity(result_vec, embeddings["queen"])
print(f"king - man + woman = {result_vec}")
print(f"与'queen'的相似度: {sim:.4f}")

输出

king - man + woman = [0.9 0.2]
与'queen'的相似度: 1.0000

💡 通俗理解:词嵌入让模型学会了“语义平移”——从“国王”出发,减去“男性”的属性,加上“女性”的属性,就到了“王后”的位置。这证明了模型确实学到了“性别”“皇权”这类抽象概念。

神经网络语言模型通过词嵌入解决了泛化问题,但它仍然有一个限制:上下文窗口是固定的——只能看到前 n−1n-1n1 个词,更早的信息就被丢弃了。

1.3 循环神经网络(RNN)与LSTM:让模型拥有“记忆”

为了打破固定窗口的限制,循环神经网络(Recurrent Neural Network,简称RNN)应运而生。它的核心思想非常直观:为网络增加“记忆”能力

RNN展开示意

x₀

h₀

x₁

h₁

x₂

h₂

...

RNN引入了一个隐藏状态(hidden state)向量——可以理解为网络的“短期记忆”。在处理序列的每一步,网络都会读取当前的输入词,并结合上一时刻的记忆(上一个隐藏状态),生成新的记忆传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。

然而,标准RNN有一个严重问题:长期依赖问题。当序列很长时,梯度在反向传播中会快速趋向于零(梯度消失)或变得极大(梯度爆炸),模型无法有效学习长距离的依赖关系。

为了解决这个问题,长短时记忆网络(Long Short-Term Memory,简称LSTM)被设计出来。LSTM的核心创新在于引入了细胞状态(Cell State)和一套精密的门控机制

门控 功能 通俗理解
遗忘门 决定丢弃哪些旧信息 “该忘的就忘掉”
输入门 决定存入哪些新信息 “该记的记下来”
输出门 决定输出哪些信息 “该说的说出来”

LSTM让模型能够记住更长的上下文,但它仍然有一个无法克服的瓶颈:必须按顺序处理数据——第 ttt 个时间步的计算,必须等第 t−1t-1t1 个完成后才能开始。这意味着无法进行大规模的并行计算,训练效率低下。

二、Transformer架构:大模型的“地基”

2017年,Google团队发表了一篇题为《Attention Is All You Need》的论文,提出了Transformer架构。它彻底抛弃了循环结构,完全依赖注意力机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。

2.1 Encoder-Decoder整体结构

最初的Transformer是为机器翻译设计的,遵循编码器-解码器(Encoder-Decoder)架构:

解码器Decoder

编码器Encoder

输入嵌入

位置编码

多头自注意力

前馈网络

×N层

输出嵌入

位置编码

掩码多头自注意力

交叉注意力

前馈网络

×N层

📝 输入序列

📤 输出序列

💡 通俗理解:编码器的任务是“读懂”输入的整个句子,为每个词生成富含上下文信息的向量表示。解码器的任务是“生成”目标句子——它会参考自己已经生成的前文,并“咨询”编码器的理解结果,来生成下一个词。

2.2 自注意力机制:让每个词都能“看到”所有词

想象一下我们阅读这个句子:“The agent learns because it is intelligent.”当我们读到加粗的“it”时,为了理解它指代什么,我们的大脑会不自觉地关注前面的“agent”。自注意力机制就是对这个过程的数学建模——它允许模型在处理每个词时,都能兼顾句子中的所有其他词,并为它们分配不同的“注意力权重”。

为了实现这个过程,自注意力为每个输入词元引入了三个可学习的角色

角色 英文 通俗理解
查询 Query(Q) 当前词元在主动“提问”:谁和我相关?
Key(K) 其他词元的“标签”或“索引”
Value(V) 其他词元携带的“内容”或“信息”

整个计算过程可以概括为四步:

🔍 查询 Q

📊 Q·K^T
计算相关性得分

🗝️ 键 K

📏 缩放
÷√d_k

⚖️ Softmax
归一化为权重

➕ 加权求和
权重×V

📦 值 V

🎯 注意力输出

第一步:用词A的Q向量,去和所有词(包括A自己)的K向量做点积,得到“相关性得分”。

第二步:将得分除以 dk\sqrt{d_k}dk dkd_kdk 是K向量的维度),防止梯度过小。

第三步:用Softmax函数将得分转换成总和为1的“注意力权重”。

第四步:将权重分别乘以对应的V向量,然后求和——得到的就是融合了全局上下文信息的新表示。

整个过程可以用一个公式概括:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QKT)V

2.3 多头注意力:多个“专家”从不同角度观察

如果只做一次注意力计算(即“单头”),模型可能只会关注一种类型的关联。但语言中的关系是复杂的——指代关系、时态关系、从属关系……我们希望模型能同时关注多种关系

多头注意力机制应运而生:把Q、K、V在维度上切分成 hhh 份(hhh 就是“头”数),每一份独立地进行一次注意力计算。这就好比让 hhh 个不同的“专家”从不同角度审视句子,每个专家捕捉一种不同的特征关系。最后把所有“专家”的意见拼接起来,再通过线性变换整合。

Q

切分

K

V

头1
注意力

头2
注意力

头h
注意力

拼接

线性变换

输出

2.4 前馈网络、残差连接与层归一化

前馈网络(FFN) :在每个注意力子层之后,都有一个逐位置前馈网络。它独立地作用于每个词元向量——“先扩大再缩小”(通常 dff=4×dmodeld_{ff} = 4 \times d_{model}dff=4×dmodel),帮助模型学习更丰富的特征表示:

FFN(x)=max⁡(0,xW1+b1)W2+b2FFN(x) = \max(0, xW_1 + b_1)W_2 + b_2FFN(x)=max(0,xW1+b1)W2+b2

💡 注意:括号外的 W2W_2W2 是第二个线性层的权重矩阵,xxx 仅出现在 max⁡(0,xW1+b1)\max(0, xW_1 + b_1)max(0,xW1+b1) 中。

残差连接与层归一化(Add & Norm) :每个子模块都被一个“Add & Norm”操作包裹:

  • 残差连接(Add) :将输入 xxx 直接加到子模块输出 Sublayer(x)Sublayer(x)Sublayer(x) 上——Output=x+Sublayer(x)Output = x + Sublayer(x)Output=x+Sublayer(x)。这解决了深度网络中的梯度消失问题。
  • 层归一化(Norm) :对单个样本的所有特征进行归一化,使每层输入分布稳定,加速收敛。

2.5 位置编码:让模型知道词的顺序

自注意力机制有一个“盲点”:它不包含任何关于词元顺序的信息。对于自注意力来说,“agent learns”和“learns agent”是完全等价的。

为了解决这个问题,Transformer引入了位置编码(Positional Encoding)——为每个位置的词嵌入加上一个能代表其位置信息的向量。原论文使用正弦和余弦函数:

PE(pos,2i)=sin⁡(pos100002i/dmodel)PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i)=sin(100002i/dmodelpos)

PE(pos,2i+1)=cos⁡(pos100002i/dmodel)PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i+1)=cos(100002i/dmodelpos)

其中 pospospos 是位置,iii 是维度索引。

三、Decoder-Only架构:GPT的“文字接龙”革命

完整的Transformer有编码器和解码器两部分。但OpenAI在开发GPT时提出了一个更简单的思想:语言的核心任务,不就是预测下一个最有可能出现的词吗?

无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。

基于这个思想,GPT做了一个大胆的简化:完全抛弃编码器,只保留解码器。这就是 Decoder-Only架构的由来。

3.1 自回归生成:文字接龙游戏

Decoder-Only的工作模式叫自回归(Autoregressive)——听起来很专业,但描述的过程非常简单:

  1. 给模型一个起始文本(如“Datawhale Agent is”)
  2. 模型预测下一个最可能的词(如“a”)
  3. 将新词添加到末尾(“Datawhale Agent is a”)
  4. 重复第2-3步,直到生成完整句子

📝 Datawhale Agent is

💭 预测→ a

📝 Datawhale Agent is a

💭 预测→ powerful

📝 Datawhale Agent is a powerful

💭 预测→ ...

✅ 生成完成

3.2 掩码自注意力:防止“偷看答案”

你可能会问:训练时模型一次性拿到完整文本,怎么保证它不会“偷看”后面的答案?

答案是掩码自注意力(Masked Self-Attention)。在计算注意力分数之后、Softmax之前,模型会应用一个“因果掩码”——将所有当前位置之后的词元对应的分数替换为负无穷。经过Softmax后,这些位置的概率变为0。这样,模型在计算任何位置的表示时,都被从数学上阻止了去关注它后面的信息。

3.3 Decoder-Only的优势

优势 说明
训练目标统一 唯一的任务就是“预测下一个词”,适合在海量无标注文本上预训练
结构简单,易于扩展 更少的组件意味着更容易规模化——GPT-4、Llama等巨型模型都基于此架构
天然适合生成任务 自回归模式与对话、写作、代码生成完美契合

四、与大语言模型交互

4.1 提示工程:如何与AI“沟通”

如果把大语言模型比作一个能力极强的“大脑”,那么提示(Prompt)就是我们与这个大脑沟通的语言。提示工程就是研究如何设计精准的提示,引导模型产生我们期望的输出。

(1)采样参数:控制输出的“性格”

大模型在生成时,本质上是根据概率分布来“抽样”下一个词。几个关键参数可以调整这个分布:

参数 通俗理解 低值效果 高值效果
Temperature(温度) 控制随机性大小 输出更“保守”、确定(适合事实问答) 输出更“创意”、发散(适合诗歌创作)
Top-k 只从概率最高的k个词中选 k=1时完全确定(贪心采样) 候选词更多,多样性增加
Top-p(核采样) 从按概率从高到低排序后、累积概率首次达到或超过 ppp 的“核心集合”中采样 动态适应分布,比Top-k更灵活 候选词更多,多样性增加

💡 通俗理解:Temperature就像“画笔的粗细”——温度低时画笔细,描得精准;温度高时画笔粗,画得豪放。Top-k和Top-p则是“选材范围”——限制候选词的数量或概率范围。

(2)零样本、单样本与少样本提示

根据给模型提供示例(Exemplar)的数量,提示可以分为三种:

类型 示例数量 通俗理解 案例
零样本(Zero-shot) 0个 直接下指令,靠模型“悟性” “请判断这句话的情感是正面还是负面:Datawhale的课程非常棒!”
单样本(One-shot) 1个 先给一个“示范” “示例:‘服务太慢了’→负面。现在:‘课程非常棒’→?”
少样本(Few-shot) 多个 给多个“示范”,让模型更准确理解任务边界 提供多个不同情感的示例后再提问
(3)指令调优的影响

早期的GPT模型(如GPT-3)本质上是“文本补全”模型——擅长续写,但不一定能很好地理解并执行人类的指令

指令调优(Instruction Tuning)是一种微调技术,使用大量“指令-回答”格式的数据进行训练。经过指令调优后,模型能更好地理解并遵循用户的指令。

💡 通俗理解:文本补全模型就像一个“接话茬”的人——你说上半句,它接下半句。指令调优后的模型则像一个“听话办事”的助手——你给它一个任务,它理解并完成。

(4)基础提示技巧
技巧 通俗理解 案例
角色扮演 给模型一个“人设”,引导回答风格 “你是一位资深Python专家,请向初学者解释GIL”
上下文示例 用输入输出示例“教会”模型处理任务 给出JSON格式示例,让模型按格式提取信息
(5)思维链(Chain-of-Thought)

对于需要逻辑推理的复杂问题,直接让模型给出答案容易出错。思维链(Chain-of-Thought,简称CoT)通过引导模型“一步一步地思考”,显著提升推理准确性。

💡 通俗理解:就像你解数学题时“写下解题步骤”——步骤越清楚,越不容易出错。强制模型“一步步思考”,能大幅减少逻辑错误。

案例

问:一个篮球队在80场比赛中赢了60%。下个赛季打了15场赢了12场。两个赛季总胜率是多少?请一步一步思考。

答:第一步:第一个赛季赢了 80 × 60% = 48场。
第二步:总比赛数 = 80 + 15 = 95场,总胜利数 = 48 + 12 = 60场。
第三步:总胜率 = 60/95 ≈ 63.16%。

4.2 文本分词:把文字变成数字

计算机只认识数字。在把文本喂给模型之前,必须先转换成数字格式。这个过程叫分词(Tokenization),切分出的最小单元叫词元(Token)。

为什么需要“子词分词”?
策略 优点 缺点
按词分词 直观 词表爆炸、无法处理生僻词(OOV问题)
按字符分词 词表小、无OOV 单个字符无语义,学习效率低
子词分词 兼顾两者 算法复杂

现代大语言模型普遍采用子词分词——将常见词保留为完整词元,将不常见词拆分成有意义的子词片段(如“Tokenization”→“Token”+“ization”)。

字节对编码(BPE)

字节对编码(Byte-Pair Encoding,简称BPE)是最主流的子词分词算法之一,GPT系列模型就采用此算法。其核心是一个“贪心”的合并过程:

  1. 初始化:词表 = 所有基本字符
  2. 迭代合并:统计所有相邻词元对的频率,找到最高的一对,合并成一个新词元,加入词表
  3. 重复:直到词表大小达到预设阈值

BPE合并过程示例

h u g

合并 'u'+'g'

p u g

合并 'ug'+''

p u n

b u n

合并 'u'+'n'

合并 'un'+''

后续的WordPiece(BERT使用)和SentencePiece(Llama使用)都是在BPE基础上的优化。

分词器对开发者的意义

理解分词的实际影响很重要:

  • 上下文窗口:窗口大小按Token计算,不同语言/分词器下Token数量差异巨大
  • API成本:按Token计费,了解分词是控制成本的关键
  • 模型表现:有时模型的奇怪表现源于分词——如“2+2”和“2 + 2”可能被切成完全不同的Token序列

4.3 模型的选择

选择模型不是简单地追求“最大最强”,而是在性能、成本、速度和部署方式之间权衡

关键考量因素
因素 说明
性能与能力 不同模型擅长不同任务,可参考LMSys Chatbot Arena等排行榜
成本 闭源模型按Token计费;开源模型需硬件投入
速度(延迟) 实时交互场景需要低延迟模型
上下文窗口 长文档、长期记忆需要大窗口
部署方式 API便捷但数据需外传;本地部署保护隐私但要求高
生态与工具链 主流模型拥有更丰富的社区支持
闭源模型概览
系列 代表模型 特点
OpenAI GPT GPT-4、GPT-4o 行业标杆,多模态,RLHF对齐
Google Gemini Gemini Ultra、Gemini Pro 原生多模态,超长上下文
Anthropic Claude Claude 3.5 Sonnet、Claude 3.7 Sonnet 注重AI安全,长文档处理出色
国内模型 文心一言、通义千问、混元 中文处理优势
开源模型概览
系列 代表模型 特点
Meta Llama Llama 2、Llama 3、Llama 3.1 开源标杆,生态活跃
Mistral AI Mistral 7B、Mixtral 8x7B、Mistral Large “小尺寸、高性能”
国内开源 通义千问(Qwen)、ChatGLM 强大中文能力

五、缩放法则与局限性

5.1 缩放法则:为什么越大越强?

缩放法则(Scaling Laws)是大语言模型领域最重要的发现之一:模型性能与参数量、训练数据量、计算资源之间存在可预测的幂律关系

缩放三要素

📊 参数量
Params

🎯 模型性能
Loss持续下降

📚 数据量
Data

⚡ 计算量
Compute

简单说:只要持续、按比例地增加这三个要素,模型性能就会可预测地、平滑地提升

但2022年DeepMind的Chinchilla定律给出了重要修正:在给定的计算预算下,模型参数量和训练数据量之间存在最优配比——模型应该比之前认为的更小,但用多得多的数据训练。例如,700亿参数的Chinchilla模型使用了1.4万亿token进行训练,而1750亿参数的GPT-3仅使用了约3000亿token,数据量约为GPT-3的4.7倍,最终Chinchilla的性能反而超越了GPT-3。

💡 通俗理解:Chinchilla定律告诉我们——不是模型越大越好,而是数据和参数要等比例增长。就像盖楼,地基(数据)和楼层(参数)要匹配,否则楼再高也站不稳。

能力涌现:规模到了,能力就“冒”出来了

缩放法则最令人惊奇的产物是能力的涌现——当模型规模达到某个阈值后,会突然展现出小规模模型中完全不存在的全新能力:

  • 上下文学习(In-context Learning):给几个示例就能理解新任务
  • 思维链推理(Chain-of-Thought):通过“一步步思考”解决复杂问题
  • 指令遵循(Instruction Following):理解并执行从未见过的自然语言指令

💡 通俗理解:就像水加热到100°C才沸腾——不到温度时平静如水,到了临界点突然翻滚冒泡。大模型的“涌现”也是这种“相变”现象。涌现能力的出现可能与模型在训练过程中形成了某种更深层次的抽象和推理能力有关,而非简单的记忆和复述。

5.2 模型幻觉:AI为什么会“胡说八道”?

模型幻觉(Hallucination)指模型生成与事实不符、与上下文矛盾或凭空编造的信息。

幻觉类型 通俗理解 案例
事实性幻觉 编造与真实世界不符的信息 虚构一个不存在的景点
忠实性幻觉 未能忠实反映源文本 摘要歪曲了原文意思
内在幻觉 与输入信息直接矛盾 用户说“A”,模型说“非A”

幻觉产生的原因

  1. 训练数据:包含错误或矛盾信息
  2. 生成机制:模型只在“预测下一个最可能的词”,没有内置的事实核查模块
  3. 复杂推理:逻辑链条出错时可能“编造”结论

缓解幻觉的方法

方法 说明
检索增强生成(RAG) 生成前从外部知识库检索相关信息作为上下文
多步推理与验证 引导模型在每一步进行自我检查
引入外部工具 调用搜索引擎、计算器等获取精确信息

5.3 其他局限性

局限 说明
知识时效性 模型知识截止于训练数据收集时间,无法自动更新
训练数据偏见 模型会吸收并反映训练数据中的社会偏见和刻板印象

六、核心概念速查表

术语 通俗解释
语言模型 计算一个句子“通顺程度”的模型
N-gram 基于“一个词只与前面N-1个词有关”假设的统计模型
词嵌入/词向量 把词映射到高维空间中的向量,语义相近的词位置也相近
RNN 有“记忆”的神经网络,能处理序列数据
LSTM RNN的改进版,通过门控机制解决“记不住长距离信息”的问题
Transformer 大模型的“地基”架构,核心是注意力机制+并行计算
自注意力 让每个词在处理时能“看到”句子中所有其他词
多头注意力 多个“专家”从不同角度同时观察,捕捉多种关系
位置编码 给每个词打上“位置标签”,让模型知道词的顺序
Decoder-Only 只保留Transformer的解码器,GPT系列采用的架构
自回归生成 一个词一个词地“接龙”生成文本
掩码自注意力 训练时防止模型“偷看”后面的词
提示工程 研究如何设计精准的提示来引导模型输出
Temperature 控制输出随机性的参数——低温度更保守,高温度更创意
Top-k/Top-p 限制候选词范围的采样策略
思维链(CoT) 引导模型“一步步思考”,提升推理准确性
分词(Tokenization) 把文本切成模型能处理的数字单元(词元)
BPE 最主流的子词分词算法,通过迭代合并高频词元对来构建词表
缩放法则 模型性能与参数量、数据量、计算量之间的幂律关系
涌现能力 模型规模超过阈值后突然出现的新能力
幻觉 模型编造看起来合理但实际上虚假的信息
RAG 检索增强生成——生成前先查外部知识库,减少幻觉

关于本文知识来源的说明

本文的核心知识框架完全基于 Datawhale《Hello-Agents》教程第三章的内容进行整理和阐述。文中涉及的所有技术概念(Transformer、注意力机制、词嵌入、BPE、缩放法则、RLHF、RAG等)均为该教程中明确讲解的内容。

其他经典论文(如 Vaswani et al., 2017《Attention Is All You Need》;Devlin et al., 2018《BERT》;Ouyang et al., 2022《RLHF》等)均作为背景知识参考。读者如有兴趣,可通过 Google Scholar、arXiv 或各学术搜索引擎自行检索相关论文标题进行深入学习。

结语

大语言模型的本质,其实就是一个超级“文字接龙”游戏高手——它根据上文预测下一个最合理的词。

但正是这个简单的机制,加上千亿参数的规模、互联网级别的训练数据和Transformer架构的革命性突破,让它涌现出了理解、推理、创造等惊人的能力。

理解了大语言模型的原理,你就能更好地理解:

  • 为什么它能做智能体的“大脑”(因为它真的“懂”你的指令)
  • 为什么它有时会犯错(因为它本质上是“猜”,不是“算”)
  • 为什么给它加上“记忆+规划+工具”就能变成强大的Agent

本文参考:Datawhale《Hello-Agents》教程第三章《大语言模型基础》的内容框架与核心知识点。本文在忠实呈现该教程内容的基础上,为便于新手理解进行了通俗化改写和图表化呈现。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐