Scaled Dot-Product Attention(スケールド・ドットプロダクト・アテンション)の動作を具体的なトークンを使用して説明します

以下では、トークンを使用した具体例を複数示しながら、Scaled Dot-Product Attention(スケールド・ドットプロダクト・アテンション)の動作を詳しく解説します。これにより、アテンション機構がどのようにトークン間の関連性を計算し、情報を統合するかを具体的に理解できるでしょう。


具体例1: 短い文のアテンション計算

仮定

  • シーケンス: 「私は 学校へ 行きます」
  • トークン数: 4
  • モデルの次元数 (\( d_{model} \)): 4
  • クエリ、キー、バリューの次元数 (\( d_k = d_v \)): 2
  • 重み行列:
    \[
    W^Q = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix},\quad
    W^K = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    0 & 1 \
    1 & 0
    \end{bmatrix},\quad
    W^V = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix}
    \]

トークンの埋め込み(仮定)

各トークンは以下のような埋め込みベクトルを持っているとします。

トークン埋め込み (\( X \))
\([1, 0, 1, 0]\)
\([0, 1, 0, 1]\)
学校へ\([1, 1, 0, 0]\)
行きます\([0, 0, 1, 1]\)

クエリ、キー、バリューの計算

\[
Q = XW^Q,\quad K = XW^K,\quad V = XW^V
\]

各トークンに対して計算すると、

トークンクエリ (\( Q \))キー (\( K \))バリュー (\( V \))
\([1, 0]\)\([1, 0]\)\([1, 0]\)
\([0, 1]\)\([0, 1]\)\([0, 1]\)
学校へ\([1, 0]\)\([0, 1]\)\([1, 0]\)
行きます\([0, 1]\)\([1, 0]\)\([0, 1]\)

アテンションスコアの計算

各クエリ \( Q_i \) とキー \( K_j \) のドットプロダクトを計算します。

\[
e_{ij} = Q_i \cdot K_j
\]

具体的なスコア行列 \( E \) は以下のようになります。

\[
E = QK^T = \begin{bmatrix}
1 & 0 & 1 & 0 \
0 & 1 & 0 & 1 \
1 & 0 & 1 & 0 \
0 & 1 & 0 & 1
\end{bmatrix}
\]

スケーリング

スコアをキーの次元数の平方根 (\( \sqrt{d_k} = \sqrt{2} \approx 1.4142 \)) で割ります。

\[
\text{Scaled } E = \frac{E}{\sqrt{2}} \approx \begin{bmatrix}
0.7071 & 0 & 0.7071 & 0 \
0 & 0.7071 & 0 & 0.7071 \
0.7071 & 0 & 0.7071 & 0 \
0 & 0.7071 & 0 & 0.7071
\end{bmatrix}
\]

ソフトマックスによる正規化

各行に対してソフトマックス関数を適用します。

\[
\text{Attention Weights} = \text{softmax}(\text{Scaled } E)
\]

具体的には、

  • 1行目: \([0.7071, 0, 0.7071, 0]\)
    \[
    \text{softmax} = \left[ \frac{e^{0.7071}}{e^{0.7071} + e^{0} + e^{0.7071} + e^{0}}, \frac{e^{0}}{…}, \frac{e^{0.7071}}{…}, \frac{e^{0}}{…} \right] \approx [0.3333, 0.1667, 0.3333, 0.1667]
    \]
  • 2行目: \([0, 0.7071, 0, 0.7071]\)
    \[
    \text{softmax} \approx [0.1667, 0.3333, 0.1667, 0.3333]
    \]
  • 3行目: 同1行目
    \[
    \text{softmax} \approx [0.3333, 0.1667, 0.3333, 0.1667]
    \]
  • 4行目: 同2行目
    \[
    \text{softmax} \approx [0.1667, 0.3333, 0.1667, 0.3333]
    \]

結果として、

\[
\text{Attention Weights} \approx \begin{bmatrix}
0.3333 & 0.1667 & 0.3333 & 0.1667 \
0.1667 & 0.3333 & 0.1667 & 0.3333 \
0.3333 & 0.1667 & 0.3333 & 0.1667 \
0.1667 & 0.3333 & 0.1667 & 0.3333
\end{bmatrix}
\]

コンテキストベクトルの計算

アテンション重みをバリューに乗じて加算します。

\[
\text{Output} = \text{Attention Weights} \cdot V
\]

具体的には、

