第一部的最後一天,做一件所有人都知道該做、但很多人跳過的事:在動任何訓練之前,先把未微調的原始模型跑一次完整評測。
跳過它的代價是:訓練完之後你有一個分數,但你沒有可比較的對象,只能靠感覺說「好像變好了」。而「感覺」在這件事上是完全不可靠的——微調過的模型輸出格式變漂亮了,你會直覺認為它變聰明了,但那可能只是它學會了排版。
大規模的資安多選題題庫,涵蓋範圍很廣:密碼學、網路安全、合規、事件應變都有。題目多,統計上比較穩定。
它測的是什麼:資安知識的廣度覆蓋。
它測不到什麼:實務判斷、格式產出、中文能力。
題數較少但更聚焦在資安概念的理解與應用,有難度分級。
它測的是什麼:對核心概念的掌握深度。
它測不到什麼:一樣測不到實務產出。而且因為題數少,分數波動會比較大——這點很重要,Day 12 會回來算這件事。
這是台灣的證照考題。我加它進來的理由跟前兩組完全不同:
決定一:用什麼方式取答案?
多選題有兩種評分法:讓模型自由生成然後解析答案,或是比較各選項的 log-probability 取最高。前者貼近實際使用,後者穩定但脫離現實。
我選自由生成 + 嚴格解析,並且把「無法解析出答案」記為錯誤。理由是:一個在實際使用時會胡言亂語的模型,就是不能用,不該因為評分方式寬鬆而拿到分數。
決定二:要不要給 few-shot 範例?
我兩種都跑。zero-shot 測的是模型本身,few-shot 測的是模型的可用性。 微調的一個預期效果就是「不用給範例也知道該怎麼答」,所以兩者的差距本身就是一個有意義的指標。
決定三:溫度設多少?
評測一律 temperature = 0,固定 seed。這樣重跑會得到一樣的結果,你才能區分「模型變了」和「隨機性」。
決定四:跑幾次?
即使 temperature = 0,我還是每組跑三次確認結果一致。這是在驗證評測腳本本身沒有隱藏的隨機性——我確實抓到過一次,是資料載入時的順序沒固定。
我建議用這個格式記,欄位一個都不要少:
| 模型 | 階段 | CyberMetric | SecQA | iPAS | 備註 |
|---|---|---|---|---|---|
| Gemma 4 E4B | 原始(基線) | 【填入實測】 | 【填入實測】 | 【填入實測】 | zero-shot, T=0 |
| Gemma 4 E4B | CPT 後 | ||||
| Gemma 4 E4B | SFT 後 | ||||
| Gemma 4 E4B | 蒸餾後 |
【此處貼評測腳本執行輸出截圖】
「階段」這一欄是關鍵。 Day 4 說過三階段各存 checkpoint、各跑評測,這張表就是那個決定的體現。等到最後結果不如預期,你能一眼看出是哪一階段拖累的。
跑基線時我發現了一件很有價值的事——原始模型在某些題目上錯得很奇怪。不是不會,是題目本身有問題:選項重複、標準答案標錯、或是題目依賴的背景資訊已經過時。
如果沒先跑基線,這些壞題會一路混到最後,然後貢獻一堆無法解釋的雜訊。
我的處理:把明顯有問題的題目標記出來,但不刪除。改用「全題」與「清洗後」兩組分數並列。刪題這件事一旦開始做,就很難證明自己沒有選擇性地刪掉模型答錯的題。
在跑之前,我先寫下了我的預期:
先寫預期再看結果,這個習慣值得養成。如果結果符合預期,你對評測有信心;如果不符合,那本身就是一個要調查的訊號——是模型比你想的強,還是評測有問題?
我後來確實有一組結果跟預期不符,追下去發現是答案解析的正則寫錯了。如果沒有事先寫預期,我可能會直接接受那個分數。
七天下來,我們有了:
明天開始動手訓練。
@aid3fend — AI 資安實戰紀錄,歡迎追蹤交流。