LLM不是在“思考“,而是在“算概率“——大模型核心概念深度剖析
大模型基础概念:从LLM原理到工程实践
本文系统介绍大语言模型(LLM)的核心概念,包括Temperature、Top-P、自回归、上下文长度、BPE分词、BGE Embedding、过拟合等关键知识点,帮助你建立对LLM的全面理解。
📑 目录
1. 本质:LLM 是一个"概率预测机"
核心启示: LLM 实际上并不"知道"事实,它只是在模仿训练数据中词语出现的统计规律。这就是"幻觉"(Hallucination)的根源——它可能自信地输出了一个概率很高但逻辑错误的词。
2. 关键参数:控制"创造性" (Hyperparameters)
A. Temperature (温度)
在 LLM 中,Temperature 是用来控制"下一个 Token"概率分布平滑程度的参数。
底层原理:Softmax 的缩放 (Math)
模型输出的原始分数叫做 Logits (x_i)。将 Logits 转化为概率 Pi 使用的是 Softmax 函数。Temperature (T) 是这个公式中的一个除数:
P i = exp ( x i / T ) ∑ exp ( x j / T ) P_i = \frac{\exp(x_i / T)}{\sum \exp(x_j / T)} Pi=∑exp(xj/T)exp(xi/T)
| 参数 | 范围 | 作用 |
|---|---|---|
| Temperature | 0.0 ~ 1.0 (部分模型可更高) | 改变概率分布的平滑程度 |
参数效果:
| Temperature | 采样方式 | 特点 | 适用场景 |
|---|---|---|---|
| Temp = 0 | 贪婪采样 (Greedy Sampling) | 永远选概率最大的词,输出确定 | 写代码、JSON 提取 |
| Temp = 1 | 依概率随机采样 | 增加低概率词被选中的机会 | 创意写作 |

B. Top-P (核采样)
Top-P (核采样) 进行"末位淘汰"。
核心直觉:VIP 俱乐部机制
想象 LLM 面前有一张包含几万个单词的"候选名单"。
| 方法 | 策略 | 优点 | 缺点 |
|---|---|---|---|
| Top-K (旧方法) | 只准在前 K 名里选 | 简单直接 | 死板,可能错过好词或选到垃圾词 |
| Top-P (新方法) | 累积概率达到 P 就停止 | 动态调整候选池大小 | 需要调参 |
建议: 通常只调 Temperature 或只调 Top-P,不要同时调。
动态调整的"候选池"
Top-P 最厉害的地方在于它能根据语境的确定性,动态调整候选词的数量。
我们对比两个场景,假设 Top-P 设置为 0.9:
场景 A:确定性高 (如"我要去北京天安…")
这时候模型非常确定下一个字是"门"。
- 门 (0.85) -> 累积 0.85 (未满 0.9)
- 也就是 (0.06) -> 累积 0.91 (停!)
- 结果: 候选池里只有 2 个词。模型绝不会选到莫名其妙的词。
场景 B:确定性低 (如"今天中午我想吃…")
这时候能接的词太多了。
- 米饭 (0.15)
- 面条 (0.14)
- 饺子 (0.13)
- … (很多个 0.1 左右的词)
- 结果: 可能要加到第 15 个词,累积概率才凑够 0.9。
Top-P 的智慧: 它自动扩大了选择范围,允许更多的多样性。
一句话总结: Top-P 在你"不知道说什么"时给你更多选择,在你"必须这么说"时强行收敛。
3. 自回归
自回归 (Autoregression) 的字面意思是:“用自己(Auto)过去的值来预测/回归(Regression)未来的值”。
在 LLM 的语境下,就是 Next Token Prediction(预测下一个词)。
# 伪代码演示:自回归生成
def generate(model, prompt, max_tokens):
tokens = tokenize(prompt)
for _ in range(max_tokens):
next_token = model.predict(tokens) # 预测下一个词
tokens.append(next_token)
return detokenize(tokens)


