模型权重(Weight)

一句话定义:权重是模型在训练中学到的全部数字——模型的一切「知识」都存在这些数字里;模型文件就是权重的打包格式,推理框架就是高效执行这袋数字的宿主。

相关篇目:


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 权重与架构是锁配的

权重和架构是 双重绑定

  1. 形状绑定:权重矩阵的行列数由架构超参数决定(层数、隐藏维度、头数、FFN 大小、词表)。模型文件旁边必有 config.json,加载器靠它知道「这袋数字按什么形状、什么顺序摆进计算图」:
{
  "architectures": ["LlamaForCausalLM"],
  "hidden_size": 4096,
  "num_hidden_layers": 32,
  "num_attention_heads": 32,
  "vocab_size": 128256
}
  1. 语义绑定:即使形状碰巧一致,不同架构里「同一位置的矩阵」含义也不同——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(对齐)→ 发布权重文件
     → (部署时)格式转换 / 量化 → 推理框架加载 → 只读执行

两个关键认知:

  1. 部署阶段的权重是只读的:推理只「用」权重,不「改」权重;会话记忆、上下文都在 KV Cache 里,与权重无关(详见 ../11-推理与部署/01-推理优化.md)。
  2. 微调改的也是权重: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. 参考资料


本文缩写

缩写 音标 全拼 中文
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 状态空间模型