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

un

访客
1 / ?
返回课程列表

十六天的 region region region

结束的运行

ANDREA-120M v1 于 2026-03-22 启动,并于 2026-04-15 在计划的 200,000 步中的第 165,000 步终止。EMA 损失最小值:3.23(在第 110K 步,随机几率:ln(8449) = 9.04,因此损失看起来还算体面)。样本则不然。


步骤 80K:区域 区域 区域 区域 区域 区域 区域
步骤 110K:''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
步骤 140K:游戏,游戏,游戏,游戏,游戏,游戏
步骤 165K:Budy Budy Budy Budy Budy Budy Budy Budy Budy

RTX 4090 计算的十六天。130W 连续。80K 步骤之后的垃圾。


从 microGPT 到 ANDREA-120M


为什么 microGPT 成功而 120M 失败

ANDREA-12M 使用了相同的训练代理并通过了测试。更小的权重矩阵对梯度冲击更具鲁棒性。扩展到 120M 参数放大了每一种脆弱性。五种失败相互叠加。


五种相互叠加的失败


失败 1:没有梯度裁剪。 来源每 7-42 步转换一次,产生无界的梯度峰值。在 120M 模型中,一个坏批次就能将模型推入优化器无法逃脱的退化吸引子。12M 模型幸存下来是因为更小的权重能容忍这些冲击。


失败 2:无 LR 预热。 学习率从 0 立即跳到峰值,直接在新鲜初始化的权重上。模型在任何表征形成之前就陷入了坏的盆地。


失败 3:无权重衰减。 纯 Adam 允许任意大的权重,在 120M 容量下放大了重复模式。


失败 4:无样本质量监控。 eval_chat_quality() 仅连接到遗留的多阶段运行器;火hose 课程从未调用它。模型从第 80K 步开始产生垃圾,持续 10+ 天未被检测到。


失败 5:Bandit 奖励重复来源。 repo-docsrepo-docstringsunfirehose-chat 得分最高(平均奖励 340-453),因为列表结构的内容 trivial 地降低了交叉熵。Bandit 向模型喂食了更多导致其退化的内容。


复合效应

没有单一失败会单独导致 v1 崩溃。每一个失败都放大了其他失败。没有预热(2)的梯度冲击(1)击中了刚刚初始化的模型,模型具有任意大的权重(3),产生了重复,该重复被 bandit 奖励(5),同时没有人监视输出(4)。五个相互交织的原因,一个崩溃。

为什么是五个失败,而不是一个

从五个 v1 失败中挑选任意**两个**。对于每一个,用一句话解释:(a) 这个失败是什么;(b) 它如何与五个失败中的另一个具体互动,从而复合了损害。

每个失败一个修复

v2 配置 (2026-04-15)


修复针对失败实现
梯度裁剪F1 (无裁剪)全局 L2 范数, max_norm=1.0; 三个 CUDA 内核 (k_grad_norm_partial, k_grad_norm_final, k_grad_scale) 计算并应用 pre-Adam
LR 预热F2 (无预热)线性斜坡从 0 到峰值,跨越 2000 步。lr(t) = lr_scheduled(t) * min(1, (t+1)/warmup_steps)
AdamWF3(无权重衰减)解耦权重衰减(Loshchilov & Hutter 2019),weight_decay=0.01。p -= lr (m_hat/(sqrt(v_hat)+eps) + weight_decayp)
连贯性门控早停F4(无监控)每个样本评分(二元/三元/词/字符多样性)。5个连续样本评分低于30后自动停止
课程预热F5(bandit 消耗重复)前20K步限制为7个聊天/散文来源;之后激活火hose;repo-docstrings 完全排除

此外,sample_every 从200步降至100步(审计频率加倍),& repo-docs 上限从0.5降至0.3。


回测

连贯性门控在v1上回测:将在第132K步触发,节省3.8天的计算。仅此门控即可将v1的浪费计算减少约30%;其他四个修复防止v1达到该门控触发。


v2 没有修复的内容

数据污染。v2 信任 hermes3-* 来源作为“预清洗”,因为它们来自 LLM 教师。Makefile 中的 DEEP_CLEAN_SKIP 排除了 hermes3-general、hermes3-creative 和 hermes3-roleplay 不参与 make deep-clean。unfirehose-chat 将代理系统提示捕获为用户回合。这两个缺陷潜伏在数据层,随时准备浮出水面。

将修复映射到失败

v2 的三个修复每个清晰对应 v1 的一个失败。匹配:(a) 梯度裁剪 (max_norm=1.0);(b) LR 预热 (2000 步线性上升);(c) AdamW with weight_decay=0.01。对于每个,命名它针对的 v1 失败,并用一句话说明**为什么**这个特定修复能对抗该失败。

