【ITニュース解説】Positional Encoding - Sense of direction for Transformers
2025年09月28日に「Dev.to」が公開したITニュース「Positional Encoding - Sense of direction for Transformers」について初心者にもわかりやすく解説しています。
ITニュース概要
トランスフォーマーは、単語の並び順を直接認識できない。位置エンコーディングは、単語の位置情報を数値として各単語に付与し、その問題を解決する。これにより、トランスフォーマーは並列処理の利点を保ちながら、文の順序を考慮した正確な処理が可能になる。
ITニュース解説
現在のAI技術において「Transformer(トランスフォーマー)」というモデルは非常に大きな注目を集めている。このTransformerの中核をなす技術は「Attention(注意機構)」と呼ばれるものだ。Attentionは、文章中の単語同士がどれだけ関連し合っているかを計算し、その関連性に基づいて情報を処理する。例えば、「彼はりんごを食べた」という文で「彼」が「りんご」を食べるという行動の主体であるといった関係性を捉えることができる。
しかし、Attentionだけでは文章の意味を完全に理解するには不十分な場合がある。その理由は、Transformerが単語の順序を本質的に認識できない構造をしているためだ。従来の「RNN(リカレントニューラルネットワーク)」のようなモデルは、単語を一つずつ順番に処理していく。そのため、前の単語の情報を「記憶」として次の単語に引き継ぐことで、自然と単語の順序、つまり文の構造を把握していた。
これに対しTransformerは、全ての単語を同時に、つまり「並列」に処理することで、RNNよりもはるかに高速かつ効率的な処理を可能にした。この並列処理能力こそがTransformerの最大の強みの一つだ。しかし、この並列処理の代償として、単語の順番という重要な情報が失われてしまう。「A cat ran behind a mouse」(猫がネズミの後ろを走った)という文と「A mouse ran behind a cat」(ネズミが猫の後ろを走った)という文は、使われている単語自体は同じだ。Transformerが単語の順序を知らなければ、これら二つの文を区別できず、どちらも単なる単語の集まり(「バッグオブワーズ」)として扱ってしまう。しかし、これら二つの文の意味は全く異なる。このような「順序の盲点」を解決するために導入されたのが、「位置エンコーディング(Positional Encoding)」という技術である。位置エンコーディングは、Transformerの並列処理の利点を損なうことなく、単語の順序情報をモデルに教え込む役割を果たす。
では、どのようにして単語の位置情報を数値として表現し、モデルに伝えるのだろうか。いくつかのアイデアが試された。
最初の単純なアイデアは、各単語にその順序をそのまま割り当てる方法だ。例えば、最初の単語には1、二番目の単語には2、といった具合に整数を割り振る。しかし、この方法には問題があった。文が長くなると数値が非常に大きくなってしまい、ニューラルネットワークの学習は通常、小さく正規化された値で最も安定して行われるため、大きすぎる値は学習を不安定にさせる原因となる。また、訓練時とテスト時で単語の数が大きく異なる場合、モデルが汎化しにくくなるという課題もあった。
次に考えられたのは、この整数値を文の長さに応じて正規化する方法だ。例えば、4単語の文であれば、各単語のインデックスを4で割って、[0.25, 0.5, 0.75, 1.0]のような値にする。これにより、値の範囲は小さく保たれる。しかし、この方法にも欠点があった。例えば0.5という値は、4単語の文では2番目の位置を意味するが、20単語の文では10番目の位置を意味することになる。このように、同じ位置を示す値が文の長さによって異なる意味を持つため、モデルが一貫して位置情報を解釈することができないという致命的な問題が生じた。位置情報は、文の長さに依存しない「静的」なものである必要があるのだ。
さらに、バイナリ(2進数)表現を用いるアイデアも浮上した。各位置インデックスを2進数で表現し、それをベクトルとして扱う。例えば、位置2は[0, 0, 1, 0]、位置3は[0, 0, 1, 1]のようになる。この方法であれば、値は0か1に限定され、文の長さに依存しない静的な情報となる。しかし、この表現は「ギザギザ」しているという問題があった。例えば、位置7(0111)から位置8(1000)にわずか1つ移動するだけで、ベクトルの全てのビットが反転してしまう。これは、隣接する位置間でもベクトルの変化が非常に大きく、モデルが位置の近さや連続的な距離感を捉えることが難しいという課題を生んだ。モデルは滑らかな変化を好む傾向がある。
これらの問題を解決するために、滑らかに変化し、かつ範囲が[-1, 1]に収まる関数として「正弦波(sin関数)」が注目された。正弦波は、周期的に0から1へ、そして-1へと変化する滑らかな曲線を描く。これにより、これまでのアプローチで抱えていた、値の大きすぎる問題やギザギザな変化の問題は解決できるかに見えた。
しかし、正弦波だけでは新たな問題が生じた。一つは「周期性の問題」だ。正弦波はその性質上、一定の間隔で同じ値を繰り返す。例えば、sin(1)とsin(7)の値は非常に近い。これにより、モデルはシーケンス内で大きく離れた位置であっても、同じような値を見てしまい、それらを区別することが難しくなる。
もう一つは「位相の問題」である。例えば、sin(30°)とsin(150°)はどちらもおおよそ0.5という同じ値を返す。モデルが0.5という値だけを受け取っても、それが30°から来たのか150°から来たのかを区別できない。つまり、正弦波単独では各位置を一意に識別できないのだ。2次元空間の点をY座標(正弦波)だけで特定できないのと同じである。
そして、最も重要な問題の一つが「線形変換」に関するものだ。TransformerのAttention層では、入力された単語の特徴量ベクトルが線形変換(行列の掛け算)によって「Query(質問)」「Key(鍵)」「Value(値)」という異なる役割のベクトルに変換される。もし位置エンコーディングがこの線形変換と相性が良ければ、モデルは相対的な位置関係を効率的に学習できる。例えば、「I am going to eat.」という文で、「going」から「verb」(動詞)までの相対的な位置関係(例えば3つ右に移動)が、別の文の「to」から別の「verb」までの関係と「同じ種類の移動」として扱えると、モデルは汎用的な文法構造を学習しやすくなる。
しかし、正弦波単独の場合、この「線形変換によって相対的な位置関係をうまく表現する」という性質が成り立たない。正弦波の値の変化量は、波のどの位置にいるかによって異なる。波のピーク付近では少し位置を動かしても値はほとんど変化しないが、波の中央付近では少し位置を動かすだけで値が大きく変化する。つまり、同じ「k」ステップ移動しても、開始位置によって正弦波の変化量が一定ではないのだ。これにより、モデルは相対的な距離やシフトを一貫した方法で学習することが難しくなる。
これらの問題を解決するために、オリジナルのTransformer論文では「正弦波(sin関数)」と「余弦波(cos関数)」のペアを組み合わせて位置エンコーディングを生成する方法を採用した。各位置は、[sin(f*pos), cos(f*pos)] のような2つの値のペアとして表現される。
このsinとcosの組み合わせは、まず位相の問題を解決する。先ほどの例で、sin(30°)とsin(150°)はどちらも約0.5だが、cos(30°)は約0.866、cos(150°)は約-0.866と異なる値になる。これにより、30°は(0.5, 0.866)、150°は(0.5, -0.866)という、2次元空間上の異なる点として明確に識別できる。これで、各位置を一意に特定することが可能になる。
周期性の問題に対しては、直接的な解決策ではないものの、Transformerのモデル次元数(d_model)にわたって、非常に多様な周波数を持つsin/cosペアを生成することで対応している。10,000という大きな値は、この周波数を対数的に分散させるために用いられる。これにより、低い次元では速く振動し、高い次元ではゆっくりと振動する多数の周期波が生成され、全体として近い位置で全く同じエンコーディングベクトルが繰り返される可能性が極めて低くなる。
そして、線形変換のプロパティもこの組み合わせによってうまく機能する。[sin(f*pos), cos(f*pos)]というペアは、角度がf*posである円上の点として解釈できる。この円上の点をk位置だけ移動させることは、角度をf*kだけ増やすことであり、これは2次元空間における回転に他ならない。重要なのは、この回転は開始位置に依存せず、常に固定の2x2行列で表現できる点だ。つまり、同じオフセットkの移動は、常に同じ線形変換(回転)によって表現される。これにより、モデルは「特定のオフセットkに対する移動は常にこの線形変換によって特徴づけられる」と学習することができ、相対的な位置関係を効率的に推論できるようになる。正弦波単独では波状の線の上で動きが不規則だったのが、sin+cosの組み合わせでは円の上での規則的な回転になる、という直感的な理解ができる。
実際に、sinのみのエンコーディングとsin+cosのエンコーディングで、同じオフセットを持つ2つの位置ペア(例: 位置5と9、位置13と17、いずれもオフセット4)間のコサイン類似度を計算する実験が行われた。結果は、sinのみの場合はペア間で類似度が異なったが、sin+cosの場合は完全に一致した。これは、sin+cosの組み合わせが、開始位置に依存しない一貫した相対的シフトを提供することの明確な証拠である。
結論として、位置エンコーディングはTransformerが単語の順序という重要な情報を扱う上で不可欠な技術だ。単純なインデックスから始まり、様々な問題点を乗り越えて、最終的に正弦波と余弦波の組み合わせが採用された。この方法は、各位置を一意に識別し、周期性の問題を緩和し、線形変換を通じて相対的な位置関係をモデルが効率的に学習できるようにする。これにより、Transformerは強力な並列処理能力を維持しつつ、単なる単語の羅列ではなく、意味のある文として情報を理解することが可能になっている。位置エンコーディングの研究は現在も活発に行われており、静的なエンコーディングだけでなく、相対的な位置エンコーディングなど、さらなる進化が期待される分野だ。