4. 上下文长度
核心定义:Input + Output 的总和
上下文长度是指模型在一次推理中能够处理的 Token 总数量上限。
这个公式非常重要:
C o n t e x t W i n d o w ≥ ( P r o m p t I n p u t + G e n e r a t e d O u t p u t ) Context\ Window \ge (Prompt\ Input + Generated\ Output) Context Window≥(Prompt Input+Generated Output)
| 组成部分 | 说明 |
|---|---|
| Prompt Input | 系统提示词 (System Prompt)、历史对话 (History)、RAG 检索到的文档 (Context) |
| Generated Output | 模型生成的回答 |
为什么会有上下文限制?(底层原理)
主要原因在于 Attention 机制的计算复杂度。
输入翻倍 (2x) → 计算量翻四倍 (4x) → 显存占用翻四倍
当 Context 从 4K 增加到 128K 时,如果不加优化(如 Ring Attention),计算量和显存需求是天文数字。
应对策略:滑动窗口 (Sliding Window)
当对话越来越长,超过 Context 限制时,Agent 必须学会"遗忘"。最常见的策略是 FIFO (先进先出)。

5. 移动步幅(stride)
核心定义:窗口滑动的"跨度"
假设你有一个固定大小的"视窗"(Window),你要扫描一长串数据(文本或像素)。
| Stride 值 | 行为 | 数据利用率 | 计算量 |
|---|---|---|---|
| Stride = 1 | 地毯式搜索,每一步只挪动一格 | 最高 | 最大 |
| Stride = Window Size | 互不重叠,切蛋糕一样整齐切开 | 最低 | 最小 |
| Stride < Window Size | 重叠 (Overlap) | 中等 | 中等 |
💡 RAG中最常用的模式: Stride < Window Size,产生重叠以避免语义撕裂
图解:Stride 对数据读取的影响
让我们用图解来看看 Stride 如何决定我们看到的数据。假设数据序列是:[A, B, C, D, E, F],窗口大小是 3。
情况 A:Stride = 1 (高重叠,信息最丰富)
每次只挪 1 格。B 和 C 被多次反复"看到"。

情况 B:Stride = 3 (无重叠,标准切分)
每次挪动距离等于窗口大小。数据被切断,互不相关。

问:如何避免语义撕裂?
如果你设置 Stride = Window Size(无重叠),可能会出现这种情况:
Chunk 1 结尾: "Agent 的核心原理是..." (切断)
Chunk 2 开头: "...基于大模型的推理。"
当用户搜 “Agent 的核心原理是什么?” 时,可能两个 Chunk 都因为语义不完整而没被检索到。
解决方案:Overlap (重叠)
我们通常会让 Stride < Window Size,从而产生 Overlap。
O v e r l a p = W i n d o w S i z e − S t r i d e Overlap = Window\ Size - Stride Overlap=Window Size−Stride
6. Batch Size
核心定义:并行处理的"打包"数量
在深度学习中,无论是训练(Training)还是推理(Inference),我们通常不会一条一条地处理数据,而是把多条数据打包成一个 Batch 一起送入 GPU 计算。
| Batch Size | 比喻 | 特点 |
|---|---|---|
| Batch Size = 1 | 单人过独木桥 | 来一个处理一个 |
| Batch Size = N | N 个人坐一辆大巴车 | 一次过 N 个 |
训练场景:梯度下降的"步伐"
在训练模型时,Batch Size 决定了我们根据多少数据来更新一次模型参数。
| 策略 | Batch Size | 名称 | 特点 |
|---|---|---|---|
| 小批量 | 1 | SGD (随机梯度下降) | 走位风骚,震荡大,难收敛,但能跳出局部最优 |
| 大批量 | 1024 | Mini-batch GD | 走位稳健,GPU效率高,但显存占用大 |