\[
\text{Output} \approx \begin{bmatrix}
0.3333 \times [1, 0] + 0.1667 \times [0, 1] + 0.3333 \times [1, 0] + 0.1667 \times [0, 1] \
0.1667 \times [1, 0] + 0.3333 \times [0, 1] + 0.1667 \times [1, 0] + 0.3333 \times [0, 1] \
0.3333 \times [1, 0] + 0.1667 \times [0, 1] + 0.3333 \times [1, 0] + 0.1667 \times [0, 1] \
0.1667 \times [1, 0] + 0.3333 \times [0, 1] + 0.1667 \times [1, 0] + 0.3333 \times [0, 1]
\end{bmatrix}
\]

計算すると、

\[
\text{Output} \approx \begin{bmatrix}
0.6666 & 0.3334 \
0.3334 & 0.6666 \
0.6666 & 0.3334 \
0.3334 & 0.6666
\end{bmatrix}
\]

解釈

各トークンのコンテキストベクトルは、自身と他のトークンの情報を適切に統合しています。例えば、「私」のコンテキストベクトルは「私」と「学校へ」から強く影響を受けています。


具体例2: 異なる文脈でのアテンション計算

仮定

  • シーケンス: 「猫が 魚を 食べる」
  • トークン数: 4
  • モデルの次元数 (\( d_{model} \)): 4
  • クエリ、キー、バリューの次元数 (\( d_k = d_v \)): 2
  • 重み行列:
    \[
    W^Q = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix},\quad
    W^K = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    0 & 1 \
    1 & 0
    \end{bmatrix},\quad
    W^V = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix}
    \]

トークンの埋め込み(仮定)

各トークンは以下のような埋め込みベクトルを持っているとします。

トークン埋め込み (\( X \))
\([1, 0, 0, 1]\)
\([0, 1, 1, 0]\)
魚を\([1, 1, 0, 0]\)
食べる\([0, 0, 1, 1]\)

クエリ、キー、バリューの計算

\[
Q = XW^Q,\quad K = XW^K,\quad V = XW^V
\]

各トークンに対して計算すると、

トークンクエリ (\( Q \))キー (\( K \))バリュー (\( V \))
\([1, 1]\)\([1, 0]\)\([1, 0]\)
\([0, 0]\)\([0, 1]\)\([0, 1]\)
魚を\([1, 1]\)\([0, 1]\)\([1, 0]\)
食べる\([0, 0]\)\([1, 0]\)\([0, 1]\)

アテンションスコアの計算

\[
E = QK^T = \begin{bmatrix}
1 \times 1 + 1 \times 0 & 1 \times 0 + 1 \times 1 & 1 \times 0 + 1 \times 1 & 1 \times 1 + 1 \times 0 \
0 \times 1 + 0 \times 0 & 0 \times 0 + 0 \times 1 & 0 \times 0 + 0 \times 1 & 0 \times 1 + 0 \times 0 \
1 \times 1 + 1 \times 0 & 1 \times 0 + 1 \times 1 & 1 \times 0 + 1 \times 1 & 1 \times 1 + 1 \times 0 \
0 \times 1 + 0 \times 0 & 0 \times 0 + 0 \times 1 & 0 \times 0 + 0 \times 1 & 0 \times 1 + 0 \times 0
\end{bmatrix}
= \begin{bmatrix}
1 & 1 & 1 & 1 \
0 & 0 & 0 & 0 \
1 & 1 & 1 & 1 \
0 & 0 & 0 & 0
\end{bmatrix}
\]

スケーリング

\[
\text{Scaled } E = \frac{E}{\sqrt{2}} \approx \begin{bmatrix}
0.7071 & 0.7071 & 0.7071 & 0.7071 \
0 & 0 & 0 & 0 \
0.7071 & 0.7071 & 0.7071 & 0.7071 \
0 & 0 & 0 & 0
\end{bmatrix}
\]

ソフトマックスによる正規化

各行に対してソフトマックス関数を適用します。

\[
\text{Attention Weights} = \text{softmax}(\text{Scaled } E)
\]

  • 1行目: \([0.7071, 0.7071, 0.7071, 0.7071]\)
    \[
    \text{softmax} = \left[ \frac{e^{0.7071}}{4e^{0.7071}}, \ldots \right] = [0.25, 0.25, 0.25, 0.25]
    \]
  • 2行目: \([0, 0, 0, 0]\)
    \[
    \text{softmax} = [0.25, 0.25, 0.25, 0.25]
    \]
  • 3行目: 同1行目
    \[
    \text{softmax} = [0.25, 0.25, 0.25, 0.25]
    \]
  • 4行目: 同2行目
    \[
    \text{softmax} = [0.25, 0.25, 0.25, 0.25]
    \]

