从一条直线到大模型输出一个token(一):从一条直线到高维空间

从一条直线到大模型输出一个token(一):从一条直线到高维空间

本系列共 10 篇,用大量插图 + 少量高等数学,把"一个 230B 参数的大模型是怎么工作的"从头讲到尾。

写作起因:豆包的 Seed-1.6 总参数 230B,单 token 激活 23B。如果把它压缩到只剩 1 个参数,会发生什么?这个看似荒诞的思想实验,就是整个系列的起点。

@TOC

一、写在前面:没有大模型基础,能看懂吗?

说实话,我自己也不是搞大模型的。我只是觉得,大模型没有那么神秘------它的核心数学,本质上还是大学里学过的那些东西:直线、矩阵、最小二乘。

这个系列的目标,就是用 10 篇文章,一步一步把一个 230B 参数的大模型"还原"出来。我们会从一条过原点的直线开始,给它加截距、升维、引入矩阵、分词、嵌入、位置编码、注意力......最终到达"输出一个 token"。

不要被 230B 这个数字吓到。这个系列里,手算最多只会算 4×4 的小矩阵。大模型的真实宽度(4096 维、32 头、几十层)会用文字标在旁边,但手算永远用小数字。

来吧,开始。

1. 离散到线性

1.1 把 230B 压缩成 1 个参数:一条过原点的直线

豆包 Seed-1.6 是个 MoE 稀疏专家模型,总参数 230B------也就是说,模型里有 2300 亿个可以"调"的旋钮。

如果我们做个疯狂的思想实验:把 230B 全部砍掉,只留下 1 个参数,会得到什么?

在二维坐标系里,1 个参数就是一条过原点的直线。这条直线的方程是:

y=w⋅xy = w \cdot x y=w⋅x

其中 ww w 就是那 1 个参数,决定直线的斜率; xx x 是输入, yy y 是输出。这条直线从原点 (0,0)(0,0) (0,0) 出发, ww w 决定它的倾斜程度。这就是整篇文章的出发点。

1.2 现实问题:10 个点,找一条"最像"的直线

只有 1 个参数,那 ww w 是怎么定的?用训练数据。

想象一个简单场景:你想预测"商品销量 yy y"和"广告费 xx x"的关系,于是收集了 10 个点,随机取 5 个作为训练数据、5 个作为评估数据,如表 1-1 所示。

表1-1 训练数据与评估数据

类型 (x, y)
训练(图中蓝点) (1, 2.1) (2, 3.9) (3, 6.2) (4, 7.8) (5, 10.1)
评估(图中橙点) (1.5, 3.2) (2.5, 4.8) (3.5, 7.1) (4.5, 8.9) (5.5, 11.2)

把这些点画到坐标系里,如图 1-1 所示。

图1-1 第一象限的10个离散点(5个训练点+5个评估点)

肉眼一看,这些点基本就是 y≈2xy \approx 2x y≈2x。问题是:数学上"最像"是什么意思?

1.3 最小二乘:找一条线,让所有点离它"总距离"最小

用数学的语言说,就是找到一条过原点的直线,使得所有训练点到这条直线的竖直距离的平方和最小。这条线叫最小二乘拟合直线

对于过原点直线 y=wxy = wx y=wx,最优的 ww w 有解析解:

w∗= ∑i=1n xiyi ∑i=1n xi2 w^{*} = \frac{\sum_{i=1}^{n} x_i y_i}{\sum_{i=1}^{n} x_i^2} w∗=∑i=1nxi2∑i=1nxiyi

套进表 1-1 的 5 个训练点:

∑xiyi=1×2.1+2×3.9+3×6.2+4×7.8+5×10.1=110.2 \sum x_i y_i = 1 \times 2.1 + 2 \times 3.9 + 3 \times 6.2 + 4 \times 7.8 + 5 \times 10.1 = 110.2 ∑xiyi=1×2.1+2×3.9+3×6.2+4×7.8+5×10.1=110.2

∑xi2=12+22+32+42+52=55 \sum x_i^2 = 1^2 + 2^2 + 3^2 + 4^2 + 5^2 = 55 ∑xi2=12+22+32+42+52=55

w∗=110.255≈2.00 w^{*} = \frac{110.2}{55} \approx 2.00 w∗=55110.2≈2.00

