
我们在讨论大模型时,经常会听到这样一些说法:
“这个模型有 7B 参数。”
“把权重下载下来就能本地跑。”
“这个模型是开放权重,不是完全开源。”
“量化之后权重变小了,但效果可能会下降。”
这些说法里反复出现一个词:权重(model weights)。它听起来很底层,像是机器学习工程师需要关心的东西。但如果你想真正理解大模型是怎么运行的,模型权重其实是最值得先搞清楚的概念之一。
简单说,模型权重就是模型训练之后保存下来的大量数值,它们共同构成了模型“学到的能力”。这句话很短,但背后有不少东西可以展开。
模型不是一段规则,而是一大堆参数
很多人第一次接触 AI 时,会下意识地把模型想象成一套规则系统。
比如:
如果用户问“法国首都是哪里”,就回答“巴黎”。
如果用户问“苹果是什么”,就根据上下文判断是水果还是公司。
如果用户要求写诗,就调用某种写诗模板。
但现代大语言模型不是这样工作的。它不是由工程师手写了亿万条规则,也不是一个巨大的问答数据库。它更像是一个巨大的数学函数。
你输入一段文字,模型把文字切成 token,然后经过一层又一层计算,最后预测下一个 token 最可能是什么。比如你输入:
巴黎是法国的
模型会计算出下一个 token 的概率分布。它可能认为:
“首都” 概率很高
“城市” 概率也不低
“总统” 概率很低
“香蕉” 概率几乎没有
这个判断不是来自某一条明确规则,而是来自模型内部海量参数共同参与的计算。
这些参数,就是我们说的模型权重。
权重到底长什么样?
权重在文件里并不像一本百科全书,也不像一堆可读的句子。它们本质上就是大量数字。
大概可以想象成这样:
0.0182
-0.4417
1.2093
0.0008
-2.1349
...
当然,真实模型里的权重不是简单排成一列,而是组织成很多矩阵和张量。Transformer 的不同模块里都有各自的权重,比如注意力层(attention layer)的权重、前馈网络(feed-forward network / FFN)的权重、词嵌入矩阵(token embedding matrix)的权重等等。
这些名字听起来很工程化,但本质上仍然是一批批数值。它们只是处在模型的不同计算环节纸中:有的负责建模 token 之间的关系,有的负责非线性变换,有的负责把 token 映射成向量表示。
在直觉上,你可以先把它理解成:模型内部有无数个旋钮,训练就是调整这些旋钮,权重就是每个旋钮最终停在哪个位置。
一个 7B 模型,大约有 70 亿个这样的参数。一个 70B 模型,大约有 700 亿个参数。这也是为什么大模型文件那么大,因为你不是下载一段代码,而是在下载几十亿、几百亿个数值。
模型结构和模型权重不是一回事
理解权重时,一个很重要的区分是:模型结构和模型权重不是同一个东西。
模型结构描述的是这台机器怎么搭:
- 有多少层
- 每层多宽
- 有多少个注意力头(attention heads)
- 上下文窗口(context window)有多长
- 使用什么激活函数(activation function)
- token 如何通过词嵌入矩阵变成向量
- 层与层之间如何连接
模型权重描述的是这台机器里面每个参数的具体数值。
可以用一个类比:
- 模型结构像建筑图纸
- 模型权重像建筑里实际安装好的钢筋、水泥、线路和设备
- 推理引擎像让这栋建筑正常运转的物业和机电系统
- Prompt 是你走进建筑之后发出的请求
- 输出 是建筑里的系统给你的响应
只有结构,没有权重,模型基本上是空的。它知道自己“应该怎样计算”,但不知道计算出什么才有意义;只有权重,没有结构,也不行,因为这些数字必须放回正确的网络结构里,才能参与计算。
所以我们说一个模型时,通常至少包含两部分:架构定义 + 权重文件。
训练就是不断调整权重
那权重是怎么来的?答案是:训练出来的。
在训练开始时,模型的权重通常是随机初始化的。也就是说,一开始这些参数没有什么智能,只是一堆随机数。然后训练系统会给模型看大量文本,让它做一个看似简单但极其有效的任务:预测下一个 token。
比如训练样本是:
牛顿提出了万有引力
模型看到前面的 token:
牛顿 提出 了 万有
它需要预测下一个 token 应该是什么。刚开始它会乱猜。训练系统会比较它的预测和真实答案之间的差距,然后通过反向传播调整权重。
如果模型猜错了,权重会被轻微修改。
如果模型猜对了,权重也会根据目标继续优化。
这个过程重复数万亿次之后,模型内部的权重逐渐形成了一种复杂的统计结构。它不只是记住“万有引力”这个词,而是学到了语言、事实、风格、推理模式、代码结构、对话习惯等大量模式。
所以,模型的能力不是写在某个显眼的“知识表”里,而是分布在海量权重之中。
权重里有知识吗?
这是个微妙的问题。从实用角度说,当然有。模型能回答问题、写代码、翻译、总结、推理,说明训练过程中获得的信息已经以某种方式进入了权重。
但权重里的知识不是像数据库那样存储的。数据库可能是这样:
法国首都 = 巴黎
水的化学式 = H2O
乔布斯 = 苹果公司联合创始人
模型权重不是这样。它更像是把大量语言和知识模式压缩进一个高维空间里。模型回答“法国首都是哪里”时,不是在查一条记录,而是在根据上下文和权重计算出“巴黎”是最合理的输出。
这也解释了为什么模型有时会“幻觉”。
如果它是查数据库,查不到就应该说查不到。但语言模型的基本动作是继续生成最可能的 token。只要权重和上下文把它推向一个看似合理的答案,它就可能生成一个流畅但错误的说法。
权重里确实编码了知识,但不是以人类可直接读取、可逐条验证的方式编码的。
为什么权重文件会这么大?
模型文件大小主要由几个因素决定:
- 参数数量
- 每个参数使用多少位表示
- 是否经过量化(quantization)
- 是否包含额外组件,比如 tokenizer、配置、优化器状态等
一个参数如果用 FP16 表示,通常占 2 字节。一个 7B 模型如果有 70 亿参数,单是权重大约就需要:
70 亿 × 2 字节 = 140 亿字节 ≈ 14GB
这还只是粗略估算。如果是 70B 模型,用 FP16 权重,光权重就可能超过 140GB。
这就是为什么本地运行大模型时,大家总是在谈显存、内存和量化。因为模型权重必须被加载到内存或显存中,才能参与推理计算。
什么是量化权重?
量化就是用更低精度的数字来表示权重,从而减少模型占用空间和计算成本。
比如原来的权重可能用 16 位浮点数表示:
0.1826171875
量化后可能用 8 位、4 位,甚至更低精度来近似表示。
这样做的好处是:
- 模型文件更小
- 内存占用更低
- 可能跑得更快
- 更容易在普通电脑或边缘设备上运行
代价是:
- 数值精度下降
- 模型输出质量可能下降
- 对复杂推理、代码、数学、多语言任务可能更敏感
这就是为什么你会看到很多模型文件名里带有:
Q4_K_M
Q5_K_M
Q8_0
INT4
FP8
BF16
FP16
这些都和权重的表示精度有关。
可以粗略理解:
FP16/BF16:较常见的高质量推理精度FP8/INT8:进一步压缩,常用于高性能推理INT4/Q4:压缩更狠,适合本地部署,但要测试质量GGUF:llama.cpp 生态里常见的模型权重格式,尤其常用于量化模型
量化不是魔法。它是在“效果、速度、内存、成本”之间做工程权衡。
“开源模型”和“开放权重”有什么区别?
这几年还有一个容易混淆的说法:开源模型。
严格来说,很多所谓“开源大模型”其实只是开放权重模型。
真正完整的开源可能包括:
- 模型结构
- 训练代码
- 训练数据
- 数据清洗流程
- 训练配置
- 权重文件
- 评估方法
- 许可证允许的使用范围
而开放权重通常只是说:你可以下载训练好的权重,在一定许可证下使用它。
这已经很有价值,因为你可以本地运行、微调、部署、评估。但它不等于你拥有了完整的训练过程,也不一定能复现这个模型。
所以,当一个公司说“我们开源了模型”,最好继续看它到底开放了什么:
- 只是 API?
- 开放了权重?
- 开放了训练代码?
- 训练数据是否公开?
- 商业使用是否允许?
- 是否允许再训练和分发?
这不是咬文嚼字,而是关系到你能不能真正掌控这个模型。
推理引擎和权重是什么关系?
有了模型权重,还需要推理引擎来运行它。
比如:
vLLMSGLangllama.cppTensorRT-LLMTransformersOllamaMLX
这些工具负责把权重加载进来,然后高效执行模型计算。
同一份权重,在不同推理引擎里可能表现出不同的工程特征:
- 启动速度不同
- 显存占用不同
- 并发吞吐不同
- 支持的量化格式不同
- 支持的上下文长度不同
- 是否支持多模态不同
- 是否提供 OpenAI 兼容 API 不同
但它们不是模型本身。它们更像运行时系统。
权重是“模型学到的参数”,推理引擎是“让这些参数动起来的软件”。
微调会改变权重吗?
通常会。
微调(fine-tuning)就是在已有模型权重的基础上,用新的数据继续训练,让模型更适合某个任务、风格或领域。
有几种常见方式。
一种是全量微调,也就是直接更新原模型的大量权重。这种方式成本高,对硬件要求大。
另一种是 LoRA 这类参数高效微调。它通常不直接改动原始权重,而是训练一小组额外参数。推理时可以把这些额外参数挂到原模型上,形成新的行为。
可以粗略理解:
- 原始权重:模型的基础能力
- 微调权重 / LoRA:给模型加的一层领域适配
- 合并权重:把 LoRA 的影响合并回基础模型
所以你看到的某些模型,可能不是从零训练出来的,而是在一个基础模型权重上继续微调得到的。
权重能被编辑吗?
理论上可以,实践上很难。因为权重不是知识库。你不能简单打开模型文件,找到“法国首都”那一行,把它改成另一个值。
模型的知识和能力分布在大量参数里。改变某一小部分权重,可能影响很多看似无关的行为。反过来,要精准修改一个事实,也可能需要复杂的模型编辑技术,而且不一定稳定。
这也是为什么很多系统不会直接“改权重”来更新知识,而是使用 RAG:
- 模型权重提供语言理解和生成能力
- 外部知识库提供可更新、可引用的事实
- 检索系统把相关资料放进上下文
- 模型基于上下文回答
这比频繁重新训练模型更可控,也更容易审计。
一个完整的大模型应用里,权重只是其中一层
虽然权重很重要,但真实应用不是“下载权重就万事大吉”。
一个可用的大模型系统通常还包括:
- tokenizer
- 模型配置
- 推理引擎
- prompt 模板
- 上下文管理
- KV cache
- RAG 检索
- 工具调用
- 权限控制
- 日志与监控
- 安全过滤
- 评估集
- 部署和扩缩容策略
权重决定了模型的基础能力上限,但系统工程决定了这个能力能不能稳定、安全、低成本地释放出来。很多时候,同一个模型权重,在一个粗糙系统里表现平平,在一个设计良好的系统里会好很多。
总结:权重是模型能力的载体,但不是全部
模型权重可以理解为大模型训练后留下来的“参数结晶”。它们是一大堆数值,却承载了模型从数据中学到的语言模式、知识关联和推理倾向。
理解模型权重,有助于理解很多大模型世界里的常见问题:
为什么模型文件这么大?
因为里面保存着几十亿、几百亿个参数。
为什么同一个模型有 FP16、INT8、Q4 等版本?
因为权重可以用不同精度保存,这是质量和资源之间的权衡。
为什么开放权重不等于完全开源?
因为权重只是训练结果,不代表训练过程、数据和代码都公开。
为什么有了权重还需要 vLLM、llama.cpp 这些工具?
因为权重只是参数文件,还需要推理引擎把它运行起来。
为什么模型会幻觉?
因为权重不是数据库,模型是在生成最可能的 token,而不是逐条查证事实。
如果只记住一句话,那就是:
模型权重是大模型训练完成后保存下来的海量参数;它们不是人类可读的知识库,却是模型能力真正寄居的地方。