一、核心構想 (Core Idea)
Autoresearch 本質上是一個由 LLM Agent 驅動的簡易受限最佳化迴圈(Constrained Optimization Loop)。Agent 透過從 program.md 中讀取指令,不斷修改單一檔案(train.py)來迭代最佳化特定的評估指標(eval metric)。我額外增加了一個 scratchpad.md 檔案,作為 Agent 的工作記憶體(Working Memory),用於記錄其思維過程和實驗資料。
在 program.md 中,我將探索過程分成了幾個“階段”:從顯而易見的超引數調優(Hyperparameter Tuning)開始,逐漸過渡到小型的模型架構調整,最後再到一些“異想天開”的嘗試(Moonshot Ideas)。在最後的階段,我幾乎放開了所有約束,賦予了 Agent 聯網許可權,讓它去閱讀論文並尋找新的想法(Look for new Ideas)。
整個流程是一個極其緊湊的閉環:提出假設 → 修改程式碼 → 訓練 → 評估 → 提交或回滾 → 重複。
為了鼓勵快速迭代並防止對噪聲過擬合,實驗被限制在每輪約 5 分鐘時間。只要在預算時間內,Agent 可以自由修改 train.py 中的任何內容。
二、沙盒機制 (Sandboxing)
由於擔心 Agent 在我的工作站上隨意執行程式碼,我將訓練迴圈進行了容器化處理,並禁用了網路訪問,整個流程由 run.sh 進行編排排程。隨後,我鎖定了 Claude Code 的許可權,僅允許其修改指定檔案並執行 run.sh,禁止其直接執行 Python、禁止 pip install、禁止網路訪問及執行 git push 等。
細節我就不在這裡贅述了,大家可以直接去倉庫看看!三、資料集:Ukiyo-eVG (浮世繪視覺定位)
原始論文使用的是醫學 X 光資料集,但我現在拿不到訪問許可權了。為了測試 eCLIP 論文中的專家注意力機制 (Expert Attention),我需要一個帶有空間標註的新資料集。我選擇了 Ukiyo-eVG:
- 規模: 約 1.1 萬張浮世繪木版畫。
- 標註: 包含“短語 → 邊界框”的對應關係(來自 ECCV 2024 VISART 的 CIGAr 論文)。
- 機制: 透過邊界框(Bounding Boxes)生成的空間熱圖,能夠引導模型將注意力精準聚焦在特定的影象區域。邊界框被轉換為高斯熱圖 (Gaussian Heatmaps) 餵給模型作為額外的輸入,模擬原 eCLIP 論文中放射科醫生視線追蹤熱圖的作用。
四、你好,Claude Code
由於我週末有很多家務要處理,我直接把舊研究程式碼扔給了 Claude,然後做家務去了。
它升級了舊研究程式碼的 Python 環境,編寫了新資料集的資料載入(Ingestion)程式碼,並搭建了整個實驗迴圈的腳手架(Scaffolding)。而我在 program.md 中設定交叉驗證(CV)的劃分邏輯、評估指標的計算邏輯,並構思了初步的實驗想法。在評估指標上,我們選擇了檢索嵌入(Retrieved Embeddings)的平均排名(Mean Rank)。當時我並沒深思熟慮——事後看來,中位數排名(Median Rank)其實是更好的選擇,因為它對離群點(Outliers)的魯棒性更強。不過,我們當時只需要一個直觀的指標,能明確告訴 Agent 某次改動是變好了還是變壞了。既然最終結果還是要用標準指標 Recall@K 來彙報,Mean Rank 只要能起到“指引正確方向”的作用就足夠了。
實驗細節配置
- CLIP 骨幹架構: ViT-Small (22M) + DistilBERT (66M) + 熱圖處理器(HeatmapProcessor),總計約 9,000 萬(90M)引數。
- 訓練配置: 800 個步長(Steps),在 RTX 4090 上單次執行耗時約 3 分鐘。
- 評估方式: 在包含 1,000 張影象的留出測試集(Held-out Test Set)上計算平均排名(Mean Rank),並將 Recall@K 作為一致性檢查(Sanity Check)。
- 基準值(Baseline): 驗證集 Mean Rank 為 344.68;影象→文字(img→txt)的 R@1 為 17.2%,文字→影象(txt→img)的 R@1 為 16.5%。
五、效果究竟如何?
我在週六早上啟動了迴圈,然後任由它執行了一整天,偶爾檢視一下進度,給智慧體指指方向。當我買完菜回來時,Agent 已經跑了幾十組實驗,並且大幅削減了評估指標中的平均排名(Mean Rank)。
到當天結束時,平均排名從 344.68 降至 157.43。在 Agent 完成探索後,我用全量資料集跑了最後一次訓練。結果顯示,測試集的分數竟然比驗證集還要好。這意味著我們在每輪僅 800 步的短程實驗中處於欠擬合(Underfitting)狀態,實際上還留有一定的效能提升空間。
| 指標 | Mean Rank | 影象→文字 R@5 | 文字→影象 R@5 |
|---|---|---|---|
| 最終測試 (Test) | 34.30 | 53.0% | 51.4% |
六、所以,這就是 AGI 嗎?
嗯…… 還沒那麼簡單:
- 修復溫度係數鉗位 (-113 Mean Rank): 它一上來就抓住了我程式碼裡的一個 Bug。我之前把可學習的“溫度引數(Temperature)”限制在了 2。它放開了這個限制,指標瞬間暴降 113 點。這是單次改進中收益最大的,比所有架構調整加起來都管用。
- Optuna++ (-30 Mean Rank): 進一步的提升主要來自超引數調優。Agent 表現得像一個內建了基礎推理能力的超參最佳化演算法。透過增加投影維度並重新微調學習率,指標又降了 30 點。這種活兒雖然無聊且乏味,但 Agent 做得比人類更迅速、更系統。
- 邊際效應遞減: 到了涉及架構調整的第四階段,LLM 提出的假設成功率顯著下降。它對熱圖處理器中注意力機制的修改全部宣告失敗。至於第五階段的那些“腦洞想法”,更是一個都沒成。Agent 就像在胡亂投石問路,可惜大部分都失敗了。
- 沙盒機制至關重要: 接近尾聲時,Claude Code 有時會忘記自己的許可權,開始執行一些奇怪的 Bash 呼叫,然後又因為許可權受阻而報錯並停止迴圈。有一次它甚至等訓練等煩了,直接單方面結束了對話。目前的它還不能完全脫離人類監管。
七、結語
就像所有 LLM 專案一樣:前 90% 的工作極其順滑,幾乎不需要我介入;但最後 10% 簡直是一場苦戰。這是一個非常有趣的實驗,展示了 LLM Agent 如何以結構化的方式驅動機器學習研究。
或許,“每項實驗僅限一次變動”的限制對於那些大膽的靈感(Moonshot ideas)來說過於嚴苛了。也許我們應該在 Agent 迴圈中加入一個規劃層,讓它具備前瞻性思考的能力;又或者,可以部署一些子 Agent 來協同工作。當然,回頭見,期待下次更新。
致謝
- Ukiyo-eVG —— 約 1.1 萬張帶有“短語→邊界框”標註的浮世繪木版畫,來自 CIGAr 論文(ECCV 2024 VISART)。
- Autoresearch —— 感謝 Andrej Karpathy 提供的原始創意與靈感啟發。