0.8B 模型有 8 亿个权重,24 层——这些数字到底是什么意思?本文用最通俗的方式解释大语言模型的核心概念。
权重 = 模型在训练时学到的数字。0.8B 模型 = 8 亿个数字。
权重₁ = 0.345678
权重₂ = -0.123456
权重₃ = 0.987654
权重₄ = -0.001234
...
权重₈₀₀₀₀₀₀₀₀ = 0.000012
每个权重就是一个普通的数字: - 可以是正数(+0.345)或负数(-0.123) - 通常绝对值不大(大多在 -1 ~ +1 之间) - 有小数部分(不是整数)
权重 = 厨师的"配方比例"(盐多少克、糖多少克)
概率 = 最终菜品的"味道评分"(好吃 90%、一般 10%)
配方不是味道,但配方决定了味道。
权重不是概率,但权重决定了概率。
输入: "中国的首都是"
第1层: 权重参与计算 → 提取"中国"的语义特征
第2层: 权重参与计算 → 理解这是地理问题
...
第24层: 权重参与计算 → 最终结果
最后一层: 对词汇表里每个词打分
"北京" → 得分 15.2 → 概率 89% ← 最大!
"上海" → 得分 3.1 → 概率 0.5%
"广州" → 得分 2.8 → 概率 0.3%
模型选概率最大的词 → "北京"
完整链路:
权重(参数)→ 模型学到的"知识",是数字
↓
前向计算 → 8亿个权重一起参与矩阵乘法
↓
输出分数 → 对每个候选词打一个分
↓
Softmax → 把分数转成概率
↓
选词 → 选概率最大的词输出
层 = 数据在模型中经过的一站。每一层用一部分权重对数据做一次加工。
大语言模型就像一条工厂流水线:
原料(输入文字)
→ 第1站(第1层):清洗、分类
→ 第2站(第2层):组装零件
→ 第3站(第3层):质量检查
...
→ 第24站(第24层):最终包装
→ 成品(输出文字)
每一站有自己的工人(权重),负责特定的加工步骤。
从 config.json:
"num_hidden_layers": 24,
"layer_types": [
"linear_attention", ← 第1层
"linear_attention", ← 第2层
"linear_attention", ← 第3层
"full_attention", ← 第4层
"linear_attention", ← 第5层
...
"full_attention" ← 第24层
]
24 层,每 4 层有 1 层是 full_attention(全注意力),其余 3 层是 linear_attention(线性注意力)。这是 Qwen3.5 的新架构,用线性注意力加速推理。
| 模型 | 层数 | 参数量 | 能力 |
|---|---|---|---|
| Qwen3.5-0.8B | 24 | 0.8B | 简单问答 |
| Qwen2.5-7B | 28 | 7B | 中等复杂任务 |
| Qwen2.5-72B | 80 | 72B | 复杂推理 |
| GPT-4 | ~120(传闻) | ~1.8T(传闻) | 接近人类 |
层数越多,模型越"深",能学到越复杂的特征——但也越大、更慢、更贵。
每一层包含两个核心组件:
┌──────────────────────────────────┐
│ 注意力层(Attention) │
│ → 决定"看"输入的哪些部分 │
│ → 例: "中国的首都是" │
│ 注意力聚焦在"中国""首都" │
├──────────────────────────────────┤
│ 前馈层(FFN) │
│ → 对注意力的结果做非线性变换 │
│ → 把特征映射到更高层的语义空间 │
└──────────────────────────────────┘
总参数量 = 每层的参数 × 层数
Qwen3.5-0.8B:
每层约 3300 万个参数
× 24 层
≈ 8 亿个参数(0.8B)
注意力层:
Q 投影矩阵: 1024 × 256 = 262,144 个权重
K 投影矩阵: 1024 × 256 = 262,144 个权重
V 投影矩阵: 1024 × 256 = 262,144 个权重
O 投影矩阵: 256 × 1024 = 262,144 个权重
≈ 100 万个权重
前馈层:
上投影: 1024 × 3584 = 3,670,016 个权重
下投影: 3584 × 1024 = 3,670,016 个权重
≈ 730 万个权重
每层合计: ≈ 830 万个权重
× 24 层: ≈ 2 亿个权重(加上嵌入层等 ≈ 8 亿)
model.safetensors(1.4 GB)
├── 第1层的权重(~60 MB)
├── 第2层的权重(~60 MB)
├── ...
├── 第24层的权重(~60 MB)
├── 嵌入层权重(embedding)
└── 输出层权重(lm_head)
config.json
├── num_hidden_layers: 24 ← 24 层
├── hidden_size: 1024 ← 每层隐藏维度 1024
├── intermediate_size: 3584 ← 前馈层维度 3584
└── layer_types: [...] ← 每层的类型
用户输入: "你好"
① 分词(Tokenization)
"你好" → [token_1234, token_5678]
② 嵌入(Embedding)
token_1234 → [0.12, -0.34, 0.56, ...](1024维向量)
token_5678 → [0.78, 0.23, -0.45, ...](1024维向量)
③ 经过 24 层计算
第1层: 向量 × 第1层权重 → 新向量
第2层: 新向量 × 第2层权重 → 更新的向量
...
第24层: 最终向量(包含了所有"理解")
④ 输出层
最终向量 × 输出层权重 → 248320 维得分(每个词一个分)
⑤ Softmax → 概率
"!" → 45%
"啊" → 20%
"," → 15%
...
⑥ 选词 → "!"
⑦ 把 "!" 追加到输入,重复 ①~⑥,生成下一个词
→ "你好!我是海小星..."
每次生成一个词,就要跑完整个 24 层 × 8 亿权重的计算流程。
原始模型(BF16):
8 亿个权重,每个权重 2 字节
0.34567890625(精确)
量化模型(INT8):
8 亿个权重,每个权重 1 字节
整数 44 + 缩放因子 0.007874
反量化: 44 × 0.007874 = 0.346456(近似)
→ 每层的计算结果略有偏差
→ 偏差在 24 层中逐层传递
→ 最终输出的概率可能略有不同
→ 但大部分情况下,选出的词是一样的
这就是为什么量化后模型"几乎一样"但不是"完全一样"。
| 术语 | 英文 | 含义 |
|---|---|---|
| 权重 | Weight | 模型学到的数字,0.8B = 8 亿个 |
| 参数 | Parameter | 权重的另一种叫法,二者等价 |
| 层 | Layer | 数据经过的一站,每层有自己的权重 |
| 隐藏层 | Hidden Layer | 输入和输出之间的中间层 |
| 注意力 | Attention | 决定"看"输入哪些部分的机制 |
| 前馈层 | FFN | 对特征做非线性变换的层 |
| 嵌入 | Embedding | 把文字转成向量的第一步 |
| 前向计算 | Forward Pass | 数据从输入到输出的完整流程 |
| 推理 | Inference | 用训练好的模型生成回答 |
| 训练 | Training | 从数据中学习权重的过程 |