見出し画像

トランスフォーマーの論文を読む⑨位置

前回は、埋め込みについて解説しました。今回は、位置エンコーディングにフォーカスしながら論文を読み進めていきます。

位置エンコーディングは、前回解説した埋め込みの直後に行われる処理です。

ここでいう位置とは、入力シーケンスの要素(トークン)間の順序情報を意味します。トランスフォーマーモデルでは位置エンコーディングを通じて明示的に位置情報というデータをモデルに提供する必要があります。

しかし、その理由は何でしょうか。

また、位置エンコーディングはどのようにして行われるのか、今回も論文を読み進めながら解説していきます。


位置情報が必要な理由

これまで解説してきたトランスフォーマーの基本的なアーキテクチャでは、位置情報は取り込まれていません。

一方で、回帰や畳み込みネットワークでは、データの位置関係がモデルの構造によって自然に取り込まれます。畳み込みニューラルネットワーク(CNN)の場合、畳み込み層は入力データの局所的なパターンを検出し、それによって入力データの空間的な構造を利用します。

以前に解説しましたが、このような性質は帰納バイアスと呼ばれ、モデルが特定の種類のデータや問題に対してより良く機能するように設計された仮定や制約を表します。

つまり、位置に関する帰納バイアスがトランスフォーマーの構造には組み込まれていません。しかし、トランスフォーマーのこのアプローチには、利点があります。なぜなら、位置に関わらず、全ての入力要素を平等に扱い、要素関の関係を計算できるからです。

例えば、「歩く」という文章と「が….しながら歩く」という文章では、「犬」と「歩く」の関係は両方の文章で同じくらい強い場合が多いでしょう。しかし、回帰の仕組みなどを使うと、「犬」と「歩く」が互いに遠く離れたところにあることで関係性が弱くなってしまう可能性があります。なぜなら、回帰には順番に並んでいる近い関係に重視される帰納バイアスがあるからです。せっかくの機能バイアスによって不便な制限を生じていると言えます。これはLSTMのようにメモリ(セル)を持つことである程度軽減されますが、必ずしも有効ではありません。

このためRNNやLSTMでは、シーケンスを順次処理するため、特に長い依存関係の学習には不利な面がありました。

トランスフォーマーでは、トークン間の関係を直接計算するため、位置が離れている場合の関係性を学習することができます。しかし、トークン間の相対的な位置関係は重要でもあります。

例えば、次の二つの文章の意味を比べてください。

「犬が私を噛んだ」
「私が犬を噛んだ」

全く同じ単語を使っていますが、単語の並び順が異なるだけで意味が大きく変わっています。

つまり、アテンション機構によって各トークン間の関係を計算するだけでは、重要な文脈を見逃すことになりかねません。しかし、各トークンの埋め込みベクトルを別々に見ただけでは位置関係を学習することができません。

よって、トランスフォーマーでも、各入力要素の位置情報をモデルに提供する必要があります。これがトランスフォーマーにおいて位置情報を付加する必要がある理由です。

論文では次のように簡潔に述べられています。

私たちのモデルには回帰も畳み込みも含まれていないため、モデルがシーケンスの順序を利用するためには、シーケンス内のトークンの相対的または絶対的な位置に関する情報を注入する必要があります。

Since our model contains no recurrence and no convolution, in order for the model to make use of the order of the sequence, we must inject some information about the relative or absolute position of the tokens in the sequence.

[1706.03762] Attention Is All You Need (arxiv.org)

そして、位置に関する情報を注入するために、位置エンコーディングを導入しています。これにより、シーケンス内の各要素の位置を考慮して、情報を処理することが可能になります。

この目的のために、エンコーダとデコーダのスタックの底において、「位置エンコーディング」を入力埋め込みに加えます。

To this end, we add "positional encodings" to the input embeddings at the bottoms of the encoder and decoder stacks.

[1706.03762] Attention Is All You Need (arxiv.org)

要するに、トランスフォーマーでは位置エンコーディングを使って明示的に位置情報を埋め込みベクトルに注入しています。つまり、モデルの構造としての帰納的バイアスではなく、あくまでのデータの一部として位置情報を提供しており、あとはモデルが訓練を通して位置情報を文脈の一部として学習することに依存しているわけです。

つまり、トランスフォーマーは、データから帰納バイアスを学習しています。帰納バイアスは、学習アルゴリズムが特定の問題を解く際に、ある種の仮定や先入観を持っている状態を指しますが、トランスフォーマーにおいては、位置情報に関して回帰や畳み込みのような与えられた帰納バイアスはありません。そのため、位置エンコーディングというヒントをもとに、位置に関する帰納バイアスをデータから学習することになります。