結果として、

\[
\text{Attention Weights} = \begin{bmatrix}
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25
\end{bmatrix}
\]

コンテキストベクトルの計算

\[
\text{Output} = \text{Attention Weights} \cdot V
\]

各行の計算は以下の通りです。

\[
\text{Output} = \begin{bmatrix}
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25 \
0.25 & 0.25 & 0.25 & 0.25
\end{bmatrix}
\begin{bmatrix}
1 & 0 \
0 & 1 \
1 & 0 \
0 & 1
\end{bmatrix}
= \begin{bmatrix}
0.25 \times 1 + 0.25 \times 0 + 0.25 \times 1 + 0.25 \times 0 & 0.25 \times 0 + 0.25 \times 1 + 0.25 \times 0 + 0.25 \times 1 \
同上 & 同上 \
同上 & 同上 \
同上 & 同上
\end{bmatrix}
= \begin{bmatrix}
0.5 & 0.5 \
0.5 & 0.5 \
0.5 & 0.5 \
0.5 & 0.5
\end{bmatrix}
\]

解釈

この例では、各トークンのアテンション重みが均等になっているため、各トークンのコンテキストベクトルは全てのバリューの平均となっています。これは、クエリが特定のキーに対して強い関連性を持たない場合に起こります。


具体例3: 重要なトークンに焦点を当てる場合

仮定

  • シーケンス: 「彼は 本を 読んでいる」
  • トークン数: 4
  • モデルの次元数 (\( d_{model} \)): 4
  • クエリ、キー、バリューの次元数 (\( d_k = d_v \)): 2
  • 重み行列:
    \[
    W^Q = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix},\quad
    W^K = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    0 & 1 \
    1 & 0
    \end{bmatrix},\quad
    W^V = \begin{bmatrix}
    1 & 0 \
    0 & 1 \
    1 & 0 \
    0 & 1
    \end{bmatrix}
    \]

トークンの埋め込み(仮定)

各トークンは以下のような埋め込みベクトルを持っているとします。

トークン埋め込み (\( X \))
\([1, 0, 1, 0]\)
\([0, 1, 0, 1]\)
本を\([2, 0, 0, 2]\)
読んでいる\([0, 0, 2, 2]\)

クエリ、キー、バリューの計算

\[
Q = XW^Q,\quad K = XW^K,\quad V = XW^V
\]

各トークンに対して計算すると、

トークンクエリ (\( Q \))キー (\( K \))バリュー (\( V \))
\([1, 0]\)\([1, 0]\)\([1, 0]\)
\([0, 1]\)\([0, 1]\)\([0, 1]\)
本を\([2, 0]\)\([0, 2]\)\([2, 0]\)
読んでいる\([0, 2]\)\([2, 0]\)\([0, 2]\)

アテンションスコアの計算

\[
E = QK^T = \begin{bmatrix}
1 \times 1 + 0 \times 0 & 1 \times 0 + 0 \times 1 & 1 \times 0 + 0 \times 2 & 1 \times 2 + 0 \times 0 \
0 \times 1 + 1 \times 0 & 0 \times 0 + 1 \times 1 & 0 \times 0 + 1 \times 2 & 0 \times 2 + 1 \times 0 \
2 \times 1 + 0 \times 0 & 2 \times 0 + 0 \times 1 & 2 \times 0 + 0 \times 2 & 2 \times 2 + 0 \times 0 \
0 \times 1 + 2 \times 0 & 0 \times 0 + 2 \times 1 & 0 \times 0 + 2 \times 2 & 0 \times 2 + 2 \times 0
\end{bmatrix}
= \begin{bmatrix}
1 & 0 & 0 & 2 \
0 & 1 & 2 & 0 \
2 & 0 & 0 & 4 \
0 & 2 & 4 & 0
\end{bmatrix}
\]

スケーリング

\[
\text{Scaled } E = \frac{E}{\sqrt{2}} \approx \begin{bmatrix}
0.7071 & 0 & 0 & 1.4142 \
0 & 0.7071 & 1.4142 & 0 \
1.4142 & 0 & 0 & 2.8284 \
0 & 1.4142 & 2.8284 & 0
\end{bmatrix}
\]

