ポジショナルエンコーディング ぽじしょなるえんこーでぃんぐ
Positional EncodingTransformer位置情報順序埋め込み系列
ポジショナルエンコーディングについて教えて
簡単に言うとこんな感じ!
Transformerは単語を「並行して」読むから、どの順番に並んでいるかを自分では分からないんだ。だから各単語に「あなたは3番目にある単語ですよ」という番号タグをつける仕組みがポジショナルエンコーディングだよ!
ポジショナルエンコーディングとは
ポジショナルエンコーディング(Positional Encoding) とは、Transformerに文章中の単語の順序情報を与えるための手法です。RNNなど従来のモデルは単語を一つずつ順番に処理するため自然に順序を学習しますが、Transformerは全単語を並列処理するため、位置情報を明示的に付加する必要があります。
具体的には、各トークンの埋め込みベクトルに位置に対応する数値ベクトルを加算することで、モデルが「この単語は文頭から何番目か」を認識できるようにします。位置ベクトルの計算にはサインとコサインを使う三角関数ベースの方法が元論文で提案されました。
主な種類と比較
| 手法 | 特徴 | 採用例 |
|---|---|---|
| 三角関数(絶対位置) | サイン/コサイン波で位置を表現、固定値 | 元のTransformer |
| 学習可能な絶対位置 | 位置ごとのベクトルをデータから学習 | BERT、GPT-2 |
| RoPE | 相対位置を回転で表現、長文に強い | LLaMA、GPT-NeoX |
| ALiBi | アテンションスコアに距離ペナルティ加算 | MPT、BLOOM |
歴史と背景
- 2017年:「Attention Is All You Need」でサイン/コサインによる固定ポジショナルエンコーディングを提案
- 2018年:BERTが学習可能な位置埋め込みを採用し広まる
- 2021年以降:長文対応のためRoPEやALiBiなど相対位置手法が台頭
- 現在:長コンテキストモデルではRoPEがデファクトスタンダードに
三角関数エンコーディングのイメージ
位置 pos、次元 i のエンコーディング値:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
例)「東京は日本の首都です」
東京 → 埋め込み + sin/cosベクトル(位置0)
は → 埋め込み + sin/cosベクトル(位置1)
日本 → 埋め込み + sin/cosベクトル(位置2)
関連用語
- マルチヘッドアテンション — ポジショナルエンコーディングと組み合わさるアテンション機構
- RoPE(Rotary Positional Embedding) — 現在主流の相対位置エンコーディング手法
- ALiBi — アテンションに直接距離ペナルティを加える手法
- コンテキスト長 — 位置エンコーディングの最大長がコンテキスト長を決める
- 埋め込み表現 — 位置ベクトルが加算されるトークン埋め込み