English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

語義距離即歐幾里得距離

高維向量空間

ANDREA-120M 的 8449-token 詞彙表中,每個 token 都映射到 R^768 中的一個點。token 嵌入矩陣形狀為 8449 × 768:8449 列,每列對應一個詞彙 token;768 欄,每欄對應一個嵌入維度。


Geometry of ANDREA Panels


三個性質使這成為向量空間

1. 加法。 v_a + v_b 落在 R^768。兩個嵌入的和是有效的向量。

2. 純量乘法。 alpha * v 對任意實數 alpha 都落在 R^768。沿相同方向伸縮。

3. 線性。 alpha v_a + beta v_b 落在 R^768。線性組合仍留在空間內。


這些性質為我們提供了幾何工具:距離、角度、投影、基底、正交性。


距離作為語義相似度

兩個嵌入向量的餘弦相似度衡量它們之間的角度:cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||)。範圍:-1(相反)到 +1(平行)。


訓練後的經驗模式:具有相似上下文的 token 會產生具有高餘弦相似度的嵌入向量。ANDREA-120M 將 parakeetmonkey 放在相近的位置(兩者皆為生物、物種、現存或滅絕類別)。它將 Fouriertransform 放在相近的位置(訊號處理上下文)。它將 parakeetFourier 放在相隔甚遠的位置(跨領域正交性)。


為什麼是 R^768 而非 R^384

ANDREA-12M 使用 d_model = 384。ANDREA-120M 則加倍至 768。加倍之所以重要:384 維空間可用的「角度」較少,跨領域消歧能力受限。加倍容量讓模型有足夠空間將 bank(河岸)與 bank(金融)解析到嵌入空間的不同區域,而不會讓其中一個塌陷到另一個。


將嵌入更新視為向量平移

每一次梯度步驟都會將 delta_v 加到 v_token 上。從幾何角度來看:在 R^768 中,小幅的平移會將每個 token 的位置推向能降低損失的鄰域。經過 200K 步後,每個 token 都從隨機初始化遷移到學習後的位置。

計算距離

三個已訓練的嵌入(簡化至 R^3 以便進行算術運算):


- v(parakeet) = (1.0, 0.5, 0.0)

- v(monkey) = (1.2, 0.3, 0.1)

- v(Fourier) = (0.0, 0.0, 1.5)

(a) 計算 ||v(parakeet) - v(monkey)|| 的歐幾里得距離。(b) 計算 ||v(parakeet) - v(Fourier)|| 的歐幾里得距離。(c) 指出哪兩個 token 會聚集在一起,並引用實際數值給出幾何理由。

投影到查詢子空間

注意力計算的內容

對於位置 t 的 token,注意力計算:


softmax(Q K^T / sqrt(d_k)) V


其中 Q 是查詢(此 token 的問題),K 是鍵(每個過去 token 的識別符),V 是值(每個過去 token 的內容)。輸出是依據查詢與每個鍵的關聯程度,對 V 進行加權混合。


幾何解讀

將 K 視為 R^d_k 中的向量列表,每一行代表一個過去 token 的鍵。Q 是 R^d_k 中的一個向量:此 token 的問題。


Q K^T 將每個 key 投影到 Q 上。點積 q · k_i 表示 k_i 在 q 方向上的投影長度。長投影 = key 與 query 高度相關。短投影 = key 與 query 幾乎無關。


softmax 將投影值正規化成總和為 1 的權重。V 的加權和是一個單一向量:由過去內容依其與當前 query 的相關性加權混合而成。


多頭注意力:多子空間投影

ANDREA-120M 使用 12 個注意力頭。d_model = 768;d_k = 768 / 12 = 64。每個頭將輸入投影到 R^768 中不同的 64 維子空間。十二個頭提供十二個獨立的視角:一個頭可能追蹤語法角色,另一個追蹤語義相似度,另一個追蹤長程指涉。


