大模型的参数量为什么那么大?

一 前言

让我们先来看一看,现阶段国内外位于第一梯队的大模型参数量:

  • 根据行业分析,GPT-6 Astra总参数量约为 9T 至 11T(点估计约 10万亿参数) ,而每次前向计算实际激活的 唯一激活参数量(Unique Active Parameters)约为 400B 至 650B(点估计约 5500亿) ,上下文窗口约为 105 万 Token
  • 根据行业分析与多方估测,Claude Fable(如 Fable 5 / 5.1)其基础模型规模普遍被猜测达到 5万亿到6万亿(6T)参数 的超大规模级别。每次前向传播(推理时针对每个 Token)实际激活的参数量约为 10% 左右,即大约 5000 亿 ~ 6000 亿(500B - 600B)激活参数 , 上下文窗口约为 100 万 Token,Anthropic 官方并未在技术文档或规格说明中披露具体的参数量、激活参数量或架构层数。
  • Kimi K3 2.8 万亿参数 , 支持高达百万Token的超长上下文, 每次推理或处理每个 token 时,实际激活的参数量约为 1040 亿
  • 千问3.8-MAX,2.4万亿个参数 , 每次推理或处理请求时激活的参数量约为 950亿(95B) ,上下文窗口达到100万token
  • 智谱GLM-5.3 总参数量 :约 7,530 亿(753B) ,每次激活参数量约 400 亿(40B) ,上下文长度支持 1,000,000 Tokens (1M) 超长上下文(最大输出为 128K)
  • DeepSeek 的最新主力模型是 DeepSeek-V4.1-Flash ,采用 552B(5520亿) 参数的 MoE(专家混合)模型架构,每个 Token 仅激活约 8B(输入)到 16B(输出)的参数,支持 100万(1M)Token 的超长上下文输入,最大输出长度可达 384K Token

可以看出,除了GLM-5.3,DeepSeek-V4.1-Flash这两款模型,其余的第一梯队国内外最新版本大模型的参数量都超过了2万亿,这么多的参数,肯定超出了人类可以调试和理解每个参数发挥的影响范围,那么这么多的参数的统计口径是什么,或者说大模型的参数量的定义是多少?我估计好多人应该说不清楚,就像好多股民炒了许多年股,也不知道大盘指数一个点代表什么含义一样。今天就让我们探究一下,大模型参数量的定义

二 大模型参数量定义

大模型的全部参数,本质上就是由无数个巨大的"二维矩阵(Matrix)"拼接而成的。一个大模型的几千亿、上万亿参数到底是怎么凑出来的,我们可以把它拆解为三大块矩阵:

1. 第一块:输入与输出的"查表/投影矩阵"(Embedding & LM Head)

  • 矩阵长宽词表大小(Vocabulary Size) ×\times × 隐藏层维度(Hidden Dimension)
  • 举个数字 :假设词表里有 100,000 个词,模型的隐藏维度是 4096。那么这个矩阵的大小就是 100,000×4096=4.09亿100,000 \times 4096 = \mathbf{4.09 \text{亿}} 100,000×4096=4.09亿 个参数。
  • 作用:底部的输入端负责把 Token 变成向量,顶部的输出端(LM Head)负责把最后的向量再映射回词表里去猜下一个字(很多模型这两端会共享同一组矩阵)。

2. 第二块:核心引擎的"Transformer 层矩阵"(占了 90% 以上的参数)

大模型之所以聪明,主要不是靠输入输出的那个查表矩阵,而是靠中间那几十层厚厚的 Transformer 神经网络。这才是吞噬参数的"大户"。

每一层 Transformer 内部,都包含好几个巨大的权重矩阵:

  • 注意力机制矩阵(Attention) :负责让词与词之间产生关联(也就是著名的 Q,K,VQ, K, V Q,K,V 矩阵),它们的规模大致与 D2D^2 D2(维度平方)挂钩。
  • 前馈神经网络矩阵(Feed-Forward Network, FFN) :负责对提取到的特征进行深度加工和记忆,通常矩阵的宽度会放大到维度的 4 倍甚至更多(比如 4096×143364096 \times 14336 4096×14336 这种体量的矩阵)。

如果一个模型有 32 层或者 80 层这样的结构,每一层都有好几个这样的大矩阵,把它们全部加起来,参数量就会从几亿瞬间暴增到几十亿、几百亿甚至上千亿。

3. 第三块:其他辅助矩阵

比如层归一化(LayerNorm)里的一些缩放系数、偏置项(Bias)等,虽然也有参数,但相比前面两块只能算"零头"。

大模型的总参数量,是整个大模型内部所有大大小小矩阵的"总元素个数相加

三 什么是词表和隐藏层?

第一块输入与输出的查表/投影矩阵,涉及的两个概念词表和隐藏层,分别是什么概念? 在实际生产中,把人类的文字变成计算机能懂的数字,这个过程叫做分词与编码(Tokenization & Embedding) 。它并不是简单地给每个整词查字典,而是通过一套工业级流水线来完成的。

我们可以把这个过程拆解为两个大步骤:第一步是"切字成块"(Tokenization),第二步是"翻译成向量"(Embedding)

第一步:分词(Tokenization)------ 怎么把一句话"切碎"

在早期,计算机确实是按"一个字一个字"或者按"整个词"来切的,但这两种方法都有巨大漏洞:

  • 按字切:如果切成单字,"苹果"变成"苹"和"果",那"苹"字的意思就丢了。
  • 按词切:英文还好,中间有空格;但中文没有空格,"我爱吃苹果"怎么切?如果遇到人类刚发明的新词(比如"显眼包"),字典里没有,系统直接就傻眼了。

所以,现代大模型(如 GPT、LLM 等)采用了一种非常聪明的现代算法(比如 BPE - 字节对编码 )。它的核心逻辑是:高频的词合成一个整体,低频的字拆成偏旁或单字

  • 举个形象的例子

    • 像 "The"、"apple"、"中国"、"人工智能" 这些经常一起出现的常用词,直接作为一个整体(Token)。
    • 像一些冷门词、生僻字、或者英文的罕见后缀(如 -ing-ness),会被拆成最小的字母或拼音碎片。
  • 实际效果 : 一句话被这套算法切完后,会变成一串由数字组成的列表。比如: "I love AI" 可能会被切成 3 个 Token:["I", " love", " AI"]。 在系统的词典(Vocabulary,通常包含几十万个这样的 Token)里,每个 Token 都有一个固定编号:

    • "I" -> 编号 40
    • " love" -> 编号 1832
    • " AI" -> 编号 9215 最终,这句话在计算机眼里就变成了:[40, 1832, 9215]

各大科技公司对 Token 的划分标准、词表大小以及编码方式完全不一样,大家虽然都在表达意思,但"切词的刀法"和"字典的编法"各不相同。同一句话,扔给 OpenAI、Anthropic(Claude)或者 Google(Gemini),切出来的 Token 数量、长相和对应的数字编号完全是两码事。

1. 词表大小(Vocabulary Size)完全不同

每个大模型在出生前,都会由工程师制定一个"官方大字典"(包含所有认识的 Token 编号)。

  • OpenAI 的 GPT 系列 :早期(如 GPT-3.5/GPT-4)的词表大小大概在 10 万个 左右(例如 cl100k_base 词表),后来的新模型(如 GPT-4o)扩大到了 20 万个 级别 (o200k_base)。
  • 其他主流模型 :比如 Llama 3 拥有约 12.8 万 的词表,而很多多语言或特定开源模型甚至会采用更大或更特殊的词表。

词表大小的差异意味着什么?

字典越大,很多常见的词或短语就可以直接作为一个整体(占 1 个 Token),不用被拆得稀碎。

2. "切词的刀法"不同(对中文和代码很不一样)

因为各大厂商预训练时喂的数据集偏好不同(比如有的英文多,有的代码多,有的包含大量中文或其他小语种),他们训练出来的分词器"切碎一句话"的方式也大相径庭。

  • 切法不同导致长度不同:比如输入一句中文或一段复杂代码,GPT 切出来的 Token 数量可能和 Claude、Gemini 切出来的数量相差 10% 甚至更多。
  • 对中文的友好度不同:早期一些西方模型对中文的分词非常粗暴,一个好端端的中文词可能会被拆成好几个毫无逻辑的单字拼块,导致中文消耗的 Token 数量远超英文。好在后来的新模型(如国内的通义千问、DeepSeek,以及国际大模型的最新版本)都在分词器里专门优化了中文和代码的压缩率。

3. 编号(ID)完全对不上号

即便两家公司偶然把一句话切出了相同的 Token 块,它们在各自"字典"里的数字编号(ID)也是各玩各的

  • 比如在 OpenAI 的字典里,"AI"这个 Token 可能编剧为 9215
  • 但在 Anthropic 的 Claude 字典里,它可能编为 15832
  • 这就是为什么 模型和分词器必须高度绑定 ------ 你不能拿 GPT 的分词器去切完文本,然后喂给一个开源的 Llama 模型,因为数字对不上,模型读到的完全是乱码。

这对我们在实际生产中有什么影响?

  1. 算账(Token 计费)不一样:同样的 1000 字文章,在 OpenAI、Claude 和 Gemini 那里消耗的 Token 额度是不一样的,API 调用的实际花销也会有细微出入。
  2. 上下文窗口的"容量"感知不同:虽然都说支持 128k 的上下文,但因为各家的切词效率不同,同样一本文档在不同模型眼里占用的空间大小也不一样。

