English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

语义距离即欧几里得距离

高维向量空间

ANDREA-120M 的 8449-token 词汇表中,每个 token 都映射到 R^768 中的一个点。token 嵌入矩阵形状为 8449 × 768:8449 行,每行对应一个词汇 token;768 列,每列对应一个嵌入维度。


ANDREA 的几何面板


使之成为向量空间的三个性质

1. 加法。 v_a + v_b 落在 R^768 中。两个嵌入的和是一个有效的向量。

2. 标量乘法。 对于任意实数 alpha,alpha * v 落在 R^768 中。沿同一方向拉伸或收缩。

3. 线性。 alpha v_a + beta v_b 落在 R^768 中。线性组合仍留在该空间内。


这些性质为我们提供了几何工具:距离、角度、投影、基、正交性。


距离作为语义相似度

两个嵌入的余弦相似度衡量它们之间的夹角:cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||)。取值范围:-1(相反)到 +1(平行)。


训练后的经验规律:具有相似上下文的 token 会产生余弦相似度高的嵌入。ANDREA-120M 将 parakeetmonkey 放置得很近(两者均为生物、物种,现存或已灭绝类别)。它将 Fouriertransform 放置得很近(信号处理语境)。它将 parakeetFourier 放置得很远(跨域正交性)。


为什么是 R^768 而非 R^384

ANDREA-12M 使用 d_model = 384。ANDREA-120M 将其加倍至 768。加倍很重要:384 维空间可用的“角度”较少,跨域消歧能力受限。加倍容量让模型有空间将 bank(河岸)与 bank(金融机构)解析到嵌入空间的不同区域,避免其中一个坍缩到另一个中。


将嵌入更新视为向量平移

每一次梯度步都会向 v_token 添加 delta_v。从几何角度看:在 R^768 中进行的小平移会将每个 token 的位置推向能降低损失的邻域。经过 200K 步后,每个 token 都从随机初始化位置迁移到学习到的位置。

计算距离

三个训练好的嵌入(简化为 R^3 以便计算):


- v(parakeet) = (1.0, 0.5, 0.0)

- v(monkey) = (1.2, 0.3, 0.1)

- v(Fourier) = (0.0, 0.0, 1.5)

(a) 计算欧几里得距离 ||v(parakeet) - v(monkey)||。(b) 计算 ||v(parakeet) - v(Fourier)||。(c) 指出哪两个 token 聚在一起,并给出几何理由,引用实际数值。

投影到查询子空间

注意力计算的内容

对于位置 t 处的 token,注意力计算:

<translated content> [BLOCK_TYPE SECTION/STEP]

softmax(Q K^T / sqrt(d_k)) V [BLOCK_TYPE SECTION/STEP]

<translated content> [BLOCK_TYPE SECTION/STEP]

其中 Q 是查询(当前 token 的问题),K 是键(每个过去 token 的标识符),V 是值(每个过去 token 的内容)。输出是 V 的加权混合,权重由查询与每个键的相关程度决定。 [BLOCK_TYPE SECTION/STEP]

<translated content> [BLOCK_TYPE SECTION/STEP]

几何解读
[BLOCK_TYPE SECTION/STEP]

将 K 视为 R^d_k 中的向量列表。每一行代表一个过去 token 的键。Q 是 R^d_k 中的一个向量:当前 token 的问题。 [BLOCK_TYPE SECTION/STEP]

<translated content>

Q K^T 将每个键投影到 Q 上。点积 q · k_i 表示 k_i 在 q 方向上的投影长度。长投影 = 该键与查询高度相关。短投影 = 该键与查询几乎无关。


softmax 将投影值归一化为总和为 1 的权重。V 的加权和是一个单一向量:它是过去内容的混合,按与当前查询的相关性加权。


多头注意力作为多子空间投影

ANDREA-120M 使用 12 个注意力头。d_model = 768;d_k = 768 / 12 = 64。每个头将输入投影到 R^768 中不同的 64 维子空间。12 个头提供了对同一序列的 12 个独立视角:一个头可能追踪语法角色,另一个追踪语义相似性,还有一个追踪长程指代。


几何上:每个头定义了一个 64 维的有向子空间(一个“窗口”),通过它来观察过去。


因果掩码

仅解码器模型会加入因果掩码:在 softmax 之前,将 Q K^T 中对角线以上的所有条目设为 -infinity。从几何角度看:对任意未来 token 的投影权重将被置零。Token t 只能看到 token 0 到 t。


为什么这很重要:训练与推理变得对称。使用相同的正向传播、相同的掩码投影,无需额外的生成逻辑。


sqrt(d_k) 缩放

若不进行缩放,点积会随 d_k 增大而增大。较大的点积会将 softmax 推向 one-hot 区域(一个权重接近 1,其余接近 0)。除以 sqrt(d_k) 可使投影保持单位方差尺度,从而在较宽的 d_k 范围内维持 softmax 的锐度。


