看到「8GB VRAM、模型會自己長 expert、持續讀資料卻不會忘」時,你最不該先問的問題,是它算不算 AGI。真正能驗證的問題是:mini-AGI 持續學習新資料 B 之後,對舊資料 A 的 held-out 表現還剩多少?
這篇專為第一次接觸持續學習實驗的讀者寫。你不必先懂神經網路數學;我會把官方 probe 拆成 A→B→A 三段,教你鎖定 commit、分開 read 與 held-out、先看 control,再比較 trunk learning rate、expert swapping 與 step density。最後你會得到一份「能推翻主張」的成績單,而不是只看一段看似進步的生成文字。
本文鎖定 2026 年 9 月 24 日的官方 commit 54ee369a28bade07f2e3ea4230ff7320ce975fe6。這台編輯環境沒有 NVIDIA CUDA,也沒有下載 4.4 GiB checkpoint,因此下文的數字都明確標成作者公開 artifacts或獨立研究者報告,不冒充 AlphaLab 跑出的結果。
先說結論:mini-AGI 持續學習要同時看「學到」與「忘掉」
- 一句話錨點:可信的持續學習=B 的 held-out loss 下降,同時 A 的 held-out loss 不顯著上升。
- 官方目前證據:在 512 steps、1,048,576 characters 的 PG19 probe 裡,把共享 trunk 的 learning rate 降到 experts 的 0.1 倍,作者報告的舊領域平均 loss 增幅從約 1.26 降到 0.13 nats。
- 不能省的控制:interleaved control、相同 optimizer steps per character、相同初始 checkpoint、分離的 held-out,以及每個 arm 各用一份 weights copy。
- 最容易誤讀:這個 probe 主動關閉 growth;它測的是遺忘機制,不是「expert 越長越多就越不會忘」。
- 目前最合理判斷:結果支持「慢更新共享 trunk 可延後遺忘」,不支持「遺忘已被永久解決」或「AGI 已出現」。
mini-AGI 持續學習是什麼?先把名字和機制分開
mini-AGI 是一個 byte-level language model:文字先變成 256 種 byte 值,而不是先切成一般 LLM 的 token。它有兩個 dense prelude blocks,再讓一個 recurrent block 最多重複 24 次;每次 block application 會從 expert pool 選 top-8 experts。模型目前把 32 個 experts 放在顯示卡工作集,其餘 weights 與 Adam moments 分層放在 RAM/磁碟。
白話比喻是:trunk 像全校共用的走廊與課表,experts 像不同專科教室。新教材只叫到少數教室,確實能減少其他教室被改動;但每個學生仍會走過共用走廊,所以 trunk 被大幅更新時,舊能力仍可能一起漂移。這也是為什麼官方 current probe 把重點放在 trunk_lr_mult,而不是只數 expert 數量。
官方 README 自己把名稱稱為「half-joke」,並把目前模型定位成 toy-level。README 的參數表在 169 experts 的記錄點列為約 540M total parameters,但一次 resident 的 expert 工作集遠小於總池;「總參數可隨磁碟增長」不等於每個 byte 都動用 540M 參數,也不等於輸出已達 frontier model 水準。若你想先補本機訓練與 VRAM 的基本觀念,可先讀 本機 LLM VRAM 指南與 從零訓練小模型教學。