光变成代号(数字)还不够。如果只是数字 4018329215,计算机只知道它们是不同的代号,依然不知道它们的含义和关系(比如它不知道"苹果"和"香蕉"都是水果,应该离得近一点;而"苹果"和"飞机"离得远)。

为了解决这个问题,实际生产中会紧接着做第二步:向量化嵌入(Embedding)

4. 隐藏层维度

大模型内部的"隐藏层维度(Hidden Dimension,比如 4096 维或 8192 维)",本质上就是给每一个词分配了一个拥有几千个特征的"多维标签档案"

为了让你更有画面感,我们可以把这 4096 个维度想象成 4096 个无形的"属性裁判" 。当"苹果"这个词进入大模型时,这几千个裁判会同时对它打分:

  • 第 1 个维度裁判 (主管"水果属性"):打分 +0.95(极度相关)

  • 第 2 个维度裁判 (主管"科技公司属性"):打分 +0.88(也是苹果)

  • 第 3 个维度裁判 (主管"危险品属性"):打分 -0.99(完全无关,狠狠扣分)

  • 第 4 个维度裁判 (主管"颜色-红色"):打分 +0.60

  • ......(一直到第 4096 个维度)

为什么需要这么多维度(几千维)?

如果只用几个简单的标签(比如"是水果吗:是/否"、"是电子产品吗:是/否"),模型根本无法表达复杂的现实世界。

但如果有 4096 个维度,大模型就能把一个词揉碎了,从语义、语境、感情色彩、语法角色、上下文关联等成千上万个极其微小的角度去定义它。

随着层数加深,这些标签会发生什么?

这正是大模型最神奇的地方:

  • 浅层,这 4096 个维度可能只记录一些基础标签(比如:是不是名词、是不是标点)。

  • 当数据经过几十层 Transformer 的疯狂运算后,到了深层 ,这 4096 个维度的含义会发生质变------它们开始记录极其抽象的逻辑标签(比如: "当前语境下,这个词指的是能吃的苹果,还是开发布会的苹果" )。

所以,隐藏层维度的本质,就是大模型用来精细化量化万物、编织语义空间的"超级记分卡"

第二步:嵌入(Embedding)------ 赋予数字"灵魂"(坐标)

1. 为什么要从"数字编号"变成"一串高维浮点数"?

刚才我们把"苹果"编成了数字 892,把"香蕉"编成了数字 451

  • 但对计算机来说,892 只是一个代号,它完全不知道苹果和香蕉有什么关系。
  • 在计算机眼里,8921(假设 1 是"导弹")的距离,跟 892451 的距离没有任何区别。它没法理解"苹果和香蕉都是水果,应该离得近一点"。

