位置情報の埋め込み(Positional Embedding)とトークン埋め込み(Token Embedding)がどのように加算されて、どのように変化するのかについて、数式とともに具体的に示します。
Transformerモデルでは、位置情報をトークンベクトルに加算することで順序情報を導入しています。この部分を詳しく掘り下げて、具体的な例を使って説明します。
1. トークン埋め込みの生成
まず、入力の各トークンがトークン埋め込みベクトルに変換されます。例えば、以下のように3つの単語(”The”, “cat”, “sat”)が与えられたとします。
例:
- トークン: “The”, “cat”, “sat”
- トークンID: 101, 102, 103
- トークン埋め込み行列 ( E ) を使用して、各トークンIDを埋め込みベクトルに変換します。
トークン埋め込みは通常固定次元、例えば次元数が4であるとします。
- “The” の埋め込みベクトル:
\[
E_{101} = [0.2, 0.7, 0.5, 0.1]
\] - “cat” の埋め込みベクトル:
\[
E_{102} = [0.4, 0.1, 0.8, 0.5]
\] - “sat” の埋め込みベクトル:
\[
E_{103} = [0.6, 0.3, 0.2, 0.9]
\]
2. 位置埋め込みの生成
次に、位置埋め込み(Positional Embedding)を使って各トークンに順序情報を加えます。
位置埋め込みは、文中でのトークンの位置に基づいて生成されるベクトルです。位置埋め込みベクトルはトークン埋め込みと同じ次元数である必要があります(この例では次元数が4)。
位置埋め込みベクトルを以下のように定義します(ここではシンプルな仮定で数値を付けます)。
- 位置0(”The”)の位置埋め込みベクトル:
\[
P_0 = [0.1, 0.0, 0.1, 0.2]
\] - 位置1(”cat”)の位置埋め込みベクトル:
\[
P_1 = [0.2, 0.1, 0.0, 0.1]
\] - 位置2(”sat”)の位置埋め込みベクトル:
\[
P_2 = [0.3, 0.1, 0.1, 0.0]
\]
3. トークン埋め込みと位置埋め込みの加算
トークン埋め込みベクトルに対して位置埋め込みベクトルを加算します。これにより、各トークンのベクトルに位置情報が付加されます。
“The” の最終埋め込みベクトル
\[
E_{101} + P_0 = [0.2 + 0.1, 0.7 + 0.0, 0.5 + 0.1, 0.1 + 0.2] = [0.3, 0.7, 0.6, 0.3]
\]
“cat” の最終埋め込みベクトル
\[
E_{102} + P_1 = [0.4 + 0.2, 0.1 + 0.1, 0.8 + 0.0, 0.5 + 0.1] = [0.6, 0.2, 0.8, 0.6]
\]
“sat” の最終埋め込みベクトル
\[
E_{103} + P_2 = [0.6 + 0.3, 0.3 + 0.1, 0.2 + 0.1, 0.9 + 0.0] = [0.9, 0.4, 0.3, 0.9]
\]
4. 前後の変化
元々のトークン埋め込みベクトルと位置埋め込みベクトルを加算することで、最終的に得られるベクトルには両方の情報が含まれるようになります。
- トークン埋め込みは、トークン自体の意味(言語学的情報)を保持しています。
- 位置埋め込みは、文中でのトークンの位置情報を表しています。
例えば、トークン “cat” の埋め込みベクトル ( E_{102} = [0.4, 0.1, 0.8, 0.5] ) に対して位置情報 ( P_1 = [0.2, 0.1, 0.0, 0.1] ) を加えると、最終的に得られる埋め込みベクトルはトークン自身の意味と位置に基づいた情報の両方を持ちます。この位置情報を加えることにより、Transformerモデルは各トークンの順序を考慮しながらコンテキストを理解することが可能になります。
したがって、埋め込みベクトルの次元数はトークン埋め込みの次元数(例えば、4次元)と同じで、位置情報を加算しても次元数そのものは変化しません。しかし、各次元の数値が異なるため、文中のトークンの順序に関する情報が付加された形になります。このようにして、トークンの意味情報と位置情報が統合されて最終的な入力ベクトルが生成され、Transformerのエンコーダに渡されます。