Files
llm-atlas/src/pages/scaling/index.astro
T
2026-07-29 02:17:31 +08:00

2193 lines
70 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
import BaseLayout from "@/layouts/BaseLayout.astro";
import ScalingLawsLab from "@/components/ScalingLawsLab.astro";
const toc = [
["00", "map", "九张账与坐标"],
["01", "power-law", "为什么是幂律"],
["02", "roots", "早期经验"],
["03", "kaplan", "Kaplan 范式"],
["04", "chinchilla", "Chinchilla 修正"],
["05", "isoflop", "IsoFLOP 怎样做"],
["06", "replication", "复现与和解"],
["07", "data", "数据受限"],
["08", "overtraining", "过训练与部署"],
["09", "emergence", "涌现之争"],
["10", "new-axes", "MoE 与新坐标"],
["11", "deepseek", "DeepSeek 主线"],
["12", "kimi", "Kimi K2 → K3"],
["13", "lab", "四个互动实验"],
["14", "reading", "怎样读一张曲线"],
["15", "papers", "关键论文链"],
];
const ledgers = [
["L1 / OBSERVABLE", "观测量", "CE、NLL、PPL、BPB 或任务错误率?"],
["L2 / MODEL", "模型规模", "total、non-embedding 还是 active parameters"],
["L3 / DATA", "数据规模", "seen、unique、repeated 还是 effective Token"],
["L4 / COMPUTE", "理论算术", "训练 FLOPs 怎样定义,是否遗漏 attention / routing"],
["L5 / ALLOCATION", "预算配比", "固定 C 时,N 与 D 各分多少?"],
["L6 / RECIPE", "训练配方", "batch、LR、warmup、schedule 是否随规模公平调优?"],
["L7 / EXTRAPOLATION", "外推证据", "目标点是否真正留出,误差与置信区间多大?"],
["L8 / ECONOMICS", "经济目标", "只算训练,还是加上未来全部推理?"],
["L9 / CAPABILITY", "能力阶段", "平滑 loss、离散 benchmark、RL 与 test-time compute 能否同图?"],
];
const history = [
["2017", "Hestness", "跨语言、视觉、语音等任务观察数据—误差幂律。"],
["2018", "Noise Scale", "critical batch 把并行速度与样本效率放进同一张账。"],
["2020", "Kaplan", "建立 L(N)、L(D)、L(C) 与偏大模型的 compute-optimal 结论。"],
["2020", "Cross-modal", "Henighan 把自回归幂律扩到图像、视频与数学。"],
["2022", "Chinchilla", "三种方法把最优分配改写为参数与数据近似同比例增长。"],
["2022", "Emergence", "若干 benchmark 在规模上呈现突然跃升。"],
["2022", "Broken Laws", "用平滑折断幂律表达 plateau、拐点和新斜率。"],
["2023", "Data-constrained", "把 unique Token 和重复 epoch 分开,研究数据墙。"],
["2023", "Mirage", "非线性与不连续指标可能制造“突然会了”。"],
["2024", "Reproduction", "重新检查 Chinchilla 拟合与 KaplanChinchilla 分歧。"],
["2024", "Over-training", "把小模型长训和下游平均错误率纳入预测。"],
["202426", "New axes", "MoE、部署成本、RL、长上下文和多模态要求新的坐标。"],
];
const approaches = [
["01", "训练曲线最小值", "0.50", "0.50", "不同模型沿训练曲线找每个预算的最低 loss"],
["02", "IsoFLOP profiles", "0.49", "0.51", "固定 FLOPs,扫多组 N×D,再连接谷底"],
["03", "Parametric loss", "0.46", "0.54", "拟合 E + A/Nᵅ + B/Dᵝ 后解析求解"],
["K", "Kaplan 对照", "0.73", "0.27", "其 2020 配方更偏向增加模型规模"],
];
const deepseekSteps = [
{
year: "2024",
title: "DeepSeek LLM",
formula: "Mopt ∝ C⁰·⁵²⁴³ · Dopt ∝ C⁰·⁴⁷⁵⁷",
body: "先搜索 batch 与学习率,再用 non-embedding FLOPs/token M 替代参数代理;attention 计算进入坐标。",
},
{
year: "2024",
title: "DeepSeekMoE / V2",
formula: "TOTAL ≠ ACTIVE ≠ FLOPs",
body: "细粒度专家和 MLA 改写容量、每 Token 计算与服务 KV 成本,Dense 的单一 N 已不够。",
},
{
year: "2024",
title: "DeepSeek-V3",
formula: "671B total · 37B active · 14.8T Token",
body: "模型、数据、FP8、DualPipe 与通信内核共同决定实际可扩展性;GPU hours 不能由 6ND 单独推出。",
},
{
year: "2026",
title: "DeepSeek-V4",
formula: "1M context · hybrid attention · Muon",
body: "压缩/稀疏 attention、recurrent components、mHC 与优化器把“规模”扩展到上下文和深度稳定性。",
},
];
const kimiSteps = [
{
title: "Kimi K2",
tag: "TOKEN EFFICIENCY",
body: "15.5T curated Token、MuonClip、知识/数学改写与 sparsity scaling;重点从“更多 Token”转向“每个 Token 的学习价值”。",
},
{
title: "Kimi K3 Scaling Study",
tag: "FAMILY SEARCH",
body: "为 KDA、AttnRes、Stable LatentMoE 和新数据/训练配方重新搜索 batch、LR、TPP 与 model shape。",
},
{
title: "Cosine vs WSD",
tag: "FAIR TUNING",
body: "两种 schedule 的最优 peak LR 与 batch 不同;各自独立调参后,报告选择 cosine,不能用共享超参草率赛跑。",
},
{
title: "2.5× Overall",
tag: "AUTHOR-REPORTED",
body: "Figure 7 的 OOD validation lossFLOPs family-level 差异;不是单组件、吞吐、参数效率或所有 benchmark 的 2.5×。",
},
];
const paperChain = [
["2017", "Deep Learning Scaling is Predictable, Empirically", "https://arxiv.org/abs/1712.00409", "跨任务数据幂律前史。"],
["2018", "An Empirical Model of Large-Batch Training", "https://arxiv.org/abs/1812.06162", "gradient noise scale 与 critical batch。"],
["2020", "Scaling Laws for Neural Language Models", "https://arxiv.org/abs/2001.08361", "Kaplan 的 N / D / C 经典坐标。"],
["2020", "Scaling Laws for Autoregressive Generative Modeling", "https://arxiv.org/abs/2010.14701", "跨模态自回归幂律。"],
["2020", "Language Models are Few-Shot Learners", "https://arxiv.org/abs/2005.14165", "GPT-3 的规模与 in-context learning 实证。"],
["2021", "Scaling Language Models: Methods, Analysis & Insights from Training Gopher", "https://arxiv.org/abs/2112.11446", "280B Dense 模型的任务分化。"],
["2022", "Training Compute-Optimal Large Language Models", "https://arxiv.org/abs/2203.15556", "Chinchilla 与 IsoFLOP。"],
["2022", "PaLM: Scaling Language Modeling with Pathways", "https://arxiv.org/abs/2204.02311", "540B 规模实践与任务变化。"],
["2022", "Emergent Abilities of Large Language Models", "https://arxiv.org/abs/2206.07682", "涌现能力的原始系统化。"],
["2022", "Broken Neural Scaling Laws", "https://arxiv.org/abs/2210.14891", "plateau、拐点与折断幂律。"],
["2023", "LLaMA: Open and Efficient Foundation Language Models", "https://arxiv.org/abs/2302.13971", "面向推理效率的小模型长训练。"],
["2023", "Are Emergent Abilities of Large Language Models a Mirage?", "https://arxiv.org/abs/2304.15004", "指标导致的伪阶跃。"],
["2023", "Scaling Data-Constrained Language Models", "https://arxiv.org/abs/2305.16264", "unique data 与重复 epoch。"],
["2023", "Pythia", "https://arxiv.org/abs/2304.01373", "训练中间 checkpoint 与可解释 scaling。"],
["2024", "DeepSeek LLM", "https://arxiv.org/abs/2401.02954", "超参数 law、M 与开放 scaling study。"],
["2024", "Beyond Chinchilla-Optimal", "https://arxiv.org/abs/2401.00448", "加入未来推理需求。"],
["2024", "Language Models Scale Reliably with Over-training", "https://arxiv.org/abs/2403.08540", "104 个模型与 aggregate downstream error。"],
["2024", "Chinchilla Scaling: A Replication Attempt", "https://arxiv.org/abs/2404.10102", "拟合参数与置信区间复查。"],
["2024", "More Compute Is What You Need", "https://arxiv.org/abs/2404.19484", "计算分配敏感性的争议假说。"],
["2024", "Resolving Discrepancies in Compute-Optimal Scaling", "https://arxiv.org/abs/2406.19146", "FLOPs、warmup 与调参解释分歧。"],
["2024", "Optimization Hyper-parameter Laws", "https://arxiv.org/abs/2409.04777", "动态学习率 schedule 的预测。"],
["2024", "Establishing Task Scaling Laws via Model Ladders", "https://arxiv.org/abs/2412.04403", "从 task loss 到 task performance。"],
["2024", "The Llama 3 Herd of Models", "https://arxiv.org/abs/2407.21783", "超 Chinchilla TPP 的开放实践。"],
["2024", "DeepSeek-V3 Technical Report", "https://arxiv.org/abs/2412.19437", "MoE、FP8 与系统协同。"],
["2025", "Kimi K2: Open Agentic Intelligence", "https://arxiv.org/abs/2507.20534", "token efficiency、MuonClip 与改写。"],
["2025", "Overtrained Language Models Are Harder to Fine-Tune", "https://arxiv.org/abs/2503.19206", "base loss 与后训练可塑性分离。"],
["2026", "Data-Constrained LM Pretraining", "https://arxiv.org/abs/2606.06888", "SoftQ 与模型—数据耦合。"],
["2026", "DeepSeek-V4", "https://arxiv.org/abs/2606.19348", "百万上下文的新缩放变量。"],
["2026", "Kimi K3: Open Frontier Intelligence", "https://arxiv.org/abs/2607.24653", "双轴扩展与 2.5× family claim。"],
];
---
<BaseLayout
title="LLM Scaling Laws:从 Kaplan、Chinchilla 到 DeepSeek 与 Kimi K3"
description="用九张账、29 个一手节点和四个交互实验讲清 LLM Scaling Laws:幂律、IsoFLOP、数据受限、过训练、部署最优、涌现争议,以及 DeepSeek 与 Kimi K3 的工程实践。"
section="scaling"
>
<header class="page-hero scaling-hero">
<div class="page-hero-inner">
<div>
<p class="eyebrow"><span>SCALING / 04</span> EMPIRICAL LAWS & ENGINEERING</p>
<h1>更大为什么有效,<br />又为什么不是越大越好?</h1>
<p class="lead">
Scaling law 不是一句“堆算力”。它要说明横轴是什么、纵轴是什么、固定了什么,
以及一条从小实验外推到昂贵训练的曲线,究竟有多大误差、在哪些条件下会失效。
</p>
</div>
<dl class="page-facts">
<div><dt>LEDGERS</dt><dd>9 张不能混的账</dd></div>
<div><dt>CORE SOURCES</dt><dd>29 个一手节点</dd></div>
<div><dt>LINEAGE</dt><dd>2017 → 2026</dd></div>
<div><dt>LAB</dt><dd>4 个独立实验</dd></div>
<div><dt>SPOTLIGHT</dt><dd>DeepSeek × Kimi</dd></div>
</dl>
</div>
</header>
<div class="report-shell">
<aside class="side-rail" aria-label="本页目录">
<p>CONTENTS</p>
<ol>
{toc.map(([number, id, label]) => (
<li><a href={`#${id}`}><span>{number}</span>{label}</a></li>
))}
</ol>
<div class="rail-note">
<b>研究截止</b>
2026-07-29。所有模拟均为 teaching model;作者报告与独立复现严格分开。
</div>
</aside>
<article class="article">
<section class="article-section" id="map">
<p class="eyebrow"><span>00</span> NINE LEDGERS</p>
<h2>第一步不是画曲线,而是给横轴、纵轴和“最优”补全单位</h2>
<p class="lede">
同样写着 “scaling”,可能是在研究训练 loss、唯一数据、激活参数、累计推理请求或 RL FLOPs。
坐标不同,最佳决策甚至会朝相反方向移动。下面九张账是本章的防混淆协议。
</p>
<div class="ledger-grid">
{ledgers.map(([code, title, body], index) => (
<article style={`--ledger-index:${index}`}>
<span>{code}</span><h3>{title}</h3><p>{body}</p>
</article>
))}
</div>
<div class="truth-banner">
<b>一句话定义</b>
<p>
Scaling law 是在一个明确的模型族、数据分布、训练 recipe 和指标下,
用较便宜的实验拟合规模规律,再对未训练的大 run 做带不确定性的预测。
</p>
</div>
</section>
<section class="article-section" id="power-law">
<p class="eyebrow"><span>01</span> POWER LAW INTUITION</p>
<h2>为什么 log-log 图上常出现一条直线?</h2>
<p>
许多实验观察到可约误差随资源 <code>x</code> 近似按 <code>x<sup>-α</sup></code> 下降。
取对数后,乘法变加法、指数变斜率,所以跨多个数量级的弯曲关系会变成近似直线。
</p>
<div class="power-stage">
<div class="formula-card">
<span>GENERIC FORM</span>
<b>L(x) = L∞ + A · x<sup>−α</sup></b>
<dl>
<div><dt>L∞</dt><dd>当前实验族的不可约下界</dd></div>
<div><dt>A</dt><dd>数据、架构、tokenizer 决定的垂直位移</dd></div>
<div><dt>α</dt><dd>资源翻倍时,loss 下降有多快</dd></div>
</dl>
</div>
<div class="log-plot" aria-label="幂律在普通坐标与双对数坐标中的示意">
<div>
<span>LINEAR VIEW</span>
<svg viewBox="0 0 280 150" role="img" aria-label="普通坐标下逐渐变平的幂律曲线">
<path class="axis" d="M28 12V124H264"></path>
<path class="curve" d="M34 24 C58 63 91 86 132 99 C180 114 224 119 258 121"></path>
<text x="180" y="143">RESOURCE x</text>
</svg>
</div>
<i>log</i>
<div>
<span>LOGLOG VIEW</span>
<svg viewBox="0 0 280 150" role="img" aria-label="双对数坐标下近似直线的幂律曲线">
<path class="axis" d="M28 12V124H264"></path>
<path class="curve" d="M36 24L256 118"></path>
<text x="188" y="143">LOG x</text>
<text class="slope" x="138" y="58">slope = −α</text>
</svg>
</div>
</div>
</div>
<div class="concept-pairs">
<article><span>翻倍不是翻倍能力</span><p>若 α 很小,每次翻倍只改善一点;跨越 10³–10⁶ 倍资源后,累积效果才显著。</p></article>
<article><span>直线不是永恒真理</span><p>数据分布、架构、优化器或指标改变后,前因子、指数、下界乃至函数形状都会改变。</p></article>
<article><span>拟合内不等于外推准</span><p>十个点能画出漂亮直线;真正的验证是把更大的目标 run 留到最后再揭晓。</p></article>
</div>
</section>
<section class="article-section" id="roots">
<p class="eyebrow"><span>02</span> 2017 → 2026</p>
<h2>从“数据多一点会更好”,到训练前先做模型家族搜索</h2>
<p>
Scaling laws 不是 GPT-3 后突然出现。2017 年的跨任务经验、2018 年的大 batch 统计,
先把可预测性与训练效率摆上桌;语言模型只是把实验推到更大的数量级。
</p>
<div class="history-river">
{history.map(([year, title, body], index) => (
<article>
<time>{year}</time>
<i><span>{String(index + 1).padStart(2, "0")}</span></i>
<div><h3>{title}</h3><p>{body}</p></div>
</article>
))}
</div>
<aside class="source-callout">
<b>前史的作用</b>
<p>
<a href="https://arxiv.org/abs/1712.00409">Hestness et al.</a> 说明不同任务的指数不同;
<a href="https://arxiv.org/abs/1812.06162">McCandlish et al.</a> 说明 batch 与优化动态也随规模变化。
所以后来的 `N–D–C` 从来不是一座与 recipe 无关的孤岛。
</p>
</aside>
</section>
<section class="article-section" id="kaplan">
<p class="eyebrow"><span>03</span> KAPLAN 2020</p>
<h2>经典坐标建立:参数、数据、计算各自都能形成平滑幂律</h2>
<p>
<a href="https://arxiv.org/abs/2001.08361">Scaling Laws for Neural Language Models</a>
在 WebText2 和一族 Transformer 上分别研究参数受限、数据受限与计算受限的情况。
论文把 “规模有效” 变成了可拟合、可规划的工程问题。
</p>
<div class="kaplan-board">
<article>
<span>PARAMETER-LIMITED</span>
<b>L(N) ∝ N<sup>0.076</sup></b>
<p><code>N</code> 是 non-embedding parameters;需有足够数据并训练到接近收敛。</p>
</article>
<article>
<span>DATA-LIMITED</span>
<b>L(D) ∝ D<sup>0.095</sup></b>
<p><code>D</code> 是 Token;常数依赖 WebText2、词表与 tokenizer。</p>
</article>
<article>
<span>COMPUTE-OPTIMAL</span>
<b>N<sub>opt</sub> ∝ C<sup>0.73</sup></b>
<p>该 recipe 下,大部分新增算力被分给更大的模型,数据增长较慢。</p>
</article>
</div>
<div class="boundary-box">
<div>
<span>当年的结论</span>
<b>更大的模型更 sample-efficientcompute-optimal 训练应偏向大模型并较早停止。</b>
</div>
<div>
<span>今天不能省略的条件</span>
<p>
固定 3,000-step warmup、last-layer FLOPs 计数与不同规模的优化器调参方式都会影响谷底。
2024 年复现实验证明,recipe 公平性可以改变看到的指数。
</p>
</div>
</div>
</section>
<section class="article-section" id="chinchilla">
<p class="eyebrow"><span>04</span> CHINCHILLA 2022</p>
<h2>同样训练 FLOPs70B 认真读更多数据,可以胜过 280B 的欠训练模型</h2>
<p>
<a href="https://arxiv.org/abs/2203.15556">Training Compute-Optimal Large Language Models</a>
不只训练一个大模型,而是用三套方法寻找多个固定预算下的最优 <code>N × D</code> 配比。
三套结果共同指向:算力增长时,参数与 Token 应近似同比例增长。
</p>
<div class="loss-decomposition">
<div class="loss-label">
<span>PARAMETRIC LOSS</span>
<b>L(N,D)</b>
</div>
<div class="loss-piece entropy"><span>不可约</span><b>E</b><small>数据分布底噪</small></div>
<i>+</i>
<div class="loss-piece model"><span>模型项</span><b>A / N<sup>α</sup></b><small>容量不够</small></div>
<i>+</i>
<div class="loss-piece data"><span>数据项</span><b>B / D<sup>β</sup></b><small>训练不够</small></div>
</div>
<div class="approach-table">
<div class="head"><b>方法</b><b>实验/拟合方式</b><b>N exponent</b><b>D exponent</b></div>
{approaches.map(([index, title, n, d, body]) => (
<div>
<span>{index}</span>
<p><strong>{title}</strong><small>{body}</small></p>
<b>{n}</b>
<b>{d}</b>
</div>
))}
</div>
<div class="tpp-ruler">
<div class="ruler-label"><span>TOKENS / PARAMETER</span><b>一个经验尺,不是自然常数</b></div>
<div class="ruler-track">
<i style="--x:2%"><b>1</b><span>严重欠训</span></i>
<i class="key" style="--x:18%"><b>≈20</b><span>Chinchilla 表 3 附近</span></i>
<i style="--x:48%"><b>200</b><span>小模型长训练</span></i>
<i style="--x:78%"><b>2,000</b><span>部署导向过训练</span></i>
<i style="--x:98%"><b>10,000</b><span>论文探索边界</span></i>
</div>
<p>
表 3 的 1B→20.2B Token、10B→205.1B、67B→1.5T 形成约 20 TPP 的实用近似;
它不保证跨数据质量、tokenizer、MoE、优化器或部署目标保持不变。
</p>
</div>
</section>
<section class="article-section" id="isoflop">
<p class="eyebrow"><span>05</span> ISOFLOP METHOD</p>
<h2>谷底不是用公式猜出来的,而是用很多次小训练“围”出来的</h2>
<p>
固定一笔 compute budget,模型变大时能看的 Token 必须变少。最小模型可能容量不足,最大模型可能数据不足,
中间就形成一条 U 型 IsoFLOP 曲线。对多个预算重复,连接谷底才得到 compute-optimal frontier。
</p>
<div class="isoflop-diagram">
<div class="isoflop-chart" aria-label="多条 IsoFLOP 曲线及其谷底连线示意">
<svg viewBox="0 0 680 390" role="img">
<title>不同训练算力预算下的 IsoFLOP U 型曲线</title>
<path class="axis" d="M60 24V336H650"></path>
<g class="grid">
<path d="M60 76H650M60 140H650M60 204H650M60 268H650"></path>
</g>
<path class="budget b1" d="M82 91 C190 204 299 257 433 234 C519 219 585 170 632 110"></path>
<path class="budget b2" d="M82 65 C211 180 340 242 475 218 C551 203 607 163 638 121"></path>
<path class="budget b3" d="M82 44 C239 157 373 218 514 199 C578 190 619 159 642 132"></path>
<path class="frontier" d="M376 247 C420 234 472 218 520 198"></path>
<circle cx="376" cy="247" r="7"></circle>
<circle cx="472" cy="218" r="7"></circle>
<circle cx="520" cy="198" r="7"></circle>
<text x="255" y="376">MODEL SIZE N · LOG</text>
<text x="18" y="226" transform="rotate(-90 18 226)">VALIDATION LOSS</text>
<text class="annotation" x="512" y="175">OPTIMAL FRONTIER</text>
</svg>
</div>
<ol>
<li><span>01</span><div><b>选预算</b><p>至少多个跨数量级的训练 FLOPs。</p></div></li>
<li><span>02</span><div><b>扫配比</b><p>每个预算都要覆盖谷底两侧。</p></div></li>
<li><span>03</span><div><b>调 recipe</b><p>不同规模的 LR、batch、warmup 需公平。</p></div></li>
<li><span>04</span><div><b>找谷底</b><p>记录最优 N、D 与最终 loss。</p></div></li>
<li><span>05</span><div><b>真正外推</b><p>用未参与拟合的大 run 检查误差。</p></div></li>
</ol>
</div>
<aside class="warning-callout">
<b>常见“假 scaling study”</b>
<p>
只训练三个模型且全部位于谷底同一侧;每个规模沿用同一学习率;把训练中间 checkpoint 当独立数据点;
只报告拟合内 R²,不展示目标规模的预测误差。
</p>
</aside>
</section>
<section class="article-section" id="replication">
<p class="eyebrow"><span>06</span> REPLICATION & RECONCILIATION</p>
<h2>“Kaplan 错、Chinchilla 对”太简单:训练 recipe 本身就在改变曲线</h2>
<p>
2024 年两条复现路线把争议从口号拉回实验细节。
<a href="https://arxiv.org/abs/2404.10102">Chinchilla replication</a> 检查原论文 Approach 3 的拟合;
<a href="https://arxiv.org/abs/2406.19146">Resolving Discrepancies</a> 则从 Kaplan 风格训练重做实验。
</p>
<div class="replication-grid">
<article>
<span>REPLICATION ATTEMPT</span>
<h3>精确参数和置信区间有问题</h3>
<ul>
<li>正文、TeX 与重建数据的参数不完全一致;</li>
<li>原报告的 Approach 3 置信区间异常窄;</li>
<li>重新拟合后,近等比例扩展仍与 Approach 1/2 相容。</li>
</ul>
<b>不是“Chinchilla 被推翻”</b>
</article>
<article>
<span>KAPLAN → CHINCHILLA</span>
<h3>三项修正让指数明显移动</h3>
<ul>
<li>是否计入最后一层 / vocabulary FLOPs</li>
<li>固定 warmup 对小模型是否过长;</li>
<li>是否做 scale-dependent optimizer tuning。</li>
</ul>
<b>recipe 是 scaling law 的一部分</b>
</article>
</div>
<div class="causal-chain">
<div><span>固定 3,000-step warmup</span><p>小模型大量训练仍在 warmup</p></div>
<i>→</i>
<div><span>小模型看起来不划算</span><p>谷底被推向更大模型</p></div>
<i>→</i>
<div><span>N exponent 变大</span><p>像是“规模定律”,实含 recipe 偏差</p></div>
</div>
<blockquote>
Scaling law 最值得学习的不是某个小数点,而是实验协议:定义、覆盖、调参、留出、误差条和失败条件。
</blockquote>
</section>
<section class="article-section" id="data">
<p class="eyebrow"><span>07</span> DATA-CONSTRAINED REGIME</p>
<h2>Seen Token 是系统付出的计算,Unique Token 才是第一次见到的信息</h2>
<p>
<a href="https://arxiv.org/abs/2305.16264">Scaling Data-Constrained Language Models</a>
用 <code>UD</code> 表示唯一数据,用 <code>RD</code> 表示重复次数:
<code>D = UD × (RD + 1)</code>。这个拆分让“训练了多少 Token”和“拥有多少新语料”不再混写。
</p>
<div class="data-tanks">
<article>
<span>UNIQUE DATA</span>
<div class="tank full"><i></i><b>UD</b></div>
<p>第一次出现的内容;筛选和去重决定底层分布。</p>
</article>
<i>× epochs</i>
<article>
<span>SEEN TOKENS</span>
<div class="tank striped"><i></i><b>D</b></div>
<p>训练系统真实处理的量;每次重复仍付完整算力。</p>
</article>
<i>≠</i>
<article>
<span>EFFECTIVE SIGNAL</span>
<div class="tank fading"><i></i><b>D<sub>eff</sub></b></div>
<p>不可直接测量的教学概念;重复、质量与正则化会改变它。</p>
</article>
</div>
<div class="evidence-split">
<div>
<span>论文实际报告</span>
<ul>
<li>400+ 个模型,10M9B 参数;</li>
<li>最多 900B training Token</li>
<li>其设置中,约 4 epoch 内与等量 unique data 的差距可能很小;</li>
<li>继续重复的边际收益最终趋近于零。</li>
</ul>
</div>
<div>
<span>不能改写成</span>
<ul>
<li>“任何语料重复四遍都无害”;</li>
<li>“第五遍开始完全没用”;</li>
<li>“改写一遍等于得到一个新 Token”;</li>
<li>“互联网数据将在某个固定年份耗尽”。</li>
</ul>
</div>
</div>
<p>
2026 年的 <a href="https://arxiv.org/abs/2606.06888">SoftQ</a> 进一步让模型与有限数据项发生耦合,
并研究强权重衰减与 masked-input regularization。它是数据受限前沿的新证据,不是已定型的新常数。
</p>
</section>
<section class="article-section" id="overtraining">
<p class="eyebrow"><span>08</span> OVER-TRAINING & DEPLOYMENT</p>
<h2>训练最省算力的模型,未必是一生服务最省算力的模型</h2>
<p>
Chinchilla 只优化训练。如果一个模型会被调用十亿次,更小模型即使预训练更久,
每次推理节省的计算也可能把额外训练成本赚回来。
</p>
<div class="economics-equation">
<span>TOTAL LIFETIME COST</span>
<div>
<b>C<sub>total</sub></b><i>=</i>
<strong>C<sub>train</sub></strong><i>+</i>
<strong>requests × C<sub>inference</sub></strong>
</div>
<p>目标函数一变,最优点就可以从“大模型、少训练”移动到“小模型、长训练”。</p>
</div>
<div class="train-serve-comparison">
<article>
<span>TRAIN-ONLY OPTIMUM</span>
<div class="model-shape large"><b>N</b><i></i></div>
<p>参数与数据在固定训练 FLOPs 下配平;不关心模型上线后调用多少次。</p>
</article>
<div class="demand-arrow">
<span>INFERENCE DEMAND ↑</span>
<i>→</i>
<small>最优模型趋向更小、训练 Token 趋向更多</small>
</div>
<article>
<span>LIFETIME OPTIMUM</span>
<div class="model-shape small"><b>N</b><i></i><i></i><i></i></div>
<p>用更多预训练摊薄每次调用;最终位置依赖流量、上下文、batch、硬件和寿命。</p>
</article>
</div>
<div class="paper-findings">
<article>
<span>BEYOND CHINCHILLA</span>
<h3>1010,000 TPP</h3>
<p>
<a href="https://arxiv.org/abs/2401.00448">Sardana et al.</a> 训练 47 个 150M6B 模型,
在研究范围内没有看到极高 TPP 的 loss 完全停止改善;这不证明无限长训。
</p>
</article>
<article>
<span>OVER-TRAINING LAWS</span>
<h3>104 models · 3 datasets</h3>
<p>
<a href="https://arxiv.org/abs/2403.08540">Gadre et al.</a> 发现多个 token multiplier 的
reducible-loss 曲线近似平行;aggregate downstream error 比单任务更可预测。
</p>
</article>
<article>
<span>NEW FAILURE MODE</span>
<h3>Base loss ≠ Adaptability</h3>
<p>
<a href="https://arxiv.org/abs/2503.19206">Catastrophic overtraining</a> 提醒:
更低预训练 loss 可能伴随后续 fine-tuning 更困难,两阶段目标必须分账。
</p>
</article>
</div>
</section>
<section class="article-section" id="emergence">
<p class="eyebrow"><span>09</span> EMERGENCE DEBATE</p>
<h2>“突然会了”可能是真机制,也可能只是评分尺把平滑曲线折成台阶</h2>
<p>
<a href="https://arxiv.org/abs/2206.07682">Emergent Abilities</a> 系统记录多项任务在规模上从近随机跃升。
<a href="https://arxiv.org/abs/2304.15004">Mirage</a> 随后证明,非线性或不连续指标本身就能制造这种外观。
</p>
<div class="metric-lenses">
<div class="latent-curve">
<span>同一底层 per-token 能力</span>
<svg viewBox="0 0 430 210" role="img" aria-label="随规模平滑增长的底层能力">
<path class="axis" d="M35 18V178H412"></path>
<path class="curve" d="M42 165 C118 158 164 141 215 106 C269 69 323 46 403 37"></path>
</svg>
</div>
<i>通过不同评分尺</i>
<div class="lens-results">
<article><span>TOKEN EDIT DISTANCE</span><svg viewBox="0 0 190 70"><path d="M8 61 C53 58 84 46 112 29 C140 13 166 9 183 7"></path></svg><b>连续</b></article>
<article><span>EXACT MATCH</span><svg viewBox="0 0 190 70"><path d="M8 66 C95 66 121 58 142 34 C158 16 172 9 183 7"></path></svg><b>很陡</b></article>
<article><span>PASS / FAIL</span><svg viewBox="0 0 190 70"><path d="M8 65 H126 V8 H183"></path></svg><b>阶跃</b></article>
</div>
</div>
<div class="emergence-rules">
<article><b>先换连续指标</b><p>Token-level、Brier score、edit distance,检查底层进展是否仍有拐点。</p></article>
<article><b>再补采样与方差</b><p>稀疏规模点和高方差 benchmark 很容易把噪声看成阈值。</p></article>
<article><b>最后谈机制改变</b><p>若多个连续指标、种子和数据集都出现稳定转折,才追查数据或网络机制。</p></article>
</div>
<aside class="source-callout">
<b>Mirage 没有证明“所有涌现都不存在”</b>
<p>它证明指标选择足以制造一类假象;grokking、新数据阶段、工具能力或架构变化仍可能产生真实 regime shift。</p>
</aside>
</section>
<section class="article-section" id="new-axes">
<p class="eyebrow"><span>10</span> BEYOND DENSE N × D</p>
<h2>MoE 之后,一个“参数量”已经不能同时说明容量、计算与系统成本</h2>
<p>
Dense 模型里,参数量常能粗略代理每 Token 计算。MoE 把这条绑定拆开:模型可以拥有巨大总容量,
每个 Token 只激活一小部分;但未激活参数仍需存储,路由还会引入通信和负载不均。
</p>
<div class="moe-coordinate">
<div class="coord-axis capacity">
<span>CAPACITY</span><b>N<sub>total</sub></b><p>模型能装下多少专家与知识</p>
</div>
<div class="coord-core"><b>ONE TOKEN</b><span>route → active experts → combine</span></div>
<div class="coord-axis compute">
<span>COMPUTE</span><b>N<sub>active</sub></b><p>该 Token 实际进入多少参数</p>
</div>
<div class="coord-axis system">
<span>SYSTEM</span><b>bytes · imbalance</b><p>权重、dispatch、最慢 rank 与拓扑</p>
</div>
</div>
<div class="axis-expansion">
<article><span>DENSE PRETRAIN</span><b>N · D · C · L</b><p>经典 scaling law 主轴。</p></article>
<i>→</i>
<article><span>SPARSE / CONTEXT</span><b>N<sub>total</sub> · N<sub>active</sub> · S</b><p>容量、激活计算与序列长度。</p></article>
<i>→</i>
<article><span>POST-TRAIN / SERVE</span><b>RL FLOPs · test-time · requests</b><p>数据生成、搜索和生命周期成本。</p></article>
</div>
<p>
因此 K3 报告所说的“双轴 scaling”——扩大预训练 foundation,同时扩大 RL、reasoning effort 与 agent 协作——
不能被压回一条 <code>L(N,D)</code>。它们优化不同目标、消费不同数据、产生不同状态。
</p>
</section>
<section class="article-section" id="deepseek">
<p class="eyebrow"><span>11</span> DEEPSEEK SPOTLIGHT</p>
<h2>DeepSeek 的亮点:不仅拟合模型和数据,还把超参数与真实算术放进搜索</h2>
<p>
<a href="https://arxiv.org/abs/2401.02954">DeepSeek LLM §3</a> 的重要性在于把 scaling study
变成训练大模型前的工程程序:先搜索 batch / LR,再决定模型—数据配比,并用更贴近算术的 <code>M</code> 替代参数数。
</p>
<div class="deepseek-formulas">
<article>
<span>HYPERPARAMETER LAWS</span>
<b>η<sub>opt</sub> = 0.3118 · C<sup>0.1250</sup></b>
<b>B<sub>opt</sub> = 0.2920 · C<sup>0.3271</sup></b>
<p>系数只属于论文单位与实验族,不是通用配置。</p>
</article>
<article>
<span>MODEL SCALE PROXY</span>
<b>M = 72Ld² + 12LdS</b>
<b>C = M · D</b>
<p>把 attention 随 sequence length 的计算纳入 non-embedding FLOPs/token。</p>
</article>
<article>
<span>ISOFLOP RESULT</span>
<b>M<sub>opt</sub> = 0.1715 · C<sup>0.5243</sup></b>
<b>D<sub>opt</sub> = 5.8316 · C<sup>0.4757</sup></b>
<p>数据分布改变时,论文 §3.3 的 exponent 也会改变。</p>
</article>
</div>
<div class="model-lineage deepseek-lineage">
{deepseekSteps.map((step, index) => (
<article>
<time>{step.year}</time>
<span>{String(index + 1).padStart(2, "0")}</span>
<h3>{step.title}</h3>
<b>{step.formula}</b>
<p>{step.body}</p>
</article>
))}
</div>
<aside class="warning-callout">
<b>不要把 `2.788M H800 GPU hours` 反推成一条普适 scaling law</b>
<p>
V3 的实际成本同时取决于 FP8、DualPipe、MoE 通信、硬件与集群利用率。
理论 FLOPs 是算法账,GPU hours 是算法 × 系统 × 硬件 × 故障后的结果。
</p>
</aside>
</section>
<section class="article-section" id="kimi">
<p class="eyebrow"><span>12</span> KIMI K2 → K3</p>
<h2>从每个 Token 的价值,到整个模型家族的 2.5× scaling-efficiency claim</h2>
<p>
<a href="https://arxiv.org/abs/2507.20534">Kimi K2</a> 把高质量数据有限写进动机;
<a href="https://arxiv.org/abs/2607.24653">Kimi K3</a> 则对包含新架构、新数据与新训练配方的模型家族重新做 scaling study。
</p>
<div class="kimi-scaling-flow">
{kimiSteps.map((step, index) => (
<>
<article>
<span>{step.tag}</span>
<i>{String(index + 1).padStart(2, "0")}</i>
<h3>{step.title}</h3>
<p>{step.body}</p>
</article>
{index < kimiSteps.length - 1 && <b aria-hidden="true">→</b>}
</>
))}
</div>
<div class="claim-dissection">
<div class="claim-value"><span>K3 FIGURE 7</span><b>≈2.5×</b><p>overall scaling efficiency vs K2</p></div>
<div class="claim-meaning">
<article><span>它是</span><p>作者在 held-out OOD validation lossFLOPs fitted curves 上报告的 family-level 横向差异。</p></article>
<article><span>它包含</span><p>KDA、AttnRes、Stable LatentMoE、数据与训练 recipe 的合计影响。</p></article>
<article><span>它不是</span><p>单个组件消融、吞吐 2.5×、参数少 2.5×、所有 benchmark 都提升 2.5×。</p></article>
<article><span>仍未知</span><p>足以独立重建全部曲线的原始 run 点、拟合代码、置信区间与完整数据配比。</p></article>
</div>
</div>
<blockquote>
K3 最值得带走的方法不是“cosine 永远优于 WSD”,而是不同 schedule 必须各自寻找近优 batch 与 peak LR,才能公平比较。
</blockquote>
</section>
<section class="article-section wide-section" id="lab">
<p class="eyebrow"><span>13</span> INTERACTIVE LAB</p>
<h2>亲手移动“最优点”,比背 20 TPP 更接近真实 scaling study</h2>
<p class="lede">
四个实验分别核算训练分配、生命周期成本、数据复用和指标变换。所有输出都是确定性教学模拟;
它们展示因果方向和边界,不预测任何真实模型的 loss、价格或能力。
</p>
<ScalingLawsLab />
</section>
<section class="article-section" id="reading">
<p class="eyebrow"><span>14</span> CURVE READING PROTOCOL</p>
<h2>看到一张漂亮 scaling 图,按这 12 个问题逐项盘问</h2>
<div class="reading-checklist">
<article><span>01</span><b>纵轴是什么?</b><p>CE、BPB、PPL、平均错误率或单任务 accuracy</p></article>
<article><span>02</span><b>横轴是什么?</b><p>参数、Token、FLOPs、GPU hour、请求还是 test-time compute</p></article>
<article><span>03</span><b>N 怎样数?</b><p>total、non-embedding、active,是否包含 embedding / ViT</p></article>
<article><span>04</span><b>D 怎样数?</b><p>unique、seen、重复、合成,tokenizer 是否一致?</p></article>
<article><span>05</span><b>C 怎样数?</b><p>6ND、真实算子 FLOPs,还是硬件峰值与 GPU hours</p></article>
<article><span>06</span><b>实验族可比吗?</b><p>架构、数据、优化器与训练稳定机制是否一起变化?</p></article>
<article><span>07</span><b>配比扫到谷底两侧了吗?</b><p>没有两侧就无法证明找到了最优点。</p></article>
<article><span>08</span><b>超参公平吗?</b><p>不同规模与 schedule 是否各自调 LR、batch、warmup</p></article>
<article><span>09</span><b>目标点被留出了吗?</b><p>拟合内漂亮不代表跨 100× compute 外推准确。</p></article>
<article><span>10</span><b>误差条在哪里?</b><p>seed 方差、bootstrap CI、残差和版本是否公开?</p></article>
<article><span>11</span><b>最优针对什么?</b><p>训练 loss、部署总成本、下游平均还是 post-training 后能力?</p></article>
<article><span>12</span><b>作者没有公开什么?</b><p>原始点、拟合代码、数据配比与失败 run 都影响可信度。</p></article>
</div>
<div class="final-model">
<span>FINAL MENTAL MODEL</span>
<p>
<b>曲线</b>告诉你在当前条件下资源如何换 loss;
<b>谷底</b>告诉你当前目标怎样分配预算;
<b>误差条</b>告诉你能信多远;
<b>边界</b>告诉你换数据、架构、阶段或经济目标后必须重新实验。
</p>
</div>
</section>
<section class="article-section" id="papers">
<p class="eyebrow"><span>15</span> PRIMARY-SOURCE READING CHAIN</p>
<h2>29 个节点:先读主干,再沿争议与模型谱系深入</h2>
<p>
推荐顺序:Hestness → Kaplan → Chinchilla → data-constrained / inference-aware →
replication / reconciliation → DeepSeek LLM → K2 / K3。涌现与 broken laws 可作为平行争议线。
</p>
<div class="paper-chain">
{paperChain.map(([year, title, url, note], index) => (
<a href={url}>
<time>{year}</time>
<span>{String(index + 1).padStart(2, "0")}</span>
<b>{title}</b>
<p>{note}</p>
</a>
))}
</div>
<div class="chapter-next">
<span>NEXT / CHAPTER 05</span>
<h3>曲线告诉我们需要多少数据;下一章追问这些 Token 怎样采集、过滤、去重、混合和防污染。</h3>
<p>Scaling law 把数据写成 D,数据工程则解释为什么两个同样大的 D,可能有完全不同的学习价值。</p>
</div>
</section>
</article>
</div>
<style>
.scaling-hero {
background:
linear-gradient(120deg, rgba(28, 41, 59, 0.97), rgba(41, 57, 77, 0.94)),
radial-gradient(circle at 76% 30%, rgba(214, 172, 121, 0.38), transparent 28rem);
}
.scaling-hero::before {
position: absolute;
inset: 0;
background:
repeating-linear-gradient(90deg, transparent 0 89px, rgba(255, 255, 255, 0.035) 89px 90px),
repeating-linear-gradient(0deg, transparent 0 89px, rgba(255, 255, 255, 0.025) 89px 90px);
content: "";
}
.scaling-hero .page-hero-inner {
position: relative;
z-index: 1;
}
.scaling-hero h1,
.scaling-hero .lead,
.scaling-hero .page-facts dd {
color: #faf8f3;
}
.scaling-hero .eyebrow,
.scaling-hero .page-facts dt {
color: #d7b58b;
}
.scaling-hero .page-facts div {
border-color: rgba(255, 255, 255, 0.18);
}
.article code {
color: var(--copper);
font-size: 0.9em;
}
.ledger-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
margin-top: 34px;
border-top: 1px solid var(--line);
border-left: 1px solid var(--line);
}
.ledger-grid article {
min-height: 175px;
padding: 23px;
border-right: 1px solid var(--line);
border-bottom: 1px solid var(--line);
background: color-mix(in srgb, var(--paper-raised) 72%, var(--sage-pale));
}
.ledger-grid article:nth-child(3n + 2) {
background: color-mix(in srgb, var(--paper-raised) 80%, var(--copper-pale));
}
.ledger-grid article > span,
.formula-card > span,
.log-plot > div > span,
.kaplan-board article > span,
.loss-piece > span,
.ruler-label > span,
.replication-grid article > span,
.data-tanks article > span,
.evidence-split > div > span,
.economics-equation > span,
.train-serve-comparison article > span,
.paper-findings article > span,
.latent-curve > span,
.coord-axis > span,
.axis-expansion article > span,
.deepseek-formulas article > span,
.kimi-scaling-flow article > span,
.claim-value > span,
.claim-meaning article > span,
.final-model > span {
color: var(--copper);
font: 0.61rem/1.2 var(--mono);
letter-spacing: 0.1em;
}
.ledger-grid h3 {
margin: 12px 0 9px;
}
.ledger-grid p,
.concept-pairs p,
.kaplan-board p,
.loss-piece small,
.tpp-ruler p,
.isoflop-diagram ol p,
.replication-grid li,
.causal-chain p,
.data-tanks p,
.evidence-split li,
.economics-equation p,
.train-serve-comparison p,
.paper-findings p,
.emergence-rules p,
.coord-axis p,
.axis-expansion p,
.deepseek-formulas p,
.model-lineage p,
.kimi-scaling-flow p,
.claim-meaning p,
.reading-checklist p {
color: var(--muted);
font-size: 0.79rem;
line-height: 1.55;
}
.truth-banner {
display: grid;
grid-template-columns: 180px 1fr;
gap: 28px;
margin-top: 18px;
padding: 24px 26px;
border-left: 5px solid var(--sage);
background: var(--sage-pale);
}
.truth-banner b {
font-size: 0.9rem;
}
.power-stage {
display: grid;
grid-template-columns: 0.7fr 1.3fr;
gap: 18px;
margin-top: 32px;
}
.formula-card,
.log-plot {
padding: 25px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.formula-card > b {
display: block;
margin: 22px 0;
font: 650 clamp(1.25rem, 2.1vw, 2rem)/1.2 var(--mono);
}
.formula-card dl {
display: grid;
gap: 9px;
}
.formula-card dl div {
display: grid;
grid-template-columns: 45px 1fr;
gap: 12px;
padding-top: 9px;
border-top: 1px solid var(--line);
}
.formula-card dt {
color: var(--copper);
font: 0.72rem/1.5 var(--mono);
}
.formula-card dd {
color: var(--muted);
font-size: 0.74rem;
}
.log-plot {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 15px;
align-items: center;
}
.log-plot > div {
min-width: 0;
}
.log-plot > i {
display: grid;
place-items: center;
width: 42px;
aspect-ratio: 1;
border-radius: 50%;
background: var(--ink);
color: var(--paper);
font: 0.7rem/1 var(--mono);
}
.log-plot svg {
margin-top: 15px;
}
.log-plot .axis,
.isoflop-chart .axis,
.metric-lenses .axis {
fill: none;
stroke: var(--line-strong);
stroke-width: 1.5;
}
.log-plot .curve,
.metric-lenses .curve {
fill: none;
stroke: var(--copper);
stroke-width: 4;
}
.log-plot text,
.isoflop-chart text {
fill: var(--muted);
font: 9px var(--mono);
}
.log-plot .slope {
fill: var(--sage);
font-weight: 700;
}
.concept-pairs {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 10px;
}
.concept-pairs article {
padding: 18px;
border-top: 3px solid var(--sage);
background: var(--paper-deep);
}
.concept-pairs span {
display: block;
margin-bottom: 8px;
font-size: 0.78rem;
font-weight: 700;
}
.history-river {
margin-top: 34px;
border-top: 1px solid var(--line);
}
.history-river article {
display: grid;
grid-template-columns: 76px 38px 1fr;
gap: 20px;
min-height: 105px;
padding: 18px 8px;
border-bottom: 1px solid var(--line);
}
.history-river time {
padding-top: 5px;
color: var(--copper);
font: 0.69rem/1 var(--mono);
}
.history-river article > i {
position: relative;
display: flex;
justify-content: center;
}
.history-river article > i::after {
position: absolute;
top: 27px;
bottom: -19px;
width: 1px;
background: var(--line-strong);
content: "";
}
.history-river article:last-child > i::after {
display: none;
}
.history-river article > i span {
position: relative;
z-index: 1;
display: grid;
place-items: center;
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--ink);
color: var(--paper);
font: 0.55rem/1 var(--mono);
}
.history-river h3 {
margin-bottom: 7px;
}
.history-river p {
color: var(--muted);
font-size: 0.82rem;
}
.source-callout,
.warning-callout {
margin-top: 22px;
padding: 22px 24px;
border: 1px solid var(--line);
background: var(--sage-pale);
}
.warning-callout {
background: var(--copper-pale);
}
.source-callout b,
.warning-callout b {
display: block;
margin-bottom: 8px;
}
.source-callout p,
.warning-callout p {
color: var(--muted);
font-size: 0.82rem;
}
.kaplan-board {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 32px;
}
.kaplan-board article {
padding: 24px 20px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.kaplan-board article > b {
display: block;
margin: 17px 0 12px;
font: 650 clamp(1.15rem, 2vw, 1.7rem)/1.2 var(--mono);
}
.boundary-box {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1px;
margin-top: 12px;
background: var(--line);
border: 1px solid var(--line);
}
.boundary-box > div {
padding: 22px;
background: var(--paper-deep);
}
.boundary-box span {
display: block;
margin-bottom: 10px;
color: var(--copper);
font: 0.6rem/1 var(--mono);
}
.boundary-box p {
color: var(--muted);
font-size: 0.81rem;
}
.loss-decomposition {
display: grid;
grid-template-columns: 0.75fr 0.65fr auto 1fr auto 1fr;
gap: 10px;
align-items: stretch;
margin-top: 32px;
}
.loss-label,
.loss-piece {
display: grid;
align-content: center;
min-height: 128px;
padding: 18px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.loss-label span {
color: var(--muted);
font: 0.57rem/1 var(--mono);
}
.loss-label b,
.loss-piece b {
margin-top: 8px;
font: 650 1.2rem/1.2 var(--mono);
}
.loss-piece.entropy { background: var(--paper-deep); }
.loss-piece.model { background: var(--copper-pale); }
.loss-piece.data { background: var(--sage-pale); }
.loss-decomposition > i {
align-self: center;
color: var(--copper);
font: 1.2rem/1 var(--mono);
}
.loss-piece small {
margin-top: 8px;
}
.approach-table {
margin-top: 18px;
border-top: 1px solid var(--line-strong);
}
.approach-table .head,
.approach-table > div {
display: grid;
grid-template-columns: 52px 1fr 120px 120px;
gap: 16px;
align-items: center;
min-height: 76px;
padding: 12px 8px;
border-bottom: 1px solid var(--line);
}
.approach-table .head {
min-height: 45px;
color: var(--muted);
font: 0.58rem/1 var(--mono);
}
.approach-table > div > span {
color: var(--copper);
font: 0.65rem/1 var(--mono);
}
.approach-table p {
display: grid;
gap: 5px;
}
.approach-table small {
color: var(--muted);
font-size: 0.7rem;
}
.approach-table > div > b {
font-family: var(--mono);
text-align: center;
}
.tpp-ruler {
margin-top: 24px;
padding: 24px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.ruler-label {
display: flex;
justify-content: space-between;
gap: 20px;
}
.ruler-track {
position: relative;
height: 112px;
margin: 28px 8px 10px;
border-top: 5px solid var(--ink);
}
.ruler-track::before {
position: absolute;
top: -5px;
right: 0;
left: 0;
height: 5px;
background: linear-gradient(90deg, var(--copper), var(--sage), var(--violet));
content: "";
opacity: 0.6;
}
.ruler-track > i {
position: absolute;
top: -10px;
left: var(--x);
display: grid;
justify-items: center;
width: 110px;
transform: translateX(-50%);
text-align: center;
}
.ruler-track > i::before {
width: 2px;
height: 26px;
background: var(--ink);
content: "";
}
.ruler-track > i.key::before {
width: 5px;
background: var(--copper);
}
.ruler-track b {
margin-top: 7px;
font: 0.73rem/1 var(--mono);
}
.ruler-track span {
margin-top: 6px;
color: var(--muted);
font-size: 0.58rem;
line-height: 1.25;
}
.isoflop-diagram {
display: grid;
grid-template-columns: minmax(0, 1.25fr) minmax(250px, 0.75fr);
gap: 18px;
margin-top: 32px;
}
.isoflop-chart {
padding: 18px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.isoflop-chart .grid {
fill: none;
stroke: var(--line);
stroke-width: 1;
}
.isoflop-chart .budget {
fill: none;
stroke-width: 3;
}
.isoflop-chart .b1 { stroke: var(--copper); }
.isoflop-chart .b2 { stroke: var(--sage); }
.isoflop-chart .b3 { stroke: var(--violet); }
.isoflop-chart .frontier {
fill: none;
stroke: var(--ink);
stroke-dasharray: 4 5;
stroke-width: 2;
}
.isoflop-chart circle {
fill: var(--ink);
stroke: var(--paper);
stroke-width: 4;
}
.isoflop-chart .annotation {
fill: var(--ink);
font-weight: 700;
}
.isoflop-diagram ol {
display: grid;
align-content: start;
gap: 8px;
margin: 0;
padding: 0;
list-style: none;
}
.isoflop-diagram li {
display: grid;
grid-template-columns: 34px 1fr;
gap: 12px;
padding: 15px;
border: 1px solid var(--line);
background: var(--paper-deep);
}
.isoflop-diagram li > span {
color: var(--copper);
font: 0.58rem/1 var(--mono);
}
.isoflop-diagram li b {
display: block;
margin-bottom: 4px;
font-size: 0.8rem;
}
.replication-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 30px;
}
.replication-grid article {
padding: 25px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.replication-grid h3 {
margin: 14px 0;
}
.replication-grid ul,
.evidence-split ul {
margin: 0;
padding-left: 19px;
}
.replication-grid article > b {
display: block;
margin-top: 18px;
padding-top: 14px;
border-top: 1px solid var(--line);
color: var(--sage);
font-size: 0.78rem;
}
.causal-chain {
display: grid;
grid-template-columns: 1fr auto 1fr auto 1fr;
gap: 12px;
align-items: center;
margin-top: 12px;
}
.causal-chain > div {
min-height: 105px;
padding: 17px;
border-top: 4px solid var(--copper);
background: var(--copper-pale);
}
.causal-chain > div > span {
display: block;
margin-bottom: 8px;
font-weight: 700;
}
.causal-chain > i {
color: var(--copper);
font: 1.1rem/1 var(--mono);
}
.article blockquote {
margin: 22px 0 0;
padding: 22px 26px;
border-left: 5px solid var(--ink);
background: var(--paper-deep);
font-family: var(--serif);
font-size: 1.12rem;
}
.data-tanks {
display: grid;
grid-template-columns: 1fr auto 1fr auto 1fr;
gap: 18px;
align-items: center;
margin-top: 32px;
}
.data-tanks > i {
color: var(--copper);
font: 0.72rem/1 var(--mono);
}
.data-tanks article {
text-align: center;
}
.tank {
position: relative;
display: grid;
place-items: end center;
width: 130px;
height: 150px;
margin: 14px auto;
overflow: hidden;
border: 2px solid var(--ink);
border-top: 0;
}
.tank i {
position: absolute;
right: 5px;
bottom: 5px;
left: 5px;
height: 82%;
background: var(--sage);
}
.tank.striped i {
background: repeating-linear-gradient(0deg, var(--sage) 0 13px, var(--sage-pale) 13px 18px);
}
.tank.fading i {
background: linear-gradient(0deg, var(--sage), color-mix(in srgb, var(--sage) 18%, transparent));
}
.tank b {
position: relative;
z-index: 1;
margin-bottom: 17px;
color: var(--paper);
font: 700 1.1rem/1 var(--mono);
}
.evidence-split {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin: 24px 0;
}
.evidence-split > div {
padding: 22px;
border: 1px solid var(--line);
background: var(--sage-pale);
}
.evidence-split > div:last-child {
background: var(--copper-pale);
}
.evidence-split ul {
margin-top: 13px;
}
.evidence-split li {
color: var(--muted);
font-size: 0.78rem;
}
.economics-equation {
margin-top: 30px;
padding: 27px;
border: 1px solid var(--line);
background: var(--ink);
color: var(--paper);
text-align: center;
}
.economics-equation > span {
color: #d7b58b;
}
.economics-equation > div {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 15px;
align-items: baseline;
margin: 20px 0 12px;
font: 650 clamp(1.25rem, 2.6vw, 2.25rem)/1.2 var(--mono);
}
.economics-equation strong {
color: #d5e6df;
}
.economics-equation p {
color: rgba(250, 248, 243, 0.7);
}
.train-serve-comparison {
display: grid;
grid-template-columns: 1fr 0.7fr 1fr;
gap: 18px;
align-items: center;
margin-top: 16px;
}
.train-serve-comparison article {
padding: 22px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.model-shape {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
height: 90px;
margin: 14px 0;
}
.model-shape b {
display: grid;
place-items: center;
border-radius: 50%;
background: var(--ink);
color: var(--paper);
font: 700 1rem/1 var(--mono);
}
.model-shape.large b {
width: 84px;
height: 84px;
}
.model-shape.small b {
width: 51px;
height: 51px;
}
.model-shape.small i {
width: 9px;
height: 51px;
background: var(--sage);
opacity: calc(1 - var(--i, 0) * 0.2);
}
.demand-arrow {
color: var(--copper);
text-align: center;
}
.demand-arrow span,
.demand-arrow small {
display: block;
font: 0.57rem/1.4 var(--mono);
}
.demand-arrow i {
display: block;
margin: 10px;
font: 2rem/1 var(--mono);
}
.paper-findings {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 16px;
}
.paper-findings article {
padding: 20px;
border-top: 4px solid var(--sage);
background: var(--paper-deep);
}
.paper-findings h3 {
margin: 12px 0 10px;
}
.metric-lenses {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 20px;
align-items: center;
margin-top: 30px;
}
.latent-curve,
.lens-results {
padding: 22px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.metric-lenses > i {
color: var(--copper);
font: 0.62rem/1.3 var(--mono);
text-align: center;
}
.lens-results {
display: grid;
gap: 9px;
}
.lens-results article {
display: grid;
grid-template-columns: 105px 1fr 42px;
gap: 9px;
align-items: center;
}
.lens-results span,
.lens-results b {
font: 0.52rem/1.2 var(--mono);
}
.lens-results svg {
width: 100%;
height: 54px;
}
.lens-results path {
fill: none;
stroke: var(--copper);
stroke-width: 3;
}
.emergence-rules {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 12px;
}
.emergence-rules article {
padding: 18px;
border: 1px solid var(--line);
background: var(--paper-deep);
}
.emergence-rules b {
display: block;
margin-bottom: 7px;
}
.moe-coordinate {
display: grid;
grid-template-columns: 1fr 0.8fr 1fr;
grid-template-areas:
"capacity core compute"
". system .";
gap: 16px;
align-items: center;
margin-top: 32px;
}
.coord-axis,
.coord-core {
padding: 22px;
border: 1px solid var(--line);
background: var(--paper-raised);
text-align: center;
}
.coord-axis.capacity { grid-area: capacity; }
.coord-axis.compute { grid-area: compute; }
.coord-axis.system { grid-area: system; }
.coord-core { grid-area: core; background: var(--ink); color: var(--paper); }
.coord-axis > b,
.coord-core > b {
display: block;
margin: 12px 0 8px;
font: 650 1.25rem/1 var(--mono);
}
.coord-core > span {
color: rgba(250, 248, 243, 0.68);
font: 0.57rem/1.5 var(--mono);
}
.axis-expansion {
display: grid;
grid-template-columns: 1fr auto 1fr auto 1fr;
gap: 12px;
align-items: center;
margin: 18px 0 24px;
}
.axis-expansion article {
padding: 18px;
border-top: 4px solid var(--copper);
background: var(--copper-pale);
}
.axis-expansion article > b {
display: block;
margin: 10px 0 7px;
font: 650 0.85rem/1.3 var(--mono);
}
.axis-expansion > i {
color: var(--copper);
}
.deepseek-formulas {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 30px;
}
.deepseek-formulas article {
padding: 20px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.deepseek-formulas article > b {
display: block;
margin-top: 13px;
font: 650 0.82rem/1.45 var(--mono);
}
.deepseek-formulas p {
margin-top: 12px;
}
.model-lineage {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1px;
margin-top: 16px;
border: 1px solid var(--line);
background: var(--line);
}
.model-lineage article {
min-width: 0;
padding: 20px;
background: var(--paper-deep);
}
.model-lineage time,
.model-lineage article > span {
color: var(--copper);
font: 0.58rem/1 var(--mono);
}
.model-lineage article > span {
float: right;
}
.model-lineage h3 {
margin: 18px 0 10px;
}
.model-lineage article > b {
display: block;
min-height: 38px;
color: var(--sage);
font: 650 0.64rem/1.5 var(--mono);
}
.kimi-scaling-flow {
display: grid;
grid-template-columns: 1fr auto 1fr auto 1fr auto 1fr;
gap: 11px;
align-items: center;
margin-top: 30px;
}
.kimi-scaling-flow article {
min-height: 230px;
padding: 20px;
border: 1px solid var(--line);
background: var(--paper-raised);
}
.kimi-scaling-flow article > i {
float: right;
color: var(--muted);
font: 0.58rem/1 var(--mono);
}
.kimi-scaling-flow h3 {
margin: 20px 0 12px;
}
.kimi-scaling-flow > b {
color: var(--copper);
}
.claim-dissection {
display: grid;
grid-template-columns: 0.7fr 1.3fr;
gap: 12px;
margin-top: 16px;
}
.claim-value {
display: grid;
align-content: center;
justify-items: center;
min-height: 280px;
padding: 24px;
background: var(--ink);
color: var(--paper);
text-align: center;
}
.claim-value > span { color: #d7b58b; }
.claim-value > b {
margin: 20px 0 10px;
font: 700 clamp(3.5rem, 8vw, 7rem)/0.9 var(--display);
}
.claim-value > p {
color: rgba(250, 248, 243, 0.68);
font: 0.65rem/1.5 var(--mono);
}
.claim-meaning {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.claim-meaning article {
padding: 19px;
border: 1px solid var(--line);
background: var(--paper-deep);
}
.claim-meaning p {
margin-top: 10px;
}
.wide-section {
width: min(1120px, calc(100vw - 80px));
margin-left: min(0px, calc((780px - min(1120px, calc(100vw - 80px))) / 2));
}
.reading-checklist {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
margin-top: 30px;
border: 1px solid var(--line);
background: var(--line);
}
.reading-checklist article {
min-height: 155px;
padding: 19px;
background: var(--paper-raised);
}
.reading-checklist article > span {
display: block;
color: var(--copper);
font: 0.58rem/1 var(--mono);
}
.reading-checklist article > b {
display: block;
margin: 15px 0 8px;
}
.final-model {
margin-top: 18px;
padding: 25px;
border-left: 5px solid var(--sage);
background: var(--sage-pale);
}
.final-model p {
margin-top: 12px;
font-family: var(--serif);
font-size: 1.04rem;
}
.paper-chain {
margin-top: 30px;
border-top: 1px solid var(--line-strong);
}
.paper-chain a {
display: grid;
grid-template-columns: 60px 34px minmax(220px, 0.8fr) 1.2fr;
gap: 16px;
align-items: center;
min-height: 78px;
padding: 12px 8px;
border-bottom: 1px solid var(--line);
text-decoration: none;
}
.paper-chain a:hover {
background: var(--paper-raised);
}
.paper-chain time,
.paper-chain a > span {
color: var(--copper);
font: 0.6rem/1 var(--mono);
}
.paper-chain a > span {
color: var(--muted);
}
.paper-chain p {
color: var(--muted);
font-size: 0.76rem;
}
.chapter-next {
margin-top: 32px;
padding: 27px;
border: 1px solid var(--line);
background: var(--ink);
color: var(--paper);
}
.chapter-next > span {
color: #d7b58b;
font: 0.62rem/1 var(--mono);
letter-spacing: 0.1em;
}
.chapter-next h3 {
margin: 16px 0 10px;
color: var(--paper);
}
.chapter-next p {
color: rgba(250, 248, 243, 0.68);
font-size: 0.82rem;
}
@media (max-width: 1050px) {
.wide-section {
width: auto;
margin-left: 0;
}
.model-lineage,
.kimi-scaling-flow {
grid-template-columns: repeat(2, 1fr);
}
.kimi-scaling-flow > b {
display: none;
}
.deepseek-formulas {
grid-template-columns: 1fr;
}
}
@media (max-width: 760px) {
.ledger-grid,
.concept-pairs,
.kaplan-board,
.paper-findings,
.emergence-rules,
.reading-checklist {
grid-template-columns: 1fr;
}
.power-stage,
.boundary-box,
.isoflop-diagram,
.replication-grid,
.evidence-split,
.claim-dissection {
grid-template-columns: 1fr;
}
.truth-banner {
grid-template-columns: 1fr;
gap: 10px;
}
.log-plot {
grid-template-columns: 1fr;
}
.log-plot > i {
margin: auto;
}
.loss-decomposition {
grid-template-columns: 1fr;
}
.loss-decomposition > i {
text-align: center;
}
.approach-table .head {
display: none;
}
.approach-table > div {
grid-template-columns: 40px 1fr 56px 56px;
gap: 8px;
}
.ruler-track {
height: auto;
margin-top: 24px;
border-top: 0;
}
.ruler-track::before {
display: none;
}
.ruler-track > i {
position: static;
grid-template-columns: 45px 1fr;
justify-items: start;
width: auto;
margin-bottom: 9px;
transform: none;
text-align: left;
}
.ruler-track > i::before {
display: none;
}
.ruler-track b,
.ruler-track span {
margin-top: 0;
}
.causal-chain,
.data-tanks,
.train-serve-comparison,
.metric-lenses,
.axis-expansion {
grid-template-columns: 1fr;
}
.causal-chain > i,
.data-tanks > i,
.axis-expansion > i {
transform: rotate(90deg);
text-align: center;
}
.demand-arrow i {
transform: rotate(90deg);
}
.moe-coordinate {
grid-template-columns: 1fr;
grid-template-areas: "capacity" "core" "compute" "system";
}
.model-lineage,
.kimi-scaling-flow,
.claim-meaning {
grid-template-columns: 1fr;
}
.kimi-scaling-flow article {
min-height: 0;
}
.paper-chain a {
grid-template-columns: 54px 28px 1fr;
}
.paper-chain p {
grid-column: 3;
}
}
@media (max-width: 480px) {
.approach-table > div {
grid-template-columns: 30px 1fr;
}
.approach-table > div > b {
text-align: left;
}
.lens-results article {
grid-template-columns: 90px 1fr;
}
.lens-results b {
grid-column: 2;
}
}
</style>
</BaseLayout>