はじめに
2022年のChatGPTのリリース(この時のバージョンは、GPT-3.5)以降、LLMはモデルのパラメータ数や訓練するテキストデータの量を増やし、特にGPT-4以降登場したモデルでは、質問に対する理解度や回答内容などが日常業務での使用に十分耐えられる水準になっています。
また、LLMが生成するプログラムも平均的な水準のプログラマーが生成するコーディングに劣らない、むしろ生成するスピードを鑑みるとそれ以上の水準に達していると個人的に感じています。
LLMがどのように動作しているのかという仕組みを理解したいという動機で、個人的にLLMについて勉強しています。
この記事では、GPT側LLMのベースとなったTransformerアーキテクチャのオリジナル論文を読み、LLMの重要なメカニズムである、Attentionメカニズム(日本語訳では、注意機構)について説明したいと思います。
今日では、ChatGPTをはじめとするほとんどのLLMがTransformerアーキテクチャに基づいており、このTransformerは2017年に発表された論文『Attention Is All You Need』[1]で紹介されたアーキテクチャです。
この当時の背景を説明しておくと、生成AIはディープニューラルネットワークと用いた機械翻訳の研究から生まれました。
この論文のタイトルになっている『Attention』という単語は、Attentionメカニズムを指し、それまでの再帰的ディープニューラルネットワーク(RNN)などのモデルに対して、このAttentionメカニズムを用いると翻訳の品質を向上できたというのがこの論文の趣旨になります。
本来はLLMの仕組みについてまとめたいのですが、かなり長くなるので、今回はTransoformerアーキテクチャのAttentionメカニズムに特化して説明します。そのため、本来であれば、入力文字列 → トークン化 → 埋め込みベクトルへ変換 という流れから説明するべきですが、入力文字列がいきなり「トークン埋め込みベクトル」から始まっていることをご了承ください。
なお、本内容は、基本的な線形代数の知識、ニューラルネットワークについて知っている方向けの内容となっています。
ここで用語についての補足
AI(Artificial Intelligence)と呼ぶと、一般的には人工知能全般を指し示す用語であり、この言葉の表す範囲は広いです。この記事では、ChatGPTのような、膨大なテキストを訓練し、人間のようなテキストを理解し、生成するニューラルネットワークについては、LLM(Large Language Model)と記載し、AIという呼称とは明確に区別します。
Transformer のオリジナル論文について
- Transformer のオリジナル論文である「Attention Is All You Need」において、Attentionメカニズムを採用したTransformer アーキテクチャを提唱しています
- GPT(Generative Pre-trained Transformer)は、このオリジナルのTransformerアーキテクチャのデコーダ部分に焦点を合わせて設計されており、テキストの生成を必要とするタスク向けに設計されています
- 論文は、全7章構成で、他の論文の参照ページを含めても、15ページほどの分量です。興味ある人は、Transformer のオリジナル論文なので、一読することをお勧めします
「Attention Is All You Need(2017)」に書いてあること
今回の記事の都合上、Attentionメカニズムに関する箇所まで言及したいと思います。
「概要(Abstract)」、「1 Introduction(導入)」、「2 Background(背景)」には概ね以下の内容が記載されています。
- 主要な系列変換モデルは、エンコーダとデコーダを含む複雑な再帰型あるいは畳み込み型ニューラルネットワークに基づいているが、我々は、Attention機能のみに基づき、再帰や畳み込みを完全に排除した新しい単純なネットワークアーキテクチャである「Transformer」を提案する
- 本研究では、再帰を排し、入力と出力の間の大域的依存関係をAttentionメカニズムのみによって捉える「Transformer」というモデルアーキテクチャを提案する
- Transformer ははるかに高い並列化を可能にし、わずか 8 基の P100 GPU で 12 時間の訓練を行うだけで、新たに翻訳品質における最先端の性能を達成できる
- Self-Attentionメカニズムは、単一の系列内の異なる位置を関連付け、その系列の表現を計算するためのAttentionメカニズムである。Self-Attentionメカニズムは、読解、抽象的要約、テキスト含意、タスクに依存しない文表現の学習など、さまざまなタスクで成功裏に用いられてきた
- 我々の知る限りでは、Transformer は、系列に沿った 再帰型ニューラルネットワーク(RNN) や畳み込みニューラルネットワークを用いることなく、Self-Attentionメカニズムのみに依拠して入力および出力の表現を計算する最初の変換モデルである
「3. モデルアーキテクチャ(Model Architecture)」には、Transformerアーキテクチャの概要と、Attentionメカニズムについての説明が記載してあります。
-
Transformerアーキテクチャの概要については、本論文に掲載されている図を元に日本語化・若干の説明を加筆したものを以下に掲載します
-
例では、"This is an example" という英語を、ドイツ語("Das ist ein Beispiel")に翻訳する例です。
-
エンコーダーでは、入力テキストを処理して、その埋め込み表現(ベクトル)をデコーダーに渡します。
-
デコーダーでは、元の入力テキスト(エンコーダーで埋め込み表現に変換済み)と部分的に翻訳されたテキスト("Das ist ein")から、翻訳を完成させるための最後の単語("Beispiel")だけを生成します。
「4. なぜSelf-Attentionメカニズムなのか(Why Self-Attention)」に記載されていること
- 自己注意機構(Self-Attention)を用いる動機と、計算量の観点での説明、畳み込みニューラルネットワークとの比較を行っています。
- この章での特質すべき点は、Attentionメカニズムを用いた時の副次的な利点についてです。
self-attentionメカニズムはより解釈可能なモデルを生み出す可能性がある。(中略)個々のAttentionメカニズムのヘッドは明確に異なるタスクを行うようになるだけではなく、多くは文の構文的・意味的構造に関連した挙動を示しているように思われる。
Transformerアーキテクチャは、現在使われているような「質問を入力するとそれに対する回答が返ってくる」というような汎用的な生成AIを目指して研究されていたわけではなく、機械翻訳の研究からスタートしています。Attentionメカニズムを実装したら、機械翻訳だけではなく他のタスクにも利用できる可能性が見つかった。』というのが、このTransformerアーキテクチャの大きな特徴であり、現在広く使われている汎用的な生成AIモデルの基盤となったわけです。
「5. 訓練(Training)」「6. 結果(Results)」「7 結論(Conclusion)」は割愛します。
TransformerアーキテクチャとGPTアーキテクチャの違い
ここで、補足情報として論文に掲載されているTransformerアーキテクチャとGPT型アーキテクチャの相違点について説明します。
下図のようにGPT型アーキテクチャは、Transfomerのデコーダー部分のみからなっており、エンコーダ部分はありません。各イテレーションでテキストを一語ずつ生成し、その出力が次のイテレーションの入力になります。
Attentionメカニズムとは
ここから、本題のAttentionメカニズムの説明に入ります。[2][3]
Attentionメカニズムとは、簡単に説明すると入力トークン埋め込み(入力文字列をトークン化し、埋め込みベクトルに変換したもの)に対して、文脈の情報を付与する仕組みです。
例として、"Your journey starts with one step" という入力文字列を扱いますが、この"journey"の意味は何でしょうか?
オクスフォード現代英英辞典によると以下の2つの意味があります。
1. an act of travelling from one place to another, especially when they are far apart
2. a long and often difficult process of personal change and development
1は「物理的な移動という意味での旅路」であり、2. は「人生における工程という意味での旅路」です。文脈からすると、この"journey"は2の意味が近いです。(と個人的には思います。)
ところで、2の意味だと推測するために、私たちは何を判断根拠としているでしょうか?
"Your journey starts"だけだと、物理的な旅行とも判断できます。多くの場合"with one step"という文字から、この"journey"が物理的な旅路ではなく、人生の旅路を指しているかもと判断していると思います。(もちろん、"Your journey starts with one step"という短い文なので、もし後続の文章があれば、「物理的な旅路」が正解なのかもしれません。)
この"journey"という単語(正確には、入力トークン埋め込み)に対して、周辺の語の情報を付与していく仕組みが、Attentionメカニズムです。
改めて理論的に説明すると、Attentionメカニズムとは、「ある入力(Query)が、複数の候補(Key)に対してどれだけ注目している(Attention)か」を出力する仕組みです。
このAttention(注目)度合いを算出するのに、Query と Key のベクトルの内積(ドット積)を計算します。内積という概念は線形代数などの純粋な数学の分野でも用いられ発展してきた概念ですが、機械学習・自然言語処理の分野に関して言えば、ベクトルの内積は、2つの単語ベクトルの類似度を測る尺度に利用されます。
ここで内積について説明
内積(ドット積)という言葉が出てくるので、内積の定義について説明します。
2つの同じ次元を持つベクトル
\displaylines{
a=(a_1,a_2,…,a_n) \\
b=(b_1,b_2,…,b_n)
}
に対して内積は次の式で定義されます:
$$a⋅b=a_1b_1+a_2b_2+⋯+a_nb_n$$
またはベクトルの長さ(ノルム)を $∥a∥$, $∥b∥$、2つのなす角を $θ$ とすると:
$$a⋅b=∥a∥ ∥b∥cosθ$$
以上が内積の定義です。
このベクトル間の内積を計算するというのが、Attentionメカニズムのポイントの1つとなります。
まず単純なAttentionメカニズムを考えてみる
- "Your journey starts with one step" という文字列について考えてみます。
- [0.43, 0.15, 0.89]が、"Your"に対する、入力トークン埋め込みベクトルを指します。
- この例では、簡単にするために3次元ですが、GPT-3 175Bモデルでは、12,288次元もあります。(GPT-4系以降は、公式には非公開)
Attentionメカニズムとは、先にも説明して通り各入力埋め込みトークン(単語)に対して、文脈の意味を付与することです。従って、それぞれの入力埋め込みトークンに対して、周りの単語と関連づけていきます。
ここでは例として、2番目の単語"journey"に対するAttentionスコアを計算を見ていきます。
-
2番目の単語"joueney"の入力埋め込みトークンに注目し、他の単語の入力埋め込みトークンとの内積を計算します。(内積を計算することで、2つの単語ベクトル間の類似度を算出しています)
-
算出した内積が、上の図のオレンジの部分([0.9544, 1.4950, ...])になります(これを、「Attentionの重み」と呼ぶことにします)
-
次に、2で算出した「Attentionの重み」に対してSoftmax関数をつかって正規化します(正規化した値が、上図の赤色の部分([0.1385, 0.2379, ...])となります。これを「Attentionスコア」と呼ぶことにし、それぞれ$a_{21}, a_{22}, a_{23}, ...a_{26}$で表すこととします)
-
2番目の入力埋め込みトークンを基準に、1番目, 2番目, ..., 6番目の入力埋め込みトークンに対して、Attentinスコアを求めているので、Attentionスコアは$a_{21}, a_{22}, a_{23}, ...a_{26}$と表しています。
-
次に入力埋め込みトークン($x_1, x_2, ..., x_6$)とAttentionスコア($a_{21}, a_{22}, a_{23}, ...a_{26}$)をそれぞれ掛けます
\begin{bmatrix} x_1a_{21} \\ x_2a_{22} \\ x_3a_{23} \\ x_4a_{24} \\ x_5a_{25} \\ x_6a_{26} \end{bmatrix} = \begin{bmatrix} 0.0596 & 0.0208 & 0.1233 \\ 0.1308 & 0.2070 & 0.1570 \\ 0.1330 & 0.1983 & 0.1493 \\ 0.0273 & 0.0719 & 0.0409 \\ 0.0833 & 0.0270 & 0.0108 \\ 0.0079 & 0.1265 & 0.0870 \end{bmatrix}
-
最後に5で計算した行列について、行方向に加算します。これをコンテキストベクトル$Z_2$ と呼ぶこととします。2番目の入力埋め込みトークンに対して求めたコンテキストベクトルのため、添え字2がついています。
Z_2= \begin{bmatrix} 0.4419 & 0.6515 & 0.5683 \end{bmatrix}
-
同様の手順で、1番目, 2番目, ..., N番目の入力埋め込みトークンに対してコンテキストベクトル($Z_1, Z_2, ..., Z_N$)を求めていきます。
-
上記をまとめると、以下の数式となります。(注目する入力埋め込みトークンとQueryとしベクトル$Q$で淡らしています。$X$は、入力埋め込みトークンです。$X^T$は転置行列を表し、$XX^T$は行方向での内積の計算となります。)
$$Z = softmax(QX^T)X$$
ここで、転置行列について補足
例えば、以下の行列$X$において、$XX^T$の計算は以下のようになります:
X =
\begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{bmatrix}
XX^T = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}\begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix}= \begin{bmatrix} 1⋅1 & 2⋅2 & 3⋅3 \\ 4⋅4 & 5⋅5 & 6⋅6 \end{bmatrix}=\begin{bmatrix} 1 & 4 & 9 \\ 16 & 25 & 36 \end{bmatrix}
Scaled Dot-Product Attention メカニズム
先ほどの例は、Attentionメカニズムとは何かを掴んでもらうための簡単な例です。
実際論文に掲載されているのは、これから説明する「Scaled Dot-Product Attention」になります。
以下は、オリジナル論文「Attention Is All You Need」に掲載されている、Scaled Dot-Product Attentionメカニズムの式です。
$$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$$
- $Q$ = Query、$K$ = Key、$V$ = Value をそれぞれ意味します。
- 「Attention Is All You Need(2017)」には、$Q$, $K$, $V$ がQuery、Key、Value を表すとしていきなり登場しますが、それぞれクエリ埋め込み、キー埋め込み、バリュー埋め込みを計算するための重み $W_q$、$W_k$、$W_v$ が存在します。この重みを訓練時に学習することで、重要度を加味した文脈化ができるようになります。
\displaylines{
Q_i = W_qX_i \\
K_i = W_kX_i \\
V_i = W_vX_i
}
図3: Scaled Dot-Product Attentionメカニズムの概略図
図4: Scaled Dot-Product Attentionメカニズムの計算方法
2番目の単語"joueney"の入力埋め込みトークンに注目し、これをQueryとして、Attentionメカニズムにより先ほどと同様に、コンテキストベクトル$Z_2$を求めていきます。
- 各入力埋め込みトークンに対して、key, value, queryを求めます。(queryは現在注目している、2番目の入力埋め込みトークンのみ算出します)
- key, value, queryを求めるにあたって、重み行列($W_k, W_v, W_q$)を導入します。本記事では、この重みについては詳しく言及しませんが、モデルを訓練する際にこの重みが更新されます
- 各key($k_1, k_2, ..., k_6$)と、query($q_2$)の内積を計算します。これをAttentionの重み($ω_{21}, ω_{22}, ..., ω_{26}$)と呼ぶこととします
- 次に3で算出したAttentionの重みを正規化し、正規化したものをAttentionスコア($a_{21}, a_{22}, ..., a_{26}$)と呼ぶこととします. ここの正規化の内容については、下の「Scaled Dot-Product Attentionメカニズムの特徴」を参照してください。
- 各入力埋め込みトークンのvalue($v_1, v_2, ..., v_6$)と4で求めたAttentionスコアの内積を計算します
- 5で求めたベクトルを、加算したものが$q_2$に対するコンテキストベクトル$z_2$となります
この図の、Query、Key、Value の値は、各入力要素の入力トークン埋め込み($x_1...x_6$)と、Query、Key、Valueのそれぞれに対する重み行列($W_q$、$W_k$、$W_v$)との行列積ですがが、ランダムに初期化した値を用いています。とりあえず、$W_q$、$W_k$、$W_v$は$3 \times 2$のランダムな数字が設定された行列と考えておいて下さい。
Scaled Dot-Product Attentionメカニズムの特徴
- このAttentionメカニズムのポイントの1つが、attentionの重みを算出しsoftmax関数で正規化するときに、埋め込みベクトルの次元の平方根で割るというところです
- この記事では書きませんが、入力埋め込みトークンにAttention機構を適用して、ニューラルネットワークを通しますが、モデルを訓練することになります
- softmax関数の特徴としてスケールが低い(softmax関数のグラフでいうところの、真ん中あたり)では、反応が高く、スケールが高い(softmax関数のグラフでいうところの、両端のグラフがなだらかな部分)と反応が低いという特徴があるため、埋め込み次元の平方根で割るというスケーリングが重要になってきます
- この後の、訓練するのに適したスケールにするという意図があります
- この埋め込み次元の平方根によるスケーリングが、Scaled Dot-Product Attention を呼ばれる所以となっています
この記事で説明しないこと
- Multi-head Attention について
- 実際のTransformerアーキテクチャでは、Scaled Dot-Product Attentionメカニズムを複数同時に適用する Multi-head attention を採用しています。
- 論文によると(Attention Is All You Need - 3.2.2 Multi-Head Attention)
マルチヘッド注意により、モデルは異なる表現空間の情報に対して、位置ごとに同時に注意を向けることが可能になる。単一の注意ヘッドでは、平均化の影響によりこれが妨げられてしまう。
- 上記を、簡潔に説明すると、複数のScaled Dot-Product Attention を重ね合わせるように適用することで、複数の観点から文脈の情報を意味づけ、精度を上げていくという意図があります。
- Scaled Dot-Product Attention のマスクについて
- Transformerアーキテクチャのデコーダ部の前段のMulti-head Attentionで用いられています
- 論文によると(Attention Is All You Need - 3.2.3 Application of Attention in our Model)
デコーダの各位置が、その位置までを含むすべての位置に注意を向けられるようにする。一方で、自己回帰性を保つために、デコーダにおいて未来方向への情報伝播を防ぐ必要がある。これを実現するために、スケーリング付きドット積注意の内部で、ソフトマックス入力のうち不正な接続に対応する値をマスキングし(−∞に設定)、それを無効化している
- 簡潔に説明すると、モデルが次のシーケンスのトークンを予測する時に、現在の位置とそれよりも前に現れるトークンだけを考慮するように、Attentionメカニズムに制約をかける仕組みです。
まとめると
本記事ではChatGPTの原点とも言えるTransformerアーキテクチャの論文を通して、入力埋め込みトークンのAttentionメカニズムについて見ていきました。
GPT型のLLMでは、本Transformerのデコーダ部のみで構成されていますが、Attentionメカニズムは利用されています。この、1つ1つの入力文字列の単語に文脈の情報を意味付けるという仕組みにより、我々が生成AIのプロンプトに文章を入力したときに、的確に内容を捉えてくれるという当たり前の動作に、大きく寄与していると言えます。
最後に
新しい技術が社会に浸透する過程では、その可能性への期待と共に、様々な情報が飛び交うものです。かつてブロックチェーン技術が注目を集めた際にも、革新的な応用例から投機的な話題まで、玉石混交の情報が溢れていました。技術の本質とは異なる文脈で語られることも少なくなく、冷静な判断が求められる場面も多くありました。
現在の生成AI技術を取り巻く環境も、同様の熱気に包まれているように感じます。日々新たな応用例や将来予測が発信される中で、技術の可能性と限界を見極めることは容易ではありません。
本記事では、現代のLLMの礎となっているTransformer論文の一部を読み、その中核であるAttentionメカニズムの基本的な仕組みを解説しました。技術の内部構造を理解することは、その技術で「できること」と「できないこと」を判断する上での土台となると考えいます。
新技術がもたらす変化の波の中で、その仕組みを理解し、自分なりの視点を持つことは、技術と適切に向き合うための第一歩だと考えています。
参考文献
- Vaswani et al., "Attention Is All You Need" (2017), https://arxiv.org/abs/1706.03762
- 本記事の例は、以下を参考にしています
Raschka, Sebastian. Build A Large Language Model (From Scratch). Manning, 2024. ISBN: 978-1633437166. - 一部説明文章は、以下を参考にしています
山田育也, 鈴木正敏, 山田康輔, 李凌寒(著), 大規模言語モデル入門, 技術評論社, 2023. ISBN:978-4-297-13633-8
問い合わせ先
案件のご依頼・ご相談は、以下までご連絡ください。
info@lightcafe.co.jp
We are hiring!
ライトカフェはエンジニアを積極採用中です。
常にお客様に寄り添い課題を認識し、解決の手助けをさせていただく。業務SIerにとって当たり前の事ですが、わたしたちはそれを一番大切にしています。
この会社コンセプトに共感して頂ける方、世の中のWEBサービス開発に関わりたい方をお待ちしています。
#イツモトナリニライトカフェ
ライトカフェ採用ページはこちら
ライトカフェクリエイション採用ページはこちら
note はこちら: 社内の雰囲気や制度など、ライトカフェの魅力を発信しています。
X(旧Twitter)はこちら: 会社のニュースや日々の出来事、採用情報などを発信しています。