A→B→A protocol:把「有沒有忘」變成四個數字
1. A 是舊領域,B 是新領域
官方 current experiment 把 arithmetic、chat、chat_hermes、chess、code、reasoning、stories、wikipedia 視為 A,再用模型先前沒讀過的 PG19 書籍當 B。重點不是領域名字,而是 B 的 training stream 與 B-held-out 必須用不同檔案;否則 loss 下降可能只是記住剛讀過的段落。
2. Before:先凍結基準線
對 A 與 B 的 held-out 各算一次 loss。Loss 越低越好。把這次結果、commit、checkpoint manifest、檔案清單 hash、learning rate、chunk、steps 與 eval chunks 寫進同一份 run receipt。continual-learning 經典工作也強調要用跨 task 的 test matrix 觀察 backward transfer;你可以把這篇流程理解成那個概念的簡化版,背景可參考 Gradient Episodic Memory 論文。
3. B:只讓模型讀新領域
每個 arm 都從同一份 checkpoint copy 開始,只改一個旋鈕。官方 probe 用 model._grower = None 關閉新增與裁剪 experts,因為 probe 中途改模型容量會讓你分不清結果來自持續學習、容量增加,還是 pruning。這個選擇很重要:先隔離遺忘問題,再另外測 expert growth。
4. After/Recovery:量 forgetting、learning、retention、return
- Forgetting:
mean(A_loss_after − A_loss_before);正數代表舊領域變差。 - Learning:
B_loss_before − B_loss_after;正數代表新領域變好。 - Exchange rate:
Learning ÷ Forgetting;只有 forgetting 明顯大於噪音時才有解讀價值。 - Recovery:再輪流讀 A,觀察舊 loss 是否快速回來;快速回復偏向 displacement,從頭慢慢重學才更像能力被破壞。
先看 control:沒有它,任何漂亮結果都可能是量測污染
Control arm 不只讀 B,而是把 PG19、chess、code、stories、arithmetic、wikipedia、chat、reasoning 輪流讀一遍。既然每個主要 lane 都被讀到,若它們仍一起惡化,問題可能是 cold optimizer、錯誤的 step density、資料切分或量測程式,而不是 forgetting。
這裡最值得抄走的習慣是:先要求 instrument 證明自己不會把正在讀的領域讀壞,再相信 massed arm。官方 cl_summary.py 也把 control verdict 放在最前面。這和 RRSI 的 holdout 教學是同一種科學衛生:測試集一旦回流到選擇流程,就不再是獨立證據。
作者 artifacts 顯示什麼?慢 trunk 有效,但效果有邊界
在 commit 54ee369 隨附的四份 JSON 中,作者讓每個 massed arm 只讀 PG19 共 512 steps、1,048,576 characters,chunk 為 2,048,並用 16 eval chunks 計分。以下數字是作者公開結果,不是 AlphaLab 的 first-hand run。

