数式を追う!Transformerにおけるattention
本記事は、「LabBaseテックカレンダー Advent Calendar 2023」 15日目の記事です。
はじめに
株式会社LabBaseでインターンをしている佐藤拓真と申します。
- 本記事では、attentionについて、特にTransformerにおいて使用されている形 に注目して、数式を追った理論的な理解をすること を目指します。
- 数式やその解説は、『自然言語処理の基礎』[岡崎, 2022] に大幅に依拠しています。
- プログラミング言語による実装は取り扱いません。
- Transformerにおけるattention以外の主要技術は取り扱いません。
- Transformerを使用した主要な事前学習済モデル(BERT, GPT等)については扱いません。
- 自然言語のみによる平易な解説というより、数式など理論的な側面に注目を当てます。
- 数式など理論的な側面の理解のために、平易な自然言語を道具として使います。
- 必要な数学の知識として、大学の理工系学部1,2年程度の線形代数の知識を前提しています。
Transformerとattentionの概要
昨今、大規模言語モデル(LLM, Large Language Model)が隆盛を見せ、ChatGPT等のサービスが世界に極めて強いインパクトをもたらしています。
大規模言語モデルの成功にもっとも寄与している技術要素の一つとして、Transformerが挙げられます。Transformerは"Attention is All You Need"[Vaswani et.al., 2017]において発表されたニューラルネットワークアーキテクチャです[1]。2023年現在主流の事前学習済みモデル(pre-trained model)においては、ほとんどの場合Transformer(ないしその派生アーキテクチャ)が使用されています。たとえば、「ChatGPT」は名前の通り"GPT"という大規模事前学習済みモデルを使用したサービスですが、GPTは"Generative Pre-trained Transformer"を意味しています。
Transformerはさまざまな技術的要素から構成されますが、その中でももっとも中心的かつ重要といえる技術要素の1つとして、attention mechanism(注意機構) が挙げられます[2]。attentionは、大雑把にひとことで表現すると、「入力におけるどの部分に注目して処理を行うかを計算する仕組み」といえます。
Transformerにおいては、attentionを更に洗練させて、self-attentionやQKV attention、multi-head attentionという技術が使用されています。以下の章においては、基本的なattentionについて整理したあと、これらの技術についても解説を行います。
attention
attention mechanism(注意機構)は、直観的には、seq2seq(系列変換)モデルにおいて、「encoderに対する入力系列」と「decoderからの出力系列」の間にある「注意」の関係を計算するメカニズムとして説明されます。例えば、"I love you"という入力系列を「私は貴方を愛している」という系列に変換する翻訳タスクを考える時、出力における「愛している」というトークンは、入力における"you"というトークンに注目していることが期待されます。attentionは、この注目の度合いを計算しているようなイメージかと思います。
ここからは数式を追います。
入力系列を
つぎに、encoderからの出力ベクトル を
ここで、出力系列におけるトークン
ただし、ここで、行列に対するsoftmax関数は以下のように定義されるものとします。
以上がattention mechanismの行っている計算です。特徴ベクトル
self-attention
前章のattention mechanismにおいては、decoderの出力である特徴ベクトル
これに対して、self-attention mechanismでは、「再構築したいベクトル」と「再構築する際に参照するベクトル」の情報源が同じ になります。これが"self-attention(自己注意)"というタームの所以です。
attentionとself-attentionにおいて、数式に現れる違いはこの点のみになります。よって、行われている基本的な操作は、通常のattentionと同じです。実際に、self-attention mechanismの数式を見てみましょう。記号や関数の意味/指示対象は、すべて前章と同じです。
まず、encoder側のself-attention mechanismは以下の式で表現されます。
\bm{h}_jを再構築して\hat{\bm{h}_j}を作成していますが、その際に参照しているのも
次にdecoder側のself-attention mechanismは以下の式で表現されます。
説明すべきことは、encoder側のself-attentionと全く変わりません。
query-key-value attention(QKV attention)
前章まででattentionとself-attentionの説明を行いました。Transformerでは、その少し発展した形であるquery-key-value attention(QKV attention, QKV注意機構) が使われています。
query-key-valueとはどれもデータベースに関連したタームですが、それがなぜattentionやTransformerの文脈において突然登場したのかと困惑するかもしれません。
実は、通常のattention mechanismも、データベースへの問い合わせにたとえて説明されることがあります。encoderの出力ベクトルを並べた列(行列)
QKV attentionは、この考え方の拡張と捉えることができます。QKV attentionは、「key-value方式のデータベース」が存在し、そのデータベースに対してqueryで問い合わせを行っているようなイメージです。
といっても、QKV attentionは多少複雑なので、実際の式を先に見ていただき、そこから説明を行うほうがよいかと思います。ということでまずはじめに、self-attentionではなく、encoder-decoder間で情報を受け渡す場合のQKV attentionの数式を示します。
まず、記号
このとき、queryベクトル、keyベクトル、valueベクトルは、それぞれ以下のように計算されます。
ただし、
上で通常のattentionについて「decoderの出力系列の各位置
「データベース」は、上述したようにkeyとvalueで構成されています。一般にkeyとvalueはペアとなってkey-valueの構造をなすわけですが、ここにおいても同様に、
「データベース」に「クエリ」を投げて結果を得る操作は以下になります。この操作によって、
以上で、encoder-decoder間でのQKV attentionにおいても、通常のattentionと同じく、decoderの出力系列中の特徴ベクトルを再構成して新たなベクトルを得ることができました。
次に、encoder, decoderそれぞれ単体の中でのself-attentionにおいてQKV attentionを採用した場合の式を見てみましょう。といっても、query, key, valueの求め方が変わるだけなので、その式だけを示します。その後の
self-attentionなので、encoderにおいては情報源がすべて
ちなみに、以上のようなQKV attentionを用いたattentionのことを[Vaswani, 2017]では"Scaled Dot-Product Attention"と呼んでいます。Scaled Dot-Product Attentionは短く以下の一行の式で表現されています(内容としては上述の式たちと全く同じ)。ただし、クエリベクトルを行列表記にした
multi-head attention
上述したQKV attentionを複数用いるために、Transformerではmulti-head attentionという仕組みを採用しています。"multi-head"における"head"はそれぞれのattention機構を指しているため、単に「1つのモデルの中でattention機構を複数使うための仕組み」という程度の意味になるかと思います。
複数のattention機構(=head)を使うことのメリット(とそれに伴うデメリット)については後に回して、数式を確認します。ここでは、用いるheadの数を
まず、必要な記号を導入します。
また、ここでの
このとき、multi-head attention mechanismは以下の式で表現されます。
ただし、
前章までのとおり、
ステップを複数挟んでいるので混乱しますが、「
さて、ここで、先程飛ばしていた「複数のhead(attention機構)を組み合わせて使用することのメリット」について言及したいと思います。
[岡崎, 2022]は、headの複数化の利点を、softmax関数の性質に基づいて説明しています。softmaxは、入力ベクトルの中の1つの要素を1に近い値に、それ以外の要素を0に近い値に変換する傾向があります。そのため、attention機構を1つだけ用いた場合、注目する観点が1つに偏りがちであり、この問題を解決するために複数のattention機構を用いて情報をうまく「混ぜ合わせる」ことがmulti-head attentionには期待されていると述べられています。一方で、同文献では
[Lewis, 2022]でも、この説明と同じことが述べられています。
しかし、なぜ複数のアテンションヘッドが必要なのでしょうか。その理由は、1つのヘッドのソフトマックスでは、類似性の一面にしか注目しない傾向があるからです。複数のヘッドを持つことで、モデルは一度に複数の側面に注目できます。(p.72)
おわりに
本記事では、Transformerにおいて使用されているattentionについて、その数式を追いました。
LabBaseアドベントカレンダー2023、明日は @takahashik0422さんの記事になります!ぜひご期待ください!
参考文献
- [岡崎, 2022]岡崎直観・荒瀬由紀・鈴木潤・鶴岡慶雅・宮尾祐介『自然言語処理の基礎』、オーム社、2022年
- [岡野原, 2023]岡野原大輔『大規模言語モデルは新たな知能か』、岩波書店、2023年
- [黒橋, 2023]黒橋禎夫『三訂版 自然言語処理』、放送大学教育振興会、2023年
- [斎藤, 2018]斎藤康毅『ゼロから作るDeep Learning②──自然言語処理編』、オライリー・ジャパン、2018年
- [Cheng, 2016]Cheng Jiampreng, Li Dong, and Mirella Lapata. "Long Short-Term Memory-Networks for Machine Reading", EMNLP, 2016
- [Lewis, 2022]Lewis Tunstall, Leandro von Werra, and Thomas Wolf(中山光樹訳)『機械学習エンジニアのためのTransformers──最先端の自然言語処理ライブラリによるモデル開発』、オライリー・ジャパン、2022年
- [Vaswani, 2017]Ashish Vaswani et.al.,"Attention Is All You Need", arXiv, 2017
-
現論文における定義はともかくとして、現在"Transformer"と言った場合、その語が厳密に何を指しているかは、文脈や語の使用者によって異なる場合があります。本記事では、岡崎, 2022に従い、encoderとdecoderをあわせた系列変換モデルの形式のことを"Transformer"と呼ぶこととします。 ↩︎
-
本記事では扱いませんが、TransformerにおいてAttentionと並ぶ中心的な技術要素として、positional encodingやlayer normalizeationなどもしばしば挙げられます。 ↩︎
-
元論文([Vaswani, 2017])においては、この
は"scaling factor"と呼ばれています。このscaling factorは、c=\frac{1}{\sqrt{d}} が大きい場合においてドット積が大きくなり、softmax関数が極めて小さい勾配しかもたないような領域に押し込まれることを避けるために導入されているようです。論文中では[Cheng, 2016]がreferされていました。正直私はあまりよくわかっていません。 ↩︎d -
encoder単体、decoder単体のself-attention mechanismにおいてはそれぞれ
,S=T=I です。encoderの情報を参照するdecoderのattention mechanismにおいてはS=T=J です。 ↩︎S=I, T=J
Discussion