頓悟的跡象

在講點正經的之前,先講點不正經的。這週受到 AI 供應鏈教父 女色 的影響,股票跌出了新高度。反正長期持有就是這樣,資產慢慢累積,振幅也會跟著變大。這次在 11/5 累積跌 8.26%,單日跌幅也達到最多位數;現在受惠於台幣貶值,已收復不少失土。據說台幣會跌一陣子,所以數據會有所美化。

這有讓我頓悟什麼嗎?沒有。所以我來講講頓悟有什麼跡象。

假設我們有一個會計算 mod 97 的 AI model,包括普通的 embedding 層、Transformer 層、和 FFN / MLP 層。顧名思義,它學會 2+96 後就會輸出 1 ,因為 mod (2+96)=mod (98) = 1。

當我們把所有 0~96 和 0~96 的組合都送進去測試,會有 9,409 種組合,如果每題都答對,當然 model 就算學會了。但是這個 model 是在哪一步開始頓悟加法的真諦?或是純粹就是靠死背呢?我很好奇,更發現其他人已經有大量的研究了。我就算晉身此界也是師弟,當不了師叔。

想像一個有 97 格的環。被加數站在 96,再向前走 2 格代表加數,結果會回到 1。對加法而言,把數字 a 放到角度 2πka/97,加 b 就像再轉 2πkb/97。這裡的 k 是你選擇繞環的頻率。若寫成複數波 exp(2πika/97),輸入平移 b 格,頻域只需乘上一個相位因子;也就是訊號處理課教的循環平移。這樣就解釋了加法。

我訓練了一個 1 層 transformer 來做 (a+b) mod 97,訓練集佔 50%。大約 5,000 步後測試準確率從約 49% 升到 100%,也就是 grokking。示意程式由老馬 (斯克) 的 Grok Bot 提供,叫 Grok 研究 Grokking 正好。

import numpy as np
def embedding_spectrum(W_E):
# 沿 token 軸做長度 97 的 DFT
F = np.fft.fft(W_E, axis=0) # 97 x d
power = np.linalg.norm(F, axis=1) # 每個頻率在模型維度上的能量
return power[1:49] # 頻率 k 與 97-k 成對,只看 k = 1..48
def gini(x):
x = np.sort(np.abs(x))
n = len(x)
return (2 * np.arange(1, n + 1) - n - 1) @ x / (n * x.sum())
spec = embedding_spectrum(W_E)
print("Gini:", gini(spec))
print("能量最大的 5 個頻率:", np.argsort(spec)[::-1][:5] + 1)

頓悟後,我們可以看到下圖左有五根紅棒特別高。這意味著 model 學到五組頻率後 (由隨機種子決定),大概就對加法之道運作自如了。此處是用 Gini 法評估,把 embedding 各頻率的能量排出來,看是少數頻率吃掉大部分能量,還是大家平均分。下圖右在 4200 步附近頓悟,有那種突然醒過來的感覺。

此案例中,Gini 只有 0.33,不算高。因為 48 個頻率裡只有 5 個突出,其餘不是零,底噪偏大。如果想看「稀疏度」,也可以只算峰值佔總能量的比例。其他實證的手法比較厚工,包括:

  • Excluded loss:把模型認定的關鍵 Fourier 成分從 **logits(輸出分數)**拿掉,再用訓練題算損失。若移掉後訓練損失變高,表示這些成分確實在幫忙。
  • Restricted loss:反過來只保留所選的 Fourier 成分,其他拿掉,看看留下來的部分能不能解題。

以上的說明,對於加減法都適用。那乘法呢?Furuta [4] 等人在加法基底下分析模乘,觀察到許多頻率都參與;後來 Nguyen [5] 用另一組基底重新檢視,發現他的模 113 模型其實有稀疏結構。

這裡要補一個關鍵字:原根(primitive root)。對模 97 而言,5 是一個原根。意思是從 1 開始不斷乘 5、或曰計算 5 的 j 次方,每次再取除以 97 的餘數,會在回到 1 之前,剛好走遍 1~96 每個非零餘數一次。前幾步是:
5^0 mod 97 = 1 → 5^1 = 5 → 5^2 = 25 → 5^3 = 28 → 5^4 = 43 → … → 5^96 mod 97 = 1。

