Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ サイン波位置エンコーディングの生成方法 | トランスフォーマーの基礎理解
自然言語処理のためのトランスフォーマー

bookサイン波位置エンコーディングの生成方法

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

サイン波的な位置エンコーディングは、リカレンスやシーケンス認識層を使用しなくても、トランスフォーマーモデルが単語の順序や位置を認識できるようにする手法。各位置は、埋め込み次元全体にわたるサインとコサイン値の独自パターンで表現される。

以下のコードを見てみましょう。

1234567891011121314151617
import numpy as np def get_sinusoidal_positional_encoding(seq_length, embed_dim): position = np.arange(seq_length)[:, np.newaxis] div_term = np.exp( np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim) ) pe = np.zeros((seq_length, embed_dim)) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe # Example usage: seq_length = 6 embed_dim = 8 encoding = get_sinusoidal_positional_encoding(seq_length, embed_dim) print(encoding)
copy

サイン波的な位置エンコーディングを生成するコードは、以下のステップで理解できる:

1. position配列の作成

position = np.arange(seq_length)[:, np.newaxis]
  • 入力シーケンス内の各位置を表す列ベクトルを作成。各行は0から始まる位置を示す。
  • シーケンスが6トークンの場合、この配列は列として[0, 1, 2, 3, 4, 5]となる。

2. 周波数スケーリング項の計算

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • 偶数の埋め込み次元ごとにスケーリング係数を計算。
  • 各次元が異なる周波数を持つようにし、短距離・長距離の位置パターンの両方を捉えることができる。
  • 10000.0を使うことで周波数が広がり、位置の変化が各次元に異なる影響を与える。

3. 位置エンコーディング行列の初期化

pe = np.zeros((seq_length, embed_dim))
  • 各位置ごとに1行、各埋め込み次元ごとに1列のゼロ行列を作成。

4. サイン・コサイン値で行列を埋める

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • 偶数列にはposition * div_termのサイン値を格納。
  • 奇数列にはposition * div_termのコサイン値を格納。
  • この交互パターンにより、各位置が独自の値の組み合わせとなり、位置や次元ごとに滑らかにパターンが変化する。

5. 位置エンコーディングの返却

return pe
  • 結果の行列は、シーケンス内の各位置に対して固有のエンコーディングを提供。
  • このエンコーディングを単語埋め込みに加えることで、トランスフォーマーモデルがトークンの順序を認識できるようになる。
question mark

次のうち、サイン波状位置エンコーディングに関する正しい記述はどれですか?

すべての正しい答えを選択

すべて明確でしたか?

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

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

セクション 1.  7

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 1.  7
some-alt