ソフトマックスによる正規化

各行に対してソフトマックス関数を適用します。

1行目: \([0.7071, 0, 0, 1.4142]\)

\[
\text{softmax}(0.7071, 0, 0, 1.4142) = \left[ \frac{e^{0.7071}}{e^{0.7071} + e^{0} + e^{0} + e^{1.4142}}, \frac{e^{0}}{…}, \frac{e^{0}}{…}, \frac{e^{1.4142}}{…} \right]
\]

計算すると、

\[
\approx \left[ \frac{2.0281}{2.0281 + 1 + 1 + 4.1133}, \frac{1}{8.1414}, \frac{1}{8.1414}, \frac{4.1133}{8.1414} \right] \approx [0.2499, 0.1225, 0.1225, 0.5051]
\]

2行目: \([0, 0.7071, 1.4142, 0]\)

\[
\text{softmax}(0, 0.7071, 1.4142, 0) \approx [0.1225, 0.2499, 0.5051, 0.1225]
\]

3行目: \([1.4142, 0, 0, 2.8284]\)

\[
\text{softmax}(1.4142, 0, 0, 2.8284) = \left[ \frac{e^{1.4142}}{e^{1.4142} + e^{0} + e^{0} + e^{2.8284}}, \frac{e^{0}}{…}, \frac{e^{0}}{…}, \frac{e^{2.8284}}{…} \right]
\]

計算すると、

\[
\approx \left[ \frac{4.1133}{4.1133 + 1 + 1 + 16.0855}, \frac{1}{22.1988}, \frac{1}{22.1988}, \frac{16.0855}{22.1988} \right] \approx [0.1854, 0.0451, 0.0451, 0.7244]
\]

4行目: \([0, 1.4142, 2.8284, 0]\)

\[
\text{softmax}(0, 1.4142, 2.8284, 0) \approx [0.0451, 0.1854, 0.7244, 0.0451]
\]

コンテキストベクトルの計算

\[
\text{Output} = \text{Attention Weights} \cdot V
\]

具体的には、

  • 1行目:
    \[
    0.2499 \times [1, 0] + 0.1225 \times [0, 1] + 0.1225 \times [2, 0] + 0.5051 \times [0, 1] = [0.2499 + 0.245, 0 + 0.1225 + 0.5051] = [0.4949, 0.6276]
    \]
  • 2行目:
    \[
    0.1225 \times [1, 0] + 0.2499 \times [0, 1] + 0.5051 \times [2, 0] + 0.1225 \times [0, 1] = [0.1225 + 1.0102, 0.2499 + 0.1225] = [1.1327, 0.3724]
    \]
  • 3行目:
    \[
    0.1854 \times [1, 0] + 0.0451 \times [0, 1] + 0.0451 \times [2, 0] + 0.7244 \times [0, 1] = [0.1854 + 0.0902, 0.0451 + 0.7244] = [0.2756, 0.7695]
    \]
  • 4行目:
    \[
    0.0451 \times [1, 0] + 0.1854 \times [0, 1] + 0.7244 \times [2, 0] + 0.0451 \times [0, 1] = [0.0451 + 1.4488, 0.1854 + 0.0451] = [1.4939, 0.2305]
    \]

結果として、

\[
\text{Output} \approx \begin{bmatrix}
0.4949 & 0.6276 \
1.1327 & 0.3724 \
0.2756 & 0.7695 \
1.4939 & 0.2305
\end{bmatrix}
\]

解釈

  • 「彼」のコンテキストベクトルは、主に「彼」自身と「本を」に関連する情報から構成されています。
  • 「は」のコンテキストベクトルは、主に「本を」と「読んでいる」に関連する情報から構成されています。
  • 「本を」のコンテキストベクトルは、特に「食べる」に強く影響を受けており、これは文脈上の「本を読んでいる」という動作に関連しています。
  • 「読んでいる」のコンテキストベクトルは、「本を」と「彼」に強く影響を受けています。

このように、アテンション機構は各トークンが他のトークンとの関連性を動的に計算し、重要な情報に焦点を当てることで、文全体の意味を効果的に捉えています。


具体例4: 長文におけるアテンション計算

