メインコンテンツへスキップ

位置エンコーディング徹底解説:トランスフォーマーに「順序感覚」を与える

トランスフォーマーが語順をどう追跡するかを理解し、正弦波・学習・相対・RoPE・ALiBi の各エンコーディングを比較し、PyTorch 実装を確認しましょう。
更新 2026年8月14日  · 14 分 読む

AIで探索

ChatGPTClaudePerplexity

ページ上のすべての語が無作為に並べ替えられた小説を読むところを想像してください。たとえ一つひとつの語を理解できても、あらすじは完全に失われます。語順が意味を規定するからです。エンジニアが大規模言語モデル(LLM)の設計を始めたとき、同じような壁に突き当たりました。中核の仕組みがすべてを同時に処理するモデルに、どうやって語の並びを理解させるのか?

そこで位置エンコーディングの登場です。この記事では、位置エンコーディングの内部動作と、それがどのようにトランスフォーマーに「順序感覚」を与えるのかを探ります。元祖の正弦波(サイン・コサイン)式から、最新の回転埋め込みまでの進化と、次の機械学習プロジェクトへの実装方法を解説します。基盤アーキテクチャに不慣れな場合は、まずトランスフォーマーの仕組みガイドから始めることをおすすめします。

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

位置エンコーディングは、ニューラルネットワークに入力データの順序情報を理解させるための手法です。トークンの相対的または絶対的な位置を表す座標のセットとして機能し、標準的なデータ表現に統合されます。

テキストがニューラルネットワークに入る前に、語は連続的な数値表現である埋め込みに変換されます。しかし、標準的な埋め込みは意味情報のみを捉え、テキスト内での語の位置については何も教えてくれません。このプロセスの詳細は、コースIntroduction to Embeddings with the OpenAI APIで学べます。

位置エンコーディングは、これらのトークン埋め込みに直接加えられる追加の数理レイヤーです。意味表現に位置のスタンプを組み合わせることで、トランスフォーマーモデルは、文中の異なる箇所に現れる同一語を区別できるようになります。

順列不変性の問題

系列データは順序に大きく依存します。自然言語では、"the dog bit the man" と "the man bit the dog" は意味がまったく異なります。

自己注意における順列不変性の問題

歴史的に、再帰型ニューラルネットワーク(RNN)LSTMはこの問題を本質的に扱っていました。これらはトークンを逐次処理するため、ネットワークは第1語の処理後にのみ第2語を数理的に取り込むのです。同様に、畳み込みニューラルネットワーク(CNN)は、ピクセルや隣接語の空間配置を捉えるローカルなスライディングウィンドウでデータを処理します。

トランスフォーマーは逐次処理を完全に放棄し、すべてのトークンを並列に処理します。トランスフォーマーの中核エンジンは自己注意機構であり、系列内のすべてのトークン同士の関係スコアを同時に計算します。数学的には、自己注意は順列不変です。入力系列をシャッフルしても、自己注意は語のペアに対してまったく同じ注意スコアを出力します。

順序を保持する仕組みがなければ、モデルは系列情報を完全に失います。意味は順序のない語袋に崩れてしまいます。位置エンコーディングは入力ベクトルを意図的に変化させ、位置1のトークンと位置10のトークンを自己注意機構が異なるものとして認識するようにすることで、順列不変性の問題を解決します。

位置エンコーディングはどう機能するか?

位置エンコーディングは、自己注意層に到達する前に入力トークンのベクトルを数理的に修正することで機能します。これにより、モデルは意味と位置の両方に基づいて関係を計算できます。

直感をつかみましょう。標準のトークン埋め込みを会議の名札だと考えてください。名札はその人が誰かを示しますが、会場のどこにいるかは、その人や他者との関係性を変えません。位置エンコーディングは名札に座席番号を追加するようなものです。両者を組み合わせれば、その人が誰で、どこに座っているかが分かります。これにより、その人が取りうる相互作用に文脈が加わります。

トランスフォーマーでは、この組み合わせは通常、要素ごとの単純な加算で行われます。モデルは語の意味埋め込みベクトルに、同じサイズの位置エンコーディングベクトルを加えます。結果のベクトルには微妙な変調が含まれ、後続層はそれを空間座標として解釈するよう学習します。

計算例