7. BPE分词
核心痛点:如何在"查字典"和"读字母"之间找平衡?
在 NLP(自然语言处理)早期,有两种极端的分词方式:
| 分词方式 | 示例 | 优点 | 缺点 |
|---|---|---|---|
| Word-level (按词分) | [“I”, “love”, “coding”] | 语义完整 | 词汇表无限大,OOV问题严重 |
| Character-level (按字/字母分) | [“I”, " ", “l”, “o”, “v”, “e”, …] | 词汇表小 | 序列太长,单字母无语义 |
| BPE (Subword) | [“I”, “love”, “cod”, “ing”] | 折中方案 | 平衡词汇表大小和语义完整性 |
BPE (Subword 粒度) 是这与两者的折中方案。它把常见的词保留(如 apple),把不常见的词拆开(如 unfriendly -> un + friend + ly)。
算法流程:高频合并 (Merge)
BPE 的核心逻辑非常简单:统计语料中相邻字符对的出现频率,把最频繁的一对"合并"成一个新 Token,重复 N 次。
演练:从"字母"进化到"词根"
假设我们的训练语料只有这几个词(括号内是词频):
- hug (10次)
- pug (5次)
- pun (12次)
- bun (4次)
Step 0: 初始化 (拆成单字符)
当前词汇表:[b, g, h, n, p, u]
序列状态:
h u g
p u g
p u n
b u n
Step 1: 统计相邻对 (Pair Counting)
- h+u: 10
- u+g: 10 + 5 = 15 (最高!) 🏆
- p+u: 5 + 12 = 17
- u+n: 12 + 4 = 16
(注:这里为了简化演示,假设 u+g 是最高的)
Step 2: 合并 (Merge)
我们将 u 和 g 合并成新 Token ug。
当前词汇表:[b, g, h, n, p, u, ug]
序列状态变了:
h ug (h 和 ug)
p ug
p u n (un 还没合并)
b u n
Step 3: 继续循环
下一轮可能 u+n 频率最高,合并成 un。
- p un
- b un
最终结果:词汇表里有了 ug 和 un 这样的子词 (Subword)。如果来了个新词 bug(以前没见过),模型可以把它拆成 b + ug。因为 b 和 ug 它都认识!


关键特性与影响
A. Token 压缩率 (Cost & Speed)
| 语言 | 压缩效果 | 说明 |
|---|---|---|
| 英文 | 高效 | 一个单词通常就是一个 Token |
| 中文 (早期GPT) | 低效 | 一个汉字可能被拆成 2-3 个 Unicode 字节 Token |
| 中文 (GPT-4, Qwen) | 高效 | 针对多语言优化,大部分常用汉字都是单个 Token |
B. 处理 OOV (Out Of Vocabulary)
这是 BPE 最大的魔法。
遇到单词 “uninstagrammable” (无法发到 Instagram 的):
- Word-level 模型:直接报错或 [UNK]
- BPE 模型:拆解为 un + instagram + mable (词根)
- 模型虽然没见过这个词,但它懂这三个部分的含义,所以能"猜"出意思
C. 数字与代码的坑
BPE 对数字的处理有时很笨。
- 数字 1000 可能会被切成 10 + 00
- 数字 1001 可能会被切成 10 + 01
这导致模型在做数学运算时,无法像人类一样按位对齐,容易算错。
💡 Agent 启示:涉及复杂数学计算时,不要让 LLM 心算,让它写 Python 代码(Code Agent)去算,或者使用 Tool Call。
8. BGE

它是谁?
BGE 是由 BAAI (北京智源人工智能研究院) 发布的通用 Embedding 模型系列。
核心黑科技:指令微调 (Instruction Tuning)
普通的 Embedding 模型很"木",你给它一句话,它就给你一个向量。但 BGE 引入了 “指令” 的概念。
它不仅看你的文本,还看你的意图。
| 模型类型 | 输入 | 输出 | 特点 |
|---|---|---|---|
| 普通模型 | “苹果” | 水果/手机的混合向量 | 语义模糊 |
| BGE (带指令) | “为这个句子生成用于搜索的表示:” + “苹果” | 侧重搜索语义的向量 | 意图明确 |
这解决了 RAG 中一个经典问题:Query(问题)通常很短(如"怎么请假?“),而 Document(文档)通常很长(如"员工考勤管理办法…”)。如果直接算距离,它们在空间中可能并不近。通过指令,BGE 能够让 Query 的向量主动向 Document 的向量空间"靠拢"。

