位置エンコーディング

Positional Encoding

位置エンコーディングとは

位置エンコーディング(Positional Encoding)は、Transformerにおいて入力系列の順序情報をモデルに伝えるための手法です。自己注意機構は本質的に順序を考慮しない集合演算であるため、トークンの位置情報を明示的に追加する必要があります。これにより、モデルは「最初の単語」や「3番目のトークン」といった位置関係を理解できるようになります。

表:位置エンコーディングの要点まとめ
ひとことで言うとTransformerに「語の並び順」を教えるために、位置の情報を数値で足す仕組み。
なぜ必要か自己注意は全語を同時に見るため、そのままでは語順がわからないから。
注意点学習時より長い文では位置情報がずれる。RoPEなど改良方式が使われる。

正弦波による位置エンコーディング

オリジナルのTransformerでは、異なる周波数の正弦関数と余弦関数を用いて位置情報をエンコードします。偶数次元にはsin関数、奇数次元にはcos関数を適用し、位置ごとにユニークなベクトルを生成します。この方法の利点は、学習パラメータを必要とせず、訓練時に見なかった長さの系列にも外挿できる可能性がある点です。

図:語順が伝わるしくみ
1単語をベクトル化意味だけの表現
▶
2位置ベクトル作成1番目・2番目…を数値化
▶
3足し合わせる意味+位置の表現に
▶
4Transformerへ語順を踏まえて処理

学習可能な位置エンコーディング

BERTやGPTなどの多くのモデルでは、位置エンコーディングを学習可能なパラメータとして扱います。各位置に対応する埋め込みベクトルを学習することで、タスクに最適な位置表現を獲得します。ただし、この方法では最大系列長が固定されるという制約があります。RoPE(Rotary Position Embedding)やALiBiなど、より高度な位置エンコーディング手法も提案されています。

位置エンコーディングの重要性

位置エンコーディングの設計は、Transformerモデルの性能に直接影響します。適切な位置情報がなければ、モデルは語順を区別できず、「犬が猫を追いかける」と「猫が犬を追いかける」を同じ意味として処理してしまいます。最新の研究では、長い文脈を効率的に扱うための位置エンコーディングの改良が活発に進められています。