上面那串不是把數字由小排到大,而是把「乘以 5」這個動作排成一個 96 格的環。零不在裡面:零乘多少次都還是零,必須另外處理。因為每個非零數都能寫成某個 5^j mod 97,我們可以反過來把它標成 j;這個 j 就叫 以 5 為底的離散對數(discrete log)。

例如 25 的標號是 2,28 的標號是 3。現在再看乘法:如果 a=5^i、b=5^j,那 a×b mod 97 = 5^(i+j) mod 97。乘法在這個新編號裡變成指數相加(mod 96)。

故這時先把 embedding 的非零數字列按 1,5,25,28,… 重新排列,再做長度 96 的 DFT,就相當於用乘法群的 Fourier 基底看它。Nguyen 在 mod 113 的模型上報告:原本的加法 DFT 看起來很分散;改用離散對數排序後,Gini 從 0.07 左右到 0.58 左右,而且只剩幾個主要頻率。很酷吧!

當然,有道德感的 AI 會吐槽我有邏輯漏洞,所以我必須多講幾句,免得天網把我列為難相處的對象,進而斬殺。

  • 兩種電路都可能解同一題。 Zhong [1] 等人發現模加法可以長出 Clock,也可以長出 Pizza,甚至更複雜的程序。嵌入有規律,不代表你已經知道後面是哪套演算法。
  • 關鍵頻率常是事後找的。 如果先看最終模型再回放中途 checkpoint,就不是一個完全不看答案、事先固定的偵測器;真正要預測新模型時,頻率選擇和門檻須先鎖定 [2]。
  • 稀疏不是必要條件。 某些模型的解法可能分布於更多頻率;單看 Gini 低,不能叫人家「沒開竅」。Gromov [3] 對不同模算術任務提供了可解析的兩層網路解,正好提醒我們別把某一種 Transformer 頻譜當定義。
  • 表示的基底會改變結論。 加法 DFT 不是乘法的萬用眼鏡,原根與離散對數是為了把乘法的結構對準。[4][5]
  • 頻譜分散有很多原因。 在還沒 grok 的模型上看到分散的頻譜,可能是還在背題,也可能只是電路還沒長出來,不能直接讀成「這個模型學不會」。反之,也不能在 training 過程中,只看到一點跡象就猜它頓悟了。

最後,對於好學不倦有始有終的網友們介紹除法。a/b = a * b-1。先找出 b 在模 97 下的乘法逆元 b⁻¹,再計算 a * b-1(mod 97) 即可。由於 97 是質數,除了 0 以外,1 到 96 的每個整數都保證存在唯一的模逆元。 至於找出模逆元的方法有費馬小定理 (Fermat’s Little Theorem)、擴展歐幾里得演算法(Extended Euclidean Algorithm)、查表法 (本人真心推薦,可以減少人腦強化學習後,所造成的崩潰或災難性遺忘)。


[REF]

  1. Zhong, Liu, Tegmark, Andreas (2023). The Clock and the Pizza
  2. anda, Chan, Lieberum, Smith, Steinhardt (2023). Progress measures for grokking via mechanistic interpretability
  3. Gromov (2023). Grokking modular arithmetic
  4. Furuta, Minegishi, Iwasawa, Matsuo (2024). Towards empirical interpretation of internal circuits and properties in grokked transformers on modular polynomials
  5. Nguyen (2026). The Discrete-Log Clock
  6. Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets — Power et al., 2022

墨西哥之旅 – 8

2026/11/5 (四)

坎昆的酒店是全包式的,意思是要自己在旅館裡找餐廳吃飯,類似遊輪那樣。因為距離早餐太近,午餐只有這樣。

下午的活動是我們開著快艇去浮潛。先前在義大利開快艇都是船長負責罩,我們每個人假裝幾分鐘而已。但老墨就直接放給你開了,其中還要穿過紅樹林,滿好玩的。

