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

un

ゲスト
1 / ?

埋め込みは関数ではなくルックアップ

トークナイザーの後の最初の層

トークナイザーはモデルに整数IDを渡します:[256, 1842, 7301, ...]。トランスフォーマーが最初に行うことは、各IDをd_model個の浮動小数点からなるベクトルに変換することです。このベクトルはd_model次元の空間(ANDREA-120Mでは768次元)に存在します。


埋め込み層は関数ではなくルックアップテーブルです。 巨大な行列を想像してください:


shape: (V, d_model)
row 0:    [e_0_0, e_0_1, ..., e_0_767]
row 1:    [e_1_0, e_1_1, ..., e_1_767]
...
row 8448: [e_8448_0, e_8448_1, ..., e_8448_767]

トークンID i が、行 i を選択します。直接的な配列アクセスです。算術演算も活性化関数もありません。単なるインデックスです。


Token & position embedding flow


学習可能な浮動小数点数

この表の各エントリは、最初は小さなランダムな浮動小数点数(通常、d_model の平方根でスケーリングされた正規分布からサンプリング)として始まります。バックプロパゲーションは、バッチ内でそのトークンIDが出現するたびに各行を更新します。学習後、類似したトークン(catdogpet)は似たベクトルになり、無関係なトークン(catTuesdayxylophone)はベクトル空間内で大きく離れた位置に配置されます。


ANDREA-120M トークン埋め込みコスト


数量
V8,449
d_model768
パラメータ6,488,832

トークン埋め込みテーブルだけで約650万のパラメータが存在し、これはANDREA-120M全体の約5.4%を占めます。各語彙スロットには768個の浮動小数点値が割り当てられます。

埋め込みテーブルのサイズ計算

2つの将来のバリエーションについて、トークン埋め込みのパラメータ数を計算してください。(a) ANDREA-480M: V = 16,641(16,384セグメントのトークナイザー+256バイト+1 BOS)、d_model = 1536。(b) ANDREA-12M: V = 4,353、d_model = 384。各々について V × d_model の計算を示してください。

内積は類似度を測る

ベクトルは矢印として

768次元のベクトルは人間には想像できない空間に存在しますが、同じ代数はどの次元でも成り立ちます。トランスフォーマーにとって重要な2つの演算があります:


大きさ(矢印の長さ):


||v|| = sqrt(v_0² + v_1² + ... + v_767²)

ドット積(2つの矢印の間の整列度):


u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767

ドット積が示すこと

任意の次元で成り立つ2つの事実:


- u · v = ||u|| × ||v|| × cos(theta), ここで theta は2つのベクトルの間の角度。

- 同じ方向を向くベクトルは大きな正の内積を与える。

- 反対方向を向くベクトルは大きな負の内積を与える。

- 直角のベクトルは内積がゼロになる。


内積 = 正規化されていない類似度。 catdog の学習済みトークン埋め込みは、バックプロパゲーションがそれらを近づけたため、高い内積を持つ(どちらもペット関連の文脈を予測する)。catTuesday は、異なる文脈を予測するため、ほぼ直交する。


なぜTransformerは注意を向けるのか

Activity 5 (grow_a_language_model_attention) は、ドット積からアテンションを構築します。クエリベクトルとキー・ベクトルのドット積がスコアを生み、それが次のトークンを予測する際にどの過去トークンが重要かを示します。埋め込みとドット積が、Transformer内部のすべての相互作用を担っています。

類似度を予測する

訓練後、ANDREA-120M の `believ`(トークン行 4287、仮想的)の埋め込みは `know`、`understand`、`learn` とほぼ整列します。正確な値を計算せずに、ドット積の大きさ順に並べてください:`believ · know`、`believ · stone`、`believ · understand`。各ペアについて、1 フレーズで根拠を述べてください。

ANDREAは学習済み位置埋め込みを使用する

問題

トークン埋め込みは、モデルにこの位置にどの単語が存在するかを伝えますが、その単語がどこに位置するかは伝えません。位置情報がない場合、Transformerは the cat sat on a matmat a on sat cat the を同一視します。同じトークン集合であり、順序の信号がありません。


Transformerの文献には3つの解決策が存在します:


