以下では、トークンを使用した具体例を複数示しながら、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が以下のように機能することが理解できたかと思います:
- クエリ、キー、バリューの生成:
- 各トークンの埋め込みベクトルに対して線形変換を行い、クエリ、キー、バリューを生成します。
- アテンションスコアの計算:
- クエリとキーのドットプロダクトを計算し、各トークン間の関連性を数値化します。
- スケーリング:
- スコアをキーの次元数の平方根で割り、数値の安定性を確保します。
- ソフトマックスによる正規化:
- スケーリングされたスコアにソフトマックス関数を適用し、アテンション重みを確率分布に変換します。
- コンテキストベクトルの生成:
- アテンション重みをバリューに乗じて加算し、各トークンのコンテキストベクトルを生成します。
これらのステップを通じて、モデルは文中の重要な情報に焦点を当て、効果的に情報を統合します。具体的なトークン例を用いることで、アテンション機構の動作を直感的に理解することができます。実際の実装やより複雑な文脈での動作を理解するためには、さらに多くの例や実験を行うことが有効です。