所以,必须要把单纯的"代号(整数)",变成一串带有坐标特征的数字(高维浮点数,比如 [0.25, -0.88, 1.42, ...] 。这串数字就是所谓的向量

分词器把文字变成整数编号(比如 892)之后,要把这些整数变成高维度的向量值,其实靠的是大模型里一个极其基础但又极其核心的组件------嵌入层(Embedding Layer) ,或者叫"查表矩阵"。这个过程就像是"查字典"。

整个过程可以拆解为以下三个步骤:

1. 准备一张巨大的"坐标字典"(嵌入矩阵)

在大模型刚被创造出来、开始训练之前,工程师会在模型内部初始化一个超级巨大的表格(矩阵)

  • 行数 :等于大模型的词表大小(比如词表里一共有 10 万个 Token,这个表格就有 10 万行)。每一行刚好对应词表里的一个 Token。
  • 列数 :等于向量的维度(比如 4096 维,这一行就包含 4096 个浮点数)。

这个表格里的每一个格子,最初都填满了随机的数字。

  1. 精准"查表"(Lookup)

当分词器把一句话切成 Token,并把每个 Token 都变成了整数编号(比如 892)之后:

  • 计算机根本不需要做什么复杂的数学公式计算。
  • 它直接拿着编号 892 ,像查字典一样,径直走到这个巨型表格的第 892 行
  • 把这一行里整整齐齐排好的 4096 个浮点数(比如 [0.25, -0.88, 1.42, ...])直接复制出来。

这一行复制出来的高维浮点数组,就是这个 Token 的向量。

3. 灵魂拷问:表格里的这些坐标数字,是怎么来的?

你可能会好奇:表格里的这成千上万个浮点数,一开始既然是随机填的,凭什么它们就能代表"语义坐标"?

这就全靠大模型前期经历的海量训练(Pre-training)了:

  1. 随机猜想:刚开始时,表格里的坐标是乱填的,"苹果"和"香蕉"的坐标离得十万八千里。
  2. 在海量文本中挨打:模型在读几万亿字的网络小说、论文、新闻时,发现自己经常预测错下一个字。
  3. 梯度调整(微调坐标) :每当模型猜错,它就会通过一套叫"反向传播"的算法,疯狂调整这个巨型表格里的坐标。比如它发现"苹果"和"香蕉"总是出现在类似的语境里,它就会悄悄把这两行数字拉近一点;把"苹果"和"导弹"推得远一点。
  4. 大功告成:经过几个月、消耗无数算力的训练后,这个表格里的每一个坐标都被赋予了真正的"语义灵魂"。

2. 什么是"多维空间"和"语义坐标"?

为了让计算机明白意思,工程师在它的虚拟世界里造了一个超级巨大的多维空间(在真实大模型里,这个空间通常有几千个维度,也就是每样东西都有几千个属性标签)。

为了好理解,我们把这个"几千维的空间"简化成一个二维地图(只有 X 轴和 Y 轴)

  • 假设 X 轴 代表:"偏甜还是偏咸"
  • 假设 Y 轴 代表:"是水果还是武器"

在这个地图上:

  • "苹果" 的坐标可能是:(2.5, 9.0) (代表它挺甜,且属于水果大类)
  • "香蕉" 的坐标可能是:(2.7, 9.1) (代表它也挺甜,且也属于水果大类)
  • "导弹" 的坐标可能是:(-5.0, -9.0) (代表它完全不甜,且属于武器大类)

3. 神奇的事情发生了------"意思"变成了"距离"

当所有的字都被换成了地图上的坐标后,计算机突然拥有了一种超能力:它可以通过计算两个坐标之间的距离,来判断这两个词的意思是不是差不多!

  • 因为"苹果"的坐标 (2.5, 9.0) 和"香蕉"的坐标 (2.7, 9.1) 离得非常近,计算机就会自动得出结论:"这两个东西是亲戚,意思很接近!"
  • 而"苹果"和"导弹"离得十万八千里,计算机就知道它们风马牛不相及。

假设用户在企业的客服系统里输入了这样一句话:

"我的手机屏幕碎了,能保修吗?"

第一步:Token 级别的向量(搞懂每个字/词的语义)

系统首先用分词器把这句话切成 Token,并去"词典矩阵"里查出它们各自的高维浮点数组(即 Token 向量):

  • "我" -> 查到一个浮点数组(代表第一人称代词的坐标)
  • "手机" -> 查到一个浮点数组(代表数码硬件的坐标)
  • "屏幕" -> 查到一个浮点数组(代表硬件组件的坐标)
  • "碎了" -> 查到一个浮点数组(代表物理损坏状态的坐标)
  • "保修" -> 查到一个浮点数组(代表售后服务政策的坐标)

这时候,大模型虽然拿到了这一堆独立的浮点数,但它还不知道这几句话组合在一起到底想干嘛。不过,这些 Token 向量帮模型在底层锁定了几个关键领域:数码、硬件、损坏、售后

第二步:整句话级别的向量(搞懂整句话的整体意图)

接下来,大模型通过内部的计算,把上面这几个词的浮点数揉合、融汇 在一起,最终提炼并压缩成一组代表整句话的高维浮点数组(整句向量)

我们可以把这个过程拆得更细一点,看看它是怎么从"一堆独立的词"变成"一个代表整句话的向量"的: 第一步:让词互相融合------这正是"注意力机制"的功劳

正如你所感觉到的,把这几个词的浮点数"揉合、融汇"在一起的核心引擎,就是 Transformer 的注意力机制

  • 在这一步之前,每个词的向量是孤立的。
  • 通过注意力机制,模型计算了"手机"和"屏幕"、"碎了"、"保修"之间的强关联。
  • 经过多层注意力网络的计算,每个词的向量里都被强行注入了上下文语境。此时,虽然它们还是一个个独立的词向量,但它们的含义已经变得极其立体和精准了。

第二步:把一堆向量压缩成一个向量------"池化(Pooling)"

但是,用户输入一句话可能包含 10 个 Token,模型最后会输出 10 个融汇了上下文的词向量。

  • 如果我们要拿去和数据库里的几万篇文档比对,数据库里存的往往是一整篇文章或一整段话的单个大向量
  • 怎么把这 10 个词向量变成 1 个整句向量呢?
  • 工程师会用一个叫 Pooling(池化) 的数学操作(比如最简单的均值池化 Mean Pooling ------把这 10 个词的浮点数对应相加取平均,或者提取某个专门用来代表全句的特殊标记如 [CLS] 的向量)。

假设这个整句向量的最终坐标是:[0.35, -1.21, 0.88, ..., 0.42](几千维)。

作用(以知识库检索 RAG 为例) : 企业内部有成千上万篇规章制度文档。系统提前把这些文档的每一段话也都转成了"整句向量"。

  • 文档 A:《关于手机意外损坏及碎屏保修政策的说明》(它的整句向量坐标和用户的问题极度接近)
  • 文档 B:《公司员工食堂就餐补贴标准》(它的整句向量坐标离用户的问题十万八千里)

系统拿着用户那句话的"整句向量",去和企业数据库里所有文档的整句向量比对距离。瞬间就能精准挑出文档 A,然后把内容喂给大模型,让大模型回答:"手机碎屏属于意外损坏,如果在保修期内且购买了碎屏险,可以免费维修......"

四 核心引擎的Transformer 层矩阵

当你在对话框敲下回车的那一秒,后台发生的真实流程是:

  1. 清洗:把你的输入规范化。
  2. 分词(Tokenize) :用训练好的分词器,把你的话切成一个个 Token 碎片,并查表变成一串整数数字
  3. 嵌入(Embed) :把这些整数数字扔进一个巨大的矩阵里,变成带有语义坐标的向量(一串高维浮点数)
  4. 送入模型:大模型带着这串带有坐标的数字,开始在它那几千亿个参数的"超级调音台"里进行疯狂的数学计算,最终吐出下一个字。

大语言模型(LLM)回答用户问题过程的本质,其实是一场规模空前宏大的"数学矩阵连环计算" 。它并没有人类的意识、情感或逻辑推理器官,它所有的"回答",都是通过极其复杂的数学运算,一字一顿地"预测"出来的

这个计算过程拆解为四个核心步骤:

第一步:把输入文字送进"巨型调音台"(输入与初始化)

当你把处理好的 Token 序号(比如 [40, 1832, 9215])输入大模型后,计算正式开始:

  • 每一个 Token 序号会先转换成我们前面提到的高维浮点数(向量)。

  • 紧接着,这串数字会进入大模型的核心神经网络(通常是 Transformer 架构)

  • 这个网络里有几百亿甚至上万亿个"参数"(你可以把它们想象成几千亿个大大小小的数学开关或旋钮)。这些参数在模型被训练时就已经固定下来了。

第二步:核心魔法------注意力机制(Attention)让文字"互相看一眼"

这是大模型最厉害的地方。如果只是孤立地处理每个字,模型就无法理解上下文。

  • 计算词与词的关系:在计算过程中,模型会用数学公式让句子里的每一个字和周围的所有字都"互相计算一下关联度"。

  • 举个例子 :当看到句子"苹果发布了新款手机,的屏幕非常大"时,"它"这个字通过注意力机制计算,会把高强度的数学权重指向前面的"苹果手机",而不是其他毫不相干的词。

  • 动态修正 :经过这一层层的矩阵乘法计算,原本静态的字义会变成带有完整上下文语境的动态含义

第三步:概率结算"猜"出接下来的第一个字

当全篇文字在几千亿个参数里翻江倒海地计算完最后一层后,会发生一件非常奇妙的事:

  • 模型会把它的词典(比如几十万个 Token)里的每一个字、每一个词 ,都通过最后一道数学公式算出一个概率得分(分数从高到低)

  • 举个具体场景:如果你问它"中国的首都是哪里?",经过复杂的参数计算后,词典里所有字的得分可能是这样的:

    • "北京" -> 得分 95%

    • "上海" -> 得分 3%

    • "西安" -> 得分 1%

    • ......其他字 -> 得分接近 0%

  • 模型根据这些得分(通常会加入一点随机性),最终挑出了分数最高的那个字或词: "北京"

第四步:自回归循环------像"挤牙膏"一样一字一顿往外蹦

大模型一次计算,其实只能吐出"一个字/一个 Token" 。那它是怎么写出一整段话的呢?靠的是疯狂的循环(Autoregressive Loop)

  1. 第 1 次计算:输入你的问题,模型计算并吐出了第一个字:"北"。

  2. 第 2 次计算 :模型把刚才吐出来的"北"字,拼回到你原始的问题后面,变成一串新的长文本,再次整体送入模型内部进行新一轮的矩阵计算,吐出第二个字:"京"。

  3. 第 3 次计算:把"北京"再拼到后面,计算吐出第三个字:"的"。

  4. 以此类推......直到模型在计算中吐出了一个代表"回答结束"的特殊 Token(Stop Token),整个计算过程才算大功告成。

五 Transformer 层矩阵每层的用途

把大模型堆叠到 32 层、80 层甚至上百层,是深度学习中一个极其关键的设计------ "深度(Depth)"才是赋予大模型复杂逻辑和抽象思考能力的核心引擎。

如果把大模型比作一个破案的侦探团,这 80 层结构绝不是简单的"人多力量大"或"机械重复",而是一条层层递进、分工极其明确的"流水线"

我们可以从"为什么要这么多层"以及"每层都在干什么"两个维度来彻底拆解。

5.1 为什么非要设置高达 32 层甚至 80 层?

在深度学习的理论中, "深度"比"宽度"更能高效地表达复杂的数学函数。具体原因有两点:

  1. 逐层抽象的"思维阶梯"

    人类理解世界是分层次的(比如看一辆车:先看像素点 →\rightarrow → 再看线条 →\rightarrow → 再看轮子和车门 →\rightarrow → 最后认出这是一辆特斯拉)。大模型也是一样,浅层只能看懂字面意思,必须通过几十层的接力,才能把零散的文字抽象成高维的"概念和逻辑"。层数太少(比如只有 3 层),模型就只能记住表面的词语搭配,根本无法进行复杂的推理。

  2. 非线性能力的指数级爆发

    每一层 Transformer 都会对数据进行一次复杂的非线性变换(通过矩阵乘法和激活函数)。80 层叠加在一起,意味着大模型拥有了80 级阶梯式的筛选与加工能力,能够拟合极其晦涩、复杂的自然语言规律。

5.2 这么多的层,每一层到底在干什么?

虽然每一层用到的数学结构(注意力机制 + 前馈网络)都是一样的,但因为它们所处的位置不同,输入的数据已经被前面各层加工过了,所以每一层分到的"工作职责"有着天壤之别

科学家通过"探针技术(Probing)"去偷窥每一层内部的神经元时,发现 80 层大模型的职责划分呈现出非常清晰的分工阶梯

1. 浅层(前 1/3,如第 1 ~ 25 层):打好基础的"语法与字面工种"

  • 干什么:这一层的核心任务是处理最基础的语言学特征。

  • 具体表现

    • 识别字面意思、标点符号、词性(比如分清哪个是名词、哪个是动词)。

    • 捕捉局部的搭配(比如看到"红",大概率后面能接"苹果"或"旗帜")。

    • 这一层的视野比较窄,主要盯着周边的几个词(局部上下文)。

2. 中层(中 1/3,如第 26 ~ 55 层):承上启下的"语义与语法结构工种"

  • 干什么:这一层开始把零散的词汇组装成有逻辑的句子结构。

  • 具体表现

    • 处理代词消解(比如一句话里出现"小明和小红去买书,买了一本小说",中层负责把"他"准确锁定指向"小明")。

    • 建立长距离的语法照应、短语从句的嵌套关系。

    • 开始形成初步的"事实记忆"(比如把历史人物、地理常识和当前的语境挂钩)。

3. 深层(后 1/3,如第 56 ~ 80 层):运筹帷幄的"高级逻辑与意图工种"

  • 干什么:这是大模型最烧脑、最显"聪明"的区域,负责处理抽象的逻辑和任务目标。

  • 具体表现

    • 进行复杂的因果推导、数学计算、代码逻辑拆解。

    • 对齐人类的指令(比如判断用户是让写诗、翻译还是写代码,并调整整个文本的风格走向)。

    • 在最后几层,模型开始把前面所有的思考汇聚起来,计算出"接下来最应该输出哪一个字"。

如果把大模型训练和推理的过程看作是一次长跑:

  • 前几层在负责"认路和看清路标"(处理字面和语法)。

  • 中段各层在负责"辨别方向和规划路线"(处理句意和逻辑关联)。

  • 最后几层在负责"冲刺和精准落脚"(输出最终答案)。

这就是为什么大模型必须拥有几十层甚至上百层结构------只有通过这种长距离、多阶段的接力加工,冰冷的数字矩阵才能真正涌现出类似人类的语言智慧与逻辑推理能力。

六 回答问题时的概率计算

模型会把它的词典(比如几十万个 Token)里的每一个字、每一个词,都通过最后一道数学公式算出一个概率得分(分数从高到低)。这个计算量大的惊人。为什么大模型训练和推理需要成千上万张价格高昂的显卡(比如 NVIDIA 的 H100、B200),为什么大厂的服务器集群要通宵达旦地烧电,核心原因就是因为在词典的几十万个候选词里,把每个词都算出一个概率得分。

6.1 每吐一个字,究竟要算多少次?

假设一个大模型的词典里有 100,000(十万)个 Token ,它的内部参数量是 700亿(70B)

当模型准备吐出第一个字时:

  1. 你的输入文本要和这 700 亿个参数进行一轮复杂的矩阵乘法。
  2. 到了最后一步(专业叫 LM Head / 输出层),模型要把隐藏层的状态(假设维度是 8192),去和那 100,000 个词的向量进行一次巨大的矩阵乘法(8192 × 100,000)。
  3. 这一瞬间,它要一口气算出这 10 万个词各自的原始得分(Logits),再通过一个数学函数(Softmax)把它们变成 0% 到 100% 的概率。

这意味着:仅仅为了让你屏幕上蹦出"下意识的第一个字",计算机在后台就已经完成了万亿级别的浮点数运算(FLOPs)。

而如果你让它写一篇 500 字的文章,它就要把上面这个恐怖的循环重复 500 次!

为了清晰理解这一过程,我们可以用具体的数字和矩阵运算来还原大模型顶层(LM Head)输出时的三个核心步骤。

假设当前模型的隐藏层维度是 4096 ,词表里总共有 100,000 个 Token

1. 矩阵乘法打分(得到 10 万个原始得分)

在神经网络的最后一层,经过多层运算后,当前位置输出的是一个 1 行 × 4096 列的特征向量(代表这个位置提炼出的所有语义特征)。

  • LM Head 矩阵 :内部存储着一个大小为 4096 行 × 100,000 列的权重矩阵。

  • 矩阵乘法运算

    将这个 1×40961 \times 4096 1×4096 的向量,与 4096×100,0004096 \times 100,000 4096×100,000 的矩阵相乘,数学计算后会得到一个 1×100,0001 \times 100,000 1×100,000 的行向量

  • 结果 :这个新向量里包含了 10 万个数字(在工程上称为 Logits 或原始得分) ,分别对应词表里的每一个 Token。

  • 举例

    • 编号 45021(对应词表里的文字"苹")的原始得分:12.5

    • 编号 1200(对应词表里的其他词)的原始得分:8.1

    • 编号 89(对应词表里的某个标点)的原始得分:-2.3

2. 通过 Softmax 变成 10 万个概率

刚才算出来的原始得分(如 12.5、8.1、-2.3)是大小不一的绝对数值,无法直接用于筛选。

  • Softmax 运算

    系统把这 10 万个原始得分代入 Softmax 数学公式,将它们统一转换成总和为 100%(或 1.0)的相对概率分布

  • 举例转换后

    • 编号 45021("苹")的概率被转换为:85.4%

    • 编号 1200 的概率被转换为:12.1%

    • 其他 99,998 个 Token 的概率总和:不足 2.5%

3. 确定性的 Token 编号输出

在这一步,模型的选择机制是非常明确和数字化的:

  • 它绝不会输出一个诸如"这大概是一个水果概念"的模糊语义。

  • 而是通过最大值筛选(或结合温度系数采样),直接锁定概率最高的那一个精确的数字编号45021

  • 计算机去查词表(Vocabulary Table),发现编号 45021 严丝合缝地对应着字符串 "苹"

  • 最终,这个确定的字符被输出并呈现。

在多轮对话中,大模型每准备吐出新一轮的第一个字 (也就是新一轮的第 1 个 Token),它的计算上下文已经包含了前面所有轮次中出现过的所有提问和回答的字数总和

我们可以把多轮对话的真实运作机制拆解为以下几个关键点:

  1. 多轮对话的"累加滚动"机制

大模型本身是没有人类意义上的"长期记忆"的,它是一个纯粹的无状态(Stateless)文本预测器。这意味着:

  • 每次你点击发送新消息时,客户端(或 API 后端)并不是只把你的最新一句发给模型。

  • 而是把"第 1 轮你的提问 + 第 1 轮模型的回答 + 第 2 轮你的提问 + 第 2 轮模型的回答......一直到当前最新的一句",全部打包成一整串长长的文本,重新塞进模型里。

  • 因此,当要预测新一轮的第一个字时,这串上下文的总长度是前面所有历史对话 Token 数量的总和

4. 怎么解决吐出每个token都要计算80层的性能灾难?

哪怕是从第二个字开始,也必须原封不动地把前面 80 层全部重新计算一遍。**

这正是大模型在推理(Decoding)阶段最大的痛点和计算瓶颈。我们可以从"为什么必须重算"以及"业界怎么解决这个性能灾难"两个方面来拆解:

1. 为什么从第二个字开始,还要重跑 80 层?

因为大模型内部的每一层,都是一个巨大的动态上下文"搅拌机"

  • 当你吐出第一个新字(比如"苹")并把它拼到尾巴上时,整段话的整体语境、词与词之间的关联(注意力机制 Attention)全部都发生了微小的改变

  • 这个微小的改变必须从第 1 层开始,一级一级向上透传。

  • 浅层要重新识别新字的词性,中层要重新梳理长距离的语意照应,深层要重新调整逻辑推导。

  • 如果不重跑,直接跳到第 80 层,那第 80 层拿到的输入根本没有包含这个新字带来的上下文影响,模型就会立刻逻辑错乱、胡言乱语。

所以,每吐一个字,整栋 80 层的"摩天大楼"就要从地基到顶楼完整运转一次。吐 100 个字,这 80 层就要完整"硬跑"100 次。

2. 业界怎么解决这个巨大的性能灾难?

1) KV Cache 缓存机制