簡単な例を見てみましょう。次元が4の小さな埋め込み空間があり、系列内の位置0にある "DataCamp" という語を処理したいとします。

  1. 意味埋め込み:ニューラルネットワークは "DataCamp" の埋め込みを取得します。例えば [0.51, -0.22, 0.88, 0.14] のようになります。
  2. 位置エンコーディング:位置0に対する座標ベクトルを位置の式が生成します。この例では [0.00, 1.00, 0.00, 1.00] と仮定します。
  3. 結合:2つのベクトルを要素ごとに加算します。
  4. 最終入力:順伝播には [0.51, 0.78, 0.88, 1.14] が渡されます。

同一のトークン "DataCamp" が後で位置5に現れたとしても、位置エンコーディングベクトルは異なります。結果として、自己注意機構にとって最終入力ベクトルはまったく別物に見えます。

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

元の"Attention Is All You Need" 論文は、基礎的な三角関数を用いて位置ベクトルを生成する見事な手法を導入しました。機械学習の重みを必要とせず、固定の数式だけに依拠します。

数理的基盤

正弦波位置エンコーディングは、複数の周波数のサイン・コサイン関数で位置情報を符号化します。ある位置(pos)と、埋め込みベクトル内の特定の次元インデックス(i)に対する元の式は次のとおりです。

  • 偶数次元(2i):PE(pos, 2i) = sin(pos / 10000^(2i/dmodel))

  • 奇数次元(2i+1):PE(pos, 2i+1) = cos(pos / 10000^(2i/dmodel))

ここで dmodel は埋め込みベクトルの全サイズです。ベクトルの次元をインデックス0から dmodel へ進むにつれ、正弦関数の波長は幾何級数的に増加します。

利点と特性

この周波数の幾何級数的な進行は、いくつかの明確な利点をもたらします。

  1. サインとコサインの出力は -1 から 1 に厳密に収まります。この有界性により、位置エンコーディングが意味埋め込みを数値的に圧倒しません。
  2. 関数は周期的です。三角関数の加法定理により、線形変換で将来の位置(pos + k)の位置エンコーディングを現在位置(pos)の関数として容易に表せます。この特性により、モデルは相対位置の表現を自然に学習できます。
  3. 正弦波エンコーディングは固定パラメータを用います。学習可能な重みがゼロで、メモリ負荷を大幅に削減します。連続関数で動作するため、理論的には外挿能力を持ち、学習時より長い系列に対しても位置座標を写像できます。

可視化

正弦波エンコーディングの理解には、ヒートマップとして可視化すると役立ちます。

正弦波位置エンコーディング行列

この可視化の x 軸は埋め込みの次元サイズ、y 軸はトークンの位置を表します。

左側の低次元は負と正の間を素早く振動し、近接するトークン位置を識別できます。次元インデックスが大きくなるにつれて波長は長くなり、エンコーディングはより緩やかに変化します。これらの次元は、より大きな距離にわたる位置の差異を捉えます。

ここで示す50の位置では、多くの高次元がほぼ一様な縦縞に見えます。これは、波長が非常に長いため、この短い系列内ではサインの値が 0 に、コサインの値が 1 に近いままになるためであり、0 と 1 そのものではありません。したがって、交互の縞は隣接するサインとコサインの次元を反映しており、単純な2値符号ではありません。より長い系列では、これらの次元も顕著に変化し始めます。

要点は、異なる周波数が複数スケールで位置情報を与えることです。変化の速い次元は近接トークン間の細かな差異を捉え、変化の遅い次元は長い系列における大局的な位置を追跡します。

学習型位置エンコーディング

固定の数式は優美ですが、現代のディープラーニングアーキテクチャはしばしばデータに最適表現を学習させます。学習型位置埋め込みは、配置の負担を完全に学習段階へ移します。

概念と実装

サイン・コサイン関数で位置値をハードコードする代わりに、学習型位置埋め込みでは位置座標を標準的な学習可能パラメータとして扱います。

モデルは、各行が特定の系列位置に対応する空の埋め込み行列を初期化します。通常の誤差逆伝播ループの中で、ネットワークは意味トークン埋め込みと並行してこれらの位置重みを更新し、全体の損失関数を最小化します。

比較上の利点

学習型位置埋め込みの主な利点は極めて高い柔軟性です。特定のデータセットに最適な位置表現を自由に学習できます。BERT や GPT-2 のようなアーキテクチャは、その適応性と下流タスクでの強力な性能から、この手法を広く普及させました。

