模型权重(Weight)
一句话定义:权重是模型在训练中学到的全部数字——模型的一切「知识」都存在这些数字里;模型文件就是权重的打包格式,推理框架就是高效执行这袋数字的宿主。
相关篇目:
- 参数 数量 怎么算、7B 是什么 → 06-模型参数规模.md
- 权重怎么被高效执行 → ../11-推理与部署/03-推理框架.md
- 架构(权重的「图纸」)→ ../05-Transformer与注意力/01-注意力机制.md
- 量化等权重优化 → ../11-推理与部署/01-推理优化.md
1. 它是什么
Weight /weɪt/ (权重)是神经网络里可学习的数字:训练前随机,训练后被调到「合适」的值。模型会不会写代码、懂不懂唐诗,全部体现在这些数字的取值上。
最小示例——一个神经元的权重(Node.js + TS):
// w1、w2 与 b 就是权重:训练前是随机数,训练后是「学出来的数字」
function neuron(x1: number, x2: number): number {
const w1 = 0.73; // 训练学出
const w2 = -0.21; // 训练学出
const b = 0.05; // 偏置(bias),也算权重家族
return w1 * x1 + w2 * x2 + b;
}
规模感:Llama-3-8B 有 80 亿个这样的数字(术语叫 Parameter /pəˈræmɪtər/ (参数),权重是参数的主体);按半精度存储每个数字占 2 字节,合计约 16 GB——这就是模型文件动辄几个 GB 的原因。
从 Hugging Face 下载的模型文件,本质就是 一袋打包好的权重数字 ,不含任何代码逻辑。「拿到模型文件」和「能把模型服务起来」之间差的工程能力,就是推理框架补的那一层。
2. 权重从哪来:架构定形状,训练填数值
权重不是凭空出现的,分两步:
| 步骤 | 谁决定 | 决定什么 |
|---|---|---|
| ① 设计架构 | 工程师(人) | 权重的 形状 :几层、每个矩阵几行几列 |
| ② 训练 | 算法 + 数据(机器) | 权重的 数值 :那 80 亿个数字具体是多少 |
Transformer 架构(图纸)──决定──> 权重的形状(几层、矩阵多大)
训练(读海量文本调参数)──决定──> 权重的数值(那 80 亿个数字)
↓
模型文件(Llama-3-8B 的 safetensors)
↓
推理框架(vLLM / TGI / llama.cpp)──各按架构实现计算,加载同一份权重去执行
训练过程简述:权重先随机初始化(此刻模型什么都不懂),再用 梯度下降 /ˈɡreɪdiənt ˈdaʊnsiːk/ 在海量文本上反复做「预测下一个 token」任务,一步步微调这几十亿个数字,直到损失收敛。
注意别混淆两个「Transformer」:一个是架构(主流开源 LLM——Llama、Qwen、Mistral——都是它,同一张图纸、不同训练 → 不同权重);另一个是 Hugging Face 的 Python 库 transformers(「认识这个架构、能加载权重跑一跑」的工具,偏训练与实验)。库与架构重名,容易误以为「权重是跟着库走的」—— 权重相对的是模型,框架只是权重的消费者。
2.1 架构有哪些:主流一览
今天的大模型架构绝大多数是 Transformer 的不同「用法变体」,另有少数非 Transformer 的新架构:
| 架构 | 结构特点 | 代表模型 | 主要用途 |
|---|---|---|---|
| Decoder-only /dɪˈkəʊdər ˈəʊnli/ | 只保留「预测下一个 token」的一半 | GPT-4/5、Llama 3、Qwen2.5、DeepSeek-V3、Mistral、GLM | 当前 LLM 绝对主流(生成式对话) |
| Encoder-only /ɪnˈkəʊdər ˈəʊnli/ | 只保留「理解输入」的一半 | BERT /bɜːt/ 、RoBERTa、DeBERTa | 分类、检索;RAG 的 Embedding 模型多是它 |
| Encoder-Decoder | 编码理解 + 解码生成 | T5 /ˌtiː ˈfaɪv/ 、BART、FLAN-T5 | 翻译、摘要等序列到序列任务 |
| MoE /mɔɪ/ ( Mixture of Experts /ˈmɪkstʃər əv ˈekspɜːts/ ,混合专家) | Decoder-only 的 FFN 换成多个「专家」按需激活 | Mixtral 8×7B、DeepSeek-V3、Qwen3-MoE | 大容量 + 低推理成本 |
| SSM /ˌes es ˈem/ ( State Space Model /steɪt speɪs ˈmɒdl/ ,状态空间模型) | 用递归状态替代注意力 | Mamba、Jamba(混合) | 超长序列高效建模(研究阶段) |
| RWKV /ˌɑːr ˈdʌbəljuː ˈkeɪ ˈviː/ | RNN 思路与 Transformer 训练方式结合 | RWKV-6 | 线性复杂度、端侧实验 |
记法: 生成式聊天 = Decoder-only;理解/检索 = Encoder-only;翻译摘要 = Encoder-Decoder;省钱放大 = MoE;挑战者 = Mamba / RWKV。
2.2 权重与架构是锁配的
权重和架构是 双重绑定 :
- 形状绑定:权重矩阵的行列数由架构超参数决定(层数、隐藏维度、头数、FFN 大小、词表)。模型文件旁边必有
config.json,加载器靠它知道「这袋数字按什么形状、什么顺序摆进计算图」:
{
"architectures": ["LlamaForCausalLM"],
"hidden_size": 4096,
"num_hidden_layers": 32,
"num_attention_heads": 32,
"vocab_size": 128256
}
- 语义绑定:即使形状碰巧一致,不同架构里「同一位置的矩阵」含义也不同——BERT 的权重里没有 Decoder 的因果注意力,拿去跑生成毫无意义。
所以权重离开了它训练时的架构,就只是一袋失去语义的数字。但有三个补充,避免把话说死:
- 同源变体可直接迁移:Mistral 早期是 Llama 架构的微调变体(滑窗注意力),改改 config 就能互载——这是「同一张图纸的小改版」,不算换架构。
- 换架构复用能力的正路是蒸馏:把旧模型当「教师」,在新架构上重新训练学它的输出分布( Distillation /ˌdɪstɪˈleɪʃn/ ,蒸馏)——能力搬过去了,但那是 重新学习 ,旧权重只当起点或老师。
- 有「在旧权重上长出新架构」的研究:如 depth up-scaling(复制几层再续训)、逐层替换注意力为 Mamba 块的混合化——都保留旧权重做初始化,再小成本续训「缝合」。
一句话: 架构是图纸,权重是按这张图纸制造并调校好的零件——换图纸,零件要么装不上(形状不符),要么装上了也不知所云(语义失效)。
3. 权重长什么样:矩阵与张量
LLM 的权重以 Matrix /ˈmeɪtrɪks/ (矩阵)组织,高维的叫 Tensor /ˈtensər/ (张量)。以 Llama-3-8B(隐藏维度 4096)为例,一层注意力里就有 4 个 $4096 \times 4096$ 的矩阵(Q/K/V/O 投影),每个约 1677 万个数字。
各部分权重的分工:
| 权重块 | 作用 | 类比 |
|---|---|---|
| Embedding 矩阵 | 把 token 变成向量 | 「查字典」的索引表 |
| 注意力权重(Q/K/V/O) | 决定 token 之间「看谁、看多少」 | 阅读时的目光分配 |
| FFN 权重 | 对向量做非线性加工、存知识 | 大脑的联想与记忆库 |
| LM Head | 向量映射回词表概率 | 「开口说词」的出口 |
参数 量 的完整拆解与计算公式见 06-模型参数规模.md,本文不重复。
4. 权重存在哪:文件格式
同一份权重可以打包成不同格式,这也是推理框架「兼容性边界」的来源:
| 格式 | 谁在用 | 特点 |
|---|---|---|
| safetensors | vLLM / TGI / Transformers | Hugging Face 主推,加载安全快速,主流选择 |
| GGUF /ˌdʒiː dʒiː juː ˈef/ | llama.cpp / Ollama | 面向 CPU / 端侧,自带量化信息;与其他格式通常需转换 |
PyTorch bin(.bin / .pt) |
老版本训练生态 | 基于 pickle 反序列化,有安全隐患,正被 safetensors 取代 |
文件大小估算公式:文件体积 ≈ 参数量 × 每参数字节数。
以 Llama-3-8B 为例,同一份权重的不同精度:
| 精度 | 每参数字节 | 体积 | 说明 |
|---|---|---|---|
| FP16(半精度) | 2 | ≈ 16 GB | 训练完成时的原生精度 |
| INT8 | 1 | ≈ 8 GB | 量化,精度略损 |
| Q4(4-bit) | 0.5 | ≈ 4~5 GB | 消费级电脑可跑的关键 |
量化(Quantization)就是 把每个数字存得更粗 来换显存与速度——数字还是那些「知识」,只是记录精度降低了。原理级展开见 ../11-推理与部署/01-推理优化.md。
5. 权重的生命周期
随机初始化 → 预训练(海量文本)→ SFT / RLHF(对齐)→ 发布权重文件
→ (部署时)格式转换 / 量化 → 推理框架加载 → 只读执行
两个关键认知:
- 部署阶段的权重是只读的:推理只「用」权重,不「改」权重;会话记忆、上下文都在 KV Cache 里,与权重无关(详见 ../11-推理与部署/01-推理优化.md)。
- 微调改的也是权重:SFT / LoRA /ˌɛl ɔː ˈrɑː/ ( Low-Rank Adaptation /ləʊ ræŋk ˌædæpˈteɪʃn/ ,低秩适配)本质都是在原权重基础上做小幅调整或外挂小矩阵——「模型变专业了」就是权重变了。详见 ../10-微调与适配/02-LoRA原理.md。
6. 常见误区
- 「权重 = 神经元」:错。一个神经元带多个权重;7B 指的是 70 亿个数字,不是 70 亿个神经元。
- 「权重相对推理框架」:反了。同一份权重可随时换引擎(vLLM ↔ TGI)跑,输出几乎一致;是框架迁就权重(llama.cpp 不认 safetensors,得先转 GGUF),不是模型适配框架。
- 「换框架能让模型变聪明」:错。框架管「怎么跑得快、跑得稳」,不管「会什么」;能力由权重决定。
- 「模型文件里有代码/逻辑」:错。权重文件就是数字矩阵;「怎么算」的逻辑由架构定义、由推理框架实现。
- 「下载了模型文件就能对外服务」:不够。有文件 ≠ 能高并发稳定服务——中间隔着推理框架那层工程能力。
7. 学习要点
- 权重 = 模型学到的全部数字;模型文件 = 权重的打包格式;推理框架 = 高效执行这袋数字的宿主。
- 架构定形状(几层、矩阵多大),训练填数值(那些数字是多少),两者合起来才是模型。
- 文件体积 ≈ 参数量 × 每参数字节数;FP16 / INT8 / Q4 对应体积减半递推,量化是部署省显存的第一杠杆。
- 权重与架构锁配:形状与语义双重绑定,换架构 = 权重失效;同源变体可直接迁移,跨架构靠蒸馏重新学。
- 部署阶段权重只读;「记忆」在 KV Cache,不在权重;「变专业」靠微调改权重。
8. 参考资料
- Hugging Face safetensors 文档
- llama.cpp / GGUF 格式说明
- 本库:06-模型参数规模.md、../11-推理与部署/03-推理框架.md、../10-微调与适配/02-LoRA原理.md
本文缩写
| 缩写 | 音标 | 全拼 | 中文 |
|---|---|---|---|
| GGUF | /ˌdʒiː dʒiː juː ˈef/ | (llama.cpp 常用量化权重格式名) | 量化模型文件格式 |
| FP16 | /ˌef piː sɪkˈstiːn/ | Floating Point 16 | 16 位浮点(半精度) |
| INT8 | /ˌɪnt eɪt/ | Integer 8-bit | 8 位整数 |
| SFT | /ˌes ef ˈtiː/ | Supervised Fine-Tuning | 监督微调 |
| RLHF | /ˌɑːr el eɪtʃ ˈef/ | Reinforcement Learning from Human Feedback | 基于人类反馈的强化学习 |
| KV Cache | /ˌkeɪ ˈviː kæʃ/ | Key-Value Cache | 键值缓存 |
| LoRA | /ˌɛl ɔː ˈrɑː/ | Low-Rank Adaptation | 低秩适配 |
| MoE | /mɔɪ/ | Mixture of Experts | 混合专家 |
| SSM | /ˌes es ˈem/ | State Space Model | 状态空间模型 |
评论
评论加载中…