位置符号化 (Positional Encoding, 位置エンコーディング) [Transformer]

1. 位置符号化 (Positional Encoding, 位置エンコーディング) とは [概要]

位置符号化(Positional Encoding, 位置エンコーディング)とは,各トークンが「系列中の何番目の位置(i)にあるか」を,符号化関数をもちいてD次元ベクトル表現へと符号化を行い,他の表現と同じ程度の高次元ベクトルへ変換する処理のことをさす [Sukhbaatar et al., 2015].位置符号化の中でも Transformer向けに提案された「三角関数ベースの,周期的関数による位置符号化」が,広く使用されるようになった [Vaswani et al., 2017] ので,位置符号化と書いた場合には,その「Transformer方式のトークン位置符号化」をさすことが最近は多い.Transformerを用いた物体群検出器のDETRでも,各パッチトークンの2次元位置(x,y)を,位置符号化により表現ベクトルへ変換して使用する.

この記事ではまず,Transformer元論文 [Vaswani et al., 2017] での,トークン位置符号化の定義(1.1節)と,元論文での動機(1.2節)について述べる.次に,「位置符号化 or 位置埋め込み層」のどちらが良いかについては決定的な答えが出ておらず,2者ともよく使われている点を述べる(1.3節). 1.3節については,管理人はNLPが専門ではないので,深入りした話までは行わない.一方で,2節では,管理人が専門とするビジョンやVision-Language界隈でも,同じく「2者とも使われる」状況であることを,簡単にだけ整理しておきたい(どのモデル・タスクの研究で,2者のどちらが使われているかを述べるまでに留める).

系列対系列変換においては,Tranformer直前の最先端モデルであったConSeq2seq [Gehring et al., 2017] では,学習可能な位置埋め込み(Positional Embedding)層を使用していた.それが,Transformerが提案した(決め打ちの関数による)位置符号化を用いると,位置埋め込み層を学習しておかずとも,十分な系列変換変換精度を達成できるようになった.よって,それ以降,Transformer系モデルを中心に,位置埋め込み層の代わりにTransformer式の位置符号化がよく用いられるようになった.以後,NLPに限らず,画像や音の自己アテンション・マルチヘッドアテンションにおいても,Transformer式のトークン位置符号化が用いられるようになる.

1.1 位置符号化(Positional Encoding, 位置エンコーディング)に用いる関数

Transformer 論文 [Vaswani et al., 2017] では,系列長さ$L$の入力系列に対して,各トークンの位置$\text{pos}$を入力として,D次元ベクトルを作成する位置符号化(Positional Encoding)が提案された.

1.1.1 基本の定式化

Transformer 論文 [Vaswani et al., 2017] の位置符号化では,以下の「周波数が変化していく三角関数 」である 位置関数 $P(\text{pos},2d), P(\text{pos},2d+1)$ を用いて,位置符号化後のD次元ベクトル$\bm{p}_i$ の各次元の特徴値を計算する:

\begin{align} P(\text{pos},2d) &= \sin \left( \frac{ \text{pos} }{ 10000^{2d/D} }\right) \\P(\text{pos},2d+1) &= \cos \left( \frac{ \text{pos} }{ 10000^{2d/D} }\right) \tag{1.1}\end{align}

ここで,パラメータは以下の3つである:

  • $\text{pos}$:系列中のトークンの登場位置番号.$0 \leq \text{pos} \le \frac{L}{2} $
  • D:トークン埋め込み後のベクトル次元数 (元論文の$d_{\text{model}}$に相当).
  • d:トークン埋め込み後のベクトルの,各次元のインデックス値(d=1,2,…,D).

式(1.1)では,学習不可能な決め打ちの三角関数による符号化式であり,系列における$\text{pos}$番目トークンの「(絶対)位置情報」が,D次元ベクトルとして手に入る.各ベクトルはトークン位置に沿った個別のベクトルになるので,位置符号化後のD次元ベクトル × L個を用いて,各トークン間の位置関係もTransformerが学習できるようになる.

