大语言模型到底在算什么?一文搞懂 ChatGPT/DeepSeek 的工作原理
DeepSeek 的核心代码不超过 1000 行,但它背后的设计思想,值得每个 AI 从业者真正弄懂一次。
📌 先说结论:大模型本质是在做选择题
在看任何技术细节之前,先记住这个关键事实:
> 大语言模型的输出,看似在"生成"语言,本质上是在做选择题。
每次输出一个词,都是在词汇表里"选"出概率最高的那个。整个复杂的神经网络,都在为这一次"选择"服务。
明白了这一点,后面所有的技术细节就都有了落脚点。
🗺️ 三大阶段总览
ChatGPT、DeepSeek 等主流大模型都采用 Transformer 架构,工作流程分为三大阶段:
┌─────────────────────────────────────────────────────┐│ ││ 阶段一:输入处理 人类语言 → 数字矩阵 ││ ↓ ││ 阶段二:Transformer 层 数字矩阵 → 语义理解 ││ ↓ ││ 阶段三:输出处理 语义理解 → 下一个词 ││ │└─────────────────────────────────────────────────────┘
阶段一:输入处理——让计算机读懂人话
1.1 Token:语言的最小单位
模型不认识"汉字",只认识"Token"。
模型基于大量语料,统计出常见的词、词根和符号,构建出一张词汇表。词汇表里的每个条目就叫做 Token,是模型理解和生成语言的最小单位。
> 比如"用苹果手机拍苹果"这句话,会被切分为 5 个 Token。
原始句子:用苹果手机拍苹果切分结果:[用] [苹果] [手机] [拍] [苹果] ↓ ↓ ↓ ↓ ↓ 编号 编号 编号 编号 编号(在词汇表中的索引)
1.2 词嵌入:把词语变成向量
有了编号还不够,计算机需要的是可以做数学运算的数字。
模型用一个高维向量(词嵌入向量)来表示每个 Token,每个维度代表某种抽象的语义特征。这些数值不是人工设定的,而是通过海量训练自动学到的。
语义相似的词,在高维空间里距离更近:
高维语义空间示意(用三维简化表示): 猫 ● ● 狗 ↗ (语义相近,距离近)国王 ● ──── 女王 ● ↕ ↕男人 ● ──── 女人 ●国王 - 男人 + 女人 ≈ 女王 (向量运算可以体现语义关系)
为便于说明,我们把词嵌入向量简化为 4 维,每个 Token 得到一个 4 维向量:
[用] → [0.2, -0.1, 0.8, 0.3][苹果] → [0.5, 0.7, 0.1, 0.9][手机] → [0.6, 0.4, 0.2, 0.7][拍] → [0.1, -0.3, 0.9, 0.4][苹果] → [0.5, 0.7, 0.1, 0.9] ← 暂时和上面那个苹果一样
1.3 位置编码:告诉模型"谁在哪儿"
Transformer 是并行处理所有 Token 的,不像传统模型一个一个顺序处理。好处是速度快,但带来一个问题:模型不知道词语的顺序。
同样的词,在不同位置含义不同:
“我爱你” ≠ “你爱我” ↑ ↑位置不同,含义完全不同
为此,Transformer 引入了位置编码,为每个 Token 叠加一个"位置标签"。
传统方法用正弦/余弦函数计算位置编码,每个位置的编码组合都是唯一的:
词嵌入向量 + 位置编码 = 输入向量[苹果]位置1:[0.5, 0.7, 0.1, 0.9] + [PE₁] = [新向量A][苹果]位置5:[0.5, 0.7, 0.1, 0.9] + [PE₅] = [新向量B]A ≠ B → 模型能区分两个位置不同的“苹果”了!
至此,输入处理完成。人类语言被转化成了一个 Token数量 × 向量维度 的数字矩阵,可以开始计算了。
阶段二:Transformer 计算层——真正的"理解"发生在这里
每个 Transformer Block 包含以下几个关键步骤:
输入矩阵 ↓[层归一化] ↓[自注意力机制] ← 核心!让每个词理解上下文 ↓[残差连接] ↓[层归一化] ↓[前馈神经网络] ← 提取更高阶特征 ↓[残差连接] ↓输出矩阵(传入下一个 Block)
2.1 层归一化:先稳定一下数据
在计算之前,模型会对数据做"归一化"处理:
- 减去均值
:让数据中心化
- 除以标准差
:消除不同维度的尺度差异
- 加上可训练参数(γ 和 β)
:保留模型的灵活性
> 举个例子:原始向量是 [3万, 10万, 50],数值差距巨大,后续的指数计算会被极端值主导。归一化后,各特征处于相对平衡的范围,模型学得更稳。
2.2 自注意力机制:让每个词"环顾四周"
这是 Transformer 最核心的设计,核心思想是:让每个 Token 根据上下文,动态调整自己的含义。
以"手机"这个词为例:
初始语义:手机(基础含义) ↓结合上下文"用"→ 被使用的对象结合上下文"苹果"→ 很可能是苹果品牌结合上下文"拍"→ 暗示拍照功能、高端属性 ↓更新语义:苹果牌手机,用于拍摄,隐含高端、拍照好等属性
如何实现这个过程?引入三个矩阵:
|
矩阵 |
名称 |
含义 |
|---|---|---|
| Q
(Query) |
查询矩阵 |
当前 Token 想了解什么?它的"提问方向" |
| K
(Key) |
键矩阵 |
每个 Token 的"内容标签",能回答哪些问题 |
| V
(Value) |
值矩阵 |
每个 Token 携带的具体信息 |
计算流程如下:
Step 1:用 Q 和 K 计算“关注度”(点积) 注意力得分 = Q × KᵀStep 2:缩放(防止数值波动) 缩放后得分 = 注意力得分 / √dkStep 3:Softmax → 得到注意力权重(归一化为概率分布)Step 4:用注意力权重对 V 加权求和 → 得到更新后的表示向量
因果掩码:训练时不能"偷看答案"
模型训练时,要预测"下一个词"。如果让当前词看到未来的词,就等于提前知道答案,训练就没意义了。
解决方案是因果掩码:把注意力矩阵的上三角部分设为 -∞,经过 Softmax 后变为 0,保证每个 Token 只能看到它之前的内容。
注意力矩阵(上三角 = -∞): 用 苹果 手机 拍 苹果用 [ a -∞ -∞ -∞ -∞ ]苹果[ b c -∞ -∞ -∞ ]手机[ d e f -∞ -∞ ]拍 [ g h i j -∞ ]苹果[ k l m n o ]每一行只能看到当前位置和之前的 Token ✓
2.3 多头注意力:从多个角度同时理解
单头注意力只能从一个角度理解上下文。多头注意力相当于同时从多个维度分析:
输入 / | \ \ 头1 头2 头3 头4 ← 每个头独立学习不同的语义关系 | | | | (语法结构、指代关系、语义相似…) 拼接所有头的输出 ↓ 线性变换矩阵 Wₒ ↓ 整合后的输出
2.4 前馈神经网络:提取更高阶特征
自注意力关注的是 Token 之间的关系,前馈网络则对每个 Token 自身做非线性变换,提取更抽象的特征。
结构是两层全连接网络 + ReLU 激活函数:
FFN(x) = ReLU(x·W₁ + b₁)·W₂ + b₂ ↑ ReLU:小于0输出0,大于等于0保持不变 (引入非线性,让模型能拟合复杂模式)
2.5 残差连接:别忘了你从哪里来
多层计算后,原始信息容易被扭曲甚至丢失。残差连接直接把输入加回输出:
Y = X + F(X)↑ ↑原始输入 子层的计算结果主干始终是最初传入的数据,各层计算只是“添加新信息”
阶段三:输出处理——从向量到词语
经过多个 Transformer Block 处理后,模型拿到最后一个隐藏状态向量,开始预测下一个 Token:
最后一层隐藏状态 ↓[层归一化] ↓[线性投影到词汇表大小] ← 计算与所有 Token 的相似度 ↓得到 Logits 向量(每个 Token 的原始得分) ↓[Softmax + 温度系数] → 概率分布 ↓[采样策略] → 选出下一个 Token ↓查词汇表 → 输出对应的词
温度系数:控制输出的"随机性"
温度系数 T 是个调节旋钮:
|
温度 T |
效果 |
适用场景 |
|---|---|---|
|
T < 1 |
概率分布更尖锐,输出更确定 |
代码生成、事实问答 |
|
T = 1 |
正常概率分布 |
通用对话 |
|
T > 1 |
概率分布更平坦,输出更随机 |
创意写作、头脑风暴 |
采样策略:怎么从概率分布里选词
- 贪心采样
:每次直接选概率最高的词,结果稳定但可能重复
- 随机采样
:按概率分布随机选,输出更多样,但可能不够准确
📊 完整流程一览
人类输入文字 ↓[Tokenization] 文字 → Token 序列 ↓[词嵌入查表] Token → 高维向量 ↓[位置编码叠加] 向量 + 位置信息 ↓┌─────────────────────────────┐│ Transformer Block × N ││ 层归一化 → 多头自注意力 ││ → 残差连接 → 层归一化 ││ → 前馈神经网络 → 残差连接 │└─────────────────────────────┘ ↓[层归一化] ↓[线性投影 + Softmax] → 概率分布 ↓[采样] → 下一个 Token ↓输出词语,追加到序列,重复上述过程
💡 一句话总结大模型的本质
> 大语言模型,本质上是通过算力拆解语义,拟合人类认知世界的方式,最终呈现出"智能"的样子。
它做的事情并不神秘:把语言变成数字,用注意力机制理解上下文关系,再从词汇表里挑出最合适的下一个词。一遍又一遍,直到说完整句话。
像 DeepSeek-V3 这样的顶级模型,核心代码也不超过 1000 行。复杂的是参数量和训练数据,而不是流程本身。
🔍 关键概念速查表
|
概念 |
一句话解释 |
|---|---|
|
Token |
模型处理语言的最小单位,相当于"词" |
|
词嵌入 |
把词语映射到高维向量空间的表示方式 |
|
位置编码 |
给每个 Token 加上位置标签,让模型知道顺序 |
|
自注意力 |
让每个 Token 根据上下文动态调整自身含义 |
|
Q/K/V |
查询/键/值矩阵,自注意力的三个核心组件 |
|
因果掩码 |
训练时防止"偷看答案"的机制 |
|
多头注意力 |
从多个角度同时理解上下文 |
|
前馈网络 |
对每个 Token 独立提取高阶特征 |
|
残差连接 |
把原始输入叠加回输出,防止信息丢失 |
|
温度系数 |
控制输出随机性的调节旋钮 |
|
Logits |
Softmax 之前的原始得分向量 |
🔔 下次有人问你"大模型到底怎么运行的",把这篇发给他。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)