このアプローチは、モデルが様々な種類のデータやタスクに対して柔軟に適応することを可能としています。人間が考えたモデル構造によるパターン認識ではないので、大量のデータで学習すれば、複雑な言語タスクにおいて、優れた性能を発揮することが期待できます。

では、位置情報はどのようにして注入されるのでしょうか。

位置情報をどう含めるのか

論文は、位置情報に関して次のように説明を始めます。

位置エンコーディングは、埋め込みと同じ次元$${d_\text{model}}$$を持つため、両者を合計することができます。

The positional encodings have the same dimension $${d_\text{model}}$$ as the embeddings, so that the two can be summed.

[1706.03762] Attention Is All You Need (arxiv.org)

つまり、位置エンコーディングは、埋め込みベクトルと同じ次元を持っています。よって、両者を単純に足し合わせることで位置情報を埋め込みベクトルに注入できます。

なお、位置情報を生成する方法は一つではありません。論文でも次のように述べられています。

位置エンコーディングには、学習されたものと固定されたものなど多くの選択肢があります。

There are many choices of positional encodings, learned and fixed [9].

[1706.03762] Attention Is All You Need (arxiv.org)

ただし、この論文では、データから学習するのではなく、固定された計算方法によって、位置情報を埋め込みベクトルと同じ次元のベクトルとして生成しています。利点としては、位置情報を学ぶためのパラメータを必要としないことが挙げられます。

位置情報の計算方法

位置情報の計算の仕方について、論文は次のように説明しています。

この研究では、異なる周波数の正弦波と余弦波の関数を使用しています:

In this work, we use sine and cosine functions of different frequencies:

[1706.03762] Attention Is All You Need (arxiv.org)

論文では、位置情報(PE)の計算を次のように定義しています。

$${\text{pos}}$$はトークンの位置であり、$${i}$$は埋め込みベクトル内の要素の位置(次元)を計算するためのインデックスです。

分数の形を見やすいように調節したものが以下になります。

$$
\begin{aligned}
\text{PE}(\text{pos}, 2i \text{       }) &= \sin\left( \dfrac{\text{pos}}{ 10000^{2i/d_{\text{model}}}}\right) \\[2ex]
\text{PE}(\text{pos}, 2i+1) &= \cos\left(\dfrac{\text{pos}}{ 10000^{2i/d_{\text{model}}}}\right) \\
\end{aligned}
$$

この式に関して論文は次のように簡潔に説明しています。

つまり、位置エンコーディングの各次元は正弦波に対応しています。

That is, each dimension of the positional encoding corresponds to a sinusoid.

[1706.03762] Attention Is All You Need (arxiv.org)

正弦波といっても、sinに限定されるわけではなく、cosも含まれます。cosはsinから角度が90度($${\pi/2}$$ラジアン)ずれているだけの関係にあります。つまり、cos関数はsin関数と同じ形の波を示しますが、位相(波が始まる位置)が異なります。そういった意味で両方とも正弦波です。

位置情報の解釈

位置エンコーディングの偶数の次元$${2i}$$では、sinが使われ、奇数の次元$${2i+1}$$では、cosが使われています。よく見ると、両方とも同じ角度(仮に、$${\theta}$$とします)を計算しています。よって、このペアは、ある角度におけるsinとcosの値を計算していることになります。

このため、単位円の円周上の位置を$${\text{PE}(\text{pos}, 2i) = \sin(\theta)}$$と$${\text{PE}(\text{pos}, 2i+1)=\cos(\theta)}$$の2つの値で表現していると解釈することができます。

では、$${i}$$の値が変わるとどうなるのでしょうか。論文を読み続けましょう。

その波長は、$${2\pi}$$から$${10000\cdot2 \pi}$$までの幾何級数を形成します。

The wavelengths form a geometric progression from $${2\pi}$$ to $${10000\cdot 2\pi}$$.

[1706.03762] Attention Is All You Need (arxiv.org)

上述の式から分かりますが、波長は位置エンコーディングの次元によって変わってきます。例えば、$${i = 0}$$の場合、位置情報は次の式で決まります。

$$
\begin{aligned}
\text{PE}(\text{pos}, 2\cdot 0 \text{       }) &= \text{PE}(\text{pos}, 0) = \sin\left( \dfrac{\text{pos}}{ 10000^{2\cdot 0/d_{\text{model}}}}\right) = \sin\left(\text{pos}\right) \\[2ex]
\text{PE}(\text{pos}, 2\cdot 0+1) &= \text{PE}(\text{pos}, 1) =\cos\left(\dfrac{\text{pos}}{ 10000^{2\cdot 0/d_{\text{model}}}}\right) = \cos\left(\text{pos}\right) \\
\end{aligned}
$$