Transformer では,各トークンから埋め込み層で作成したトークン埋め込みベクトル $\bm{x}_i$(D次元)に,位置符号化で計算したベクトル$\bm{p}_i$を,加算合成した形で,フレームiの系列変換入力として用いる.言い換えると,位置符号化後の位置表現ベクトルと,トークン表現ベクトルの次元数は共にD次元で揃える (より詳しくは Transformer の記事や,2.2節「位置符号化」を参照).

1.1.2 より詳しい挙動と性質

(1.1) 式では,周波数が次元$d$が増えるごとに変わっていく関数に設計されており,これにより可変長の系列のトークン位置情報埋め込みに対応できる.

(1.1) の分母にある「10000」の値は,ユーザー自由に設定できるハイパーパラメータである.この大きな値での割り算により,出力値は$d$が小さいと波長が短く,$d$が大きいほど長い波長になる.従って,系列前半は,各トークン異なる値を示す(周波数が異なる)が,系列後半のトークンほど,隣接トークン位置同士の符号化結果が,ほぼ同じ値(もとい周波数が同期)を示すようになっていく.逆に言うと,長期のトークン位置関係はEndodeできないことが,(1.1)式の欠点でもある (この点は,Tranformer-XL などで,改善案が提案されていく).

また符号化後ベクトルの各$d$次元の値は,周期的な(1.1)式の関数で値が決まる.これにより,学習データで与えられた系列長 $L$ 以降の「学習データでは見えていない,先のトークン位置」での登場位置具合も,Transformerが学習できるという利点が出る.これにより Transformer では,学習データで与えた以上の系列長の文を翻訳してトークンを予測する際にも,学習した各トークン位置の情報が効いてくる.

Transformer界隈では,最初の論文 [Vaswani et al., 2017] で (1.1) 式が提案されて以降,この「(絶対)トークン位置符号化」を代替する「よりよい手法」が永らく現れておらず,標準的な Transformer で位置符号化する場合には,ずっと(1.1)で位置符号化されている.(※Transformer-XLなどでは「相対」位置符号化も使われる).したがって,オリジナルの(絶対)位置符号化 [Vaswani et al., 2017] には「なぜかうまくいっている」「もう少しよい関数ありそうが,未だに良い代替案が(2022年現在)提案されていない」という,闇部品の側面もある (※).

※ 管理人はコンピュータビジョンが専門であり,NLP視点での知識・経験は深くもないので,これ以上の議論は行わない.

1.2 なぜTransformerでは位置符号化(Positional Encoding)を使用したか

オリジナルのTransformerの提案 [Vaswani et al., 2017] において,なぜ位置符号化が提案されたかの動機・背景について,この1.2節でまとめる.

1.2.1 Transformerの構造と,当時の従来技術のおさらい.

Transformerの各トークン入力には,元の文をサブワード単位にも分割できるトークナイザ(BPE, WordPiece, SentencePieceなど)によって,あらかじめ分割した各トークンを辞書化しておき用いる.ただ,各トークンを,数万個の語彙のトークンからなるOne-hotベクトルになってしまう.

そこで,Transformerが効率的に計算を行いやすいように,各トークンを低次元のD次元ベクトル(D= 512~256次元程度)へ埋め込みむために,埋め込み層も同時に学習する.これはseq2seq with attention時代の頃から,埋め込み層を各トークンに使用して次元削減(埋め込み)を行う習慣は同じである.Transformerから新たに始まった仕組みではないことに注意 (※).Transformer登場前に最先端の系列対系列変換であった ConvSeq2Seq [Gehring et al., 2017] でも,位置埋め込み(Position Embedding)層は使用されていた.

1.2.2 Transformerのトークン位置符号化:周期関数による符号化を提案

Transformerマルチヘッドアテンションを用いた「系列全体トークン群の一括処理」が,主要処理である.よって,埋め込み層で得られるD次元トークン表現列をマルチヘッドアテンションで処理しても,系列全体の何番目のトークンであるかの「系列内でのトークン(絶対)位置情報」が埋め込まれていない処理になってしまい,系列処理がうまくいかない.そもそも,NLP分野には,分散表現(Word2Vec, Glove)の,ような「単語同士の(相対)位置関係」の埋め込みの知見があったので,Transformerでも,同じように,「トークンの位置情報もコーディング」したいとなった.