制約と課題

学習型位置埋め込みの最も大きな制約は、系列長に対するハードな上限です。最大 2,048 の位置ベクトルで学習したモデルは、2,049 トークンの文書を物理的に処理できません。

この制約は長さの外挿を大きく妨げ、コンテキストウィンドウを拡張するには高コストな再学習が必要になることが多いです。

相対位置エンコーディング

より長い文書を扱うようにモデルが進化する中で、語の絶対位置よりも、他の語への相対距離のほうが重要なことが多いと認識されてきました。

相対位置への概念的転換

"the rapid advancement of AI" という句を考えてみましょう。この句が文書の冒頭にあろうと末尾にあろうと、"advancement" と "AI" の文法的関係は同一です。相対位置エンコーディングは絶対的なグリッド座標を捨て、代わりに相互作用するトークン間の距離オフセットのみに注目します。

注意機構での実装

相対エンコーディングを実装するために、エンジニアはネットワークの最初で入力埋め込みを変更するのではなく、注意スコアの計算そのものを直接変更します。

「クエリ」行列と「キー」行列の間の注意スコアを計算する際、相対距離を表す学習済みのバイアス項を追加します。この変更により、テキスト内でのシフト不変性が保証されます。これらの行列の動作の詳細は、LLM における注意機構ガイドを参照してください。

実務上のトレードオフ

この手法は非常に高精度な文脈理解をもたらしますが、計算負荷は大きくなります。各注意ヘッドごとに固有の相対距離行列を計算する必要があり、メモリ消費が大幅に増加します。テキスト生成を高速化する内部キャッシュ機構も複雑化します。

絶対 vs 相対の位置情報

絶対と相対のどちらを選ぶかは、特定のタスクに依存します。

  • 絶対エンコーディングは、正確な空間レイアウトが厳密で、高速実行が優先される場合に極めて有効です。
  • 相対エンコーディングは、文法構造が絶対的な文書座標ではなく局所的な文脈距離に依存する長文の自然言語処理において、はるかに優れます。

Rotary Position Embedding(RoPE)

トランスフォーマーの改良を目指す中で、研究者は Rotary Position Embedding(RoPE)を提案しました。これは絶対・相対位置エンコーディングの長所を組み合わせ、急速に業界標準となっています。

革新的アプローチ

RoPE は回転変換を用いて絶対的な配置と相対距離を統一します。埋め込みにベクトルを加えたり、注意スコアに重いバイアスを加えたりする代わりに、RoPE は埋め込みベクトルを複素平面に写像し、特定の角度だけ回転させます。この角度の大きさは、系列内でのトークンの絶対位置に厳密により定まります。

RoPE の位置エンコーディング

数理的洞察

2次元空間では、標準的な2D回転行列で回転を適用します。高次元では、埋め込みの次元をペアに分け、絶対位置インデックスに基づいて各チャンクに固有の2D回転を適用します。

回転行列の幾何学的特性により、回転させたクエリベクトルとキーべクトルの内積は、それらの相対角度のみに依存するようになります。つまり RoPE は、絶対位置の写像を用いて、トークン間の相対距離を自然に符号化します。

RoPE と正弦波エンコーディングの比較

上図が示すように、正弦波エンコーディングは元のベクトルの大きさと方向の両方を変化させます。対して RoPE は大きさ情報を保持し、異なる2つの位置間の角度だけで相対距離を理解します。

Attention With Linear Biases(ALiBi)

RoPE が複雑な回転数学に依拠する一方、Attention with Linear Biases(ALiBi)という別の手法は、まったく異なるアプローチを取ります。

単純さと効率

ALiBi は初期のトークン埋め込みに位置情報を加えるという発想を完全に捨てます。語の埋め込みは手つかずのままトランスフォーマーに入ります。

その代わりに、ALiBi は注意計算の最終段階で介入します。softmax 関数に通す直前の注意ロジットから、2つのトークン間の距離に比例した静的なペナルティを減算します。2語が離れているほど、その注意スコアから差し引かれるペナルティは大きくなります。

性能

この方法は実装が非常に簡単で効率的です。最大の利点は、長さの外挿タスクに対する極めて高い有効性です。1,024 トークンの系列で ALiBi を用いて学習したモデルでも、その2倍の長さの系列で破綻せずに首尾一貫したテキストを容易に生成できます。