よって、$${i=0}$$の場合、位置エンコーディングは単純に位置$${\text{pos}}$$の正弦と余弦の関数として計算されます。つまり、波長$${2\pi}$$で一周して元の角度に戻ります。トークンの位置$${\text{pos}}$$は0以上の整数なので$${2\pi}$$にはなりませんが、次元1と2の位置エンコーディングの値は、トークンの位置$${\text{pos}}$$によって周期的に変わるということです。

時計の針を想像すると分かりやすいかもしれません。つまり、時計の針が、周期に従って元の位置に戻るのと似ています。

$${2\pi}$$は、おおよそ6.28なので、位置が0から6ほぼ一周します。位置がさらに増えると、7から12でまた一周します。続いて、13から18でまた一周します。

これをずっと繰り返すので位置の数が多くなってもいくらでも対応できます。

前述しましたが、注目して欲しいのは、$${\text{PE}(0)}$$と$${\text{PE}(1)}$$では、同じ角度が使われていることです。これは、この後の次元でも同じであり、$${\text{PE}(2i)}$$と$${\text{PE}(2i+1)}$$で同じ角度が共有されています。

$$
\begin{aligned}
\text{PE}(\text{pos}, 0) &= \sin\left(\text{pos}\right) \\[2ex]
\text{PE}(\text{pos}, 1) &= \cos\left(\text{pos}\right) \\[3ex]
\text{PE}(\text{pos}, 2) &= \sin\left( \dfrac{\text{pos}}{ 10000^{2/d_{\text{model}}}}\right) \\[2ex]
\text{PE}(\text{pos}, 3) &=\cos\left(\dfrac{\text{pos}}{ 10000^{2/d_{\text{model}}}}\right)\\[4ex]
\text{PE}(\text{pos}, 4) &= \sin\left( \dfrac{\text{pos}}{ 10000^{4/d_{\text{model}}}}\right) \\[2ex]
\text{PE}(\text{pos}, 5) &=\cos\left(\dfrac{\text{pos}}{ 10000^{4/d_{\text{model}}}}\right)\\[2ex]
\vdots \\
\text{PE}(\text{pos}, 510) &= \sin\left( \dfrac{\text{pos}}{ 10000^{510/d_{\text{model}}}}\right) \\[2ex]
\text{PE}(\text{pos}, 511) &=\cos\left(\dfrac{\text{pos}}{ 10000^{510/d_{\text{model}}}}\right)\\[2ex]
\end{aligned}
$$

ここでは、論文に従って$${d_\text{model}=512}$$と仮定しています。

なお、細かい話にはなりますが、気になる方もいるので解説すると、トランスフォーマーの位置エンコーディングにおける波長が$${{2\pi}}$$から$${10000 \cdot 2\pi}$$までの幾何級数を形成するという記述は、誤解を招く可能性があります。

なぜならば、$${i}$$の値が$${0}$$から$${d_{\text{model}} / 2 - 1}$$までの範囲に限定されるからです。例えば、$${d_{\text{model}} = 512}$$ならば、$${512 / 2 - 1 = 255}$$が$${i}$$の上限となります。これは、512次元の位置情報をsinとcosのペアで表現するために、0から511までのインデックスを$${2i}$$と$${2i+1}$$で表現しているからです。

つまり、角度を計算する際の分母は、最大が$${10000^{2 \dot 255/512} = 10000^{510/512}}$$となるため、波長の実際の上限は$${10000 \cdot 2\pi}$$未満になります。

よって、実際に使用される波長の最大値は、$${10000^{(d_{\text{model}} - 2)/d_{\text{model}}}\cdot 2\pi}$$になり、これは$${10000 \cdot 2\pi}$$に達しません。

もちろん、$${i=1}$$から始めることも考えられますが、そうすると波長の下限が$${{2\pi}}$$になりません。

以上より、トランスフォーマーの位置エンコーディングでは、各次元のペアごとに同じ角度が使われていますが、その周期性の値は各ペアに特有です。

つまり、位置情報は、異なる周期をもつ時計の針がたくさん集まったものだと考えることができます。

通常の時間だと、時針、分針、秒針だけですが、トランスフォーマーの位置情報では、埋め込みの次元からの各ペアが異なる周期をもつ時計の針に対応します。また、ベクトル内の次元に関係する$${i}$$が大きくなるほど時計の針が遅くなると解釈するとことがきます。なぜなら、位置情報のベクトルでの次元が後になるほど波長が長くなるからです。

そして、この時計の時間は、トークンの位置によって決まります。

つまり、トークンの位置は、たくさんの異なる周期を持つ針からなる時計の時間に相当すると考えると各位置がユニークなベクトルで表現できることをイメージしやすくなります。

