LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
基础知识模型架构Transformer LM

从 token ids 到 logits

会员专享

理解 Decoder-only Transformer 如何把 token ids 变成 next-token logits

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

从 token ids 开始

在 词元化 部分,我们已经把文本转成了 token ids。到这里,模型看到的不是字符串,而是一串整数。

接下来的问题是:这些整数进入 Transformer 之后,为什么最后会变成每个位置对整个词表的打分?

先把完整模型记作 fθf_\thetafθ​,其中 θ\thetaθ 表示模型的所有可训练参数。对一个 batch 来说,输入是:

x∈ZB×Tx \in \mathbb{Z}^{B \times T}x∈ZB×T

输出是:

Transformer LM

从 token ids 到 next-token logits,建立 Decoder-only Transformer 的整体心智模型

Embedding 与 LM Head

理解 token ids 如何进入连续向量空间,以及 hidden states 如何投影回词表 logits

目录

从 token ids 开始
为什么每个位置都有一组 logits?
一次 forward pass 经过哪些形状?
中间为什么一直保持 [B,T,D][B,T,D][B,T,D]?
训练和生成在哪里分开?
总结
z=fθ(x),z∈RB×T×Vz = f_\theta(x), \quad z \in \mathbb{R}^{B \times T \times V}z=fθ​(x),z∈RB×T×V

这里 BBB 是 batch size,TTT 是序列长度,VVV 是 vocabulary size。也就是说,模型不是直接输出下一个 token id,而是给每个位置都输出一组长度为 VVV 的 logits。

logits 是什么、有多大?

logits 是 softmax 之前的原始分数,可正可负、量级不固定;它本身不是概率,只有经过 softmax 之后才是概率分布。

典型规模感:Qwen3.5-0.8B 的 D=1024D = 1024D=1024、V=248,320V = 248{,}320V=248,320;Qwen3.5-9B 的 D=4096D = 4096D=4096、V=248,320V = 248{,}320V=248,320。VVV 通常比 DDD 大一到两个数量级,LM Head 的 V×DV \times DV×D 矩阵因此能占模型相当一部分:

  • Qwen3.5-0.8B:embedding 与 LM Head 共享权重(weight tying),这一份 V×DV \times DV×D 矩阵约占 32%(~254M)。
  • Qwen3.5-9B:两者不共享,LM Head 单独约 11%(~1.02B),加 embedding 合计约 22%。

模型越小、词表越大,这块比例越夸张(下一章 Embedding 与 LM Head 会展开 weight tying 的取舍)。