⚠️ 工程实战 Note:在调用 BGE 时,如果你是在做 RAG 的检索端 (Query),必须加上特定前缀(如
query_instruction_for_retrieval)。如果你是在建立索引库 (Passage),通常不需要加。
BGE-M3:全能选手 (当前最强版本)
你现在的学习阶段(Stage 1)强烈建议直接上手 BGE-M3。 “M3” 代表了三个 “M”:
| 特性 | 说明 | 优势 |
|---|---|---|
| Multi-linguality (多语言) | 支持 100+ 种语言 | 理解 Apple 和 苹果 是同一个东西 |
| Multi-granularity (多粒度) | 支持最高 8192 的上下文长度 | 一口气能吃下一篇长论文,减少语义破碎 |
| Multi-functionality (多功能) | 一次推理输出三种结果 | 混合检索能力 |
BGE-M3 的三种输出:
- Dense Vector (稠密向量):常规 Embedding,看重语义
- Sparse Vector (稀疏向量):类似于关键词权重(BM25),看重精确匹配(比如你要搜特定的错误码 “Error 502”)
- ColBERT (多向量):重排序使用
关键特性:套娃表示 (Matryoshka Representation Learning)
BGE 还支持一种叫 MRL 的技术。
通常,Embedding 的向量维度是固定的(比如 1024 维)。
问题:1024 个 float32 存入向量库,假如你有 1 亿条数据,内存和显存开销巨大。
BGE 的解法:像俄罗斯套娃一样。它训练出的向量,前 256 维包含了主要信息,前 512 维包含了更多细节…
效果:你可以根据你的硬件资源,自由"截断"向量。显存不够?我就只取前 256 维用,精度损失很小!
9. 过拟合
核心定义:死记硬背 vs. 举一反三
| 模型类型 | 表现 | 特点 |
|---|---|---|
| 理想的模型 (泛化能力强) | 学习到了数据背后的规律 | 举一反三 |
| 过拟合的模型 | 死记硬背了训练数据中的每一个细节 | 面对新数据完全歇菜 |
图解:Loss 曲线的背离
在训练过程中,我们通过观察 Loss 曲线来判断是否过拟合。

训练过程的时间轴 (Epochs):

⚠️ 警报点:在第 5 轮左右,红色线(验证集)开始反弹,而绿色线(训练集)还在下降。这意味着模型开始钻牛角尖,去学习数据里的噪音(比如标注错误、采样误差),而不是学习通用规律。这时候必须立刻停止训练!
为什么会发生?(容量过剩)
原因:模型太强,数据太少。
想象一下,你让一个核物理学家(巨大的神经网络,参数量极大)去学小学数学(简单的数据集)。他会觉得"这题太简单了,肯定有诈",于是他开始分析卷子上的墨迹深浅、纸张纹理(噪音),并认为这也是规律的一部分。
参数量 (Parameters) >> 数据量 (Data):模型有足够的"脑容量"去记住每一个样本,而不是被迫去总结规律。
解决方案:给模型"上强度"
为了防止过拟合,我们需要限制模型的能力,这在深度学习中叫 正则化 (Regularization)。
A. Dropout (丢弃法) —— 类似于 Chaos Engineering
在训练时,随机把一部分神经元"关掉"(置零)。

| 概念 | Dropout | Go 类比 (Chaos Engineering) |
|---|---|---|
| 原理 | 模型不能依赖某一个特定的神经元,被迫学会利用所有神经元协同工作 | Netflix 故意随机杀掉生产环境的微服务实例,迫使系统架构必须健壮 |
| 目的 | 学习更鲁棒的特征 | 消除单点故障 |
B. Early Stopping (早停)
监控验证集的 Loss,一旦发现它不降反升(比如连续 3 轮没变好),就强制中断 for 循环,保存之前的最佳模型权重。
- Go 类比:
context.WithTimeout。如果一个请求处理太久且没结果,直接断开,防止资源浪费和错误蔓延
C. 数据增强 (Data Augmentation)
既然数据太少,那就造假数据。
| 数据类型 | 增强方法 |
|---|---|
| 图片 | 旋转、裁剪、调色 |
| 文本 | 回译(中文 -> 英文 -> 中文,意思没变但字变了) |
📝 总结
| 概念 | 核心要点 |
|---|---|
| LLM 本质 | 概率预测机,不真正"知道"事实 |
| Temperature | 控制输出的随机性,0=确定,1=创意 |
| Top-P | 动态调整候选池大小,避免长尾垃圾词 |
| 自回归 | 用过去的值预测未来的值,即 Next Token Prediction |
| 上下文长度 | Input + Output 的总和,受 Attention 计算复杂度限制 |
| Stride | 窗口滑动的跨度,影响数据重叠程度 |
| Batch Size | 并行处理的数据量,影响训练稳定性和效率 |
| BPE | Subword 分词,平衡词汇表大小和语义完整性 |
| BGE | 带指令的 Embedding,支持多语言、多粒度、多功能 |
| 过拟合 | 死记硬背,解决方案:更多数据、Dropout、Early Stopping |
💬 互动话题
- 你在实际项目中遇到过哪些 LLM 的"幻觉"问题?
- 你是如何调整 Temperature 和 Top-P 来优化生成效果的?
- 在 RAG 系统中,你使用哪种 Embedding 模型?效果如何?
如果这篇文章对你有帮助,欢迎点赞、收藏、关注! 🎯
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)