以上の設計により、モデルはシーケンス内の各位置に対してユニークなエンコーディングを生成することができます。しかも、位置情報の値は、前もって計算しておくことが可能です。よって、訓練やテストにおける位置エンコーディングの注入の処理速度は非常に高速です。

また、実験結果として、位置情報がある方が良い精度を出すことがわかっています。つまり、トランスフォーマーは、このようにして与えられた位置情報から学習することが可能なわけです。

位置情報のビジュアル化

ちなみに、下図は位置エンコーディングの値を画像化したものです。

位置エンコーディング

縦軸がトークンの位置を意味し、横軸が位置情報のベクトルの次元を意味します。例えば、位置60の位置情報ベクトルは、y=60でx=0からx=511までの水平な線に沿った値で決まります。よって、各位置がユニークなベクトルになっているのが画像から直感的に分かります。なお、より詳しい解説は、こちらの記事を参照してください。

相対位置の学習

それにしても、このような位置情報の計算方法を使ったのは、単なるヒラメキによるものでしょうか。論文では、次のように書かれています。

この関数を選んだのは、固定されたある整数$${k}$$に対して、$${\text{PE}_{\text{pos}+k}}$$を$${\text{PE}_\text{pos}}$$の線形関数として表現できるため、モデルが相対位置による注意を容易に学習できると我々が仮説を立てたからです。

We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset $${k}$$, $${\text{PE}_{\text{pos}+k}}$$ can be represented as a linear function of $${\text{PE}_\text{pos}}$$.

[1706.03762] Attention Is All You Need (arxiv.org)

つまり、位置エンコーディングのベクトルの値は、絶対位置を表していますが、異なる位置の相対的な関係が線形であるために、モデルが容易に相対位置も学習できると仮説を立てたそうです。

これについては、三角関数の加法定理を用いて次のように説明できます。

$$
\sin(\text{pos} + k) = \sin(\text{pos})\cos(k) + \cos(\text{pos})\sin(k)
$$

$$
\cos(\text{pos} + k) = \cos(\text{pos})\cos(k) - \sin(\text{pos})\sin(k)
$$

この式から、$${\sin(\text{pos} + k)}$$と$${\cos(\text{pos} + k)}$$は、それぞれ$${\sin(\text{pos})}$$と$${\cos(\text{pos})}$$、そして固定値$${\sin(k)}$$と$${\cos(k)}$$を用いて線形に表現することができることがわかります。

$${A_k = \cos(k)}$$、$${B_k = \sin(k)}$$として整理すると、よりはっきりします。

$$
\sin(\text{pos} + k) = A_k \sin(\text{pos}) + B_k \cos(\text{pos})
$$

$$
\cos(\text{pos} + k) = A_k \cos(\text{pos}) - B_k \sin(\text{pos})
$$

このように、シーケンス内の要素間の相対位置情報は位置の差$${k}$$によって線形的に一意に決まります。よって、論文の著者たちは、モデルが相対位置を学習しやすいだろうと考えたわけです。

他に選択肢はなかったのか

論文では、位置情報自体を学習することも試したと説明しています。

また、学習された位置エンコーディングを使用する実験も行いましたが、2つのバージョン(学習しないものと学習するもの)がほぼ同じ結果を生み出したことが分かりました(表3の行(E)を参照)。

We also experimented with using learned positional embeddings [9] instead, and found that the two versions produced nearly identical results (see Table 3 row (E)).

[1706.03762] Attention Is All You Need (arxiv.org)

実際にその表を見ると、ほとんど性能が変わっていないので、より処理が効率的な手法を選んだのでしょう。この辺りに興味がある方は、論文の実験結果のセクション6を読んでみてください。

さらに論文では次のように書かれています。

我々は、訓練中に遭遇したものよりも長いシーケンスに対して、モデルが位置情報を注入できるようにするため、正弦波のバージョンを選択しました。

We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training.

[1706.03762] Attention Is All You Need (arxiv.org)

つまり、訓練で遭遇した文章よりも長いシーケンスでも、学習しない位置情報の計算を使えば、問題なく位置情報を注入できるため、正弦波のバージョンを使ったとのことです。

周期性を利用しているので位置がある程度増えても問題なく対処できます。また、相対的な位置関係も線形の関係を学習したのであれば長い文章でも問題もないでしょう。ただし、角度の計算の分母で使っている10000の値によって波長の上限は決まるので、より長いシーケンスを扱う場合には、位置エンコーディングの計算式を調節する必要はあります。

次回予告

次回は、セクション4の「Why Self-Attention」を読み進めていきます。

お楽しみに!

いいなと思ったら応援しよう!