你可能会觉得奇怪:既然每吐一个字都要把前面的几百个甚至几千个字重新算一遍,那算力岂不是要爆炸?

为了不把以前已经算过的、汗水淋漓的中间结果白白丢掉,工程师发明了一个极其关键的加速技术------KV Cache(键值缓存)

  • 没有 KV Cache 的灾难

    计算第 100 个字时,把前面 99 个字重新从第 1 层算到第 80 层。

  • 有 KV Cache 的聪明做法

    • 前 99 个字在每一层算出来的中间特征(Key 和 Value 矩阵),被宝贝似地缓存(Cache)在显存里

    • 当第 100 个字(新字)蹦出来时,系统再也不用去重新计算前 99 个字了

    • 它只需要把这个"新字"单独送进去,让它和显存里存好的前 99 个字的缓存进行一次快速的数学拼接和交互即可。

从逻辑上讲,每吐一个字,的确都要重新把 80 层全走一遍 ;但在工程实现上,因为有了 KV Cache 缓存机制的加持,前面那些旧字不用重复计算,从而让大模型每秒能连续吐出几十个 Token,实现了流畅的打字机效果。

2) 物理层面的硬限制:最大上下文窗口(Context Window)
  • 每一个模型在设计之初,都有一个硬性的最大上下文长度上限(比如 8k、32k、128k 甚至 200k 个 Token)。
  • 一旦对话累积的 Token 总数触碰到了这个物理天花板,系统就会报错或者拒绝继续接收新内容。这就是为什么有些时候你和 AI 聊得太久,它会提示"超出最大长度限制"或者开始"健忘"。
3) 业界核心绝招:PageAttention 与显存池化(以 vLLM 为代表)

在早期,KV Cache 需要连续大块的显存来存放。如果中间有空隙,就会造成极大的浪费。

  • 现代推理引擎(如大名鼎鼎的 vLLM )引入了类似操作系统内存管理的 Paging(分页)技术
  • 它把 KV Cache 切成大小固定的小数据块(Blocks),像管理电脑内存的虚拟内存页一样,按需分配、离散存储。这大幅提高了显存利用率,避免了碎片化导致的显存浪费。
4) "丢车保帅":滑动窗口与上下文裁剪(Context Window Sliding / Truncation)

如果对话实在太长,超过了舒适区,系统或应用层会采取策略:

  • 滑动窗口(Sliding Window) :只保留最近的 N 个 Token 的 KV Cache,把最早期的几轮对话缓存直接从显存里抹掉。
  • 历史对话摘要(Summarization) :很多长文本对话应用在后台暗中运行一个机制------当聊天记录达到一定长度时,用另一个小模型把前面的老内容浓缩成一段简短的摘要,用新摘要替换掉长篇大论的旧历史,从而瞬间释放 KV Cache 的显存空间。

6.2 大模型根据什么判断停止吐字?

大模型之所以能在合适的时候停下来,靠的是"特殊结束符""硬性安全阀"的双重保险:

