☰
复现mini-AGI遗忘测量:replication工具链从权重下载到位图重绘的完整指南
2026/10/14 18:47:14 网站建设 项目流程

【免费下载链接】mini-AGI

Continual learning model trained from scratch on 8GB VRAM laptop with batch-1 stream of data.

项目地址:https://gitcode.com/gh_mirrors/mini/mini-AGI
点击查看免费下载

本文带你完整复现mini-AGI的遗忘测量(forgetting probe)实验。mini-AGI 是一个在 8GB 显存显卡上从零开始持续学习的字节级语言模型,它能一边读取新数据一边保持旧知识。开源仓库的 replication/ 工具链把这套遗忘实验做成了可一键复现的流程:下载权重、准备语料、跑探测脚本、生成汇总表格、重绘三张结果位图,全部命令都已给出。

一、遗忘测量工具链能做什么 🧪

遗忘实验回答一个问题:连续读一个陌生主题,模型会不会忘掉已经学会的其他主题?

实验设计是"最坏情况":把模型冷切换到 19 世纪小说语料 PG19 上,以 batch 1 连续读1,048,576 个字符,期间每隔一段重新给全部 9 个主题打分,看"没在读"的那 8 个主题是否退化。工具链由四个部分组成:

组件作用
replication/forgetting_probe.py遗忘探测主脚本,支持 massed / 冻结 / 交错等 4 种实验臂
replication/cl_summary.py把 4 个实验臂的 JSON 结果汇总成对照表,并先给出控制组判定
replication/plot_figures.py从结果 JSON 重绘全部三张结果位图
replication/results/官方已跑好的 4 份结果 JSON(control/static/none/trunk01),可跳过训练直接出图

实验的四个臂:

  • static:冻结专家(--no-swap),trunk 学习率 = 专家学习率
  • none:正常换入换出,trunk 学习率 = 专家学习率(--trunk-lr-mult 1.0)
  • trunk01:trunk 学习率降到 0.1 倍(--trunk-lr-mult 0.1)——正式训练采用的配置
  • control:PG19 与其余 8 个主题交错轮读,作为控制组

两个可信性设计值得了解:评分用的FolderEvaluator(minagi/stream.py)每次都从同一批文件、同一位置开始打分,差值只反映模型变化而非采样噪声;探测期间通过model._grower = None禁止专家池增删,避免"没忘"与"偷偷扩容"混淆。

二、环境与权重下载

git clone https://gitcode.com/gh_mirrors/mini/mini-AGI cd mini-AGI pip install torch numpy pyyaml matplotlib

权重方面:遗忘实验所有数字都测在同一个检查点上——step 223,506、已读 428.2M 字符、174 个专家、held-out 0.7702 nats。请到 Hugging Face 上的官方权重仓库Volotat/mini-AGI-cl-replication-weights下载weights/文件夹,放到仓库根目录:

mini-AGI/ weights/ # 每个专家一个 .npz 文件,目录本身就是模型

⚠️ 关键提示:探测脚本会改写它拿到的权重目录(专家页入时会被标记 dirty)。运行前务必先复制一份:cp -a weights /tmp/w,然后所有实验臂都指向这份拷贝。

三、准备语料 📚

语料由 corpora/ 模块统一构建,data/train、data/val覆盖 8 个既有主题:

python3 -m corpora all # 8 个主题的全部训练/验证数据

新领域 PG19 单独准备,注意它要放在训练语料之外,防止正式训练循环"顺带"读到它:

python3 -m corpora pg19 --split validation \ --out data/cl/pg19 # 新领域,validation 分片

这里有两个细节:

  • 为什么用--split validation而不是 test:test 分片是公开 BPB 基准(见 corpora/pg19.py 的说明),留着不动才能与 MambaByte 等已发表数字同轴比较。
  • data/cl_val的作用:held-out 目录里既有 8 个原有主题的验证集,也有从未被读过的 PG19 书籍——这样"PG19 变好了"就不可能是背下来了。

四、运行遗忘探测

核心命令(trunk 0.1x 缓解配置,即正式训练在用的那组参数):

python3 replication/forgetting_probe.py --weights /tmp/w \ --domain pg19 --read-root data/cl --steps 512 \ --at 0,64,128,256,384,512 --eval-chunks 16 --chunk 2048 \ --lr 2.08e-4 --held-out data/cl_val \ --trunk-lr-mult 0.1 --out replication/results/mine.json

关键参数速查:

参数含义
--weights权重副本目录,探测会读写它
--domain要 massed 连读的主题(这里是 pg19)
--read-root新主题文件所在目录(data/cl),刻意与data/train分离
--steps/--at总步数;在每个标记步重新给所有主题打分
--chunk 2048每步 2048 字符,512 步即 1,048,576 字符
--lr 2.08e-4专家学习率,与官方结果一致
--trunk-lr-multtrunk 学习率倍率:0.1 缓解 / 1.0 未缓解
--no-swap冻结专家臂:第一个窗口准入的专家集一直用到底
--rotate a,b,c,...交错控制臂:按轮转方式读多个主题
--held-out打分用的验证集目录(data/cl_val)