所以我们找到的最优直线就是 y=2.00xy = 2.00x y=2.00x,拟合效果如图 1-2 所示。

图1-2 最小二乘拟合:红色竖线是每个点到直线的误差

图 1-2 里每条红色竖线,就是一个点离拟合直线的误差。最小二乘的目标,就是让这些误差的平方之和最小。

到这一步,我们的"模型"有 1 个参数: w∗=2.00w^{*} = 2.00 w∗=2.00。

1.4 过原点的"原罪":为什么加截距

但 1 个参数有天生的缺陷:这条直线必须过原点。这意味着它只能描述一三象限( xx x、 yy y 同号)或二四象限( xx x、 yy y 异号)的数据。如果数据"跨象限"分布,过原点直线怎么画都别扭。

来个例子。5 个新数据点的真实规律是 y=−2x+3y = -2x + 3 y=−2x+3(分布在第一、二象限),如表 1-2 所示。

表1-2 跨象限的5个训练点

序号 (x, y)
1 (-2, 7.1)
2 (-1, 5.0)
3 (0, 2.9)
4 (1, 1.1)
5 (2, -0.8)

如果硬要过原点,用 1.3 节的公式:

∑xiyi=(−2)×7.1+(−1)×5.0+0×2.9+1×1.1+2×(−0.8)=−19.7 \sum x_i y_i = (-2) \times 7.1 + (-1) \times 5.0 + 0 \times 2.9 + 1 \times 1.1 + 2 \times (-0.8) = -19.7 ∑xiyi=(−2)×7.1+(−1)×5.0+0×2.9+1×1.1+2×(−0.8)=−19.7

∑xi2=4+1+0+1+4=10 \sum x_i^2 = 4 + 1 + 0 + 1 + 4 = 10 ∑xi2=4+1+0+1+4=10

w∗= −19.710 =−1.97 w^{*} = \frac{-19.7}{10} = -1.97 w∗=10−19.7=−1.97

直线 y=−1.97xy = -1.97x y=−1.97x 的拟合效果如图 1-3 所示。

图1-3 约束之痛:直线必须过原点,跨象限数据拟合不了

问题一目了然: x=0x=0 x=0 的点( y=2.9y=2.9 y=2.9)离直线有 2.9 的误差, x=−1x=-1 x=−1 的点( y=5.0y=5.0 y=5.0)误差接近 3.0。整条直线被原点"绑住了",没法贴近数据的真实规律 y=−2x+3y = -2x + 3 y=−2x+3。

怎么办?再加 1 个参数 bb b,叫截距。直线变成:

y=w⋅x+by = w \cdot x + b y=w⋅x+b

对表 1-2 的数据,最优解是 w=−1.97w = -1.97 w=−1.97、 b=3.06b = 3.06 b=3.06,拟合直线 y=−1.97x+3.06y = -1.97x + 3.06 y=−1.97x+3.06 完美贴合数据,如图 1-4 所示。

图1-4 加一个截距 b:直线不再被原点绑架

加了 bb b 之后,直线可以平移到任何位置,过原点的"原罪"被解除了。

1.5 对应关系:斜率就是权重,截距就是偏置

到这里,我们完成了一次关键的"翻译":

斜率 ww w ↔ 大模型里的权重(Weight);截距 bb b ↔ 大模型里的偏置(Bias)。

这个对应关系如图 1-5 所示。

图1-5 1个参数的直线 ↔ 大模型的基本构件(权重+偏置)

这就是大模型最最基本的构件:一个 230B 的大模型,本质上是把这种"线性单元"反复堆叠了几十层、每一层都有几十亿个 ww w 和 bb b。

到现在,我们的"模型"已经有了 2 个参数( ww w 和 bb b)。虽然它连一句话都看不懂(这个问题留到下一篇解决),但它已经掌握了"线性关系"。

2. 从低维到高维

2.1 再加一个参数:直线升级成平面

1 个参数能描述一维输入,2 个参数能描述二维输入。再加一个参数会怎样?

比如你想预测"房价 yy y",影响因素有两个:"面积 x1 x_1 x1"和"距离地铁 x2 x_2 x2"。模型就变成 3 个参数:

y=w1x1+w2x2+b y = w_1 x_1 + w_2 x_2 + b y=w1x1+w2x2+b

