Semantic Distance as Euclidean Distance
A High-Dimensional Vector Space
ANDREA-120Mの8449トークン語彙の各トークンはR^768内の1点にマッピングされます。トークン埋め込み行列の形状は8449 x 768です:8449行(語彙トークン1つにつき1行)、768列(埋め込み次元1つにつき1列)。
この3つの性質によりベクトル空間となる
1. 加法. v_a + v_b は R^768 に含まれる。2つの埋め込みの和は有効なベクトルである。
2. スカラー倍. 任意の実数 α に対して α * v は R^768 に含まれる。同じ方向に伸縮する。
3. 線形性. α v_a + β v_b は R^768 に含まれる。線形結合は空間内に留まる。
これらの性質により、距離、角度、射影、基底、直交性といった幾何学的ツールが利用可能になる。
距離としての意味的類似度
2つの埋め込みのコサイン類似度は、それらの間の角度を測定します:cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||)。範囲:-1(反対方向)から +1(平行)。
訓練後の経験的パターン:類似した文脈を持つトークンは、高いコサイン類似度を持つ埋め込みを生成します。ANDREA-120Mは parakeet と monkey を近くに配置します(両方とも生物学的で、両方とも種であり、両方とも現存または絶滅のカテゴリ)。Fourier と transform を近くに配置します(信号処理の文脈)。parakeet と Fourier を遠くに配置します(ドメイン横断的な直交性)。
なぜ R^768 ではなく R^384 なのか
ANDREA-12M は d_model = 384 を使用しました。ANDREA-120M はそれを 768 に倍増させました。この倍増は重要です:384次元の空間では利用可能な「角度」が少なく、ドメイン横断的な曖昧性解消が困難になります。容量を倍増させることで、モデルは bank(川)と bank(金融)を埋め込み空間の異なる盆地に分解し、一方が他方に崩壊することを防ぐ余地を得ます。
埋め込みの更新をベクトル平行移動として捉える
各勾配ステップは v_token に delta_v を加算します。幾何学的には、R^768 空間における小さな平行移動が、各トークンの位置を損失を低減する近傍へ押し進めます。200K ステップを経て、すべてのトークンはランダム初期化された位置から学習された位置へ移行します。
距離の計算
学習済みの埋め込みを 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)
クエリ部分空間への射影
注意機構が計算するもの
位置tのトークンに対して、注意機構は以下を計算する:
softmax(Q K^T / sqrt(d_k)) V
Qはクエリ(このトークンの質問)、Kはキー(過去の各トークンの識別子)、Vは値(過去の各トークンの内容)を表します。出力は、クエリと各キーの関連度で重み付けされたVの混合です。
幾何学的解釈
KをR^d_k内のベクトル列とみなしてください。各行が過去の各トークンのキーです。QはR^d_k内の1つのベクトル:このトークンの質問です。
Q K^T は各キーを Q に射影します。内積 q · k_i は、k_i が q の方向にどれだけ沿っているかを表します。射影が長い = キーがクエリに強く関連している。射影が短い = キーがクエリにほとんど関連していない。
softmax は射影を合計が 1 になる重みに正規化します。V の重み付き和は単一のベクトルになります:現在のクエリに対する関連度で重み付けされた、過去のコンテンツの混合です。
Multi-Head Attention as Multi-Subspace Projection
ANDREA-120M は 12 個のアテンションヘッドを使用します。d_model = 768; d_k = 768 / 12 = 64。各ヘッドは R^768 の異なる 64 次元部分空間に射影します。12 個のヘッドは同じシーケンスに対して 12 の独立した視点を提供します:あるヘッドは文法的な役割を追跡し、別のヘッドは意味的類似性を、別のヘッドは長距離参照を追跡するかもしれません。
幾何学的には:各ヘッドは、過去を見るための 64 次元の向き付けられた部分空間(「窓」)を定義します。
因果マスク
Decoder-only モデルでは因果マスクを追加します:対角線より上の Q K^T の各要素を softmax の前に -infinity に設定します。幾何学的には、未来のトークンへの射影は重み 0 になります。トークン t はトークン 0 から t までしか参照できません。
これが重要な理由:学習と推論が対称になります。同じフォワードパス、同じマスク付き射影、特別な生成ロジックは不要です。
sqrt(d_k) スケーリング
スケーリングを行わないと、ドット積は d_k に比例して大きくなります。大きなドット積は softmax を one-hot 領域(1 つの重みがほぼ 1、残りがほぼ 0)に押し込みます。sqrt(d_k) で割ることで射影を単位分散スケールに保ち、幅広い d_k の範囲で softmax のシャープさを維持します。
幾何学的には: sqrt(d_k) は射影の長さを正規化し、ソフトマックスが部分空間の次元に関係なく比較可能な大きさを見られるようにする。
射影を読む
R^4 内の 3 つのキー & 1 つのクエリ(計算を簡略化):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [過去トークン 1]
- k_2 = (0, 0, 1, 0) [過去トークン 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, したがって sqrt(d_k) = 2.
勾配降下法:地形上の経路
1億2千万+1次元の曲面
ANDREA-120Mの各重み配置は、R^120,000,000内の1点である。損失関数L(w)は各点を実数に写像する:その配置における訓練損失である。損失値全体は、パラメータ空間の上に(120M+1)次元の曲面を描く。
直接可視化することは幾何学的に不可能である。概念的には:地形である。高山(高損失)、谷(低損失)、鞍点、台地、尾根、盆地。
勾配:局所的な傾斜
grad L(w)はR^120M内のベクトルであり、Lの最も急な増加方向を指す。その負ベクトル:-grad L(w)は最も急な下り坂を指す。
AdamW の 1 ステップは、m と v による適応的なスケーリングを伴いながら、w を負の勾配方向へわずかに移動させます。幾何学的には、表面に沿った小さな下り坂のステップであり、そのステップサイズは lr によって制御されます。
v1 の悪い盆地
v1 は、初期化直後の重みに対して LR = ピーク値 (0.0003) で最初のステップを踏みました。幾何学的なイメージ:w_0 は非常に曲率の高い領域(ランダム初期化では多くの方向で曲率が高い)に位置しており、ピーク LR のステップは誤った盆地へ着地してしまいます。その後のステップでは脱出できず、モデルは「region region region」を出力し続けることになります。これは、着地した地点から到達可能な最小損失を持つ盆地だからです。
v2 のウォームアップ経路
v2 は LR を 0 からピーク値まで徐々に上げながら 2000 ステップの小さなステップを踏みます。幾何学的なイメージ:w_0 はまず曲率の低い滑らかな方向へ穏やかに移動します。2000 ステップ目までに w はより移動しやすい領域へ到達しており、そこからピーク LR を用いてより良い盆地へ向かうことができます。オーバーシュートを避けつつ進むことが可能です。
ウォームアップは幾何学を考慮した初期化プロトコルです。モデルに厳しい最適化を始める前に、安全な局所近傍を見つけさせます。
広い盆地 vs 狭い盆地
ステップ112Kにおいて、ANDREA-120Mは盆地内に位置しています。質問:その盆地はどれだけ広いでしょうか?
広い盆地 = 多くの近傍の重み設定も低い訓練損失を達成する。汎化性能は一般的に良好(盆地の幅はテスト性能を予測する;PAC-Bayesレッスン、第3章を参照)。
狭い盆地 = 低損失を達成できる重みの集合が非常に薄い。汎化性能は低下しやすい。
v3 polish at step 112,619 は、モデルをリセットせずに表面上を移動させ、カリキュラム摂動によってより広い盆地へ導いた:損失関数を変更(異なるバンディット、異なる学習ミックス)し、SGD が新しいポリシーの下で近くの平坦領域を見つけられるようにした。
ゾンビ崖
step 112,080 での異常な損失 0.13 は CLIFF だった:特定の入力パターン(記憶された repo-docs の部分文字列)がほぼゼロ損失に達する、鋭く狭い領域。モデルは広い盆地から狭い谷へ落ち込んだ。Polish-pivot による repo-docs の厳格除外でその谷は埋められ、SGD は再びそこを見つけられなくなった。
地形を読む
離散単体上の歩行としてのカリキュラム混合
単体とは何か
n次元単体(具体的には標準 (n-1)-単体)は、各 w_i >= 0 かつ sum(w_i) = 1 を満たす n-タプル (w_1, w_2, ..., w_n) の集合です。
n = 2 の場合:(1, 0) から (0, 1) への線分。n = 3 の場合:頂点 (1, 0, 0)、(0, 1, 0)、(0, 0, 1) を持つ三角形。n = 16(ANDREA の完全なソースリスト)の場合:R^16 内に存在する 15 次元単体。
バンディット重みとしての単体座標
ANDREA のバンディットは、各フェーズでデータソースに対する重みベクトル w を生成します。各成分 w_i はソース i をサンプリングする確率です。確率は非負で合計が 1 になるため、すべての重みベクトルは単体上に存在します。
頂点 = 純粋戦略(1 つのソースのみをサンプリング)。内部 = 混合戦略(複数のソースをそれぞれ正の確率でサンプリング)。辺 = 2 つのソースのみの混合。
ソースフロアとしての制限領域
ANDREAは最小重みを課します:hermes3-generalはfloor 0.7(post-polish)。これにより単体(simplex)内の部分領域が切り取られます:w_hermes3-general >= 0.7 を満たす重みベクトルのみが到達可能になります。
幾何学的には:floorは単体を双曲面(hyperplane)で切断します。到達可能な領域は、すべてのfloor双曲面の「正しい側」にある単体の部分です。
Caps as the Other Restriction
ANDREAは最大重みも課します:dictionaryはcap 0.25(post-polish)。各capはもう一つの双曲面であり、到達可能な領域はすべてのcap双曲面の「正しい側」に位置する必要があります。
ソースを完全に除外する(cap = 0.0)ことは最も強いcapです:その座標がゼロに固定され、実効的な単体が1次元削減されます。
相転移を単体上の歩行として捉える
各相転移(7〜42ステップごと)で新しい重みベクトルが生成される。各ベクトルは単体上の1点となる。200Kステップを通じて、バンディットは単体の到達可能領域内を長く歩く。
ランダム相 = 到達可能領域内の任意の点を一様ランダムに選んでテレポートする。
バンディット制御相 = フロアとキャップに整合するUCB最良頂点へ向かって1ステップ進む。
Polish pivot = 到達可能領域を再描画(新しいフロア、新しいキャップ、一部のソースを除外)し、新しい出発点から歩行を継続する。
頂点が危険な理由
[BLOCK_TYPE simplex/simplex_content]純粋ソース相(一つの w_i = 1、残り = 0)はシンプレックスの頂点に位置します。多様性はゼロです。モデルは一つの分布のみで学習します。v1の崩壊は、banditがrepo-docs頂点付近に留まり、サンプルがそのソースの分布のみを再現したことに一部起因します。 [BLOCK_TYPE simplex/simplex_content]
[BLOCK_TYPE simplex/simplex_content]
フロアは頂点キャンプを防ぎます:0.7のフロアは「どのソースの重みも0.7を下回らせない」(または優先ソースに対するフロア値)という意味です。 [BLOCK_TYPE simplex/simplex_question]
到達可能領域を歩く [BLOCK_TYPE simplex/simplex_question]
3つのソース:hermes3-general (H)、gutenberg (G)、dictionary (D)。制約:Hフロア = 0.5、Dキャップ = 0.25。(暗黙:全重み >= 0、合計1、その他の制約なし。) [BLOCK_TYPE simplex/simplex_question]
最初の20Kステップにおける次元の制限
v2のカリキュラム・ウォームアップが行ったこと
v2はcurriculum_warmup_sourcesを7つのソースに設定した:hermes3-general、hermes3-creative、hermes3-roleplay、chat、smoltalk、oasst、gutenberg。最初の20Kステップでは、これら7つのソースのみが寄与した。20Kステップ以降は、16ソースの完全なファイアホースが有効化された。
幾何学的解釈
完全な16ソース単体はR^16に存在します。7ソースに制限すると、16座標のうち9つがゼロに潰れます。バンディットの歩行は、6次元の部分単体(ソース数より1次元少なく、和が1という制約による)で行われます。
幾何学的には:完全単体の部分多様体(SUBMANIFOLD)。次元が低く、より滑らかで、移動しやすい。
初期学習に役立つ理由
学習の初期段階では、モデルはまだ一貫した言語を学習していません。多様なソースは混乱を招きます:各ソースには独自のスタイル、独自の語彙分布、独自のパターンがあります。ランダム初期化時に16ソースを混ぜると、モデルが適合できないほど広すぎる目標分布が生まれます。
7つの会話・散文ソースに制限することで、より均一な目標が得られます。モデルはまず安定した表現を学習し、その後拡張します。
訓練を通じた幾何学的経路
1. ステップ 0〜20K(ウォームアップ)。 歩行は6次元サブ単体上を進む。モデル内に安定した言語パターンが現れる。
2. ステップ 20K〜112K(フルファイアホース)。 歩行は15次元フル単体へ拡大する。ドメインの幅が現れる。
3. ステップ 112K以降(ポリッシュ)。 再び歩行を制限:repo-docs と repo-docstrings を除外し、会話フロアを引き上げる。フル単体内のより小さな多角形;会話品質が定着する。
なぜポリッシュで curriculum_warmup_steps = 0 とするのか
ポリッシュはステップ 112K から開始する。モデルはすでに一貫した言語を話せる。サブ単体への制限は、幅を失うだけで利点がない(ウォームアップの利点は fresh-init モデル向け)。warmup_steps = 0 の設定は「フル単体に留まりつつ、新しい上限・下限を適用する」ことを意味する。
3つの幾何学、1回の訓練実行
v2 warmup: 低次元部分単体。
v2 firehose: 完全な15次元単体。
v3 polish: 完全な単体とより小さな多角形(より多くの制約)。
同じ200Kステップの実行、3つの異なる幾何学的レジーム。各々はモデルの成熟段階に合わせて調整された。