维数全景 —— 每一站的数字从哪来、是什么意思
你问到了最值得问的问题:每一站数字在变,变的到底是什么?这节课给你三样东西:① 一条贯穿全链路的「形状总线」;② 每个数字的含义标注;③ 「投影器」的数学本质(它比你想的简单,而且 0.6B 里它有个出人意料的细节)。全部用 0.6B 的真实 config 数值,10 秒音频贯穿。
一、先立框架:所有张量只有两条轴
全链路的每个张量,形状都写成 (A, B) 或 (A,),两条轴含义完全不同:
| 轴 | 名字 | 含义 | 谁决定它 |
|---|---|---|---|
| 轴 0 | 时间轴(序列长) | 「有多少个位置/帧/词元」——随你的音频时长变 | 你(音频长度 × 采样参数) |
| 轴 1 | 特征轴(宽度) | 「每个位置用多少个数描述」——架构定死,与音频长短无关 | 模型设计者(超参数) |
二、全链路形状总线(10 秒音频,0.6B 真实值)
| 站 | 变换 | 输出形状 | 每个数字的含义 |
|---|---|---|---|
| 采样 | 16kHz × 10s | (160,000,) | 每个数 = 某一 1/16000 秒时刻的声压 |
| mel 前端 | 25ms 窗/10ms 移 + 128 带 mel 滤波 | (998, 128) | 轴0:第 i 帧(覆盖第 i 个 25ms);轴1:第 k 个 mel 频带的能量——这条特征轴的每一维都有物理含义 |
| AuT 编码器 | 18 层注意力 + 8× 下采样 | (124, 896) | 轴0:124 个 80ms 片段;轴1:编码器学习空间的 896 个方向(从这站起,特征维没有人类名字了) |
| 输出投影 | 编码器内 896 → 1024 | (124, 1024) | 对齐 LLM 坐标系 |
| + 模板 | 拼入 system/热词/语言前缀词元 | (≈150, 1024) | 124 行来自投影器,其余行来自词嵌入查表——两路来源,同一宽度 |
| LLM 28 层 | 注意力 + FFN ×28 | (≈150, 1024) | 形状完全不变!变的只是每行的内容:从「字面嵌入」变成「吸收了全部上下文的语义表示」 |
| 输出头 | 末行 × 词表矩阵 | (151,936,) | 每个数 = 对应词元的得分(logits) |
三、跟着 80ms 旅行:一个向量的完整一生
抽象的形状看累了?跟着一段具体的 80ms 声音(比如「明」字的声母开头)从头走一遍:
| 阶段 | 它变成了什么 | 这一步的意义 |
|---|---|---|
| 采样 | 1,280 个声压值 | 时间的原始切片 |
| mel | 8 个帧向量,每个 128 维 | 「这 80ms 里,每个频带各有多少能量」——有了频率视角 |
| AuT 编码 | 1 个 896 维向量 | 这 8 帧被融合成 1 个「声音片段表示」;与前后片段交换过信息(注意力) |
| 投影器 | 1 个 1024 维向量 | 翻译成语言模型认识的坐标 |
| LLM 28 层 | 1 个 1024 维向量(内容不断被改写) | 每过一层,它就多吸收一点上下文;最后它「知道自己支持的是『明』的声母」 |
| 输出头 | 参与「明」位置的 logits 打分 | 声音的旅程终点:变成一个确定的汉字 |
同一个 80ms,在六站里有六种「身份」:声压切片 → 频带能量 → 声音片段 → LLM 坐标 → 语义表示 → 打分依据。形状变化的本质,就是身份的层层翻译。
四、投影器的数学本质:换坐标系,不是变魔术
投影器做的唯一一件事,数学上叫线性映射(仿射变换):
y = x @ W + b
W:权重矩阵。它的每一列 = 输出空间某个坐标轴的「配方」——第 j 列告诉你:输出第 j 维 = 输入各维按什么比例混合;b:偏置,整体平移;- 所以矩阵乘法的含义 = 按一套新坐标系的配方,重新混合旧坐标。
两个关键事实(都能用线性代数严格证明,这里给直觉):
① 方阵投影(1024→1024)不丢信息,只换坐标系。0.6B 的投影器恰好就是 1024→1024——形状没变,为什么还需要它?因为编码器和 LLM 是各自独立训练的,两套 1024 维空间的坐标系完全不同(同一个方向,在两边含义风马牛不相及)。投影器 = 一本翻译字典:可逆、无损,但没有它两边互相听不懂。
② 非方阵(896→1024)是升维,可能丢也可能不丢。丢不丢取决于秩:只要 W 列满秩,任何信息都还能找回(线性可逆);真正丢信息的是「降秩」映射。AuT 内部的 8× 下采样(998→124)才是真正有意的压缩——它赌的是「80ms 内 8 帧的信息可以融合」。
五、形状追踪器(可运行)
改音频时长,看全链路形状怎么联动——注意变的全在时间轴,特征轴纹丝不动:
检索练习
本课主读材料
Jay Alammar: The Illustrated Transformer(jalammar.github.io)——重读一遍,这次带着本课的「形状眼镜」:每张图问自己一句「这步的输入输出形状是什么、哪条轴变了」。
进阶可选:The Annotated Transformer(Harvard,逐行 PyTorch 实现原文)——线代基础够用,想看"形状在代码里怎么流动"时再读。
本课新术语已入 术语表:线性映射/仿射变换、张量形状(时间轴 × 特征轴)。