そこで,Transformer 論文では,位置符号化を提案し,式(1.1)によって各トークン位置を,D次元ベクトル表現に符号化することを提案した.そして,その位置埋め込みベクトルを,埋め込み層で得られるD次元トークン表現に,加算合成することにより,(絶対)位置情報も加味した系列対系列変換をTransformerのマルチヘッドアテンション中心の設計でも行えるようにした.

実験の節でも,学習可能な位置埋め込み層(Positional Embedding)を用意したものよりも,位置符号化のほうが性能で勝ったので位置符号化で良いと主張している.

1.3 位置符号化 v.s 位置埋め込み

ただし,その後のTransformer改善論文や,Transformer Encoder or Decoderを使用した大規模言語モデル(BERT・GPT など)では,位置埋め込み層を使用して位置情報も学習している設計のネットワークも多い.「位置符号化 v.s 位置埋め込み層」の2者は,どちらのほうが性能が上になるかは,ネットワーク構造やタスクなどによって異なり,「両者はどちらが良いとは言えず,どちらも使われる」という状況である(※ 2022年8月執筆現在の感想).

私はNLPの専門家ではないので,現時点では知識が足りないゆえ,NLPにおけるこの話題への深入りは行わない.代わりに,以降の2節では,私の守備範囲であるビジョンとVision-and-Languageでの話で,簡単にだけ同じ「2者の比較」の話を述べたい.

2. ビジョンでの位置符号化 v.s 位置埋め込み

コンピュータビジョンでも,最近のTransformerを使用した各種画像認識タスク(物体認識・物体検出・セマンティックセグメンテーションなど)や,3D点群処理にNeRFなどでも,(幾何的な)位置符号化が用いられている.

ただし,画像向けでも,1.3節で比較しているように,「学習しない位置符号化」と「学習する位置埋め込み層」のどちらが性能がよくなるかは,(各研究での採用割合を見ていて)実験結果でしか答えが出しづらい面があり,個人的には2者のどちらが優れているかを定性的に測りづらい面があると考えている.

2.1 Transformer,DETRでの状況

たとえば DETR元論文では,(学習可能な)位置埋め込みを使用している.しかし,DETRの各フォロー研究では,位置符号化も代わりに結構使用されている.DETR界隈では決定打が出ていない

一方,ViT(Vision Transformer)のオリジナル論文でも,元のTransformerで使用されている位置符号化ではなく,(1D)位置埋め込み層が使用されており,Transformerベースの設計であるが位置符号化を使用せず学習する.

このように,ビジョン向けTransformerでは,位置符号化と位置埋め込みのどちらも使われている状況である.一方で,著者の研究興味も高いVision-Language 学習向けのTransformerだと,オリジナルのTransformerと同じく位置符号化で行い,位置埋め込み層学習はしないケースも多い.

2.2 ビジョンでも同じ結論:どちらも使われている

以上のように,ビジョンでも2者のどちらも使用されており雑多な状況である.どちらが良いか決定解が出ていないのと,どちらかだけが強く精度を向上させるケース(もとい改善案)が出ていないことが,この状況である

また,Transformer系モデルでは,位置符号化や位置埋め込みを除いても,あまり精度が落ちないものがある.つまり,位置符号化/位置埋め込みが,ほとんど寄与しないケースもある.

3. 位置符号化(Positional Encoding) のまとめ

Transformerで提案された(学習しない)トークン位置符号化について,まず仕組みと動機・歴史経緯を述べた(1.1, 1.2節).また,学習するトークン位置埋め込み層と,位置符号化では,あまり甲乙がつけがたい側面があり,どちらもよく使われていることを,NLP(1.3節)とビジョン界隈(2節)について,それぞれ短くだけ論じた.

関連書籍

References

  • [Gehring et al., 2017] Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N Dauphin. 2017. Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122 .
  • [Sukhbaatar et al., 2015] Sainbayar Sukhbaatar , Jason Weston, Rob Fergus, et al. 2015. End-to-end memory networks. In NIPS 2015.
  • [Mildenhall et al., 2020] Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, and Ren Ng. Nerf: Representing scenes as neural radiance fields for view synthesis. In ECCV, 2020.
  • [Vaswani et al., 2017] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. In NIPS 2017.

参照外部リンク