Transformerアーキテクチャ

ポジショナルエンコーディング ぽじしょなるえんこーでぃんぐ

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)

関連用語