高速なテキスト生成と推論タスクに利用される他の高度な手法に関心がある実務家は、speculative decodingに関するガイドも参照してください。

どの位置エンコーディングをいつ使うか

まずは何を作るかから出発し、合う手法を選んでください――単独のときもあれば、複数併用のときもあります。

  • シンプルでゼロパラメータのベースラインが欲しい:正弦波(固定式、学習不要)。
  • 系列長が固定で、特定データセットで最大性能を狙う:学習型。
  • 学習時より長い系列を扱う必要がある:外挿可能な手法の中では RoPE が最有力。
  • 文法が絶対位置ではなくトークン間距離に依存する:相対または RoPE。
  • 汎用の最新 LLM を構築する:RoPE。
  • 長さの外挿が最優先で、最も簡潔な実装が欲しい:ALiBi。
  • メモリとキャッシュのオーバーヘッドなしに相対位置の利点が欲しい:RoPE(相対エンコーディングは有益だが高コスト)。

実装とアーキテクチャの実務上の考慮点

理論と実装の隔たりを埋めるには、位置エンコーディングを実際のコードベースに統合し、アーキテクチャ上の制約を管理する方法を理解する必要があります。

トランスフォーマーへの位置エンコーディングの実装

PyTorch のようなフレームワークで位置エンコーディングを追加するには、通常は専用モジュールを作成します。このモジュールは一度だけエンコーディング行列を生成し、逆伝播で誤って更新されないようにバッファとして登録します。

以下は、正弦波エンコーディングを取り入れた順伝播の標準的な実装です。エンコーディングはサインとコサインの式から一度だけ計算され、学習中に変化しないため、学習可能パラメータではなくバッファとして格納します(そのため学習コストを増やしません)。

import torch
import torch.nn as nn
import math

class PositionalEncoding(nn.Module):
    def __init__(self, d_model: int, max_len: int = 5000):
        super().__init__()
        
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        
        # Calculate the division term for frequencies
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
        
        # Apply sine to even indices and cosine to odd indices
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        
        pe = pe.unsqueeze(0)
        
        # Register as a buffer
        self.register_buffer('pe', pe)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        # Add positional encoding directly to the input embeddings
        seq_len = x.size(1)
        x = x + self.pe[:, :seq_len, :]
        return x

__init__ では、モジュールは max_len までの位置に対するエンコーディングテーブルを事前計算します。position はインデックス(0, 1, 2, …)の列で、div_term は周波数で、1 / 10000^(2i/d_model) に相当します。低次元には高速な波、高次元には低速な波が割り当てられます。

sin を偶数次元(0::2)に、cos を奇数次元(1::2)に適用して表を埋めます。forward の実行時処理は、入力の系列長に合わせてテーブルをスライスし、トークン埋め込みに要素ごとに加えるだけです。モジュールはバッチ優先の形 [batch, seq_len, d_model] を想定しているため、forward は次元1でスライスします。

位置バイアスと「中ほどで失われる」現象

長い系列長を写像することの予期せぬ結果として、位置バイアスが生じることがあります。これはしばしば「中ほどで失われる(lost-in-the-middle)」現象として現れます。巨大な文書を処理する際、言語モデルはプロンプトの最初や最後の事実はよく覚えているのに、その中間の情報は弱くなる傾向があります。人間の記憶も似たように働きます(少なくとも私の場合はそうです。本の最初と最後のほうが中身よりよく覚えている、なんて私だけではないですよね!)。

理論では、注意機構が無関係な文脈に圧倒され、初期のトークン(指示を設定する)と直近のトークン(記憶上もっとも新しい)に自然とアンカーしてしまうためだと考えられています。このバイアスを軽減するため、開発者は高度なチャンク化戦略やセマンティック検索システムに頼ります。

専門領域向けの位置エンコーディング

トランスフォーマーは、もはやテキストに厳密に限定されていません。位置エンコーディングの概念は、複数の領域にまたがる異種データ型に急速に適応しています。

Vision Transformerでは、画像をパッチのグリッドに分割します。単純な1次元の系列エンコーディングでは、2次元空間での空間的近接性を捉えられません。そのため、画像モデルは X 座標と Y 座標の両方を考慮する 2D の学習型位置エンコーディングを用いることが一般的です。

