1行定義
位置エンコーディングとは、Transformerで、各単語の系列内の位置を表すベクトルを埋め込みベクトルに加え、語順の情報を与える仕組みのことです。
くわしく
位置エンコーディングは、Transformerに語順の情報を与えるための仕組みです。2017年にTransformerを提案した論文で使われ、広く知られるようになりました。
なぜ必要なのか
RNNは単語を先頭から順に処理するため、語順の情報が自然に含まれます。一方、Transformerは系列のすべての単語を同時に処理し、Self-Attentionで単語どうしの関係を計算します。Self-Attentionの計算そのものは並び順を区別せず、単語を並べ替えても各単語の出力の値は変わりません。このままでは「太郎が花子を呼んだ」と「花子が太郎を呼んだ」を区別できません。
そこで、各単語の埋め込みベクトルに、その単語の位置を表すベクトルを足し合わせてから、Transformerに入力します。
元のTransformerの計算方法
元の論文では、学習しない固定の値として、正弦関数と余弦関数で位置を表しました。位置をpos、ベクトルの次元の番号をi、ベクトルの次元数をdとすると、次のように計算します。
- 偶数番目の次元:
PE(pos, 2i) = sin(pos / 10000^(2i/d)) - 奇数番目の次元:
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
次元ごとに周期の違う波を使うため、位置ごとに異なるパターンのベクトルになります。埋め込みベクトルと同じ次元数で作るので、つなげるのではなく、要素ごとに足し合わせます。
学習で求める位置埋め込み
位置を表すベクトルを、ほかの重みと同じように学習で求める方法もあります。BERTや、画像を分割したパッチを並べて扱うVision Transformerは、この学習型の位置埋め込みを使っています。元の論文でも学習型を試してほぼ同じ結果を得ており、固定の方式は、学習時より長い系列にも対応できる可能性があるとして選ばれました。
覚え方
「Attentionは順番を知らない。だから位置を足して教える」と覚えます。
G検定での出題
出題のされ方
RNNやCNNを使わないTransformerで、語順の情報を補う目的が問われます。正弦関数・余弦関数による計算方法や、埋め込みベクトルに足し合わせる点、Vision Transformerでの使われ方も問われます。
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
元のTransformerでは、位置エンコーディングをエンコーダとデコーダの両方の入力に加える。
答えを見る
答え ◯ 正しい
論文では、エンコーダとデコーダそれぞれの最初の層に入る埋め込みベクトルに足しています。出力の文を作るデコーダでも語順の情報が必要なためです。
-
元のTransformerの位置エンコーディングは、単語の埋め込みベクトルと連結して、入力ベクトルの次元数を2倍にする。
答えを見る
答え × 誤り
位置エンコーディングは埋め込みベクトルと同じ次元数で作り、要素ごとに足し合わせます。入力の次元数は変わりません。
-
元のTransformerの位置エンコーディングでは、すべての次元で同じ周期の正弦波を使う。
答えを見る
答え × 誤り
偶数番目の次元に正弦波、奇数番目の次元に余弦波を使い、次元の番号によって周期を変えています。そのため、位置ごとに異なるパターンのベクトルになります。
この用語の練習問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目23 Attention)
- Ashish Vaswani et al., Attention Is All You Need (2017) (3.5 Positional Encoding)
- Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova, BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
- Alexey Dosovitskiy et al., An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (2020)