数学上,这描述的是三维空间中的一个平面(两个自变量加一个因变量,共三维),如图 2-1 所示。

图2-1 2个权重参数:直线升级成平面 z = 0.5x₁ − 0.3x₂ + 2

平面在三维空间里悬浮着,所有蓝色散点都尽量靠近这个平面。和一维拟合直线的思路完全一样,只是维度从 1 升到了 2。

2.2 继续加参数:维度不断升高

再继续加:4 个参数描述三维空间中的"超平面"(3 个权重 + 1 个偏置)。再继续:5 个、100 个、1000 个参数......

参数量就是我们能"调"的旋钮数。参数越多,模型能描述的关系越复杂,如图 2-2 所示。

图2-2 参数越多维度越高:直线 → 平面 → 超平面 → 大模型

2.3 230B 意味着什么

豆包 Seed-1.6 的 230B 是什么概念?如果给每个参数都设一个"维度",这远远超出人类能在纸上画出来的能力。所以图 2-2 最右边那一片"乱点 + 问号",就是高维度的具象化。

不过别慌:理解原理不需要画出 230B 维的图,只需要理解"参数变多、维度变高、模型变强"这件事的方向性。

到这里,我们有了一个 2 个参数的"模型",能描述三维平面。但它依然看不懂一句中文。问题来了:要让 y=w1x1+w2x2+b y = w_1 x_1 + w_2 x_2 + b y=w1x1+w2x2+b 这种公式处理"今天西安的天气怎么样?"这样一句话,需要解决两个问题:

  1. 怎么把一句话拆成模型能懂的最小单位?
  2. 拆出来的最小单位怎么变成数字?

第一个问题就是下一篇的分词,第二个问题是下一篇的 token 表。

3. 矩阵:高维参数的语言

3.1 高维写不下了

从 2 个参数到 230B 个参数,最直接的写法是:

y=w1x1+w2x2+w3x3+⋯+ w2.3×1011 x2.3×1011 +b y = w_1 x_1 + w_2 x_2 + w_3 x_3 + \cdots + w_{2.3 \times 10^{11}} x_{2.3 \times 10^{11}} + b y=w1x1+w2x2+w3x3+⋯+w2.3×1011x2.3×1011+b

这个公式能写,但没人愿意写这么长。而且"一个一个算"在工程上太慢了------230B 个参数逐个乘出来,太阳都下山了。

所以我们需要一种更紧凑的数学工具:矩阵。

3.2 引入矩阵:Y = XW + b

矩阵就是"把一堆数字排成长方形"。把上面的 230B 项塞进矩阵,就成了:

Y=XW+b\mathbf{Y} = \mathbf{X}\mathbf{W} + \mathbf{b} Y=XW+b

用一个简单例子看清楚这件事:3 个训练样本,每个样本 2 个特征,如图 3-1 所示。

图3-1 高维世界的通用写法:Y = XW + b(3个样本一次算完)

左边 X\mathbf{X} X(3×2 矩阵)表示 3 个样本 × 2 个特征;中间 W\mathbf{W} W(2×1 向量)是 2 个权重; bb b 是 1 个偏置。一次矩阵乘法就得到 3 个样本的预测 Y\mathbf{Y} Y(3×1 向量)。

注意 W\mathbf{W} W、 b\mathbf{b} b 都是加粗的------这是数学上"加粗 = 矩阵/向量"的约定,后面沿用。

3.3 矩阵乘法没有魔法:一行 × 一列 = 一个数

矩阵乘法看起来唬人,其实本质就是一行乘一列再加起来。看一个 2×3 的矩阵 A\mathbf{A} A 乘以 3×2 的矩阵 B\mathbf{B} B,如图 3-2 所示。

图3-2 矩阵乘法:A的第一行 · B的第一列 = C的第一行第一列

结果矩阵 C\mathbf{C} C 左上角那个数:

C11=1×7+2×8+3×3=28 C_{11} = 1 \times 7 + 2 \times 8 + 3 \times 3 = 28 C11=1×7+2×8+3×3=28

就这一行,就这一个数。整个 230B 参数的大模型,就是把"一行×一列=一个数"的动作,在巨大的矩阵上重复几万亿次。没有别的。

