Skip to content
YK Blog
Go back

生成式 AI (3):解剖大型语言模型

整理自李宏毅 2025「生成式 AI 导论」第 3 讲。前置知识:第 1 讲


1. 全景:从输入到输出

"台湾最高的山是"

       ▼ Tokenizer
  [Token IDs: 1423, 892, ...]

       ▼ Embedding Table(查表)
  [Token Embeddings: 向量 ×N]

       ▼ Layer 1 → Layer 2 → ... → Layer L
  [Contextualized Embeddings]

       ▼ 取最后一个位置的向量

       ▼ × LM Head 矩阵(V维)
  [Logits: 每个 Token 一个分数]

       ▼ SoftMax(÷ Temperature)
  [概率分布: "玉" 72%, "阿" 15%, ...]

实际模型规模:


2. 每一步在做什么

2.1 Tokenizer + Embedding

Token ID 通过 Embedding Table(一个巨大矩阵,行数 = 词表大小)查表得到向量。

关键特性:

2.2 Transformer Layer(核心)

每层做两件事:

输入向量

    ▼ Self-Attention(融合上下文)
    │  + Residual Connection


    ▼ Feed Forward Network(非线性变换)
    │  + Residual Connection

输出向量(Contextualized Embedding)

Self-Attention 机制:

对每个 Token:
  Q = 向量 × W_Q    ← "我在找什么"
  K = 向量 × W_K    ← "我能提供什么"
  V = 向量 × W_V    ← "我的信息内容"

Attention Weight = SoftMax(Q · K^T)
输出 = Attention Weight × V

Feed Forward Network:两层线性变换 + 激活函数(ReLU/GeLU),相当于对每个位置独立做非线性处理。

2.3 LM Head + SoftMax

最后一层输出的向量 × LM Head 矩阵 → Logit 向量(V 维)→ SoftMax 转概率。

有趣的设计:很多模型(Llama、Gemma)的 LM Head 就是 Embedding Table 的转置。本质上是在算”最终向量跟哪个 Token 的 Embedding 最像”。


3. 从中间层能看到什么

Contextualized Embedding 解析歧义

同样是 “Apple”:

第 0 层相似度 100%,从第 1 层开始急剧分化。

Logit Lens — 窥探每层在想什么

对每一层的输出都做 Unembedding(乘 LM Head),看模型在该层”心里想输出什么 Token”。

例子:法文→中文翻译时:

说明翻译是逐层渐进的,不是一步到位。

表征工程(Representation Engineering)

通过加减向量直接操控模型行为:


4. Temperature 在这里的位置

Temperature 作用于 SoftMax 之前:

概率 = SoftMax(Logits / T)
T效果
T → 0概率集中到最高分 Token(贪心)
T = 1标准概率分布
T > 1概率变平坦,低概率 Token 也有机会

这就是你在 API 里调 Temperature 时,底层真正发生的事。


5. 对 Java 开发者的类比

LLM 概念Java 类比
Embedding TableHashMap<TokenID, float[]>
Transformer Layer一个处理管道(Pipeline),输入 List<float[]>,输出 List<float[]>
Self-AttentionStream.map() + 关联查询(像 JOIN)
Multi-Head多线程并行处理不同维度
LM Head最终分类器,输出 scores[vocabSize]
SoftMax归一化为概率分布

参考



Previous Post
生成式 AI (4):评估 AI 能力的坑
Next Post
生成式 AI (2):上下文工程