Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 自己注意機構の計算方法 | トランスフォーマーの基礎理解
自然言語処理のためのトランスフォーマー

book自己注意機構の計算方法

メニューを表示するにはスワイプしてください

トランスフォーマーにおける自己注意機構(Self-Attention)の計算方法を理解するには、正確な数学的操作の手順を追う必要があります。自己注意機構は、文中の各単語が出力表現を生成する際に他の単語に注目できるようにする仕組みです。これは、すべての入力ベクトルの加重和を計算することで実現され、その重みは現在処理中の単語に対する各単語の重要度を反映します。

短い文が行ごとに単語埋め込みとして表現された行列を持っていると仮定します。まず、これらの埋め込みを学習済みの重み行列を用いてクエリ、キー、バリューに射影します。自己注意機構の中心は、アテンションスコアの計算と、これらのスコアに基づくバリューベクトルの集約です。

Note
定義

クエリ、キー、バリューは入力の異なる表現であり、それぞれアテンション計算において特定の役割を担います。

セルフアテンションの計算

セルフアテンションは、シーケンス内の各単語に対して明確な数学的ステップに分解可能。

入力をクエリ、キー、バリューに射影: 入力行列を学習済みの重み行列で射影し、クエリ、キー、バリューを取得。

123456789101112131415161718192021222324252627282930313233
import numpy as np # Example input: 3 words, embedding size 4 X = np.array([ [1.0, 0.0, 1.0, 0.0], # word 1 [0.0, 2.0, 0.0, 2.0], # word 2 [1.0, 1.0, 1.0, 1.0] # word 3 ]) # Weight matrices for queries, keys, values (embedding size 4 -> 4) W_q = np.array([ [0.1, 0.2, 0.0, 0.0], [0.0, 0.1, 0.3, 0.0], [0.1, 0.0, 0.0, 0.2], [0.0, 0.0, 0.2, 0.3] ]) W_k = np.array([ [0.2, 0.0, 0.1, 0.0], [0.0, 0.1, 0.0, 0.3], [0.1, 0.0, 0.2, 0.0], [0.0, 0.2, 0.0, 0.1] ]) W_v = np.array([ [0.0, 0.1, 0.0, 0.2], [0.2, 0.0, 0.2, 0.0], [0.0, 0.3, 0.1, 0.0], [0.1, 0.0, 0.0, 0.3] ]) # Compute queries, keys, values Q = X @ W_q K = X @ W_k V = X @ W_v
copy

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

  • 各クエリとすべてのキーとの類似度を計算;
  • これらのスコアは、各単語が他の単語にどれだけ注目すべきかを示す。
1
scores = Q @ K.T
copy

スコアのスケーリング: アテンションスコアをキーの次元数の平方根で割る処理。スケーリングにより、学習時の勾配の安定化を促進。

12
d_k = Q.shape[1] scaled_scores = scores / np.sqrt(d_k)
copy

ソフトマックス関数の適用: スケーリングされたスコアをソフトマックス関数で変換し、アテンション重みを算出。これにより、各単語ごとの重みが正となり、合計が1になることが保証される。

123456
# Softmax to get attention weights def softmax(x): e_x = np.exp(x - np.max(x, axis=-1, keepdims=True)) return e_x / np.sum(e_x, axis=-1, keepdims=True) attention_weights = softmax(scaled_scores)
copy

値の重み付き和の計算: アテンション重みを用いて値ベクトルの重み付き和を計算。これにより、各単語に対する最終的な自己注意出力が得られる。

12345
# Weighted sum of values output = attention_weights @ V print("Attention weights:\n", attention_weights) print("Self-attention output:\n", output)
copy

これらのステップは、トランスフォーマーモデルにおけるセルフアテンションの本質的な計算処理を示すものです。

1. 1つの入力単語に対するセルフアテンションの正しい演算順序はどれですか?

2. なぜアテンションスコアをキー次元の平方根でスケーリングするのか?

3. アテンションスコアの計算に使用されるベクトルはどれか

question mark

1つの入力単語に対するセルフアテンションの正しい演算順序はどれですか?

正しい答えを選んでください

question mark

なぜアテンションスコアをキー次元の平方根でスケーリングするのか?

正しい答えを選んでください

question mark

アテンションスコアの計算に使用されるベクトルはどれか

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  5
some-alt