連続する時系列モデル向けにも同様の適応があり、時間距離、季節性、タイムスタンプを追跡する特化エンコーディングが用いられます。

位置エンコーディングのさらなる研究

より大きなコンテキストウィンドウへの競争が加速する中で、モデルの位置理解を洗練させることは、機械学習研究における極めて活発で重要な分野であり続けています。

長さの外挿とコンテキスト拡張

今日のユーザーは、コードベース全体や小説シリーズ全巻を一度に処理できる巨大なコンテキストウィンドウを求めています。超長系列でゼロから学習するのはコストがかかりすぎるため、研究者はコンテキスト拡張手法に依存しています。

位置補間のような手法では、はるかに長い系列の位置座標を、元の学習長の範囲に数理的に圧縮します。YaRN のような適応的手法では、RoPE の回転周波数を動的に調整し、モデルの距離理解を途切れなく引き伸ばします。

明示的な位置エンコーディングなしのトランスフォーマー

驚くべきことに、明示的な位置エンコーディングが常に必須というわけではないと示唆する研究もあります。デコーダ専用の因果言語モデルでは、標準的な因果マスキング(トークンが過去方向のみに注意できるよう強制する仕組み)が、時間的順序情報を本質的に漏らします。

つまり、適切な温度調整やアーキテクチャ調整により、因果マスクだけから位置ルールを暗黙的に学習できる可能性があります。

課題と今後の方向性

究極の最前線にあるのは、厳密な適応(特定の系列長で性能を最適化)と完璧な外挿(無限に一般化可能にする)との間に残るトレードオフです。

浮上する研究分野はマルチモーダルなエンコーディングに強く焦点を当てています。3D ビデオ座標をテキストや音声ストリームと統合する普遍的な位置表現の創出は、次世代 AI モデルの一つの目標です。

結論

位置エンコーディングは、並列処理と系列理解のギャップを埋め、順序立った大量データを処理できるモデルの構築を可能にします。学習型や相対型の埋め込みがいかに高い柔軟性をもたらすか、また RoPE や ALiBi のような最新の革新が、数理的な洗練と計算効率の両立をどのように最適化するかを見てきました。

コンテキストウィンドウが数千トークンから数百万へと拡張される中で、「どこに何があるか」をニューラルネットワークに正確に伝えるという、このシンプルな数理操作は、モデル設計の中心であり続けるでしょう。

さらに深く学び、ハンズオンで体験したい場合は、Developing Large Language Models スキルトラックへの参加をおすすめします。

位置エンコーディングに関する FAQ

機械学習における位置エンコーディングとは何ですか?

位置エンコーディングは、系列データにおける順序情報をニューラルネットワークに与えるための数理的手法です。

なぜトランスフォーマーモデルに位置エンコーディングが必要なのですか?

データを逐次的に処理する古い RNN と異なり、トランスフォーマーは自己注意機構を用いてデータを同時に処理します。自己注意は本質的に順列不変であり、入力を順序のない語袋のように扱います。位置エンコーディングは、モデルが処理する前段階でデータに直接、系列座標を注入することでこれを解決します。

絶対位置エンコーディングと相対位置エンコーディングの違いは?

絶対位置エンコーディングは、系列内の正確なインデックスに基づいてトークンに固定の座標を割り当てます。相対位置エンコーディングは正確なグリッド位置を無視し、相互作用する2つのトークン間の距離のみを計算して、その文脈的なオフセットに集中します。

Rotary Position Embedding(RoPE)とは?

RoPE は広く用いられるエンコーディング手法で、トークン埋め込みを複素平面に写し、絶対位置で決まる角度だけ回転させます。モデルが注意スコアを計算するとき、回転後の2つのベクトル間の関係は、それらの相対距離のみに依存します。

学習型位置埋め込みとは何ですか?

サインやコサインのような固定数式を用いる代わりに、学習型位置埋め込みは空間座標を学習可能な重みとして扱います。モデルは空の位置行列を初期化し、学習中にこれらの座標を更新して、特定のデータセットに最適な空間表現を学習します。

トピック

おすすめのトランスフォーマー講座

Tracks

大規模言語モデル(LLM)の開発

16時間
PyTorchとHugging Faceを使って、最新の深層学習とNLP手法を用いながら、大規模言語モデル(LLM)を開発する方法を学びます。
詳細を見るRight Arrow
コースを開始
もっと見るRight Arrow