05 字典:「正常的樣子」如何被記下來
導航:← 04 參照與檢驗 | 目錄 | 06 梯度提升 →
每題的解答都收合在題目下方:先自己作答,再點開「看解答」核對。
先認識這些詞
這一課新出現的詞如下(前面課程已解釋過的詞不重複,完整列表見 術語表)。
- 重建誤差:用字典去還原一題,還原得越不像,代表這題越不正常。數字越大越可疑。
- 對齊:用各平台自己的參照題做標準化,讓不同平台的數字可以放在同一把尺上比較。
- R2:第二輪的模型名稱,是梯度提升加上前面的特徵(時間圖、對齊、字典)。名字只是編號,不是統計上的 R²。
目標
讀完這課,你能解釋「字典重建誤差」的白話意思,以及它為什麼能用在跨平台比較。
白話
想像你要判斷一張照片是不是假的。你可以先看很多真照片,記住「真照片通常長這樣」。之後看到新照片,如果它跟你記住的樣子差很多,就可疑。
字典就是這個「記住的樣子」:
- 從參照題中,挑出沒有被攻擊的正常題。
- 用它們建立一組「正常型態」(字典)。
- 對任何一題,嘗試用字典的型態來「重建」它。
- 如果重建得很好,代表它很正常;重建得不好,代表它很奇怪。
這個「重建不好的程度」就是重建誤差,是一個特徵數字。
為什麼能跨平台
每個平台的字典都是用自己的正常題建立的,所以字典裡記的是「該平台的正常樣子」。
論文用對齊讓不同平台的特徵可以放在同一把尺上比較。對齊的做法是:用各平台自己的參照題,把特徵標準化。
用一個小例子看字典
這個例子只用兩個特徵,方便手算。研究實際用的特徵多很多,但做法相同。
第一步:對齊。 先把各平台自己的參照題,用中位數與四分位距標準化。假設 5 題參照的「選項集中度」原始值是 0.2、0.4、0.5、0.6、0.8:
- 中位數是 0.5;四分位距(75% 位數減 25% 位數)是 0.6 − 0.4 = 0.2。
- 每個值變成 (x − 0.5) ÷ 0.2,得到 −1.5、−0.5、0、0.5、1.5。
第二步:建字典。 字典只用沒有被攻擊的正常參照題。假設有 3 題正常,對齊後的兩個特徵是 (0, 0)、(1, 0)、(0, 1)。這三個點就是「正常的樣子」。
第三步:重建與誤差。 對一題,找出字典中最近的兩個型態,依距離決定權重(越近權重越大),組合成一個「重建點」。重建點和原題的差的平方和,就是重建誤差。
- 正常的題 A(0.2, 0.1):最近的是 (0, 0),它離其他型態很遠,權重幾乎全部在它身上。重建點約是 (0, 0)。誤差 = 0.2² + 0.1² = 0.05,很小,代表正常。
- 奇怪的題 B(3, 2):最近的兩個是 (1, 0) 和 (0, 1),距離接近,權重約 0.75 與 0.25。重建點約是 (0.75, 0.25)。誤差 = (3 − 0.75)² + (2 − 0.25)² ≈ 8.12,很大,代表可疑。
以上數字用研究的重建函式 dict_error 算過。研究設定中取最近的 10 個型態(見 src/config.py),這裡只取 2 個,讓數字看得清楚。
第四步:如果字典被污染。 假設參照題中混進了一題灌票,字典多了一個型態 (2.9, 1.9)。這時題 B 的最近型態就是它:
- 題 B 的重建點幾乎就是 (2.9, 1.9),誤差降到 0.02。
- 原本很可疑的題 B,現在看起來很正常,偵測器就漏抓了。
這就是為什麼字典只能用正常的參照題建立。研究中,source_tables 會把參照題分成正常(normal = ref[~y])與被攻擊的,字典只用前者。
問自己
1. 如果字典只有一個正常題,重建誤差會有什麼問題?
看解答
所有題都只能跟那一個比較,誤差主要反映和它的距離,無法表示正常題的變化。所以字典需要足夠多的正常題。
2. 如果一題的重建誤差很小,代表什麼?
看解答
它很像字典裡的正常型態。但也可能是字典被污染(如第四步),或字典裡記住了它本身就是被攻擊的型態,所以誤差小不一定代表正常。
3. 為什麼要先對齊?
看解答
不同特徵的尺度不同(例如票數與比例),直接算距離會被大尺度的特徵主導。對齊後,各特徵才能放在同一把尺上比較,也才能跨平台比較。
練習:把題 B 的位置改成 (1.5, 1.5),重建誤差是多少?
看解答
2.0。最近的兩個 (1, 0) 與 (0, 1) 距離相同,權重各 0.5,重建點是 (0.5, 0.5),誤差 = (1.5 − 0.5)² + (1.5 − 0.5)² = 2.0。
看這裡
src/r2.py的align、design:對齊與字典特徵的計算。src/novvc.py的source_tables:來源域的訓練表(包括字典的建立)。src/gnn.py:字典重建的訓練(論文的 GNN 部分,不是 R2 的主流程,可以先略過)。
注意:字典的效果要看論文的實際結果,不能只憑它的原理判斷。
問自己
1. 字典只用參照題建立,檢驗題有沒有被用來建立字典?(答案應該是沒有;B 課會再確認。)
看解答
應該沒有。字典只用參照題中、沒有被攻擊的正常題建立;檢驗題不參與。(B 課會再確認這一點。)
2. 如果字典只用一題建立,重建誤差還有意義嗎?
看解答
只用一題時,那一題無法代表「正常的樣子」,重建誤差的變化很大,數字沒有什麼意義。字典需要足夠多的正常題才有代表性。
3. 為什麼字典需要排除被攻擊的參照題?
看解答
被攻擊的題如果進入字典,攻擊的樣子會被當成正常,字典被污染;之後攻擊題的重建誤差會變小,偵測就會失效。
練習
一個平台的參照題有 5 題:正常的有 4 題,被攻擊的有 1 題。
1. 建立字典時,應該用哪幾題?
看解答
只用 4 題正常的題建立字典。
2. 如果用了全部 5 題,會發生什麼?
看解答
被攻擊的那題會被當成「正常型態」的一部分,字典被污染,之後的重建誤差會不準。
檢核
1. 字典的白話意思是什麼?
看解答
字典是用正常的參照題記下的「正常題目長什麼樣」的一組範本。
2. 重建誤差越大,代表什麼?
看解答
重建誤差越大,代表這題越偏離字典裡的正常樣子,越可疑。
3. 為什麼對齊是跨平台比較的前提?
看解答
不同平台的數字尺度不同(例如投票數、時間分布不一樣),沒有對齊就直接比較沒有意義。對齊用各平台自己的參照題做標準化,讓數字可以放在同一把尺上。
導航
引用文獻
- Zheng, L., Fu, D., Li, Z., & He, J. (2026). OWLEYE: Zero-shot learner for cross-domain graph data anomaly detection. ICLR. [bib: zheng2026owleye] — 正常型態字典與重建誤差的概念來源。
- Roy, A., Shu, J., Li, J., Yang, C., et al. (2024). GAD-NR: Graph anomaly detection via neighborhood reconstruction. WSDM. [bib: roy2024gadnr] — 重建思想的來源。
- DuPont, Q. (2023). New online communities: Graph deep learning on anonymous voting networks to identify sybils in polycentric governance. arXiv:2311.17929. [bib: dupont2023dao_gcnn]
- 注意:本研究把三篇的概念改寫成特徵,不是重現原方法(見
SUMMARY.md§1.1)。