diff --git a/research/K3_ATTNRES_GRADIENT_DEFINITION_AUDIT.md b/research/K3_ATTNRES_GRADIENT_DEFINITION_AUDIT.md new file mode 100644 index 0000000..033d124 --- /dev/null +++ b/research/K3_ATTNRES_GRADIENT_DEFINITION_AUDIT.md @@ -0,0 +1,198 @@ +# Kimi K3 第五轮前置审计:Attention Residuals 的“梯度更均匀”到底指什么 + +> 审计日期:2026-07-30(Asia/Shanghai) +> 官方仓库:`MoonshotAI/Attention-Residuals@85e22310fe5ee860b4a023de312d791de8a5a5e6` +> 官方 PDF SHA-256:`e5831b0db1347606453b5176b0142115a18887b6a9c2e1d05a266d4805a26b2f` +> 结论性质:一手工件审计,不是新的实验结果 + +## 0. 先说结论 + +K3 Round 04 的反结果——Block AttnRes 的**核心参数梯度 RMS 跨层 CV 更高**——不能直接 +反驳 Attention Residuals 论文 Figure 5(c) 所说的“梯度分布更均匀”,因为两边很可能测的 +不是同一个对象: + +```text +Round 04: +每个 Transformer block 内所有核心参数梯度拼接后的 RMS +∇θL,θ = attention + MLP + 两个输入 norm 的参数 + +论文 Figure 5(c): +图题只写 “Each transformer block's gradient magnitude” +结合 Figure 5(b) 的 block output magnitude 和正文,最自然的操作化是 +每个 block 输出 activation 的梯度 ∂L/∂h_l +``` + +但“最自然”不等于“官方已经明确定义”。论文和当前官方仓库都没有给出足以唯一重建 +Figure 5(c) 的测量合同,也没有发布训练代码。因此,下一轮不会把自己的 activation-gradient +定义冒充成论文原始实现,而会把它命名为: + +> **与 Figure 5 叙述对齐的一种公开、冻结、可复现的 operationalization** + +这一区分很重要:参数梯度回答“这一层的权重此刻收到多大更新信号”,activation 梯度回答 +“损失对这一深度的表征有多敏感”。二者相关,但不会因为链式法则而自动同方向。 + +--- + +## 1. 官方工件实际提供了什么 + +官方仓库在固定 revision 下只包含: + +- `README.md`; +- `Attention_Residuals.pdf`; +- 论文图片资产; +- citation 与外部入口。 + +仓库**不包含**: + +- 模型或 residual mixer 的可执行实现; +- Figure 5 的统计脚本; +- 训练配置、日志或 checkpoint; +- gradient hook、norm 和 reduction 定义; +- 用于复画 Figure 5 的原始数组。 + +因此,本审计能固定论文的文字、公式、图与模型尺度,不能从官方代码恢复一个不存在的 +隐藏测量合同。 + +## 2. Figure 5 能确认的事实 + +官方 `training_dynamics.png` 和 PDF Figure 5 有三个并列面板: + +| 面板 | 图题 | 横轴 | +|---|---|---| +| (a) | Validation Loss | training step | +| (b) | Output Magnitude | Layer / Transformer Block Index | +| (c) | Gradient Magnitude ×10⁻⁵ | Layer / Transformer Block Index | + +Figure 5 caption 对 (b) 与 (c) 的完整对象描述分别是: + +```text +Each transformer block's output magnitude at the end of training. +Each transformer block's gradient magnitude. +``` + +正文明确表达了两个方向: + +1. Baseline 的 hidden-state magnitude 随深度单调增长;Block AttnRes 把增长约束在局部 + residual block 内,形成周期性的深度图案。 +2. Baseline 的早期层梯度“不成比例地大”;Block AttnRes 的可学习 softmax 权重产生了 + “明显更均匀”的梯度分布。 + +图中最终大模型约有 27 个 Transformer blocks。论文的最终模型描述也是 27 个 Transformer +blocks / 54 个 residual layers;Block AttnRes 每 6 个 residual layers 聚合一次,共 9 个 +聚合块,外加 embedding 形成 10 个跨块来源。 + +## 3. Figure 5 不能确认的事项 + +下面每一项都会改变曲线,却没有在论文或官方仓库中被唯一指定: + +| 未定义项 | 至少两种合理解释 | +|---|---| +| 梯度对象 | block 输出 activation 梯度;block 参数梯度;分支输出梯度 | +| block 输出位置 | attention+MLP 后;只在 MLP 后;进入下一层 norm 前;聚合块边界后 | +| norm | L2 norm;RMS;mean absolute value;每 token norm 后再平均 | +| reduction | batch/token/channel 联合;先按 token 再按 batch;只取末 token | +| loss | token mean;sample mean;未归一化 sum;带或不带 mask | +| 采样 | 一个 batch;多 batch 平均;训练流中的 moving average | +| 时间点 | “训练结束”单点;末段平均;某个 checkpoint | +| 数值阶段 | AMP 缩放前/后;gradient clipping 前/后;BF16 或 FP32 | +| 运行模式 | train 或 eval;dropout 是否开启 | +| 归一化 | 绝对值;再除全层均值;再除 Baseline | + +Figure 5(c) 的纵轴是绝对 magnitude 标度,并不等价于 CV。只报告 CV 还会丢失两个信息: + +- 全部层梯度是否一起缩小或放大; +- 不均匀来自“早层系统性偏大”,还是某一个中间/末端尖峰。 + +所以 Round 05 必须同时公开绝对曲线、按层均值归一化曲线、CV 与前后深度分位比。 + +## 4. 为什么 activation gradient 是合理推断,但仍只是推断 + +把 Figure 5(c) 操作化为 `∂L/∂h_l` 有三条证据: + +1. 它与 Figure 5(b) 的 “transformer block output magnitude” 在横轴和叙述上成对; +2. “早期层的梯度”在表示传播语境中通常可由对 block output 保留梯度直接比较; +3. 参数张量的大小和类型在 attention 与 MLP 间差异很大,若把参数拼接,论文通常需要说明 + 聚合口径,否则 “each transformer block” 不是天然的单一标量。 + +但也有无法排除的替代解释: + +- 论文作者可能测 block 参数梯度; +- 可能测 residual branch output 而非完整 block output; +- 可能先对每个 token 做 L2 norm,再跨 token 平均; +- 可能在内部训练系统中有未公开的统一 telemetry 定义。 + +因此,网站和审计只说“与论文叙述对齐的公开定义”,不说“论文就是这样算的”,也不把 +数值和 Figure 5 纵轴直接对齐。 + +## 5. Round 04 与 Round 05 的对象对照 + +| 维度 | Round 04 已测对象 | Round 05 主对象 | +|---|---|---| +| 数学对象 | `∇θ_l L` | `∂L/∂h_l` | +| `l` 的单位 | Transformer block | Transformer block | +| 张量内容 | block 的核心参数 | block 的 post-MLP output activation | +| 聚合 | 参数元素联合 RMS | batch×time×channel 联合 RMS | +| 是否含 AttnRes 参数 | 否 | 不适用;梯度穿过 mixer | +| 时间 | final diagnostic batch | 全部预注册 diagnostic steps | +| 目的 | 权重更新信号是否均匀 | 表征深度的反向信号是否均匀 | + +Round 04 的参数梯度结果不会被改名、删去或用新指标覆盖。它仍是一个有效反结果,只是不能 +代表论文未定义清楚的 Figure 5(c)。 + +## 6. 两种结构怎样取得真正对齐的 16 / 32 个位置 + +Grok Headless 被用作一次对抗式方法审阅,不作为事实来源。它正确指出了 non-leaf tensor、 +alias、AMP、clip 时点和只看 CV 的风险;但它也提出了一个不适用于本实现的担忧: +“Block AttnRes 只有约 8 个 block 输出,无法与 Baseline 的 16 / 32 层对齐”。 + +这里要区分两种 block: + +```text +Transformer block: +attention + MLP;depth=16 时始终有 16 个,depth=32 时始终有 32 个 + +AttnRes aggregation group: +把若干 residual sublayers 的 partial sum 保存为一个跨组 source; +两种深度都约为 8 组 +``` + +Round 05 在**每个 Transformer block 的 MLP 分支完成后**取 `h_l`。所以 Baseline 与 Block +都有完全相同的 `l=1..depth`: + +| 架构 | Round 05 的 `h_l` | shape | +|---|---|---| +| Baseline | 第 `l` 个 attention residual 与 MLP residual 都完成后的 hidden state | `[B,T,C]` | +| Block | 第 `l` 个 MLP branch 加入后、可能保存并清空 aggregation partial **之前**的 partial output | `[B,T,C]` | + +Block 的 `h_l` 是局部 residual partial,而不是跨组 source 列表;这正对应论文 Figure 5(b) +所描述的“增长被限制在每个 block 内”的周期性图案。组边界前取值也避免把 reset 后的零张量 +错误当成 Transformer block output。 + +## 7. 实验实现必须通过的梯度测量闸门 + +正式训练前,四个结构格(2 个深度 × 2 个 residual graph)都必须证明: + +1. 所有 `h_l` 都是不同的、非别名的捕获对象,数量严格等于 Transformer depth; +2. `retain_grad()` 或 hook 后所有梯度非 `None`、finite,shape 与 activation 完全一致; +3. diagnostic loss 使用固定输入、固定 token-mean CE、`eval()`、无 optimizer step; +4. backward 发生在 parameter gradient clip 之前,且不经过 `GradScaler`; +5. 将同一 diagnostic loss 精确乘 2 后,每层 activation-gradient RMS 也乘 2; +6. 乘 2 前后的 CV、归一化曲线与深度分位比在数值容差内不变; +7. 同配置全新进程重复运行,冻结诊断字段 exact。 + +若任一项失败,正式 8,000-step grid 不得开始。 + +## 8. 本审计带来的研究决策 + +下一轮不再把一个宽度 192、深度 16、训练 2,000 step 的参数梯度 CV 与论文最终模型图强行 +放在同一条结论线上,而是: + +- 增加 depth 32; +- 把训练预算扩为 8,000 step; +- Baseline / Block 使用相同的 Transformer block index; +- 在 6 个固定时点测 post-MLP activation gradient; +- 绝对标度、归一化形状、CV、前后四分位失衡一起公开; +- 参数梯度作为次要指标保留; +- 预注册“支持 / 混合 / 不支持”规则,并公开全部反结果。 + +精确协议见 `research/K3_ATTNRES_GRADIENT_SCALE_PROTOCOL.md`。 diff --git a/research/K3_ATTNRES_GRADIENT_SCALE_PROTOCOL.md b/research/K3_ATTNRES_GRADIENT_SCALE_PROTOCOL.md new file mode 100644 index 0000000..d0100e4 --- /dev/null +++ b/research/K3_ATTNRES_GRADIENT_SCALE_PROTOCOL.md @@ -0,0 +1,453 @@ +# Kimi K3 第五轮:Attention Residuals 梯度定义与深度扩展实验协议 + +> 协议 ID:`llm-atlas-k3-attnres-gradient-scale-v1` +> 冻结日期:2026-07-30(Asia/Shanghai) +> 状态:正式输出前预注册 +> 前置定义审计:`research/K3_ATTNRES_GRADIENT_DEFINITION_AUDIT.md` + +## 0. 目标与一句话研究问题 + +Round 04 在缩小模型中得到两个同时成立的结果: + +- Full / Block AttnRes 的 2,000-step 验证 BPC 都优于 Baseline; +- 以“每个 Transformer block 的核心**参数**梯度 RMS”定义时,跨深度 CV 反而更高。 + +论文 Figure 5(c) 没有公开足以唯一恢复的梯度测量合同。Round 05 不猜作者的隐藏代码,而是 +冻结一个可复现、与 Figure 5 的 output/gradient 并列叙述对齐的 activation-gradient 定义, +再问: + +> 当深度从 16 增至 32、训练预算从 2,000 增至 8,000 step 时,Block AttnRes 是否比 +> PreNorm Baseline 更一致地降低 post-MLP block-output activation gradient 的跨深度失衡? + +这不是 K3 checkpoint forward,也不是论文 Figure 5 数值复画。 + +## 1. 一手来源与不可补写的空白 + +| 工件 | 固定 revision / checksum | 用途 | +|---|---|---| +| Attention Residuals GitHub | `85e22310fe5ee860b4a023de312d791de8a5a5e6` | 公式、Figure 5 / 8、模型尺度 | +| `Attention_Residuals.pdf` | SHA-256 `e5831b0d…a26b2f` | 论文一手图文 | +| WikiText-2 raw | `Salesforce/wikitext@b08601e04326c79dfdd32d625aee71d232d685c3` | 固定公开训练语料 | +| Round 04 protocol | `llm-atlas-k3-attnres-reduced-v1` | 公共主干与数据合同来源 | + +官方仓库没有模型实现、训练脚本、checkpoint 或 Figure 5 原始数据。以下字段不能归因给论文: + +- Figure 5 的确切 gradient tensor; +- norm / reduction; +- diagnostic batch; +- AMP / clipping 时点; +- 单点还是时间平均。 + +Grok Headless 只进行一次对抗式方法检查;其建议和错误都在前置审计中公开,不是事实来源。 + +## 2. 设计总览 + +```text +2 个深度:16 / 32 Transformer blocks +× 2 个 residual graph:PreNorm Baseline / Block AttnRes +× 3 个冻结 seed +× 8,000 training steps +× 32 windows/step +× 256 target bytes/window += 12 个正式训练格 += 786,432,000 target bytes +``` + +只比较 Baseline 与 Block,因为论文 Figure 5 的训练动力学面板也是这两个结构的直接对照。 +Round 04 的 Full AttnRes 结果保持公开,但本轮不增加一个与主问题无关的 6-run 分支。 + +## 3. 数据合同 + +继承 Round 04 的语料和预处理: + +1. 按固定 parquet 行序读取 `text`; +2. 每行追加一个 `\n`; +3. UTF-8 编码,无 normalization、strip、去空行或大小写改写; +4. byte vocabulary `0..255`; +5. 每个窗口连续取 257 bytes,前 256 预测后 256。 + +固定拼接后 split: + +| split | bytes | SHA-256 | +|---|---:|---| +| train | 10,951,563 | `0ca7d3e74dbe44564ea5942b85232f1bbcb525c9cd481cd5d28a87ee90e7e9b4` | +| validation | 1,148,008 | `a42356f6a8ff1d25daf25ec9db49e10a537c265581b61c74604bb63231dee719` | +| test | 1,292,014 | `bfe9eb16ab9987fb88bde4ea9a30a00f2a45db01dfc14bad78d05325789c4f12` | + +训练第 `step`、第 `row` 的 window 起点: + +```text +z = first 8 bytes of SHA256( + protocol_id + "\0train-window\0" + seed + "\0" + step + "\0" + row +) +start = uint64_be(z) mod (len(train_bytes) - 257) +``` + +同一 seed 的 4 个结构格逐 step / row 使用完全相同的 token tensor。validation 64 windows、 +diagnostic 16 windows,分别由标签 `validation-window` / `diagnostic-window` 与固定 index +生成,对全部结构与 seed 相同。 + +正式运行前 manifest 必须记录 parquet hash、split bytes/hash、全部 `3×8,000×32=768,000` +唯一训练窗口起点的 schedule hash、validation tensor hash 与 diagnostic tensor hash。 + +## 4. 模型合同 + +### 4.1 两个深度共享的结构 + +| 项 | 固定值 | +|---|---:| +| vocabulary | 256 bytes | +| context | 256 | +| `d_model` | 192 | +| heads / head dimension | 6 / 32 | +| `d_ff` | 768 | +| dropout | 0 | +| positional embedding | learned absolute,256 × 192 | +| norm | RMSNorm,`eps=1e-6` | +| attention | causal MHA;score 以 FP32 softmax | +| MLP | bias-free SwiGLU,`192→768`, `192→768`, `768→192` | +| embedding / readout | tied;final RMSNorm 后乘 token embedding | + +全部 bias-free linear 与 embedding 初始化为 `N(0,0.02)`。attention output projection 与 MLP +down projection 的标准差为 `0.02 / sqrt(2×depth)`;普通 RMSNorm 为 1。 + +### 4.2 深度与 Block AttnRes 聚合 + +| Transformer depth | residual sublayers | aggregation groups | sublayers/group | Transformer blocks/group | +|---:|---:|---:|---:|---:| +| 16 | 32 | 8 | 4 | 2 | +| 32 | 64 | 8 | 8 | 4 | + +Baseline 子层为: + +```text +h ← h + f(RMSNorm(h)) +``` + +Block AttnRes: + +- embedding 永远是 source 0; +- 对已经完成的 aggregation-group sums 做跨组 softmax mixture; +- 组内 attention / MLP branch output 累加到 `partial`; +- 达到组边界时,保存完整 `partial` 为新 source,再开始下一组; +- output mixer 聚合 embedding + 8 个完整 group sums。 + +每个子层的 pseudo-query 为 `d_model` 向量,严格 zero-init;每个 source 的 key RMSNorm weight +严格 one-init。Baseline / Block 不要求总参数量或 residual-mixer FLOPs 相等,但同 seed / +depth 的 token/position embedding、attention、MLP、input norm、final norm 和 tied readout +必须逐 tensor SHA-256 exact。 + +## 5. 训练合同 + +| 项 | 固定值 | +|---|---:| +| seeds | `2026073001, 2026073002, 2026073003` | +| formal steps | 8,000 | +| batch | 32 | +| context | 256 | +| target bytes / run | 65,536,000 | +| optimizer | AdamW | +| betas / epsilon | `(0.9,0.95)` / `1e-8` | +| peak / min LR | `3e-4` / `3e-5` | +| warmup | 400 steps,linear | +| decay | cosine,step 400→8,000 | +| weight decay | `0.1` if `ndim>=2`,否则 `0` | +| parameter grad clip | global norm `1.0` | +| compute | BF16 autocast;FP32 optimizer state | +| compile | off / eager | +| device | one RTX 5090 | +| deterministic | deterministic algorithms;`CUBLAS_WORKSPACE_CONFIG=:4096:8` | + +验证和诊断都发生在: + +```text +step 0, 100, 500, 2,000, 4,000, 8,000 +``` + +验证固定 64 windows,8 windows/eval batch,报告 token-mean CE nats 与 +`bits_per_byte = CE / ln(2)`。诊断固定 16 windows,一次性输入,不改变 optimizer state。 + +计时合同: + +- 前 20 个 training step 不计入; +- step 21–8,000 每步前后 CUDA synchronize; +- step 20 后 reset peak memory; +- 报告 mean / median / p95 step ms、peak allocated / reserved; +- timing、wall clock、hostname、GPU temperature 不进入 exact replay 字段。 + +## 6. 主梯度对象:精确到代码位置 + +### 6.1 `h_l` 定义 + +对 `l=1..depth`,统一在第 `l` 个 Transformer block 的 MLP branch 完成后捕获: + +| 架构 | 精确定义 | +|---|---| +| Baseline | attention residual 与 MLP residual 都完成后的 hidden state | +| Block | MLP branch 已加入、本 aggregation partial 可能保存/reset **之前**的 partial | + +所有 `h_l.shape = [16,256,192]`。实现必须为 diagnostic forward 返回独立引用列表,不允许捕获 +reset 后的零张量,不允许把 8 个 aggregation sources 当成 16 / 32 个 Transformer outputs。 + +### 6.2 diagnostic loss 与 gradient magnitude + +```text +model.eval() +logits, h[1..depth] = forward(fixed_diagnostic_x, capture=true) +L = mean(cross_entropy(logits.float(), fixed_diagnostic_y)) +backward(L) # 不使用 GradScaler,不执行 optimizer.step +m_l = sqrt(mean(float32(h_l.grad)² over batch×time×channel)) +``` + +规则: + +- forward 仍使用与训练一致的 BF16 autocast; +- logits 在 FP32 中计算 CE; +- loss 对全部 `16×256` targets 做算术平均,无 mask、无 label smoothing; +- backward 前 model / optimizer gradients 清零; +- activation gradient 在任何 parameter clipping 之前读取; +- diagnostic 不消耗训练数据,不进入 optimizer,不改变学习率或模型状态。 + +### 6.3 同位置 output magnitude + +同一批 `h_l` 计算: + +```text +o_l = sqrt(mean(float32(h_l)² over batch×time×channel)) +``` + +它用于显示 Baseline 单调累积与 Block 组内周期,而不作为主 confirmatory endpoint。 + +## 7. 主指标与预注册判据 + +每个 diagnostic step 保存完整 `m_1..m_depth`。以下统计由未四舍五入的 float64 数组计算。 + +### 7.1 绝对尺度 + +```text +mean_grad = mean_l(m_l) +``` + +它防止“曲线更平只是全部梯度趋近于零”被 CV 隐藏。绝对尺度不设置优劣阈值,只公开。 + +### 7.2 归一化谱与 CV + +```text +n_l = m_l / mean_grad +CV = population_std_l(m_l) / mean_grad +``` + +使用 population standard deviation(`ddof=0`)。网站必须同时显示 `m_l` 与 `n_l`,不能只显示 +CV 排名。 + +### 7.3 前后四分位失衡 + +```text +q = depth / 4 +Q_first = mean(m_1 .. m_q) +Q_last = mean(m_(depth-q+1) .. m_depth) +imbalance = abs(ln(Q_first / Q_last)) +``` + +depth 16 时各取 4 层;depth 32 时各取 8 层。`imbalance=0` 才表示首尾一致;这个定义不会把 +“早层偏大”和“晚层偏大”错误地都解释为越小越好。原始有符号比 `Q_first/Q_last` 仍公开。 + +### 7.4 seed 内配对对比 + +只在最终 step 8,000 做 confirmatory verdict: + +```text +relative_CV_reduction + = (CV_baseline - CV_block) / CV_baseline + +relative_imbalance_reduction + = (imbalance_baseline - imbalance_block) / imbalance_baseline +``` + +若 Baseline imbalance 精确为 0,则该 seed 的 relative imbalance reduction 定义为不可计算, +该 depth 自动不能得到“联合支持”;仍公开绝对差。 + +对每个 depth 分别判定: + +- **joint directional support at this depth**:三个 seed 的 CV reduction 都 `>0`,其均值 + `>=20%`;同时三个 seed 的 imbalance reduction 都 `>0`,其均值 `>=20%`。 +- **joint directional concern at this depth**:三个 seed 的两项 reduction 都 `<0`,且两项 + 平均相对恶化都 `>=20%`。 +- 其他:**mixed / inconclusive at this depth**。 + +总判定: + +- 两个 depth 都 support:**scale-consistent directional support in this operationalization**; +- 两个 depth 都 concern:**scale-consistent directional concern in this operationalization**; +- 其他:**depth-dependent or inconclusive**。 + +不计算 p-value、population CI,不把 3 seeds 称为统计证明。 + +## 8. 必须公开的次要指标 + +### 8.1 全时间轨迹 + +六个预注册时点的以下数据必须全部公开,不能选择“最好看”的 checkpoint: + +- validation BPC; +- absolute activation-gradient spectrum; +- normalized activation-gradient spectrum; +- activation CV; +- first/last quartile ratio 与 imbalance; +- output RMS spectrum; +- mean activation-gradient scale。 + +### 8.2 参数梯度 + +延续 Round 04 定义:每个 Transformer block 的 attention、MLP 与两个 input norm 的参数梯度 +拼接后计算: + +```text +parameter_grad_rms[l] = sqrt(sum(g²) / total_parameter_elements) +``` + +不含 embedding、final norm、LM head 与 AttnRes mixer 参数;clip 前读取。报告完整谱、CV 和 +前后四分位失衡,但它们不进入 Round 05 主判定。 + +### 8.3 mixer / 成本 + +Block 同报: + +- 各子层 softmax mixture 的 source-depth 分布; +- output mixer 分布; +- entropy 与 embedding / latest-complete-group mass; +- step time、peak allocated/reserved、参数量。 + +这些用于解释机制与成本,不改变 confirmatory verdict。 + +## 9. 运行前闸门 + +### 9.1 数据闸门 + +- split bytes/hash 与 Round 04 exact; +- 新 protocol 的 768,000-window schedule hash 落盘; +- validation / diagnostic tensor hash 落盘; +- 同 seed 四结构的至少 step 0 / 1 / 7,999 输入 tensor hash exact。 + +### 9.2 公共权重闸门 + +每个 depth / seed 的 Baseline 与 Block 公共参数逐 tensor exact;输出: + +- 公共参数 tensor 数; +- 公共参数 element 数; +- name / shape / dtype / bytes 联合 hash; +- value bytes 联合 hash。 + +### 9.3 activation-gradient 闸门 + +四个 depth×architecture 格都必须通过: + +1. 捕获数量严格等于 depth,shape 均为 `[16,256,192]`; +2. 全部 gradient 非 `None`、finite、storage 不别名; +3. 同输入把 loss 乘 2 后,每层 `m_l` 比值在 `2±1e-5`; +4. loss×2 前后 CV、normalized spectrum、quartile ratio 在 `1e-6` 绝对容差内; +5. 全新进程重复 smoke 的冻结字段 exact。 + +### 9.4 smoke + +四个格都运行 20 training steps;冻结字段包括: + +- protocol、architecture、depth、seed、device、dtype; +- data/schedule/tensor hashes; +- public-weight hashes; +- step 0 / 20 loss 与 validation; +- 全部预注册 diagnostic 数组; +- finite / alias / loss-scale checks。 + +smoke 不能写入 formal 目录。 + +## 10. 正式执行与独立 replay + +12 个 formal grid 必须各自在全新进程中执行。目录键为: + +```text +depth-{16|32}/{baseline|block}/seed-{2026073001|2026073002|2026073003} +``` + +完成后预注册 replay: + +```text +depth-32 / block / seed-2026073001 +``` + +replay 再从初始化训练完整 8,000 steps,不加载 formal checkpoint。比较时排除: + +- wall time / step-time samples; +- peak memory; +- process ID / hostname; +- GPU 温度与驱动层瞬时字段; +- 文件路径和生成时间。 + +必须 exact 的字段: + +- 数据与公共权重 hashes; +- 全部 validation CE/BPC; +- 全部 activation/output/parameter gradient 数组; +- mixer 数组与 summary; +- final model-state tensor hash; +- optimizer-state tensor hash; +- training-loss checkpoint 数组。 + +若 replay 不 exact,停止聚合并公开失败,不挑选另一 seed 替代。 + +## 11. 公开工件 + +正式结果完成后仓库必须包含: + +```text +experiments/k3/attnres_gradient/ + README.md + build_dataset.py + manifest.json + train.py + analyze.py + results/raw/*.json + results/compact.json + reproduction.json + +research/ + K3_ATTNRES_GRADIENT_DEFINITION_AUDIT.md + K3_ATTNRES_GRADIENT_SCALE_PROTOCOL.md + K3_ATTNRES_GRADIENT_SCALE_AUDIT.md +``` + +网站至少提供五个互相联动的视图: + +1. 论文 Figure 5 的“已知 / 未定义”拆解; +2. activation gradient 绝对谱与 normalized spectrum; +3. depth 16 / 32、三 seed、六时间点对比; +4. output RMS 周期与 Block aggregation boundary; +5. activation gradient / parameter gradient 并排,以及判定、成本、哈希和声明边界。 + +图中必须能切换到所有负结果;不能只放均值、只放 final 或隐藏某个 seed。 + +## 12. 允许与禁止的结论 + +若达到支持条件,允许写: + +> 在这个公开定义、两种缩小深度和 8,000-step byte-LM 合同中,Block AttnRes 方向一致地 +> 降低了 post-MLP output activation gradient 的跨深度 CV 与首尾四分位失衡。 + +无论结果怎样,都禁止写: + +- 复现了论文 Figure 5 的数值; +- 证明了论文未公开实现采用相同梯度定义; +- 证明了 Kimi K3 的真实梯度更健康; +- 证明 AttnRes 解决梯度消失、梯度爆炸或训练稳定性的全部问题; +- 从 3 seeds 推导总体显著性; +- 从 depth 16 / 32 外推至 48B、1T+400B Token 或 K3 2.8T 参数; +- 隐藏 activation 与 parameter gradient 方向不一致的结果。 + +## 13. 变更纪律 + +本文件提交后: + +- 允许修复使实现符合本协议的 bug; +- 允许补充日志、注释、可视化和不改变数值的导出; +- 不允许看过 formal 结果后修改主指标、阈值、diagnostic step、seed、训练预算或 replay 格; +- 任何不得不改变实验合同的事项必须先停止、写入审计、升级 protocol ID,再重新执行全部 grid。