其他三个实验臂只需微调:

# 未缓解臂:--trunk-lr-mult 1.0 # 冻结专家臂:在此基础上加 --no-swap # 交错控制臂: # --rotate pg19,chess,code,stories,arithmetic,wikipedia,chat,reasoning

另一个容易踩的坑:优化器状态。optim.npz中的 Adam 动量属于模型状态的一部分,脚本默认通过_load_optim(minagi/store.py)恢复它;如果冷启动优化器,Adam 会在单批梯度上迈出一步巨大的初始更新,把"正在读的主题"都打坏,那读起来像遗忘、实际上不是。

五、一行命令出汇总表

python3 replication/cl_summary.py

它会先打印控制组判定再输出各臂对照表:控制组把每个主题都读了,按构造不可能发生遗忘,若它出现退化,说明退化来自实验装置本身而非模型,此时其余各臂只能当作上界看。

四列结果的含义:read(新领域获得)、unread(8 个旧领域平均变化)、retained(相对随机猜测保留了多少进度)、experts(有多少专家收到过梯度)。官方四臂数字:

配置PG19(新领域)8 个旧领域每忘 1 nat 换到保留率
专家冻结,trunk 全速-0.2909+1.26630.2374.12%
正常换出,trunk 全速-0.3106+1.26280.2574.25%
trunk 0.1x(正式配置)-0.4216+0.12973.2597.30%
交错控制组-0.3124-0.0065无遗忘100.13%

结论一目了然:把 trunk 学习率降到 0.1 倍,新领域学得更快、遗忘量少了一个数量级——慢 trunk 不是牺牲了可塑性。

六、重绘三张位图

python3 replication/plot_figures.py

脚本读取 replication/results/ 下的 JSON(如 replication/results/trunk01.json),输出三张图到assets/:mitigations.png(三配置消融对比)、probe_massed.png(massed 连读过程)、probe_interleaved.png(交错控制组)。仓库里已附官方结果 JSON,即使一步实验没跑,这一条命令也能直接出图。

上图为plot_figures.py生成的三面板消融对比:左(A)massed 暴露下 8 个未读主题的平均损失变化,trunk 0.1x 配置(蓝线)远低于两条未缓解曲线;中(B)新领域 PG19 的学习进度,蓝色配置学得最快;右(C)进度保留率,蓝色 97.30% 对红色 74.25%。

七、如何读懂结果图 📊

massed 臂(trunk 0.1x)的过程图:左面板蓝线是正在读的 PG19,稳步降到 -0.4216 nats;灰色带是 8 个未读主题,整体只上浮 +0.1297,且漂移最大的恰是 chat、stories、reasoning 这些"散文型"主题——损伤落在表征重叠的地方。右面板是关键机制:整个连读过程中只有44/174(25%)的专家收到过梯度,路由让更新天然被限制在文本实际触及的局部,这就是遗忘被"圈住"的原因。

交错控制组:PG19 作为 9 个主题之一轮读后降 0.31 nats,其余 8 个主题平均-0.0065(负值是变好了)——对这种架构而言,"新增一个领域"几乎零成本。

八、常见注意事项 ✅

  • 永远先拷贝权重:cp -a weights /tmp/w,否则页式加载会污染真实运行目录(minagi/paged.py 的 dirty 标记机制)。
  • 先读控制组判定:cl_summary.py输出CLEAN才相信 massed 各臂的数字。
  • 方差意识:同一配置跑两次约有 0.014 的差距(CUDA 上专家分派不确定),把 0.03 当作"真实差异"的阈值。
  • 硬件门槛:与正式训练一致,8GB 显存的 NVIDIA/AMD 显卡或 CPU 均可,参考速度见 README 的 GPU support 一节(RTX 3070 Laptop 约 2,000 字符/秒)。

九、文件索引

  • 探测脚本:replication/forgetting_probe.py
  • 汇总脚本:replication/cl_summary.py
  • 绘图脚本:replication/plot_figures.py
  • 官方四臂结果:replication/results/control.json、replication/results/static.json、replication/results/none.json、replication/results/trunk01.json
  • PG19 语料构建:corpora/pg19.py
  • 权重目录规范:minagi/store.py
  • 主配置文件:config.yaml

照着上面五步走完,你就能在自己机器上把 mini-AGI"连续学习不遗忘"的每个数字亲手复现出来——从一份权重拷贝到三张位图,全程无需改动任何仓库文件。

【免费下载链接】mini-AGI

Continual learning model trained from scratch on 8GB VRAM laptop with batch-1 stream of data.

项目地址:https://gitcode.com/gh_mirrors/mini/mini-AGI
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询