正弦波(Vaswani 2017). 正弦波と余弦波に基づく固定の数学的公式。位置0は特定の768次元ベクトルを取得し、位置1は別のベクトルを取得します。学習されず、更新もされません。公式により任意の位置に一般化できます。


RoPE (Rotary Position Embedding). 位置に基づいてクエリとキーのベクトルを回転させる。LLaMAやQwenで使用。追加のパラメータは不要で、回転はアテンションに組み込まれている。


Learned. 形状が (T, d_model) の別個の埋め込みテーブル(T はコンテキスト長)。各行はトークン埋め込みと同様にバックプロパゲーションで学習される。


ANDREA's Choice: Learned

ANDREA は microGPT から learned-position の手法を引き継いでおり、microGPT は nanoGPT、nanoGPT は GPT-2 から引き継いでいる。理由:


- シンプルさ。 アテンションに特殊な数学は不要。位置テーブルはトークンテーブルと同じように見える。

- カスタム CUDA との互換性。 ANDREA の microgpt_cuda.cu エンジンは、2 つの埋め込みルックアップを同一に扱う。sin/cos カーネルは不要。

- 固定コンテキストに十分。 ANDREA は T を 1024 に制限。学習済みテーブルは固定長シーケンスに十分対応する。


ANDREA-120M 位置埋め込みコスト


数量
T (context)1,024
d_model768
Parameters786,432

位置埋め込み用の0.79Mパラメータ。トークン埋め込みと合わせると: 6.49M + 0.79M = 合計7.27Mの埋め込みパラメータ(ANDREA-120M)。


組み合わせ方

入力シーケンス内の各位置 t において:


x_t = token_embedding[token_id_t] + position_embedding[t]

2つの768次元ベクトルを要素ごとに加算した結果が x_t となり、最初の Transformer ブロックに流れ込みます。以降、モデルはこれらを分離せず、結合された信号を学習して利用します。

Learned Versus Sinusoidal

仮定の ANDREA モデルについて、2つの位置埋め込み戦略を比較してください。戦略 A: 学習済み、T = 1024。戦略 B: 正弦波、T は任意(任意の系列長で動作)。それぞれの利点を1つずつ挙げてください。その後、ANDREA がどちらを採用するか、また CUDA / エンジニアリング面での理由を1つ述べてください。

Where Embedding Parameters Live

A Full ANDREA-120M Embedding Layer


ComponentShapeParameters
トークン埋め込みテーブル8,449 × 7686,488,832
位置埋め込みテーブル1,024 × 768786,432
合計7,275,264

約730万パラメータ。ANDREA-120Mの総パラメータ数は約1億2千万。埋め込み層だけで全体の6%。残りの94%はトランスフォーマーブロック(アテンション+MLP、アクティビティ5〜7で解説)。


独立埋め込み vs 共有埋め込み

多くのTransformer設計(GPT-2を含む)では、トークン埋め込みと最終出力射影を結びつけます:同じ V × d_model 行列が入力と出力(語彙に対するlogits)の両方で使用されます。結びつけにより V × d_model パラメータが節約され、しばしば品質が向上します。


ANDREAは結びつけていない埋め込みを使用します:入力埋め込みと出力射影は別々の行列として訓練されます。Activity 7 (grow_a_language_model_transformer_block) で最終層を扱います。


これまでの順伝播

入力:トークンID [256, 1842, 7301, ...](1024個)。各IDは768次元ベクトルを参照します。各位置も768次元ベクトルを参照します。要素ごとに加算します。結果:トークン+位置ベクトルの (1024, 768) 行列 x です。x は transformer block 1 へ流れます。


Activity 5 (grow_a_language_model_attention) では、block 1 が実行する内容を扱います:因果マスクとsoftmaxを伴うスケール化ドット積注意。

埋め込み構造の予測

振り返り: ANDREA-120M は 8449 個のトークン埋め込みと 1024 個の位置埋め込みを持ち、どちらも同じ 768 次元の空間を共有しています。訓練後、(a) トークン埋め込み行列はどのような見た目になると思いますか(クラスタパターン?)、または (b) 位置埋め込み行列はどのような見た目になると思いますか(滑らかな勾配?)。どちらか一つを選び、1〜2 文で予測してください。答えは正解・不正解ではなく、推論が重要です。