幾何上:每個頭定義一個 64 維的有向子空間(一個「視窗」),透過它觀察過去的序列。


因果遮罩

解碼器專用模型會加入因果遮罩:在 softmax 之前,將 Q K^T 中對角線以上的每個元素設為 -infinity。幾何意義上:任何對未來 token 的投影權重都會歸零。Token t 只能看到 token 0 到 t。


為什麼這很重要:訓練與推論變得對稱。使用相同的正向傳遞、相同的遮罩投影,不需要額外的生成邏輯。


sqrt(d_k) 縮放

若不進行縮放,點積會隨 d_k 增大而變大。過大的點積會讓 softmax 進入 one-hot 區域(某個權重接近 1,其餘接近 0)。除以 sqrt(d_k) 可將投影維持在單位變異數的尺度,讓 softmax 在各種 d_k 值下都能保持適當的銳利度。


幾何上:sqrt(d_k) 會將投影長度正規化,使得 softmax 無論子空間維度為何,都能看到大小相近的數值。

閱讀投影

三個鍵值與一個查詢向量,位於 R^4(為簡化算術而設計):


- q = (1, 0, 1, 0)

- k_1 = (1, 0, 0, 0) [過去 token 1]

- k_2 = (0, 0, 1, 0) [過去 token 2]

- k_3 = (0, 1, 0, 1) [past token 3]


d_k = 4,因此 sqrt(d_k) = 2。

(a) 計算 q · k_i(i = 1, 2, 3)的點積。 (b) 將每個點積除以 sqrt(d_k) = 2,得到縮放後的分數。 (c) 不需明確計算 softmax,請指出哪個 key 會獲得最大的注意力權重,並給出幾何理由。

梯度下降作為地形上的路徑

120M+1 維度中的曲面

ANDREA-120M 的每一組權重配置都是 R^120,000,000 中的一個點。損失函數 L(w) 將每個點對應到一個實數:該配置下的訓練損失。所有損失值共同描繪出參數空間上方的一個 (120M+1) 維曲面。


直接視覺化此曲面在幾何上是不可能的。概念上可想像為一塊地形:山峰(高損失)、山谷(低損失)、鞍點、高原、脊線與盆地。


梯度作為局部斜率

grad L(w) 是 R^120M 中的一個向量,指向 L 增加最快的方向。取其負值:-grad L(w) 則指向最陡的下坡方向。

<translated content> [BLOCK_TYPE SECTION/STEP]

AdamW 的一次更新會沿負梯度方向推動 w(並依據 m 與 v 做自適應縮放)。幾何上:沿曲面做一個微小、向下的步進,步長由 lr 控制。 [BLOCK_TYPE SECTION/STEP]

<translated content> [BLOCK_TYPE SECTION/STEP]

v1 的不良盆地
[BLOCK_TYPE SECTION/STEP]

v1 在隨機初始化的權重上,以峰值學習率(0.0003)邁出第一步。幾何畫面:w₀ 處於曲率極高的區域(隨機初始化在許多方向都有高曲率),而峰值學習率的一步落入錯誤的盆地。後續步驟無法逃脫,模型因此卡在輸出「region region region」,因為那是它從落點能找到的最低損失盆地。 [BLOCK_TYPE SECTION/STEP]

<translated content> [BLOCK_TYPE SECTION/STEP]

v2 的暖機路徑
[BLOCK_TYPE SECTION/STEP]

v2 先以從 0 緩升至峰值的學習率,進行 2000 個小步。幾何畫面:w₀ 先沿曲率較低的平滑方向緩慢移動。到第 2000 步時,w 已進入較易導航的區域,此時峰值學習率即可將它推向更好的盆地而不致過衝。


Warmup 是一種幾何感知的初始化協議:讓模型先找到一個安全的局部鄰域,再對其施加較大的訓練壓力。


寬盆地 vs 窄盆地

在第 112K 步時,ANDREA-120M 位於一個盆地中。問題:這個盆地有多寬?