至於浮潛,我記得在帛琉還滿容易的。但這次有點鼻塞,呼吸不順,一下就爬上船了。只看到三隻大黑魚。

本來導遊說我們可以每家餐廳吃一道菜就換下一家,每家都嚐嚐看。豈料裡面只開一家亞洲餐廳,其他家幾乎都關了。另外游泳池旁有一家可併桌的buffet,我們就只能吃這個了。所幸它是有表演的,彌補了食物上的缺憾。

2026/11/6 (五)

基本上,到坎昆就沒有太多活動了。在這個細長的潟湖陸塊上,一家家旅館把陸地切成小段,所以算是兩面都面海,東方各自佔據一塊海灘。

西邊是主幹道。外面的藥局、便利店都沒有什麼可買的。冰箱吸鐵一個四美元起跳,比歐洲還貴。

[補記]

純種的瑪雅人頭大、眼大、鼻樑高、脖子粗短、個子不高。我除了眼睛太小,眉毛不夠濃,Cosplay 瑪雅人還滿像的。

瑪雅使用象形文字,Cash 拼成 Ka xa,長成下面這樣,不過沒有什麼意義。瑪雅也沒有金錢的概念,但有說過可可豆可以換家畜,相當於貨幣。

BTW,在奇琴伊察祭壇下的浮雕,可以看到美洲豹和老鷹都各抓著一顆心臟,所以這邊的祭祀是以挖心為主。後來瑪雅混合了阿茲特克的砍頭文化,就變成兩者兼具,學壞真可怕。

墨西哥市附近行程

梅里達 – 猶加敦半島行程

公廁上過 5 塊、 6 塊、10 塊披索不等。換算成台幣乘 1.8 左右。墨西哥瓜達盧佩聖母大教堂的公共廁所有複雜的告示牌,還分時段計價。我的 6 塊錢版本就是在那裡體驗的,印象中有看到神父也要 2 披索,但是忘了拍照確認。

墨西哥之旅 – 7

2026/11/4 (三)

今天去奇琴伊察(Chichén Itzá)古城。這邊的金字塔很有名,奇琴的意思是"井口",伊察是部落的名稱。在墨西哥待了幾天,歐洲的皮克敏又往西跑了。等我去多洛米蒂,很快他們就會發現地球是圓的。

在金字塔往兩個方向延伸,各有一個石灰岩洞。所以這裡不缺水,主要是拜雨蛇神。祭祀方式是把少女綁起來丟進石灰岩井。

另外一種是贏得球賽,射門成功,也可以獲得被砍頭的榮幸。血噴出來就像蛇一樣,所以象徵羽蛇神。底下一條一條像章魚爪子的就代表血。身體的血往上噴,頭的血往下噴。

金字塔週圍充滿了攤販,喜歡務必還價。同樣的東西在出口賣 50 披索,中心區賣 100 披索。入口處物價似乎介於兩者之間。

這邊有個超漂亮的石灰岩洞 Cenote lk kil,可以游泳和跳水。第一次跳水喝了不少鮮魚湯。這裡水是深綠色,但確實看到幾條小黑魚。看旁邊的介紹,生態還很豐富。

中午就在旁邊吃自助餐,但要吃的東西是由服務生打菜。今日西語小教室:

  • 少一點:poquito
  • 多一點:más

下一站趕路前往坎昆。這裡有個龍舌蘭調酒教學。配方是龍舌蘭(Tequila)一盎司、龍舌蘭的爺爺「梅斯卡爾」(Mezcal)兩盎司、檸檬汁兩盎司、橘子汁一盎司。每道菜也都會配紅白酒。最後大家都醉醺醺。

特色料理當然也是中規中矩的,不過沒有到美食的程度,主要是嚐鮮開開眼界。。

當大家頭暈目眩之際,我們入住了坎昆的海悅。

墨西哥之旅 – 6

2026/11/3 (二)

今天一早就趕去機場,飛往梅里達(Merida)。因為墨西哥航空超賣,所以我等到最後才候補上飛機。其他團員都補上了,看起來是按照報名順序填寫名單的,那我確實是最後一個。因為領隊有位子,所以他最後的底牌就是我坐他的位子,他坐下一班。幸好最後我們都擠得上。

