大语言模型工作原理

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     → 把分数转成概率
     ↓
选词        → 选概率最大的词输出

二、层(Layer)是什么?

一句话定义

层 = 数据在模型中经过的一站。每一层用一部分权重对数据做一次加工。

比喻

大语言模型就像一条工厂流水线:

原料(输入文字)
  → 第1站(第1层):清洗、分类
  → 第2站(第2层):组装零件
  → 第3站(第3层):质量检查
  ...
  → 第24站(第24层):最终包装
→ 成品(输出文字)

每一站有自己的工人(权重),负责特定的加工步骤。

你的 Qwen3.5-0.8B 有多少层?

从 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 从数据中学习权重的过程

相关链接

相关笔记