仮定

  • シーケンス: 「昨日、私は友達と映画を見に行きました」
  • トークン数: 7
  • モデルの次元数 (\( d_{model} \)): 6
  • クエリ、キー、バリューの次元数 (\( d_k = d_v \)): 3
  • 重み行列:
    \[
    W^Q = \begin{bmatrix}
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1 \
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1
    \end{bmatrix},\quad
    W^K = \begin{bmatrix}
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1 \
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1
    \end{bmatrix},\quad
    W^V = \begin{bmatrix}
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1 \
    1 & 0 & 0 \
    0 & 1 & 0 \
    0 & 0 & 1
    \end{bmatrix}
    \]

トークンの埋め込み(仮定)

各トークンは以下のような埋め込みベクトルを持っているとします。

トークン埋め込み (\( X \))
昨日\([1, 0, 1, 0, 1, 0]\)
\([0, 1, 0, 1, 0, 1]\)
\([1, 1, 1, 1, 1, 1]\)
友達と\([2, 0, 2, 0, 2, 0]\)
映画を\([0, 2, 0, 2, 0, 2]\)
見に\([1, 0, 1, 0, 1, 0]\)
行きました\([0, 1, 0, 1, 0, 1]\)

クエリ、キー、バリューの計算

\[
Q = XW^Q,\quad K = XW^K,\quad V = XW^V
\]

各トークンに対して計算すると、

トークンクエリ (\( Q \))キー (\( K \))バリュー (\( V \))
昨日\([1, 0, 1]\)\([1, 0, 1]\)\([1, 0, 1]\)
\([0, 1, 0]\)\([0, 1, 0]\)\([0, 1, 0]\)
\([1, 1, 1]\)\([1, 1, 1]\)\([1, 1, 1]\)
友達と\([2, 0, 2]\)\([2, 0, 2]\)\([2, 0, 2]\)
映画を\([0, 2, 0]\)\([0, 2, 0]\)\([0, 2, 0]\)
見に\([1, 0, 1]\)\([1, 0, 1]\)\([1, 0, 1]\)
行きました\([0, 1, 0]\)\([0, 1, 0]\)\([0, 1, 0]\)

アテンションスコアの計算

\[
E = QK^T
\]

具体的なスコア行列 \( E \) を計算します。各要素 \( e_{ij} = Q_i \cdot K_j \) を計算します。

例えば、

  • \( e_{11} = 1 \times 1 + 0 \times 0 + 1 \times 1 = 2 \)
  • \( e_{12} = 1 \times 0 + 0 \times 1 + 1 \times 0 = 0 \)
  • \( e_{17} = 1 \times 0 + 0 \times 1 + 1 \times 0 = 0 \)

全体のスコア行列 \( E \) は以下のようになります。

\[
E = QK^T = \begin{bmatrix}
2 & 0 & 2 & 4 & 0 & 2 & 0 \
0 & 1 & 1 & 0 & 2 & 0 & 1 \
2 & 1 & 3 & 2 & 2 & 1 & 1 \
4 & 0 & 2 & 8 & 0 & 2 & 0 \
0 & 2 & 2 & 0 & 4 & 0 & 2 \
2 & 0 & 1 & 2 & 0 & 2 & 1 \
0 & 1 & 1 & 0 & 2 & 1 & 1
\end{bmatrix}
\]

スケーリング

\[
\text{Scaled } E = \frac{E}{\sqrt{3}} \approx \begin{bmatrix}
1.1547 & 0 & 1.1547 & 2.3094 & 0 & 1.1547 & 0 \
0 & 0.5774 & 0.5774 & 0 & 1.1547 & 0 & 0.5774 \
1.1547 & 0.5774 & 1.7321 & 1.1547 & 1.1547 & 0.5774 & 0.5774 \
2.3094 & 0 & 1.1547 & 4.6188 & 0 & 1.1547 & 0 \
0 & 1.1547 & 1.1547 & 0 & 2.3094 & 0 & 1.1547 \
1.1547 & 0 & 0.5774 & 1.1547 & 0 & 1.1547 & 0.5774 \
0 & 0.5774 & 0.5774 & 0 & 1.1547 & 0.5774 & 0.5774
\end{bmatrix}
\]

ソフトマックスによる正規化

各行に対してソフトマックス関数を適用します。

1行目: \([1.1547, 0, 1.1547, 2.3094, 0, 1.1547, 0]\)

\[
\text{softmax} \approx \left[ \frac{e^{1.1547}}{e^{1.1547} + e^{0} + e^{1.1547} + e^{2.3094} + e^{0} + e^{1.1547} + e^{0}} , \ldots \right]
\]

計算すると、