1. 第一重保险:特殊的"结束 Token"(<EOS>

在大模型那 10 万个词表的候选名单里,其实藏着几个特殊的"功能性 Token",其中最核心的就是 <EOS>(End of Sequence,意为:序列结束)

  1. 它是怎么学会停的?

    • 在人类给大模型喂养训练数据(比如海量的网页、书本)时,每一篇文章、每一段对话的最末尾 ,都会被人为加上一个特殊的标记------<EOS>
    • 久而久之,大模型在不断的梯度下降中发现:当一句话的意思表达完整、逻辑闭环时,下一个最应该出现的"高概率词"往往就是这个 <EOS>
  2. 实战中的运作过程

    • 模型吐完"苹果"这最后一个字后,进入下一轮预测。
    • 此时,LM Head 算出来的 10 万个概率里, <EOS> 这个 Token 的概率突然飙升到了第一名(比如 95%)
    • 模型吐出了 <EOS>。外部的控制程序(API 框架)一旦检测到模型吐出了这个特殊的结束符,就会立刻切断电源、停止循环,并把屏幕前的文字完整呈现给用户。

第二重保险:硬性兜底的"安全阀"(防止死循环或话痨)

有时候,模型可能因为"脑回路卡壳"或者语境复杂,迟迟不肯吐出 <EOS>,或者开始陷入无限的车轱辘话循环。这时候就需要人类程序员在外部加上几道硬性保险:

  1. 最大长度限制(Max Tokens)

    • 工程师在调用模型时,会强制设定一个硬规矩(例如:max_tokens = 2048)。
    • 不管模型有没有说完,只要它吐出的字数达到了 2048 个 Token,外部程序就会强行一脚踩死刹车,把生成过程强制中断。
  2. 自定义停止词(Stop Words)

    • 在特定场景下(比如让模型写代码或输出 JSON),工程师会设定一些特殊的停止词,比如 </json> 或 ````。
    • 一旦模型在生成过程中吐出了这几个字,外部程序就会立刻喊停。

6.3 既然算力要求这么夸张,为什么它能跑起来?

如果用你家里的普通电脑 CPU 去算,可能吐一个字需要等几分钟,甚至直接死机。现代大模型之所以能做到"秒回",全靠以下三大杀手锏:

  1. GPU 的"超强并行暴力美学

    • CPU 擅长处理复杂的、单条的逻辑,而 GPU(显卡)天生就是个并行计算怪兽,内部有成千上万个微型计算核心。
    • 它不是一个一个词慢慢算的,而是让几十万个词的概率计算同时在显卡的无数个核心里"一气呵成"。
  2. 千卡集群的分布式协同

    • 像 GPT-4、Claude 或者通义千问这种级别的模型,根本不是装在一台电脑里的。它们被"切碎"并分装在由成百上千张顶级服务器显卡组成的集群里,大家通过超高速的光纤网络一起协同计算。
  3. 算法优化

  • FlashAttention(闪存注意力优化)

    • 怎么优化的 :它不是不计算,而是优化了显卡搬运数据的路线。以前算注意力机制时,显卡要不停地把中间结果写到显存(HBM)里再读出来,这非常慢。FlashAttention 改变了计算顺序,让数据直接在显卡的高速缓存(SRAM)里一气呵成,大幅减少了显卡的"读写奔波" ,从而让训练和推理速度飞起。
  • 量化技术(Quantization,如 INT8 / INT4)

    • 怎么优化的:本来大模型的参数和计算都是高精度的浮点数(比如 16 位)。量化就是把它们"压缩"成低精度的数字(比如 4 位或 8 位)。这就好比原本用高精度直尺量,现在用粗时刻的尺子量。计算的数据量变小了,显卡搬运和乘法的速度自然就大幅提升了,甚至能让大模型塞进普通的消费级显卡里跑。
  • MoE(Mixture of Experts,混合专家架构)

    • 怎么优化的 :这才是真正实现了"只算一部分"的技术。比如一个 700 亿参数的模型,每次处理一个字时,MoE 架构会通过一个"路由器"动态判断:这个问题只需要调用其中 2 个专家(比如 100 亿参数)就能搞定,剩下的 600 亿参数直接处于休眠状态。这样一来,虽然模型总参数很大,但每次实际计算的量只有一小部分。

七 AI 是怎么通过犯错来变聪明的?

我们用刚才提到的"苹果、香蕉和导弹"来做个生动的模拟。

第一步:AI 的"盲猜"与"挨打"(计算误差)

在训练刚开始时,大模型的脑子是一片空白,表格里的坐标全都是瞎填的随机数。

  1. AI 开始做填空题

    • 训练材料里有一句话:"小明去超市买了一个大大的苹果。"
    • 模型只看到了前半句:"小明去超市买了一个大大的......",让它猜下一个字是什么。
  2. AI 瞎猜了一个

    • 因为它还没学会,它可能胡乱猜了一个词: "导弹" (心想:也许是个危险物品呢?)。
  3. 现实无情打脸(计算误差 / Loss)

    • 系统拿标准答案("苹果")一对照,发现 AI 猜错了,而且错得离谱。
    • 系统会用一个数学公式算出这次犯错的"惩罚分数"(叫作 Loss / 损失)。猜得越离谱,惩罚分数越高。

这个"惩罚分数(Loss / 损失)"到底是怎么算出来的,我们用一个极度简化但原理完全一致的例子来拆解。

假设词典里现在只有 3 个候选词["苹果", "导弹", "飞机"]

训练材料里的一句话是:"我喜欢吃苹果"。

  • 标准答案(真实标签) :正确的目标词是 "苹果"

在某一轮训练中,模型对这三个词进行了概率预测。我们来看看"猜得准""猜得离谱"时,损失函数(Loss)是怎么打分的。

情况一:模型猜得不错(低惩罚)

模型经过计算,给这三个词分配的概率如下:

  • "苹果"80% (0.8) (模型觉得有很大可能是它)
  • "导弹"10% (0.1)
  • "飞机"10% (0.1)

怎么算损失(Penalty)?

在深度学习中,最常用的分类损失函数叫交叉熵损失(Cross-Entropy Loss) 。它的核心逻辑非常纯粹:它只看"正确答案"被模型赋予了多少概率,然后取个负数的对数(-log)。

用大白话翻译就是:给正确答案的概率越低,惩罚分数(Loss)就越高;给的概率越高,惩罚分数就越接近 0。

  • 在情况一中,正确答案"苹果"的概率是 0.8
  • 算出来的 Loss 大约是 0.22
  • 评价:分数很低,说明模型猜得不错,系统只给予微小的惩罚。

情况二:模型猜得离谱(高惩罚 ------ 正如我们前面假设的)

还是刚才那句话,如果模型还没学会,瞎猜了一个结果:

  • "苹果"1% (0.01) (模型觉得不可能是苹果)
  • "导弹"80% (0.8) (模型觉得是个危险物品)
  • "飞机"19% (0.19)

怎么算损失?

  • 这次,正确答案"苹果"可怜的概率只有 0.01
  • 0.01 代入损失计算公式( −log⁡(0.01)-\log(0.01) −log(0.01)),算出来的 Loss 大约是 4.6

对比一下

  • 猜得准时,Loss 是 0.22
  • 猜得离谱时,Loss 飙升到了 4.6(翻了二十多倍!如果概率更低,比如 0.000001,Loss 会飙升到十几甚至上百)。

这个"惩罚分数"有什么用?这就是 AI 学习的"方向盘":

  1. 量化错误 :AI 自己是不会觉得"不好意思"的,但 Loss 这个数学公式把它的"愚蠢程度"变成了一个具体的冷冰冰的数字(比如 4.6)
  2. 驱动反向传播 :数字越大,说明这次犯错性质越恶劣。系统就会拿着这个高额的罚分,顺着我们前面提到的"反向传播"通道,对全网的参数和嵌入矩阵进行一次狠狠的纠偏重锤,迫使它下次把"苹果"的概率往上提,把"导弹"的概率往下压。

所以,所谓的"计算损失",本质上就是拿 AI 给正确答案开出的概率,去和 100% 的满分做对比,算出一个代表"错得有多离谱"的罚分。只要正确答案的预测概率不是绝对的 100%(即 1.01.0 1.0) ,哪怕是 99%,系统也一样会给出惩罚(Loss 大于 0),并触发反向传播进行纠偏。

第二步:顺藤摸瓜的"甩锅"游戏(反向传播 / Backpropagation)

既然犯了错,总得找出是谁的责任吧?这就是大名鼎鼎的"反向传播(Backpropagation)"。

  • 什么是反向传播? 顾名思义,就是从结果倒推原因

  • 怎么倒推?

我们可以把大模型想象成一家拥有多层审批流的大型跨国公司

最终的产品就是模型吐出的那个错字------ "导弹" 。而我们的目标,是通过一场严密的内部审计,把责任精确追溯到源头的"员工"(即 Embedding 矩阵里的坐标)。

整个反向传播(Backpropagation)的倒推破案过程,可以分为三个清晰的阶段:

第一阶段:从终点开具"罚单"(输出层审计)

  • 案发现场

    • 模型在最后一层(输出层)通过投票,给"导弹"投了 99% 的高票,给"苹果"投了 0.01% 的票。
    • 结果现实的正确答案是"苹果"。
  • 审计官介入(Loss 罚分)

    • 系统拿着罚分公式算出了一个巨大的惩罚值(比如 9.2 分 的重罚)。
    • 审计官立刻对输出层的负责人拍案质问: "是谁批准把'导弹'的票数推得这么高的?!"
    • 负责人(输出层的参数矩阵)满头大汗地查账,发现:"是因为倒数第二层传过来的特征信号,让我觉得这里应该是个危险物品。"

第二阶段:顺着多米诺骨牌往回倒推(隐藏层与注意力层)

既然找到了输出层的直接责任人,系统开始利用微积分里的"链式法则(Chain Rule)",像剥洋葱一样一层层往回倒推:

  1. 倒推到最后一层 Transformer 模块

    • 系统质问这一层的注意力机制(Attention): "你刚才计算时,把哪个词的权重放得最高?"
    • 注意力机制回答:"我刚才看了前半句'买了一个大大的......',然后把极其强烈的注意力权重,投给了上文里的某个特征词。"
  2. 倒推到更深的前几层

    • 系统继续顺着网线往前查:"那这个特征词在上一层的综合含义是什么?是谁把它解释成带有'硬质、危险、工业'色彩的?"
    • 每一层的参数都会收到一份根据"贡献大小"分配的次级罚单。贡献越大的参数,受到的质疑和微调压力就越大。

第三阶段:直击源头------查明"Embedding 矩阵"的病灶

当反向传播的浪潮一路向西,穿过几十层繁复的神经网络,最终冲到了最底层的源头------Embedding 矩阵(那张存着所有词坐标的巨型表格)时,真相终于大白:

  • 查明病灶

    • 系统发现,导致这一连串连锁错误的最深层根源,竟然是"源头输入"出了问题。
    • 在当前的坐标系里, "苹果"和"导弹"的物理距离挨得太近了(或者模型还没学会把它们区分开),导致"苹果"触发的初始信号,被错误地引向了具有相似特征的轨道,最终在大模型的深层运算中被放大成了"导弹"。
  • 下达最终整改令(梯度下降)

    • 既然找到了源头的罪魁祸首,系统就会对 Embedding 矩阵下达精准的惩罚指令:

      1. 狠狠把"苹果"和"导弹"的坐标推开:"你们俩以后不许在语义空间里靠这么近!"
      2. 悄悄把"苹果"和"香蕉"、"水果"等词的坐标拉近:"多跟这些词串门,下次遇到买东西的语境,你们才不会认错人。"

所谓的"倒推",本质上就是利用微积分的求导法则,把最终的错误惩罚(Loss)像传导多米诺骨牌一样,从最后一层原路返回到第一层

每一层的参数和矩阵都会根据这张"罚单",获得一个微小的调整方向和力度(专业术语叫梯度 Gradient )。正是通过这种从后往前的全链路复盘,大模型才能精准地知道:为了不再犯同样的错,我究竟该把内部的哪一个旋钮拧紧一点,把哪一个词的坐标挪动几毫米。

第三步:微调坐标(梯度下降 / Gradient Descent)

既然找到了责任人,下一步就是修改坐标。这个过程在数学上叫"梯度下降",

"梯度(Gradient)到底是怎么算出来的?"

1. 什么是"梯度"(方向和力度)?

在微积分里,我们用导数(Derivative)梯度(Gradient)来表示"变化率"。

  • 方向(正负号) :代表"自变量(坐标)应该往哪个方向走,才能让损失(Loss)减少"。

    • 如果导数是正数 (比如 +2),说明坐标往右走 Loss 会变大,那你就得往左走(取反方向 -)。
    • 如果导数是负数 (比如 -3),说明坐标往左走 Loss 会变大,那你就得往右走(取反方向 +)。
  • 力度(绝对值大小) :代表"当前这个错误对这个参数的影响有多大"。

    • 数值越大(比如 50),说明这个参数是这次闯祸的"主力军",需要大力调整。
    • 数值越小(比如 0.001),说明这个参数跟这次错误关系不大,稍微动一下意思意思就行。

2. 举个具体例子------我们怎么算出"苹果"坐标的调整量?

假设现在我们在调整 Embedding 矩阵里"苹果"这个词在某个维度上的坐标(我们暂时只看其中一维,假设它的当前坐标值是 2.5)。

1. 案发现场回顾

  • 模型刚才猜错成了"导弹",算出来的惩罚分数(Loss)是 9.2
  • 系统开始顺着网络往回倒推,算到"苹果"这个词的这个坐标时,微积分的链式法则开始发威。

2. 计算导数(偏导数)

系统在这个坐标 2.5 的位置上,算出了一个数学上的导数值(Slope / 坡度)

  • 假设算出来的导数是 +4.0

  • 这个 +4.0 包含了什么秘密?

    • 正号(方向) :意味着如果把坐标 2.5 往正方向(变大)调,Loss 会跟着变大(错得更离谱)。所以我们必须朝它的反方向------负方向(调小)走。
    • 数值(力度)4.0 这个数字比较大,说明这个坐标对这次错误负有主要责任,力度要够猛。

3. 乘以"学习率"(Learning Rate,控制步伐大小的油门)

AI 工程师在训练时,通常不敢直接把梯度拿来就用(因为一步迈太大容易扯到"蛋"),而是会乘以一个极小的固定系数,叫学习率(比如 0.01

最终,计算公式长这样:

坐标的新位置=旧位置−(学习率×梯度)\text{坐标的新位置} = \text{旧位置} - (\text{学习率} \times \text{梯度}) 坐标的新位置=旧位置−(学习率×梯度)

我们把数字代进去:

  • 旧坐标 = 2.5
  • 学习率 = 0.01
  • 梯度 = 4.0
  • 计算调整量 0.01×4.0=0.040.01 \times 4.0 = \mathbf{0.04} 0.01×4.0=0.04(这就是你说的"力度"的大小)。
  • 计算新坐标 2.5−(0.01×4.0)=2.5−0.04=2.462.5 - (0.01 \times 4.0) = 2.5 - 0.04 = \mathbf{2.46} 2.5−(0.01×4.0)=2.5−0.04=2.46。

通过这一整套严密的数学计算:

  1. 系统发现导数是正的,确定了"往左调(减小)"的方向。
  2. 系统通过导数大小和学习率的结合,算出了 0.04 这个精确的步长(力度)。
  3. "苹果"在这个维度的坐标,就从 2.5 精准地向下微调到了 2.46

大模型能从文盲进化成通才,靠的绝不是玄学,而是千亿个参数在每一轮预测出错后,通过微积分的链式法则,精准计算出每一个参数的"调整方向(正负)"与"微调力度(数值)",然后像精密的钟表一样同步拧动所有齿轮。 这就是深度学习最震撼人心的底层逻辑!

八 大模型的参数调整方法

如果真的要去对几千亿个模型参数逐一进行"盲盒试错",那确实是天方夜谭,就算把全球的算力加起来也做不到。

这里其实有一个非常关键的概念区分

1. 搞清楚"参数"和"超参数"的区别

  • 模型参数(Parameters) :也就是那几千亿个构成大模型脑回路的"矩阵坐标"。这部分绝对不需要人类手动去试,它们全是由反向传播和梯度下降算法自动更新的。
  • 超参数(Hyperparameters) :比如我们刚才提到的"学习率"、每次喂给模型多少数据的"批次大小(Batch Size)"等。人类要调的其实不是几千亿个参数,而是这几个"全局控制旋钮" (通常全局只有 3 到 5 个需要人工拍板)。

2. 既然只有几个旋钮,工程师是怎么确定它们的?

即便只是调这几个全局旋钮,面对动辄耗资数千万美元的大模型训练,工程师也不会靠"纯盲猜"。业界有一套极其严密的科学方法来避免翻车:

  • 缩放定律(Scaling Laws) : 这是大模型时代的"物理定律"。科研人员通过海量实验发现,超参数的最优值与模型大小之间存在着严格的数学比例关系。工程师绝不会直接去拿千亿参数的终极模型盲测,而是先训练一个微型的小版本(比如 10 亿参数),花极少的钱测出最完美的学习率,然后通过"缩放定律"直接推算出大模型需要的数值。
  • 自动化智能搜索(Bayesian Optimization) : 如果需要微调,工程师也会把这几个旋钮交个自动化搜索算法。算法会在一个极小的安全范围内自动组合测试,找出最优解,而不是靠人肉去碰运气。
  • 自带纠错的"动态油门"(Warmup 机制) : 现代大模型训练时,甚至不需要死盯着一个绝对完美的学习率。系统通常会设置预热期(Warmup) ------刚开始时学习率从 0 慢慢往上加,让模型平稳起步;训练稳定后再平滑衰减。这大大降低了人类设错参数的概率。

3. 深度学习中那 3 到 5 个需要人工拍板的"全局控制旋钮"到底是哪几个?

在训练一个像大模型这样的庞然大物时,决定整体走向的核心超参数(Hyperparameters)主要就是以下几个:

  • ① 学习率(Learning Rate, LR)

    • 干什么的:控制梯度下降时"迈步子的大小"(即油门深浅)。它是影响模型能不能正常收敛的最核心旋钮。
  • ② 批次大小(Batch Size)

    • 干什么的:决定模型每次"看一眼"吃掉多少文字(Token)。比如是一次看 100 万个 Token,还是 400 万个 Token。这直接决定了显存够不够用,也影响训练的平稳度。
  • ③ 权重衰减系数(Weight Decay / L2 Regularization)

    • 干什么的:相当于给模型的"脑回路"加一点约束(正则化),防止模型把某些特征记得太死、导致在没见过的新题上考砸(防止过拟合)。
  • ④ 优化器超参数(Optimizer Hyperparameters,如 AdamW 的 β1,β2 \beta_1, \beta_2 β1,β2)

    • 干什么的 :控制梯度下降算法的"惯性"和"历史记忆"。通常大家会直接套用经典的默认值(如 0.90.95),但在顶级大模型训练时,微调这些参数能榨出最后的性能。
  • ⑤ 学习率调度策略(LR Scheduler Type & Warmup 步数)

    • 干什么的:决定整个训练过程中,学习率什么时候开始加、加多久、什么时候开始往下掉(衰减)。

4. 自动化搜索算法(如贝叶斯优化)是怎么在小范围内找出最优解的?

人类不会靠肉眼去猜这几个旋钮的最佳组合。以网格搜索(Grid Search)贝叶斯优化(Bayesian Optimization)为例,我们来看看它是怎么自动工作的:

  • 举个具体例子

    假设工程师要帮一个中型模型寻找最优的学习率权重衰减系数

    1. 划定安全范围 :工程师根据经验,把学习率的安全范围划定在 10−4,10−310\^{-4}, 10\^{-3} 10−4,10−3 之间,权重衰减划定在 0.01,0.10.01, 0.1 0.01,0.1 之间。
    2. 算法试错与建立"概率地图" :自动化搜索算法(比如 Optuna 框架)会先随机挑几个组合(比如组合A:学习率 2×10−42 \times 10^{-4} 2×10−4,衰减 0.050.05 0.05)拿去让小模型跑个几小时,测出它的 Loss(误差)是 2.1
    3. 智能预测:算法根据这几个点的表现,在脑子里画一张"性能地图",它会猜:"根据刚才的结果,学习率如果再往左偏一点,Loss 可能会更低。"
    4. 锁定最优解 :算法自动调整数值,再去测试更有希望的组合。经过几十轮自动化"小跑实验",算法最终精准锁定了一组黄金组合(例如学习率 1.85×10−41.85 \times 10^{-4} 1.85×10−4),而这一切完全不需要人类熬夜去手动调。

5. Warmup(预热期)学习率从 0 慢慢往上加的"颗粒度"是多大?怎么评价训练稳定了?

① 加的"颗粒度"是多大?(以什么节奏往上加?)

学习率并不是凭感觉随便加的,它通常有一个线性的(Linear)或者余弦的(Cosine)固定增长节奏

  • 举个数字例子

    假设我们设定的目标最大学习率 10−410^{-4} 10−4,而 Warmup(预热期)总共持续 2000 个训练步数(Steps)

    • 那么,每走一步(每处理完一个批次的数据),学习率增加的固定颗粒度就是:

      每步增量= 10−42000 =5×10−8 \text{每步增量} = \frac{10^{-4}}{2000} = 5 \times 10^{-8} 每步增量=200010−4=5×10−8

    • 第 1 步:学习率是 5×10−85 \times 10^{-8} 5×10−8

    • 第 2 步:学习率是 1×10−71 \times 10^{-7} 1×10−7

    • ......

    • 这样极其平缓、像爬楼梯一样一步步稳步增加,直到第 2000 步时,刚好稳稳加到目标值 10−410^{-4} 10−4。

在真正的现代化大模型训练中,开局时不敢用"大"学习率,而是必须用 Warmup(预热期)从 0 开始"慢慢往上爬"

如果一开局就直接上大步子,由于模型刚初始化时脑子一片混乱(参数全是随机数),算出来的梯度极其剧烈,大步子一迈直接就会"当场学崩(Divergence)"。

那么,工程师到底是通过哪三道安全护栏来精准把握这个尺度的呢?

1. 峰值学习率的黄金法则:"模型越大,步子反而要越小"

直觉上,大家可能会觉得"大模型更聪明,应该迈更大的步子"。但残酷的物理现实恰恰相反:

  • 参数量越大的模型,对学习率的敏感度越高,越容易崩。

  • 例如:

    • 几亿参数的小模型,峰值学习率可能敢设到 3×10−43 \times 10^{-4} 3×10−4。
    • 几十亿到几百亿参数的中型模型,一般降到 1×10−41 \times 10^{-4} 1×10−4 左右。
    • 千亿参数以上的巨无霸模型(如 LLaMA-70B 等),峰值学习率往往要压低到 1.5×10−51.5 \times 10^{-5} 1.5×10−5 甚至更低。
  • 尺度把握 :业界有一个基于大模型"缩放定律(Scaling Laws)"的经验公式:模型的参数规模每扩大一个量级,峰值学习率通常就要往下调一个档次。

2. 物理安全网:梯度裁剪(Gradient Clipping)

光靠控制学习率还不够,万一中间某一步遇到了奇葩数据,算出来的梯度突然飙升(比如瞬间放大100倍),怎么办?

  • 工程师会给算法套上一根"硬性安全绳"------梯度裁剪。
  • 怎么做:系统会设定一个阈值(比如最大允许梯度范数设为 1.0)。如果某一步算出来的梯度力度是 5.0(太危险了,要扯到蛋),系统会强行把它"剪切"并压制到 1.0
  • 这样一来,哪怕模型遇到突发情况想"发疯乱跳",也被这根安全绳硬生生拉住,保证每一步都在安全范围内。

3. 时间尺度的科学分配:Warmup 占总训练步数的 1% ~ 2%

既然学习率要从 0 慢慢加到峰值,这个"爬坡期(Warmup)"到底持续多久才合适?太长了浪费算力,太短了容易颠簸。

  • 行业内的黄金标准是:Warmup 步数通常占整个大模型训练总步数的 1% 到 2% 左右。

  • 举个例子

    • 如果这个大模型计划训练 100,000 步
    • 工程师一般会把前 1,000 到 2,000 步设为 Warmup 期,让学习率像爬缓坡一样极其温柔地上升。
    • 等度过了这前 2% 的危险期,模型内部的参数已经初步形成了稳定的"微观结构",此时再让它以稳健的峰值学习率进入高速公路狂奔

② 怎么评价模型训练"稳定了"?

工程师在监控大模型训练时,不会只看某一个瞬间,而是会通过几个硬核指标来判断模型是否度过了危险期、进入了稳定运行状态:

  1. Loss(损失曲线)不再剧烈震荡

    • 刚开局时,由于学习率在往上加,Loss 曲线可能会有些波动。一旦度过 Warmup、进入平稳期,Loss 曲线应该呈现出一条平滑下降、偶尔有微小波动但整体向下的优美弧线。如果 Loss 突然垂直飙升,说明训练崩了。
  2. 梯度范数(Gradient Norm)保持平稳

    • 工程师会监控内部参数变化的激烈程度(梯度范数)。如果这个数值长期在一个健康的区间内上下起伏,说明模型内部的"齿轮"咬合得很紧密,没有出现某一层参数突然过载(爆炸)或集体死掉(消失)的情况。
  3. 验证集困惑度(Validation PPL)持续走低

    • 每隔一段时间,拿出一部分模型没见过的数据去考它。如果发现它对未知文本的预测准确度(PPL)在稳步变好,就说明模型不仅在死记硬背训练集,而是真正进入了"平稳且有效吸收知识"的稳定轨道。

6. 大模型训练步数是怎么确定的?

大模型计划训练"100,000 步"(或者几万、几十万步),绝对不是凭感觉拍脑袋决定的。这是一个通过数学公式、经济账(算力成本)以及大模型专有的"缩放定律(Scaling Laws)"精密计算出来的科学决策。

要制定这样一个训练计划,工程师主要依据以下三个核心要素:

** 1. 核心铁律:Chinchilla 缩放定律(Chinchilla Scaling Laws)**

这是由 DeepMind 团队通过海量实验总结出的黄金法则。它解决了一个根本问题: "为了训练一个 NN N 参数量的模型,我到底需要喂给它多少文字(Token)才不浪费?"

  • 黄金比例

    • Chinchilla 定律指出:模型参数量(Parameters)和训练所需的 Token 数量(Tokens)应该大致成正比,理想比例大约是 1 : 20。
    • 也就是说,如果你打算训练一个 700 亿参数(70B) 的大模型,它在整个生命周期里大约需要吃掉 1.4 万亿个 Token 的文本。
  • 怎么换算成"训练步数(Steps)"?

    • 有了总 Token 数后,还要看你每次喂多少字(也就是前面提到的批次大小 Batch Size,假设每次喂 400 万个 Token)。
    • 总步数 = 总 Token 数 ÷ 每次喂的 Token 数。通过这样严密的公式计算,就能推算出"100,000 步"这样一个宏观的训练周期。

2. 现实的枷锁:预算与算力上限(Money & Compute Budget)

理论虽然美好,但现实往往取决于钱包有多厚

  • 算力换算

    训练大模型烧的都是真金白银(几千张甚至上万张顶级的 H100/H200 显卡日夜不停地烧电)。

    • 工程师会先算一笔账:公司这次批了多少预算?或者集群能给几个月的独占使用权?
    • 假设集群最多只允许我们连续高强度跑 30 天,那么在这 30 天内,以当前显卡的吞吐极限,顶多能让模型跑完 100,000 个批次(Steps)
  • 反向推导

    如果算力只够跑 100,000 步,工程师就会去倒推------在这 100,000 步里,我该把模型做成多大(参数量)、每次吃多少数据(Batch Size),才能在预算耗尽前把模型训练到最优状态。

3. 动态指标:看 Loss 曲线是不是"撞墙了"

虽然计划书上写的是 100,000 步,但它并不是一个死板的硬性数字。在实际训练中,工程师会像盯着股票曲线一样盯着 Loss(损失下降曲线)

  • 边际效应递减(饱和现象)

    当模型跑到第 80,000 步或 90,000 步时,工程师会发现 Loss 曲线已经变成了一条几乎平坦的直线------这说明模型把这套语料里的知识能学的都学会了,继续喂同样的文字,它也长不出新本领了(行业里叫训练收敛或过拟合风险)。

  • 动态调整

    如果提前撞墙,有些项目可能会在 90,000 步时就选择提前收工;而如果发现模型还在贪婪地吸收知识、Loss 依然在平稳下降,计划甚至可能会临时延长。

九 前馈神经网络矩阵

在大模型的 Transformer 架构中,如果说注意力机制(Attention)负责的是"眼观六路、建立词与词之间的连接和上下文关系" ,那么紧随其后的 FFN(前馈神经网络) 负责的就是"闭门深造、深度加工和死记硬背事实知识"。

它之所以要把矩阵的宽度"放大到隐藏维度的 4 倍甚至更多(比如 4096 放大到 14336)",并在内部进行大刀阔斧的运算,主要是为了实现以下三大核心作用:

1. 为什么要放大到 4 倍?(扩容以装下海量知识)

在神经网络理论中,这叫"非线性变换与高维升维(Dimensionality Expansion)":

  1. 提供巨大的"思考画布"

    当注意力机制把各个词的上下文关系理清楚后,会把一个 4096 维的向量交给 FFN。如果直接在 4096 维里硬塞成千上万个事实性知识(比如"哪一年发生了什么事"、"谁和谁是什么关系"),空间根本不够,模型会发生严重的"容量饱和(Capacity Saturation)"。

  2. 升维以制造"交叉错位"

    FFN 内部通常会先通过一个矩阵把维度从 4096 放大到 14336(升维),然后经过一个类似 ReLU 或 SwiGLU 的非线性激活函数(相当于非线性的"开关滤网"),把各种特征揉碎、组合,最后再通过第二个矩阵降维缩回 4096 维。这种"先放大、再激活、后缩小"的操作,赋予了模型强大的非线性拟合能力,能够把表面上平平无奇的文字特征,转化为深层的逻辑和抽象概念。

2. FFN 的具体工作:大模型的"内部知识库(Memory)"

现代 AI 学界有一个非常经典的共识:Attention 机制主要负责路由和沟通,而 FFN(前馈网络)本质上扮演了"键值对知识库(Key-Value Memory)"的角色。

它在里面具体干两件事:

  1. 存储世界知识(Fact Storing)

    大模型肚子里装的无数历史、地理、科学常识和代码语法,有相当大一部分是被"烧录"并压缩在 FFN 的这几个庞大权重矩阵里的。

  2. 深度加工与特征重组

    浅层和中层的 FFN 负责加工局部的语法和语义组合;而到了深层的 FFN,它们会把这些特征加工成高级的逻辑意图,为最后输出下一个 Token 做决定。

FFN 把矩阵撑大到 4 倍甚至更高,就像是给大模型开辟了一个超大容量的内部高速缓存和加工车间

  • 靠"放大维度的宽敞空间"来避免知识打架。

  • 靠"非线性激活与降维组合"来对复杂的上下文特征进行深加工。

如果没有 FFN 这一块体量庞大的矩阵在背后默默"死记硬背"和"深度计算",大模型就只会玩文字接龙,而变成一个毫无常识的"复读机"。

层归一化偏置项辅助矩阵

在现代大模型庞大的参数版图里,注意力机制(Attention)和前馈网络(FFN)就像是两台巨大的"核心发动机",动辄吞噬百分之九十几的显存。

而你提到的第三块------其他辅助矩阵(如 LayerNorm 的缩放系数、偏置项等) ,虽然在体量上只能算微不足道的"零头",但它们却是确保大模型这辆"超级跑车"不会在半路散架的关键减震器和润滑油

我们可以把它们拆解为两类核心角色,来看看它们到底是什么,以及为什么它们那么小却不可或缺。

1. 这一块到底包含哪些东西?

这部分的参数主要由两类微型结构贡献:

  1. 层归一化(LayerNorm / RMSNorm)的缩放系数

    • 长什么样:在 80 层大楼的每一层上下,都会穿插着归一化层。它们本质上是一组一维的向量(比如隐藏维度是 4096,这里就只有 4096 个数字)。

    • 干什么用的:它们负责对每一层输出的向量进行"重新对齐和缩放"(类似于给照片统一调整对比度和亮度),防止数字在几十层的接力中变得过大或过小。

  2. 偏置项(Bias)

    • 长什么样 :在神经网络的线性变换中(比如 y=Wx+by = Wx + b y=Wx+b),除了那个巨大的矩阵 WW W 之外,后面通常还会加上一个微小的常数向量 bb b(偏置)。

    • 干什么用的:它就像是一个微调螺丝,给输出整体往上或往下"垫一点",帮模型微调基准线。

      (注:现代很多最顶尖的大模型,比如 LLaMA 系列、Qwen 系列,为了追求极致的计算效率,甚至把大部分线性层的 Bias 直接"砍掉"了,只保留了极少甚至纯靠归一化层撑场面。)

2. 为什么说它们只能算"零头"?(算一笔账就明白了)

我们可以用数学上的维度差异,来直观感受一下主干矩阵和这些辅助参数的降维打击:

  • 核心大矩阵(Attention / FFN)

    它们的计算是二维矩阵乘法 (行 ×\times × 列)。如果隐藏维度是 4096,一个矩阵的大小就是 4096×4096=16,777,216 4096 \times 4096 = \mathbf{16,777,216} 4096×4096=16,777,216(一千六百万个参数)。如果再加上多头注意力和 FFN 的放大倍数,分分钟飙升到几十亿、上百亿。

  • 辅助矩阵(LayerNorm 等)

    它们的计算是一维的(只有行或列)。如果隐藏维度是 4096,它就只有 4096 个参数

    即使把 80 层全部加起来: 80 层×4096=327,68080 \text{ 层} \times 4096 = \mathbf{327,680} 80 层×4096=327,680(三十多万个参数)。

对比结果

一个是 1600万+ 乘以无数倍,一个是可怜的 32万。在动辄几百亿、上千亿总参数的大模型面前,这几十万个参数确实连九牛一毛都算不上,所以被称为"零头"。

3. 别看它们是"零头",少了一个模型立刻瘫痪

虽然体量极小,但这些辅助参数处于整个模型神经网络的"咽喉要道":

  1. 防止"数值爆炸"或"数值归零"

    如果没有 LayerNorm 里的那几个缩放系数在每一层卡住数值范围,当数据在 80 层深的大楼里上下穿梭时,数字会呈指数级暴涨(变成无穷大 NaN)或者无限缩小(变成 0)。一旦发生这种情况,模型的计算就会瞬间崩溃。

  2. 稳定训练过程

    在前面讨论训练成本时提到过,训练大模型动辄花费几百万美元。如果缺少了这些微小的归一化和调节参数,模型的损失函数(Loss)就会极其不稳定,甚至根本无法完成收敛。

如果把大模型比作一辆价值连城的超级赛车,Attention 和 FFN 是那台拥有数千马力的 V16 发动机(占了绝大部分体积和重量);而这些"辅助矩阵"就像是发动机里几颗不起眼的精密垫片和气门油封------虽然轻巧得不值一提,但要是把它们拿掉,发动机在启动的瞬间就会彻底报废。

结语:从冰冷的矩阵到流动的智慧

回到最初的那个疑问------大模型的参数量为什么动辄成千上万亿?随着我们一层层剥开 Transformer 的内核,答案已经水落石出。

复盘这场深度的技术探索,大模型的运行原理可以凝练为三个核心维度:

  • 宏大的身躯(参数与 FFN) :数以万亿计的参数、深达数十层的网络结构,以及成倍放大的前馈神经网络(FFN),本质上是为模型开辟的"世界知识压缩库与特征加工车间"。正是这庞大的体量,赋予了它海量事实的记忆与复杂的逻辑拟合能力。

  • 纯粹的本质(Token 与概率预测) :无论它在对话中表现得多么善解人意、博古通今,其底层的数学逻辑依然纯粹而机械------它是一台"下一个 Token 预测机"。通过矩阵乘法与 Softmax 的层层筛选,它在数十万个候选中笃定地锁定每一个确定的字符,用连绵不绝的文本接龙拼凑出流畅的表达。

  • 极致的工程(KV Cache 与性能优化) :从 Prefill 阶段的并行预热,到 Decoding 阶段依靠 KV Cache 续命、避免重复计算的缓存机制,再到现代长文本架构与显存管理,正是无数底层算法与工程架构的迭代,才将这些沉重的巨无霸支撑成了可以秒回的流畅应用。

归根结底,大模型并不具备人类的血肉与真正的意识,它只是用数学的语言、海量的算力和精妙的工程,将无数离散的数字跳动演绎成了滔滔不绝的文字长河。

看清了这套冰冷而严密的机器运转逻辑,我们就真正理解了这场人工智能浪潮最硬核、也最迷人的底色。

相关推荐
qq_1998868743 分钟前
第7板块·第3节:CUTLASS 的 GEMM 实现与优化策略
c++·人工智能·gpu算力·cuda
打工仔折腾 AI43 分钟前
FastAPI 从本机到生产服务器:Nginx+Gunicorn+Uvicorn 完整部署实录
人工智能·后端·python·nginx·fastapi·gunicorn
IT_陈寒1 小时前
Java空指针这次真把我坑惨了
前端·人工智能·后端
hhzz1 小时前
【OpenCV 入门到精通 10】视频分析与光流跟踪:背景减除与运动检测
人工智能·python·opencv·性能优化
昇腾知识体系1 小时前
K8s 调度昇腾 NPU:device-plugin 部署、Volcano 与 vNPU 切分
人工智能·华为·知识图谱
海带紫菜菠萝汤1 小时前
本周 AI 观察:嘴上喊着降速,手上全踩油门
人工智能·深度学习·ai·开源·大模型
东风破_1 小时前
把 Elasticsearch 全文检索讲明白:倒排索引、IK 分词器和 BM25
人工智能
远翔调光芯片^138287988721 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
东风破_1 小时前
从 RAG 到 Agentic RAG:第三步,本地知识不够就去网络搜索
人工智能