几何上:sqrt(d_k) 对投影长度进行归一化,使得 softmax 无论子空间维度如何,都能看到可比较的量级。

阅读投影

R^4 中的三个键与一个查询(为便于计算而简化):


- q = (1, 0, 1, 0)

- k_1 = (1, 0, 0, 0) [过去 token 1]

- k_2 = (0, 0, 1, 0) [过去 token 2]

- k_3 = (0, 1, 0, 1) [past token 3]


d_k = 4, 所以 sqrt(d_k) = 2。

(a) 计算 q 与 k_i 的点积(i = 1, 2, 3)。(b) 除以 sqrt(d_k) = 2 得到缩放后的分数。(c) 不需要显式计算 softmax,说明哪个 key 将获得最大的注意力权重,并给出几何原因。

梯度下降:地形上的路径

120M+1 维空间中的曲面

ANDREA-120M 的每一种权重配置都是 R^120,000,000 中的一个点。损失函数 L(w) 将每个点映射到一个实数:该配置下的训练损失。所有损失值共同构成参数空间上方的一个 (120M+1) 维曲面。


直接可视化在几何上是不可能的。概念上:它像一片地形。高山(高损失)、山谷(低损失)、鞍点、平台、山脊、盆地。


梯度:局部斜率

grad L(w) 是 R^120M 中的一个向量,指向 L 增加最快的方向。取其负值:-grad L(w) 指向最陡的下坡方向。


一次 AdamW 步骤会沿着负梯度方向推动 w(通过 m 和 v 进行自适应缩放)。几何上:沿着曲面进行一次微小下降,步长由 lr 控制。


v1 的不良盆地

v1 在 LR = 峰值(0.0003)时对刚初始化的权重进行了第一次更新。几何上:w_0 位于曲率极高的区域(随机初始化在许多方向上都有高曲率),而峰值 LR 的一次更新使其落入错误的盆地。后续步骤无法逃离该盆地。模型最终只能生成“region region region”,因为这是它从落点能找到的最低损失盆地。


v2 的预热路径

v2 在 LR 从 0 线性上升至峰值的过程中进行了 2000 次小步更新。几何上:w_0 首先沿着曲率较低的平滑方向缓慢移动。到第 2000 步时,w 已进入一个更易导航的区域;此时峰值 LR 即可将其推向更好的盆地,而不会发生过冲。


Warmup 是一种几何感知的初始化协议:先让模型找到一个安全的局部邻域,再对其施加强力训练。


宽盆地 vs 窄盆地

在第 112K 步时,ANDREA-120M 位于一个盆地中。问题:这个盆地有多宽?


宽盆地 = 许多相邻的权重配置也能达到较低的训练损失。泛化性能通常较好(盆地宽度可预测测试性能;参见 PAC-Bayes 课程,第 3 章)。


窄盆地 = 只有一组狭窄的权重能达到低损失。泛化能力往往会受影响。


v3 polish 在第 112,619 步沿曲面(未重置)将模型推向更宽的盆地,借助课程扰动:改变损失函数(不同的 bandit、不同的训练混合),让 SGD 在新策略下找到附近的平坦区域。


僵尸悬崖

第 112,080 步异常的 0.13 损失是一个悬崖:一个尖锐、狭窄的区域,其中特定输入模式(记忆的 repo-docs 子串)达到接近零的损失。模型从更宽的盆地跌入狭窄沟壑。Polish-pivot 对 repo-docs 的硬排除填平了该沟壑,使 SGD 无法再找到它。

解读地形

一次 polish pivot 后的三种权重配置。(a) 配置 A:训练损失 2.0,且距离 0.1 内 95% 的小扰动仍产生损失 < 2.2。(b) 配置 B:训练损失 2.0,且距离 0.1 内 5% 的小扰动仍产生损失 < 2.2。(c) 配置 C:对特定输入的训练损失为 0.13,但对其他输入的平均损失为 8.0。将每种配置分类为 WIDE BASIN、NARROW BASIN 或 CLIFF,并给出一句几何原因。

课程混合作为离散单纯形上的行走

什么是单纯形

一个 n 维单纯形(具体指标准 (n-1)-单纯形)是由 n 元组 (w_1, w_2, ..., w_n) 组成的集合,其中每个 w_i >= 0 且 sum(w_i) = 1。


对于 n = 2:从 (1, 0) 到 (0, 1) 的线段。对于 n = 3:顶点为 (1, 0, 0)、(0, 1, 0)、(0, 0, 1) 的三角形。对于 n = 16(ANDREA 的完整源列表):一个位于 R^16 中的 15 维单纯形。


老虎机权重作为单纯形坐标

ANDREA 的老虎机在每个阶段生成一个数据源的权重向量 w。每个分量 w_i 是采样源 i 的概率。概率非负且总和为 1:每个权重向量都位于单纯形上。