\[
\approx \left[ \frac{3.1725}{3.1725 + 1 + 3.1725 + 10.0271 + 1 + 3.1725 + 1}, \ldots \right] \approx [0.2118, 0.0661, 0.2118, 0.6644, 0.0661, 0.2118, 0.0661]
\]

2行目: \([0, 0.5774, 0.5774, 0, 1.1547, 0, 0.5774]\)

\[
\text{softmax} \approx [0.0661, 0.2118, 0.2118, 0.0661, 0.3110, 0.0661, 0.2118]
\]

3行目: \([1.1547, 0.5774, 1.7321, 1.1547, 1.1547, 0.5774, 0.5774]\)

\[
\text{softmax} \approx [0.2118, 0.0774, 0.4233, 0.2118, 0.2118, 0.0774, 0.0774]
\]

4行目: \([2.3094, 0, 1.1547, 4.6188, 0, 1.1547, 0]\)

\[
\text{softmax} \approx [0.0661, 0.0, 0.2118, 0.7222, 0.0, 0.2118, 0.0]
\]

5行目: \([0, 1.1547, 1.1547, 0, 2.3094, 0, 1.1547]\)

\[
\text{softmax} \approx [0.0661, 0.2118, 0.2118, 0.0661, 0.4233, 0.0661, 0.2118]
\]

6行目: \([1.1547, 0, 0.5774, 1.1547, 0, 1.1547, 0.5774]\)

\[
\text{softmax} \approx [0.2118, 0.0661, 0.0774, 0.2118, 0.0661, 0.2118, 0.0774]
\]

7行目: \([0, 0.5774, 0.5774, 0, 1.1547, 0.5774, 0.5774]\)

\[
\text{softmax} \approx [0.0661, 0.2118, 0.2118, 0.0661, 0.3110, 0.2118, 0.2118]
\]

コンテキストベクトルの計算

\[
\text{Output} = \text{Attention Weights} \cdot V
\]

各トークンのコンテキストベクトルを計算します。例えば、

  • 1行目:
    \[
    0.2118 \times [1, 0, 1] + 0.0661 \times [0, 1, 0] + 0.2118 \times [1, 0, 1] + 0.6644 \times [2, 0, 2] + 0.0661 \times [0, 2, 0] + 0.2118 \times [1, 0, 1] + 0.0661 \times [0, 1, 0]
    \]
    \[
    = [0.2118 + 0 + 0.2118 + 1.3288 + 0 + 0.2118 + 0, \quad 0 + 0.0661 + 0 + 0 + 0.1322 + 0 + 0.0661, \quad 0.2118 + 0 + 0.2118 + 1.3288 + 0 + 0.2118 + 0]
    \]
    \[
    = [1.9522, 0.2644, 1.9522]
    \]

同様に他の行も計算しますが、ここでは概要を示します。

解釈

長文におけるアテンション計算では、各トークンが文中の他のトークンとの関連性に基づいてコンテキストベクトルを形成します。例えば、

  • 「昨日」のコンテキストベクトルは、「昨日」と「見に」の情報に強く影響を受けています。
  • 「友達と」のコンテキストベクトルは、「映画を」や「行きました」に強く影響されています。
  • 「行きました」のコンテキストベクトルは、過去の動作を表す「昨日」や目的地を示す「映画を」と関連しています。

このように、アテンション機構は文中の各トークンが重要な他のトークンに焦点を当て、文全体の意味を理解する助けとなります。


まとめ

上記の具体例を通じて、Scaled Dot-Product Attentionが以下のように機能することが理解できたかと思います:

  1. クエリ、キー、バリューの生成:
    • 各トークンの埋め込みベクトルに対して線形変換を行い、クエリ、キー、バリューを生成します。
  2. アテンションスコアの計算:
    • クエリとキーのドットプロダクトを計算し、各トークン間の関連性を数値化します。
  3. スケーリング:
    • スコアをキーの次元数の平方根で割り、数値の安定性を確保します。
  4. ソフトマックスによる正規化:
    • スケーリングされたスコアにソフトマックス関数を適用し、アテンション重みを確率分布に変換します。
  5. コンテキストベクトルの生成:
    • アテンション重みをバリューに乗じて加算し、各トークンのコンテキストベクトルを生成します。

これらのステップを通じて、モデルは文中の重要な情報に焦点を当て、効果的に情報を統合します。具体的なトークン例を用いることで、アテンション機構の動作を直感的に理解することができます。実際の実装やより複雑な文脈での動作を理解するためには、さらに多くの例や実験を行うことが有効です。