3.4 大模型里矩阵无处不在(预告)

在接下来的章节里,矩阵会反复出现:

  • 第 3 篇(嵌入层):一个「词表大小 × 4096」的大表,每个词查一行就得到 4096 维的向量
  • 第 6 篇(QKV 三剑客):3 个 4096×4096 的权重矩阵,把输入变成"查询/键/值"
  • 第 7 篇(注意力): QKT\mathbf{Q}\mathbf{K}^{\mathrm{T}} QKT 得到注意力分数矩阵,再乘 V\mathbf{V} V 得到输出
  • 第 9 篇(输出矩阵):把最后一层 4096 维的隐藏向量投影到 10 万维的词表上

所谓大模型,本质上就是一个又一个超大的矩阵,外加把它们串起来的少量规则。

小结

这一篇,我们从 230B 这个大数字出发,把它压缩到 1 个参数(一根过原点的直线),然后通过加截距、升维、引入矩阵,把"1 个参数"的故事讲到了"矩阵的世界":

  • 1 个参数 = 一条过原点的直线(受原点约束)
  • 2 个参数 = 一条任意直线( ww w 决定斜率, bb b 决定位置),这就是大模型最小的"权重 + 偏置"单元
  • 升维:参数变多 → 描述能力变强 → 直线 → 平面 → 超平面
  • 矩阵 = 紧凑表达 + 批量计算的工具

下一篇预告

但我们的"模型"依然读不懂中文。 y=w⋅x+by = w \cdot x + b y=w⋅x+b 这种公式,怎么处理"今天西安的天气怎么样?"这样一句话?

要回答这个问题,需要先解决两个前置任务:

  1. 怎么把一句话拆成模型能懂的最小单位?是按字拆成"今/天/西/安/的/天/气/怎/么/样/?"11 个字,还是按词拆,还是有更好的拆法?
  2. 拆出来的最小单位怎么变成数字?模型只能算数字,没办法直接算"今天"两个字,这就需要一张"翻译表",把字/词映射成一个数字(专业上叫 token id)。

下一篇,我们就来解决这两个问题。全系列里最重要的一张表------token 表,就要登场了。

说实话,写到这儿我有点小激动。大模型没有那么神秘------它就是从 1 个参数(一条过原点的直线)开始,一路加截距、升维、引入矩阵,再加上后面会讲到的"翻译表",最后变成一个能跟人聊天的存在。后面 9 篇,我们就一起把它"还原"出来。加油!

系列目录:

  1. 从一条直线到高维空间(当前篇)
  2. 分词与 token 表
  3. 隐藏层与嵌入
  4. 位置编码 RoPE
  5. Transformer Block 全景与层归一化
  6. QKV 三剑客
  7. 注意力权重与多头机制
  8. 残差连接与前馈网络
  9. 输出矩阵与多层堆叠
  10. 首 token 诞生与 KV-Cache

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

相关推荐
Vuji2 小时前
Pi 插件解剖|summarize.ts:199 行,给 Agent 的对话做一份 Markdown 总结
前端·人工智能·agent
星核0penstarry2 小时前
边缘AI选型:记录NVIDIA Holoscan测试
人工智能·硬件架构·压力测试·ai编程
陆枫Larry2 小时前
Sandbox(沙箱)到底是什么?
人工智能
径硕科技JINGdigital2 小时前
AI 训练时 GPU 利用率低,哪些云上高性能存储方案更适合优化训练成本?AWS 按 I/O 瓶颈分层选型
人工智能·云计算·aws
lightgis3 小时前
部署一个AI项目-2/3 连接摄像
人工智能
大郭鹏宇3 小时前
适老化农村电商平台实战(上):睿邻AI乡镇商城项目概览与架构设计
人工智能
长三角活动观察3 小时前
苏州独石传媒项目SOP拆解:从“金鸡湖直播”到“创客中国”,大型活动人流管控与动线设计全流程节点控制方案
大数据·人工智能·传媒
DataScope3 小时前
去哪里找行业数据?亿欧数据靠谱吗实用吗
大数据·人工智能
江屿风3 小时前
【STM32基础篇】【嵌入式生态问题及历史追溯】流食般投喂
大数据·开发语言·人工智能·笔记·stm32·嵌入式硬件