最近由 Andrej Karpathy 親自背書、目前在海內外 AI 圈熱度爆表的 Autoresearch(自動研究) 正規化,獲得了海量關注。為此,Toolswith.ai 專門為大家準備了一份實戰參考,看看如何將這種正規化搬到自己的研究中。本文編譯自芬蘭 Aalto 大學計算機博士 Yash Kumar 的最新部落格,來一趟究竟吧。
自從 Karpathy 的 Autoresearch 專案出現後,它就一直縈繞在我的腦海中。我非常想在一個自己完全理解的研究問題上測試一下它的威力。於是趁著週末,我翻出了舊的研究程式碼 eCLIP,清理掉陳舊的依賴項後直接交給了 Claude Code。然後,我一邊做著家務,一邊任由它自己去“煉丹”。以下是這次實驗的核心記錄。

一、核心構想 (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)。

整個流程是一個極其緊湊的閉環:提出假設 → 修改程式碼 → 訓練 → 評估 → 提交或回滾 → 重複

自動化研究迴圈示意圖
圖 1:Agent 的“提出假設-修改程式碼-評估”閉環邏輯

為了鼓勵快速迭代並防止對噪聲過擬合,實驗被限制在每輪約 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 論文)。
  • 浮世繪熱圖演示
    圖 2:Ukiyo-eVG 資料集中的熱圖定位展示
  • 機制: 透過邊界框(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)。

訓練指標下降曲線
圖 3:隨著實驗迭代,Mean Rank 指標的最佳化趨勢
42
總實驗次數
13
成功提交 (Commit)
29
失敗回滾 (Revert)
54%
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 如何以結構化的方式驅動機器學習研究。

當搜尋空間定義清晰時,Karpathy 的 Autoresearch 提出的“提交或回滾”迴圈是一種驚人有效的搜尋策略。但當 Agent 闖入“未知的未知(Unknown Unknowns)”領域時,這種最佳化迴圈就失效了。

或許,“每項實驗僅限一次變動”的限制對於那些大膽的靈感(Moonshot ideas)來說過於嚴苛了。也許我們應該在 Agent 迴圈中加入一個規劃層,讓它具備前瞻性思考的能力;又或者,可以部署一些子 Agent 來協同工作。當然,回頭見,期待下次更新。

致謝

  • Ukiyo-eVG —— 約 1.1 萬張帶有“短語→邊界框”標註的浮世繪木版畫,來自 CIGAr 論文(ECCV 2024 VISART)。
  • Autoresearch —— 感謝 Andrej Karpathy 提供的原始創意與靈感啟發。