寬盆地 = 許多相鄰的權重配置也能達到低訓練損失。泛化能力通常較佳(盆地寬度可預測測試表現;請參閱 PAC-Bayes 課程,第 3 章)。


窄盆地 = 只有少數權重組合能達到低損失。一般化表現通常會變差。


v3 polish 在步驟 112,619 沿著曲面(未重置)將模型推向更寬的盆地,透過課程擾動:改變損失函數(不同 bandit、不同訓練混合),讓 SGD 在新策略下找到附近的平坦區域。


殭屍懸崖

步驟 112,080 出現的異常損失 0.13 是一個懸崖:一個尖銳、狹窄的區域,其中特定輸入模式(記憶的 repo-docs 子字串)達到接近零的損失。模型從較寬的盆地掉進狹窄的溝谷。Polish-pivot 對 repo-docs 的硬排除填平了那條溝谷,使 SGD 無法再找到它。

閱讀地形

經過 polish pivot 後的三種權重配置。(a) 配置 A:訓練損失 2.0,且距離 0.1 內的小擾動有 95% 仍能產生損失 < 2.2。(b) 配置 B:訓練損失 2.0,且距離 0.1 內的小擾動只有 5% 仍能產生損失 < 2.2。(c) 配置 C:對特定輸入的訓練損失為 0.13,但對其他輸入的平均損失為 8.0。請將每種配置分類為 WIDE BASIN、NARROW BASIN 或 CLIFF,並給出一句幾何理由。

課程混合作為離散單純形上的行走

什麼是單純形

n 維單純形(特別是標準 (n-1)-單純形)是由 n 元組 (w_1, w_2, ..., w_n) 所組成的集合,其中每個 w_i >= 0 且 sum(w_i) = 1。


對於 n = 2:從 (1, 0) 到 (0, 1) 的一條線段。對於 n = 3:頂點為 (1, 0, 0)、(0, 1, 0)、(0, 0, 1) 的三角形。對於 n = 16(ANDREA 的完整來源清單):位於 R^16 中的 15 維單形。 [BLOCK_TYPE SECTION/STEP]

[BLOCK_TYPE SECTION/STEP]

強盜權重作為單形座標
[BLOCK_TYPE SECTION/STEP]

ANDREA 的強盜在每個階段產生一個跨越資料來源的權重向量 w。每個分量 w_i 是抽樣來源 i 的機率。機率值皆為非負數且總和為 1:每個權重向量都位於單形上。 [BLOCK_TYPE SECTION/STEP]

[BLOCK_TYPE SECTION/STEP]

頂點 = 純策略(僅抽樣單一來源)。內部 = 混合策略(抽樣多個來源,每個來源都有正機率)。邊 = 僅混合兩個來源。 [BLOCK_TYPE SECTION/STEP]

[BLOCK_TYPE SECTION/STEP]

來源下限作為受限區域

ANDREA 設定最小權重:hermes3-general 的下限為 0.7(後處理後)。這在單純形中劃出一個子區域:只有 w_hermes3-general >= 0.7 的權重向量才是可達的。


幾何上:下限以一個超平面切割單純形。可達區域是單純形中位於所有下限超平面「正確側」的部分。


上限作為另一種限制

ANDREA 同時也設定最大權重:dictionary 的上限為 0.25(後處理後)。每個上限都是另一個超平面,可達區域必須同時位於所有上限超平面的「正確側」。


將某個來源完全排除(上限 = 0.0)是最嚴格的上限:該座標被固定為零,使有效單純形降維一階。


相變作為單純形行走

每一次相變(每 7–42 步)都會產生一個新的權重向量。每個新向量都是單純形上的一個點。在超過 20 萬步的過程中,bandit 會在單純形可達區域內描繪出一條長路徑。


隨機相位 = 瞬間傳送到可達區域內的均勻隨機點。

Bandit 控制的相位 = 朝符合下限與上限的 UCB 最佳頂點前進。