中午我們吃一家瑪雅人的傳統料理。綠色這杯水是 chaya 草汁,加上檸檬汁調味。

下午參觀烏斯馬爾(Uxmal)。這裡在藍天白雲下非常漂亮。阿茲特克的金字塔是用火山岩蓋的,而瑪雅人的金字塔則是用石灰岩。這是最主要的差異。

瑪雅建築特色包括假拱門 (上端為梯形,或當做三角形),普克式 (Puuc Style ) 上下兩層格式。下半素面,上半有幾何圖案。轉角有雨神頭像。

在導遊講解的同時,大家都分心在看蜥蜴。記得的部份是有位侏儒國王一天內就變出這座魔術金字塔,還有在一個方形廣場上,有很多羽蛇神的像。因為缺水通常是拜雨神。

這個角度可以拍到樹林上的金字塔。

生命之樹和金字塔的特色圓角。

晚上搭馬車去 Museum of Yucateca Guestronomy 吃瑪雅傳統料理。口味還滿合的,但是甜點比較不習慣-青木瓜切大塊燉糖那種。

好幾天沒上西班牙文了。正規的版本是:有人打噴嚏,要說 salud (健康),對方會回 gracias.

  • 歪樓版:帥哥的諧音
  • 西語:挖寶
  • 瑪雅語:好柱子

墨西哥之旅 – 5

2026/11/2 (一)

今天造訪瓜達露佩聖母聖殿。藍色這棟是新的,信徒熱門程度可以讓每小時做一次彌撒。2025 年 12 月 11 日至 12 日的短短兩天內,官方統計就有高達 1,280 萬人湧入聖殿廣場。

墨西哥市底下原本是一個大湖,填湖之後才建立現在的超級大城市。當初蓋的教堂,歪樓的程度也不輸比薩斜塔。諷刺的是現在墨西哥市缺水中。

會蓋這座聖母殿是因為聖母曾在此四次顯聖。就連新教堂施工時發生地震,也曾靠十字架撐住塌陷的屋頂,保護過底下的工人。墓園也出現很多彎曲版的十字架,不知道有沒有關聯。

山頂小聖堂(Capilla del Cerrito) 據說是發生神蹟的原址。

運動過後,我們驅車前往太陽和月亮金字塔。太陽 (下圖左) 現在不能爬,月亮 (下圖右)可以。爬上去不難,但下來有點危險。

從月亮金字塔往下看,面對的這一條就是亡靈大道。中間那個祭壇原本有Chalchiuhtlicue 像,現在已經搬到人類學博物館。

回到墨西哥市的路上會再次看到到電車和纜車。電車是一天 10 披索,纜車是一天 5 披索。

中午吃一個 buffet。有個冷知識是:墨西哥的可口可樂是蔗糖,別的國家是玉米糖漿。喝起來比較不甜。

下午我們去看美洲最大最古老的墨西哥城主教座堂,裡面有個縮著腳的黑色耶穌像。有個壞神父把毒藥塗在耶穌像的腳上,打算在好神父親吻耶穌像時把他毒死。當好神父要親到腳的時候,神像把腳縮了起來。甚至把毒素吸收了,所以全身變黑,感動了壞神父。

這裡的教堂同樣飽受地層下陷之苦,地面高高低低。原本考慮要在底部灌水泥防止下限,但是一挖就發現底下還有印地安遺跡,所以只能放棄治療。

教堂旁邊就是憲法廣場(Zócalo),這幾天豎立了一座高達 33.411 公尺的巨型「卡特琳娜骷髏」(La Catrina)雕像,並正式獲得金氏世界紀錄認證為「全球最高的卡特琳娜雕像」。前幾天 Thread 上面一大堆貼文,剛剛看已經退燒了。

其實娃娃魚主題裝飾也很不錯,攤販也很多,還有驅邪的路邊攤。我拍了個老婆婆現場裝罐賣一個什麼膏。

晚餐吃一家有樂隊的餐廳,牛排滿好吃的。