重言 Re-Sinitic:量尺本身在晃,而三個候選解釋全部倒下 - 研究日誌(五)
這篇是日誌,記的是當時的推論過程。想看目前最新的整體結論,見現況總覽。
第四集結尾把話說死了:heldout 用完了,不會再有第二次,剩下的問題只能在 train 226 詞上回答。排在最前面的是「模組化是不是習得性問題」——這是全專案講了三集的主要候選解釋,卻一直沒被直接測過。這集先花了一番功夫才把測量工具本身修好,然後測了,而且連同另外兩個候選解釋一起測了。三個全部倒下。
先把跑得動的成本降下來
直接測習得成本,需要把 226 選 1 的 S2 run 跑到能負擔重複實驗的程度。候選編碼原本是「每個候選各自從頭編碼」,改成「全詞表編一次、用索引查表」之後,一個 226 選 1 的 S2 run 從 845 分鐘降到 47 分鐘;對抗式候選集那條路徑也跟著優化,從 30 分鐘降到 22 分鐘。這不是這集的主角,但它是接下來一切的前提——沒有這次效能修正,後面要做的重跑和多種子驗證都跑不起。
量尺本身在晃:spatial_dd 的雜訊比它要偵測的效應大三倍
效能優化之後,順手用同一個設定、同一個種子重跑一次第三集用過的空間雙重分離實驗,想確認優化沒有改變數值。結果:
優化前 spatial_dd = −0.1372
優化後 spatial_dd = +0.0398
先排除是不是優化本身出了 bug:展開版與索引版的中間輸出逐項比對,最大絕對差是 0.00——完全等價。差異不是程式錯誤,是訓練過程本身的混沌發散:GRU 在不同 batch 形狀下浮點數的累加順序不同,30000 步之後被放大成完全不同的解。同一個種子不保證同一個結果。
同一設定同一種子的跨度是 0.18,而事先定的最小有意義效應量(SESOI)是 0.05——這把尺的雜訊比它要偵測的效應大三倍。這件事逼出一個讀法上的修正:
- 第三集撤回「讀者換代產生空間分工」是對的——那個 +0.053 本來就落在單一設定的雜訊範圍內
- 但這也代表
spatial_dd的任何單點數值都不可解讀,包括先前用來支持虛無結果的那些數字。任何結論都必須建立在多種子平均上 - 真正結實的不是
spatial_dd本身,是它的成分:遮左半造成 −0.584 的傷害、遮右半 −0.602,兩者的差只有 0.018。這個「巨大傷害、微小差異」的對比不受混沌影響,因為兩個數字來自同一次 forward,不是兩次獨立訓練的比較
換句話說:跨 run 比較的數字會被訓練過程的混沌吞掉,同一次評估內部的數字不會。這決定了接下來的分析全部要往哪個方向靠。
把三個候選解釋逐一直接測過,全部失敗
論文草稿一直列著三個「為什麼沒有分工」的候選壓力,前兩個第三集已經間接測過(對抗式候選集、讀者換代),這集把第三個、也是最被看好的一個,直接放進訓練迴圈測了:
| 假設 | 操作 | spatial_dd(多種子平均) |
部件複用率 |
|---|---|---|---|
| (b) 兩個目標可加 | 對抗式候選集 | ≈ 0 | 0.805 |
| (c) 沒有習得成本 | 讀者換代 | +0.003 | 0.633 |
| (a) 每個字都在訓練集裡 | 分離曝光 | −0.001 | 0.966 |
| — | 對照 | +0.004 | 0.736 |
「分離曝光」的做法:先前的零樣本探針只是測量讀者認不認得沒學過的字,這次把那個壓力直接放進訓練迴圈——每次讀者換代都重抽一次 70/30 分割,讀者只在曝光集上學,而 Writer 的損失算在讀者沒看過的那 30% 上。Writer 因此被逼著必須產生「一個只學過七成字的讀者也讀得懂剩下三成」的字形。
結果:曝光率 0.7 時,部件複用率衝到 0.966(三個種子分別是 0.969 / 0.938 / 0.991)——幾乎每個字都由共用部件拼出來,是全專案目前最高的複用率。而同一批 run 的 spatial_dd 平均是 +0.0000。曝光率 0.4 時系統直接崩潰(部件數只剩 4 個,全詞表準確率 13.3%,其中一個種子完全歸零)——壓力過頭時系統選擇放棄溝通,不是變得更有系統。
事先寫在腳本裡的判準是「平均 > +0.03 且多數種子為正」,三個假設沒有一個達成。
三種介入都推動了部件化(複用率 0.736 → 0.805 → 0.966),沒有一個推動分工。可分解性與功能分化是兩件事,而這個系統只會做前者。
這是這個專案目前最重的一句話。「習得成本」是三個候選裡理論上最站得住腳的一個——人類確實需要模組化,正是因為會遇到沒學過的字、每個字的曝光量有限。直接把這個壓力做進系統,結果卻是把字形逼得更會共用零件,而不是逼出分工。逼出可分解性買不到功能分化。
這個虛無涵蓋整個劑量範圍,不是只有測過的那兩點
先前的空間分工否定結論只在兩個劑量點上測過。擴到五個劑量 × 兩個種子:
同音率 0.031 → 0.496,十個格子
平均 −0.0013,範圍 −0.075 至 +0.035
達到 SESOI(+0.05)的格數:0/10
包括同音率最高的那一格——聲符原料理論上最充足的區間——也沒有例外。事先的判準是「任一劑量點的兩個種子都超過 +0.05,否定宣稱就要限縮範圍」,沒有一格達標。
順便把第四集那個「已知偏離」拿去驗證了
第四集報過一個已知偏離:確認階段用的是探索階段的舊 artifact(16 選 1 訓練),沒滿足「訓練候選數等於評估候選數」的修訂要求,理由是重訓要三個月。這次效能修正把成本降到 47 分鐘/run 之後,這個偏離變得可以檢驗了。
但不能拿 heldout 重跑——一次性紀律存在的目的,正是防止「換個更好的設定再跑一次,直到它成立」。就算動機是修正一個真實的偏離,「第一次有偏離所以再跑一次」和「第一次結果不夠好所以再跑一次」從外部看是分不開的。所以改在 train 的 70/30 切分上重跑,記為方法學補充,不當成第二次確認。
同一個 S1 設定,16 選 1 跟 226 選 1 訓練的零樣本語音優勢:
| 設定 | 主力 | 基線 | 零樣本語音優勢 |
|---|---|---|---|
| 16 選 1 | 16.7% | 2.9% | +13.7% |
| 226 選 1(對齊候選數) | 17.2% | 0.5% | +16.7%(t = +7.80,n=3) |
對齊候選數之後效應不減反增,基線還更貼近 chance(1.5%)。那個已知偏離不影響確認階段的結論;如果有影響,是先前低估了效應。
英文稿也譯完了
論文草稿的英文版(paper/DRAFT_en.md)已經完成,兩個版本現在都同步含這集的三件事:heldout 一次性使用的紀律、spatial_dd 的雜訊問題、以及已知偏離的事後驗證。
這些結論現在有多硬
| 狀態 | |
|---|---|
| 「為什麼沒有分工」的三個候選解釋 | 全部直接測過,全部失敗(習得成本、目標可加、讀者換代) |
| 空間分工的否定結論 | 涵蓋整個劑量範圍(0/10 格達到 SESOI),不只是先前測過的兩點 |
| 測量工具的限制 | spatial_dd 單點數值不可解讀(雜訊 0.18 > SESOI 0.05);結論改用同一次評估內的成分對比,或多種子平均 |
| 確認階段的已知偏離 | 已在 train 上驗證不影響結論(226 選 1 下效應更強,+13.7% → +16.7%) |
| 論文稿 | 中英文版本同步,限制一節已更新到確認階段之後 |
下一步
三個列在論文裡的候選解釋都倒下了,而「為什麼沒有分工」目前沒有第四個候選在排隊。這是個真正的空白,不是還沒查完的待辦——下一步得先想出新的候選,而不是繼續測已經想到的。不需要等這個也能做的事:整理論文準備投稿、看看有沒有遺漏的方法學檢查。等有新的候選解釋、或投稿準備得差不多,會有第六集。