Polish 樞紐 = 重新繪製可達區域(新的下限、新的上限、排除部分來源),行走從新的起點繼續。


為什麼頂點是危險的

純來源相位(某個 w_i = 1,其餘 = 0)位於單純形頂點。此時多樣性為零。模型僅在單一分布上訓練。v1 的崩壞部分可追溯到 bandit 停留在 repo-docs 頂點附近;樣本完全複製了該來源的分布。


Floor 可防止停留在頂點:floor 設為 0.7 即表示「任何來源的權重不得低於 0.7」(或依優先來源所設定的 floor 值)。

行走於可達區域

三個來源:hermes3-general (H)、gutenberg (G)、dictionary (D)。限制條件:H floor = 0.5,D cap = 0.25。(隱含:所有權重 ≥ 0、總和為 1,且無其他限制。)

(a) bandit 是否可能選擇 (H=1.0, G=0, D=0)?為什麼?(b) 是否可能選擇 (H=0.5, G=0.5, D=0)?(c) 是否可能選擇 (H=0.5, G=0.25, D=0.25)?(d) 請以幾何方式描述在此三來源單純形中,可達區域的形狀。

Restricting Dimensions for the First 20K Steps

What v2's Curriculum Warmup Did

v2 將 curriculum_warmup_sources 設定為七個來源:hermes3-general、hermes3-creative、hermes3-roleplay、chat、smoltalk、oasst、gutenberg。在前 20K 步驟中,僅有這七個來源提供資料。步驟 20K 之後,完整的 16 來源資料流才會啟動。


Geometric Reading

完整的 16 來源單純形位於 R^16 中。限制為 7 個來源會將 16 個座標中的 9 個壓縮為零。Bandit 的行走發生在 6 維子單純形中(比來源數少一維,因受限於總和為 1 的條件)。


幾何上:完整單純形的一個子流形。維度較低、更平滑、更容易導航。


為什麼這有助於早期訓練

訓練初期,模型尚未學會連貫的語言。來源多樣性會造成混淆:每個來源都有自己的風格、詞彙分佈與模式。隨機初始化時混合 16 個來源,會產生過於寬廣的目標分佈,模型無法擬合。


限制為 7 個對話/散文來源,能產生更均勻的目標。模型先學會穩定的表徵,再逐步擴展。


訓練中的幾何路徑

1. 步驟 0 至 20K(warmup)。 行走位於 6-D 子單純形上。模型中出現穩定的語言模式。

2. 步驟 20K 至 112K(full firehose)。 行走擴展至 15-D 完整單純形。領域廣度開始顯現。

3. 步驟 112K 起(polish)。 行走再次受限:排除 repo-docs 與 repo-docstrings,提高對話門檻。在完整單純形中形成較小的多邊形;對話品質得以鞏固。


為什麼 Polish 將 curriculum_warmup_steps 設為 0

Polish 從步驟 112K 開始。此時模型已能產生連貫的語言。此時若再限制到子單純形,將失去廣度卻無所獲益(warmup 的好處僅適用於全新初始化的模型)。將 warmup_steps 設為 0 表示:停留在完整單純形,但套用新的上限與下限。


三種幾何,一次訓練

v2 暖身:低維子單純形。

v2 火力全開:完整 15-D 單純形。

v3 精修:完整單純形搭配較小多邊形(更多約束)。


同一次 200K 步訓練,三種不同的幾何機制。每種機制都針對模型成熟的不同階段進行調整。

閱讀子流形

(a) v2 warmup 使用 16 個來源中的 7 個來源。warmup 子單純形(sub-simplex)的維度是多少?請計算並說明。(b) ANDREA-120M v3 polish 硬排除 repo-docs 與 repo-docstrings(cap 設為 0.0),但允許其餘 14 個來源。polish 子單純形的維度是多少?(c) 在幾何上,將 curriculum_warmup_steps = 0 設定在 polish 配置中代表什麼意義?