步骤 15K:两个数据缺陷浮出水面

v2 看到了什么

v2 于 2026-04-15 启动。到 200K 步骤中的 ~15K 步(完成 7.5%)时,生成的样本产生了代理测试框架装饰物 (○ ●) 和文章主导的回退 (a = 步骤 14,966 时占单词的 26%;the = 步骤 14,798 时占 21%)。v2 的五个稳定性修复正常工作。故障已从架构转移到数据。


两个独立的管道缺陷


缺陷 A:unfirehose-chat 将代理系统提示捕获为用户回合。 unfirehose-chat 从 ~/.claude/~/.fetch/~/.uncloseai/ 中的测试框架会话 JSONL 文件构建。摄取管道将多节代理系统提示 (# Agent X## Identity## Rules 等) 转换为 > user / < assistant 对的用户回合槽。模型学会了“用户”使用多节 Markdown 说话,并在自己的输出中重现了那些装饰物。


缺陷 B:hermes3-* 绕过了所有过滤器。 Makefile 中的 DEEP_CLEAN_SKIP 将 hermes3-general、hermes3-creative 和 hermes3-roleplay 排除在 make deep-clean 之外,这是基于 LLM 蒸馏数据已预清洗的错误假设。全面扫描显示,现有的过滤器在应用时会拒绝 87-93% 的 hermes3 行(超大段落 >2000 字符溢出 block_size=1024;CJK/西里尔/阿拉伯语的翻译响应;低二元组多样性运行)。


v2.5 补丁 (commit de24332, 2026-04-18)


两个结构变更。


变更 1:filter-dataset.c 中的 has_system_prompt_shape() 通过 SHAPE 检测泄露的系统提示,而不是通过字符匹配。三种信号结合:

1. 一轮中 3+ 个 markdown 标题 = 丢弃。

2. 2+ 个标题且轮次长度 >=500 字符 = 丢弃。

3. 代理分片指纹短语 (# Agent , Shadow Clone, Your shard, Read it. Become it, This file defines) 结合任何标题或长度 >=400 = 丢弃。


隔离规则:在 / 分隔符(带空格,不是裸 /,后者会碎片化 URL 路径)处检查第一个用户轮次,以避免助手响应中合法 markdown 的假阳性。


变更 2:hermes3-* 从 DEEP_CLEAN_SKIP 中移出。 不信任任何未过滤的内容。


补丁后的丢弃率


来源行内行外丢弃率
hermes3-general536,85867,39587.7%
hermes3-roleplay35,1912,48193.0%
hermes3-creative14,2581,37390.4%
unfirehose-chat3,8162,65330.5%
chat45,25744,5381.6% (噪声)
smoltalk11,81211,8120.0%

基线过滤器已经捕获了87-93%的hermes3污染;DEEP_CLEAN_SKIP是关键缺陷。新形状检测器整体额外拒绝约0.1%,集中在unfirehose-chat中,它移除了现有过滤器遗漏的特定代理碎片泄漏。


为什么形状优于字符

装饰会演变。基于字符匹配的过滤器丢弃后,下周对就无能为力。基于形状的过滤器(统计标题、统计字符、识别指纹短语)可以泛化到各种装饰变体。模式:污染检测必须使用结构启发式方法。

为什么按形状过滤

v2.5 通过 SHAPE(标题数量、长度、指纹短语)而非 CHARACTER(匹配特定符号如装饰符)来过滤 agent-shard 泄漏。给出一个实际原因说明这很重要,以及一种 character-only 过滤器无法捕捉的具体失败模式。

无数据的 Bandit Arm

v3 于 2026-04-18 发布

与 v2 相同的架构和超参数;v2.5 补丁后的清洁数据。样本审计中零装饰符泄漏。v3 干净运行至第 112K 步。


步骤 112,619:样本审计捕捉到模式

样本审计揭示了连贯的对话轮次(俳句、问答、对话),但周期性阶段专注于知识臂(gutenberg、repo-docstrings、repo-docs),泄露了代码状片段和仓库标记化噪声。第 112,080 步的一个样本达到了损失 0.13:异常低,表明记忆了 repo-docs 子串,而不是学习了聊天分布。


僵尸臂

诊断:exclude_sources 在训练开始时正确移除了 repo-docstrings,但持久化的 bandit 状态携带了来自先前运行的残余 repo-docstrings 臂,权重为 1.546。状态重载将其重新纳入 UCB 池,尽管没有 .btok 文件可供采样,从而产生了扭曲探索记账的僵尸拉取。


教训:bandit 状态文件(.state.json)在重启之间以令人惊讶的方式漂移。配置排除不会抹除残余臂记忆。需要双重保障:cap = 0.0 配合 exclude。


波兰语配置

仅课程扰动。架构、优化器状态、学习率调度和损失历史均从 step_112600.bin 保留。


来源v3 基础v3 波兰语
repo-docs上限 0.3排除(上限 0.0)
repo-docstrings排除排除 + 上限 0.0
repo-commitscap 0.4cap 0.2
dictionarycap 0.5cap 0.25
gutenbergcap 0.8 / floor 0.3cap 0.7 / floor 0.4
irc-qa-strict--cap 0.3
unweapon--cap 0.3
synthetic-chat--cap 0.4
hermes3-generalfloor 0.5floor 0.7
hermes3-creativefloor 0.4floor 0.55
hermes3-roleplayfloor 0.4floor 0.5
chatfloor 0.4floor 0.6
smoltalkfloor 0.3floor 0.5
oasstfloor 0.3floor 0.5
dolly--floor 0.4
curriculum_warmup_steps200000

润色协议

1. SIGUSR1 到 CUDA 强制在下一个 100 步边界立即检查点。

2. 代理停止。

3. .samples.json & .state.json 归档(样本日志 & 匪徒状态保存为历史记录)。

4. .loss.json 保留 -- 累积训练历史;永不归档。

5. 代理重启。Polish 配置提交。

6. CUDA 从 step_112600.bin 恢复,使用新上限 & 下限下的新鲜匪徒状态。


损失历史持续无中断。

为什么选择 Polish,而不是重启

第 112,619 步达到了计划训练的 56%。团队选择了 **CURRICULUM PERTURBATION**(保留权重,改变上限和下限)而不是 **FULL RESTART**(从第 0 步重新初始化)。给出两个理由说明 polish-pivot 是正确的,以及从第 0 步开始会引入的一个具体风险。

Polish 的成果

样本审计,转折点数小时后

在波兰转向数小时内,样本审计确认在四个原始 ANDREA-120M 目标上实现收敛。


事实回忆(生物学),步骤 112,584,损失 0.30,ppl 1。

> [extinction prompt]

> < black spider montano is alive, carolina parakeet is extinct.

两个正确事实。外部评分:9.5/10。


事实回忆(信号处理),步骤 112,668,损失 0.74,ppl 2。

> [Fourier transform prompt]

> < 傅里叶变换将信号分解为频率分量,从而允许在频域中分析信号特性并进行滤波。

教材一句定义。外部评分:9.5/10。


约束遵循(haiku),步骤 112,248,损失 1.05,ppl 3。

> 用三个以“r”开头的单词写一首关于雨的俳句。

> < 雨的节奏反复, > 窗上的细流, > 人生痛苦的喘息。


工具知识 (Python),步骤 112,500,损失 1.94,ppl 7。

> 如何在 Python 项目中查找过时的包?

> < 使用 pip list --outdated names 来查看项目管理中的 pip 包列表...

正确的工具浮现;表述不精确。


700 步中的六个领域

生物学、信号处理、诗歌、python 工具、对话对话、运维对话。700 步内六个不相关领域告诉我们 bandit 和模型正在协同工作。领域广度就是收敛信号。


外部评分

独立审稿人将样本评为“对于一个120M参数模型来说很扎实——在这个规模下令人印象深刻的连贯性和知识保留”,卡罗莱纳鹦鹉和傅里叶变换样本被评为9.5/10和“在知识任务上超出其重量级”。


每个阶段的启示


v1 教导:五个复合失败会使训练崩溃。孤立的修复无效;必须同时解决所有五个。


v2 教导:架构修复是必要的但不足够。数据层可以悄无声息地击败它们。


v2.5 教导:按形状而非字符过滤污染。模式是稳定的;符号在演化。


v3 base 教导:bandit 状态在重启间以令人惊讶的方式漂移。仅排除是不够的;需要 cap 0.0 belt-and-suspenders。


v3 polish 教导:当失败在于策略且模型健康时,扰动策略。保留权重。保留损失历史。向前推进。


一个真理

收敛不是单一事件;它是一系列修正的链条。每个阶段暴露一个缺陷,修复它,并揭示下一个。ANDREA-120M 在第 112,584 步达到 9.5/10,是因为 v1、v2、v2.5、v3 基础版和 v3 润色版各自完成了它们的工作。

哪个阶段教会了最深刻的教训

在五个阶段(v1、v2、v2.5、v3 基础版、v3 润色版)中,你认为哪一个教会了最具可迁移性的工程教训?选择一个。用你自己的话陈述这个教训,并用 2-3 句话解释为什么这个教训能推广到语言模型训练之外。