最關鍵的對照是:working set frozen、trunk 1× 時,PG19 loss 改善 0.2909 nats,舊八領域平均惡化 1.2663;允許 swapping、trunk 仍 1× 時,兩者為 0.3106 與 1.2628;允許 swapping、把 trunk 降到 0.1× 時,PG19 改善擴大到 0.4216,舊領域惡化縮到 0.1297,作者計算 retention 為 97.30%。
Interleaved control 的 PG19 改善 0.3124,舊八領域平均不是惡化,而是小幅改善 0.0065 nats。這支持兩個有限結論:第一,這組 probe 的 instrument 沒把所有 lane 一起讀壞;第二,在這個 checkpoint、horizon 與設定下,trunk_lr_mult=0.1 比 1.0 保留更多舊能力。它沒有證明 expert swapping 是主要保護機制,因為兩個 trunk 1× arms 幾乎同樣差。
一份由 Jason Matthews 公開的獨立縮小版兩-seed報告補上重要邊界:匹配 optimizer steps per character 後,兩個 seeds 都得到短 horizon 低遺忘的相同方向;但把閱讀拉長到 4M characters,舊領域平均惡化升到 1.49/1.09 nats。報告的主張是 forgetting 跟共享 trunk 的 displacement 強相關,而不是架構從此免疫遺忘。
mini-AGI 持續學習上手:先跑 64 steps 的 bounded probe
官方 reference machine 是 8GB RTX 3070 Laptop GPU,並要求 CUDA-capable GPU、Python 3.10+。公開 checkpoint 約 4.4 GiB;因為每個 arm 都應複製 weights,磁碟先為 checkpoint 與至少一份 working copy保留約 9 GiB,corpus 另計。PyTorch 安裝要依你的 CUDA 版本選指令,先在官方安裝頁產生正確命令。
步驟一:鎖 commit,確認 GPU 與磁碟
git clone https://github.com/volotat/mini-AGI.git
cd mini-AGI
git checkout 54ee369a28bade07f2e3ea4230ff7320ce975fe6
nvidia-smi
df -h .
python3 --version
停在這裡先記錄 GPU 型號、VRAM、driver、可用磁碟與 commit。若沒有 CUDA GPU,不要為了保留「本機跑過」的標籤硬下載大型 checkpoint;仍可閱讀 raw JSON、檢查 protocol,或移到已有授權的 NVIDIA 主機再跑。
步驟二:安裝依賴,下載 checkpoint
python3 -m venv .venv
source .venv/bin/activate
python -m pip install torch numpy pyyaml matplotlib chess zstandard datasets scipy huggingface_hub
hf download Volotat/mini-AGI-cl-replication-weights --local-dir .
python3 -m minagi.store weights
下載完成後,weights/manifest.json 應顯示 step、context 與 174 experts。不要直接把 probe 指向唯一一份 weights:paging 會把 dirty experts 寫回磁碟,官方也明確要求先複製。
步驟三:建立不重疊的 A/B/held-out
python3 -m corpora all
python3 -m corpora pg19 --split validation --out data/pg19-all
mkdir -p data/cl/pg19 data/cl_val/pg19
cp -a data/val/. data/cl_val/
find data/pg19-all -type f | sort | sed -n '1,40p' | while read -r f; do cp "$f" data/cl/pg19/; done
find data/pg19-all -type f | sort | sed -n '41,50p' | while read -r f; do cp "$f" data/cl_val/pg19/; done
這個 40/10 split 是本文提供的 beginner protocol,用來確保 B-read 與 B-held-out 不重疊;它不是作者 JSON 的資料配置,所以你不應拿數值直接宣稱「對上官方結果」。截至鎖定 commit,README 的 full command 會引用 data/cl_val,但準備段落沒有附建立該目錄的命令;因此先執行 find data/cl_val -type f | head,確認它真的存在再開跑。
步驟四:用 64 steps 驗證管線,不承諾固定分鐘數
cp -a weights /tmp/mini-agi-probe-64
python3 replication/forgetting_probe.py \
--weights /tmp/mini-agi-probe-64 \
--domain pg19 --read-root data/cl --steps 64 \
--at 0,16,32,64 --eval-chunks 4 --chunk 2048 \
--lr 2.08e-4 --held-out data/cl_val \
--trunk-lr-mult 0.1 --out runs/probe-64.json
64 steps 的目的不是下科學結論,而是確認 CUDA、paging、optimizer state、資料路徑與 evaluator 都能走完。不同 GPU、磁碟與 eval domain 數會讓時間差很多,因此用「steps+eval marks」做停止條件,比保證 20 或 30 分鐘誠實。若 log 出現 cold optimizer、某個 domain 缺檔、held-out 突跳或 NaN,先停,不要把異常硬算成 forgetting。
步驟五:正式比較四個 arms
- Interleaved control:
--rotate pg19,chess,code,stories,arithmetic,wikipedia,chat,reasoning。 - Mitigated:
--trunk-lr-mult 0.1。 - Unmitigated:
--trunk-lr-mult 1.0。 - Frozen working set:在 unmitigated arm 再加
--no-swap。
每個 arm 都從同一個唯讀 base 複製到不同目錄,其他參數完全相同。你要並排的不是只有 final loss,還要有 chars、optimizer steps、eval chunks、experts touched、trunk drift、PG19 gain、舊領域 forgetting 與 wall time。若想了解「蒸餾」如何保留能力,模型蒸餾教學提供另一條路;它和這裡直接持續更新 weights 是不同問題。
五個常見坑:最容易把 mini-AGI 寫成神話的地方
- 把 train loss 當記憶:剛讀過 B 變好很正常;A-held-out 才回答舊能力是否保留。
- 忽略 step density:同樣讀 524k characters,chunk 變小會增加 optimizer steps。獨立報告第一版就因此高估 forgetting,修正後才對上短 horizon 方向。
- 用不同 checkpoint 跑 arms:模型仍在成長,基準不同就無法歸因。每組必須由同一份 base copy 出發。
- 同時打開 growth:容量改變會污染因果判讀。先用 fixed pool 測 forgetting,再另開 long-run experiment 記錄 expert birth、prune 與 disk growth。
- 把可讀輸出當 benchmark:官方 sample 仍常有重複與不連貫;生成品質、held-out loss、算術正確率與 forgetting 是不同指標。
如果你要把 run receipts、資料 hash 與 acceptance gate 做成長期流程,Lossless Memory A/B Test可補上版本化記憶的驗收思路;若你只是想先理解模型外面的執行層,讀 Agent Harness 是什麼,就不會把「模型權重學習」和「Agent 記憶」混成同一件事。
FAQ:mini-AGI 持續學習最常被問的 8 題
1. mini-AGI 已經是 AGI 嗎?
不是這份證據能支持的結論。官方 README 把名稱稱為 half-joke,並明確定位成 toy-level model;目前 probe 評估的是持續學習與遺忘,不是通用智能。
2. 8GB VRAM 就能跑完整流程嗎?
官方 reference setup 是 8GB RTX 3070 Laptop GPU。實際能否完成仍取決於 CUDA/PyTorch 配對、系統 RAM、磁碟與目前 config;先跑 64-step probe,再決定是否擴到 512 steps。
3. Total 540M parameters 為什麼能放進 8GB?
因為不是全部同時 resident。官方 config 讓 32 experts 在 VRAM,96 個可留在 RAM,其餘以檔案存在磁碟;weights 用 fp32,Adam moments 以 bf16 儲存。
4. Expert pool 是防止遺忘的主因嗎?
作者這組 probe 不支持這個判斷。trunk 1× 時,frozen working set 與 swapping 的舊領域惡化幾乎相同;把 trunk 降到 0.1× 才出現大差距。
5. Retention 97.3% 等於沒有忘嗎?
不等於。同一 arm 的舊領域平均 loss 仍增加 0.1297 nats;而且 retention 的分母使用 byte vocabulary 的 chance loss,換公式會得到不同百分比。保留 raw loss delta 才方便比較。
6. 為什麼一定要有 interleaved control?
因為它在檢查量測工具。Control 讀到各主要 lane;若它仍普遍惡化,你看到的可能是 optimizer 冷啟動或 step 設定造成的 damage,而不是「沒被讀到所以忘記」。
7. 可以只看生成 sample 判斷嗎?
不行。Sample 能看重複與可讀性,卻不能告訴你 A-held-out 在讀 B 後改變多少。至少要把 loss、任務正確率與 repetition 分開記錄。
8. 第一個值得自己改的實驗是什麼?
固定 horizon,只掃 trunk LR 與 step density。先不要同時改 routing、growth、context 與資料量;否則結果再漂亮,也很難知道是哪個旋鈕造成。
給新手的 5 個重點
- 把「是不是 AGI」改寫成可測的 A→B→A 問題。
- 先凍結 held-out,再開始讀 B。
- Control 先過,massed arms 才有意義。
- 固定 optimizer steps per character,否則比較失真。
- 同時回報 learning 與 forgetting,不用單一 retention 百分比遮住 trade-off。
接著閱讀
左右滑動查看更多推薦
結語:先證明它在哪個範圍內不忘,再談它會長成什麼
mini-AGI 最值得學的,不是名字,而是它把一個宏大敘事變成了可以下載 JSON、改參數、跑 control、被別人反駁的實驗。你的下一步很簡單:先完成 64-step control 與 mitigated arm,確認兩者資料切分和 step density 完全一致;只有 control 乾淨,才把 horizon 拉到 512 steps。記住文章一開始的式子:B-held-out 要下降,A-held-out 也不能在你沒注意時悄悄上升。