顶点 = 纯策略(仅采样一个源)。内部 = 混合策略(以正概率采样多个源)。边 = 仅两个源的混合。


源下限作为受限区域

ANDREA 施加最小权重限制:hermes3-general 的下限为 0.7(后处理后)。这在单纯形中划出一个子区域:仅当权重向量满足 w_hermes3-general >= 0.7 时才可达。


几何上:下限用一个超平面切割单纯形。可达区域是位于所有下限超平面正确一侧的单纯形部分。


上限作为另一种限制

ANDREA 也施加上限:dictionary 的上限为 0.25(后处理后)。每个上限都是另一个超平面,可达区域必须同时位于所有上限超平面的正确一侧。


将某个来源完全排除(上限 = 0.0)是最强的上限:该坐标被固定为零,使有效单纯形降维一维。


相变作为单纯形游走

每一次相变(每 7-42 步)都会产生一个新的权重向量。每个新向量都是单纯形上的一个点。在 200K 步内,bandit 在单纯形可达区域内走出一条长路径。


随机相变 = 瞬移到可达区域内的一个均匀随机点。

Bandit 控制的相变 = 朝符合下限与上限的 UCB 最优顶点迈出一步。

Polish 枢轴 = 重新绘制可达区域(新的下限、新的上限、部分源被排除),游走从新的起点继续。


为什么顶点是危险的

纯源阶段(一个 w_i = 1,其余 = 0)位于单纯形顶点。多样性为零。模型仅在一个分布上训练。v1 的崩溃部分可追溯到 bandit 停留在 repo-docs 顶点附近;样本仅再现了该源的分布。


下限可防止顶点驻留:0.7 的下限表示“任何源的权重不得低于 0.7”(或优先源对应的下限值)。

行走可达区域

三个源:hermes3-general (H)、gutenberg (G)、dictionary (D)。约束:H 下限 = 0.5,D 上限 = 0.25。(隐含:所有权重 ≥ 0,总和为 1,无其他约束。)

(a) bandit 是否可能选择 (H=1.0, G=0, D=0)?为什么?(b) 是否可能选择 (H=0.5, G=0.5, D=0)?(c) 是否可能选择 (H=0.5, G=0.25, D=0.25)?(d) 在这个三源单纯形中,可达区域的几何形状如何描述?

前 20K 步的维度限制

v2 的课程预热做了什么

v2 将 curriculum_warmup_sources 设置为七个来源:hermes3-general、hermes3-creative、hermes3-roleplay、chat、smoltalk、oasst、gutenberg。前 20K 步仅由这七个来源贡献。20K 步后,完整的 16 源数据流激活。


几何解读

完整的 16 源单纯形位于 R^16 中。限制到 7 个源会将 16 个坐标中的 9 个压缩为零。bandit 的行走发生在一个 6 维子单纯形中(比源数量少一维,由和为 1 的约束决定)。


几何上:完整单纯形的一个子流形。维度更低、更平滑、更易导航。


为什么这有助于早期训练

训练初期,模型尚未学会连贯的语言。多样化的源会使其困惑:每个源都有自己的风格、自己的词汇分布、自己的模式。在随机初始化时混合 16 个源会产生一个过于宽泛的目标分布,模型无法拟合。


限制到 7 个对话/散文源会产生更均匀的目标。模型先学习稳定的表征,然后再扩展。


训练中的几何路径

1. 第 0 至 20K 步(warmup)。 行走位于 6-D 子单纯形上。模型中出现稳定的语言模式。

2. 第 20K 至 112K 步(full firehose)。 行走扩展至 15-D 完整单纯形。领域广度开始显现。

3. 第 112K 步起(polish)。 行走再次受限:排除 repo-docs 与 repo-docstrings,提高对话下限。在完整单纯形内形成更小的多边形;对话质量得到巩固。


为什么 Polish 将 curriculum_warmup_steps 设为 0

Polish 从第 112K 步开始。此时模型已能生成连贯的语言。若现在再限制到子单纯形,将失去广度却无法获得额外收益(warmup 的好处仅针对全新初始化的模型)。将 warmup_steps 设为 0 意味着:留在完整单纯形上,但施加新的上限与下限。


三种几何,一次训练

v2 warmup:低维子单纯形。

v2 firehose:完整 15-D 单纯形。

v3 polish:完整单纯形搭配更小的多边形(更多约束)。


同一 200K 步训练,三种不同的几何模式。每种模式都针对模型成熟的不同阶段进行了调优。

阅读子流形

(a) v2 warmup 使用 16 个来源中的 7 个来源。warmup 子单纯形的维度是多少?请计算并说明。(b) ANDREA-120M v3 polish 硬排除 repo-docs 和 repo-docstrings(上限 0.0),但允许其余 14 个来源。polish 子单纯形的维度是多少?(c) 从几何角度看,在 polish 配置中设置 curriculum_warmup_steps = 0 意味着什么?