【数式なし版】直感的に理解するTransformerの仕組みと処理の流れの概要

昨今のDeepLearningの研究を席巻するTransformerの解説は数式を用いたものが多く、なかなか理解が難しいかもしれません。そこで当記事では別途作成を行ったTransformerの解説コンテンツを元に数式を用いないでTransformerの仕組みと処理の流れの概要の取りまとめを行いました。

Introduction

Transformerの概要

TransformerはChatGPT・GPT-$4$など多くのLLMで用いられる主要な仕組みです。元々は$2017$年に機械翻訳の分野で考案された仕組みである一方で、その表現力の高さから現在では文書要約や対話などより難しいタスクへの適用が行われています。

Transformerの処理の全体図:Transformer論文より

Transformerの応用分野

Transformerは大変強力な処理の仕組みであり、様々な応用先があります。NLP分野のみならず画像認識(ViT; Vision Transformerなど)や強化学習、時系列処理などでも用いられることがあります。

より詳しい理解にあたって

当記事では大まかな理解を重視しましたので詳細の解説は行いませんでした。より詳しい理解にあたっては下記などを参照ください。

・【Udemy版】直感的に理解するTransformer(統計の森作成)
・【pdf版】直感的に理解するTransformerの仕組み(統計の森作成)

前提知識

Word$2$vec

Word$2$vecは単語(token)をベクトルで表したものです。ベクトルはプログラミング言語における配列と同様で、複数の数字を保持した$1$つの箱をイメージすると良いです。なのでWord$2$vecは『一つ一つの単語が複数の数字を持つ』と理解すれば良いです。

たとえば「本屋に行った。統計の教科書を買った。」から主要な単語を抜き出した「本屋、行く、統計、教科書、買う」はそれぞれ下記のようにベクトル表記することが可能です。

上図の緑の枠が「本屋」に対応するベクトルです。上図では「本屋」という単語を表すにあたって、「場所・書籍・商品」という三つの特徴を持つということを$1$で表しました。同様に「講義・動詞」という二つの特徴を持たないことを$0$で表しました。

このようにWord$2$vecでは単語をベクトルで変換することで意味を持たせることが可能です。Word$2$vecを用いる際は基本的に予め学習させて表を作成しておき、「本屋」であれば「$(1,1,1,0,0)$」というように単に辞書を調べるように取得します。

Word$2$vecを用いた単語のベクトル変換:基本的には検索と同様のイメージで理解できる

厳密には「場所・書籍・商品・講義・動詞」のようにWord$2$vecの要素がそれぞれ明確な意味を持つわけではありませんが、同様な解釈は可能なので基本的にはこのような理解で十分だと思います。

ニューラルネットワーク・深層学習

深層学習(DeepLearning)は大規模なニューラルネットワークで、回帰による予測と基本的には同様な演算の仕組みに基づいて計算が行われます。

回帰分析:水色のサンプルを元に赤の直線を得る

上図は回帰分析の図で、たとえば$x$には「部屋の広さ」、$y$には「家賃」などが設定され、「部屋の広さ」から「家賃」を予測できるように直線を得ます。ここで回帰分析とシンプルなニューラルネットワークであるMLP(Multi Layer Perceptron)の対応は下図のように表されます。

回帰分析とMLP(Multi Layer Perceptron)の対応

上図の対応を元にMLPは回帰における計算を複数回繰り返したものであると認識しておくと良いです。中間層(隠れ層)の値を制御するにあたって活性化関数が用いられることも有名なので合わせて抑えておくと良いと思います。また、深層学習(Deep Learning)は大規模なニューラルネットワークのことを指します。

ニューラルネットワークの構造的仮定の活用①:CNN

MLPの入力層と出力層:入力層$\to$中間層の計算に用いるパラメータの数は「入力層の次元$\times$出力層の次元」で計算できるので、上記では$2 \times 3 = 6$個のパラメータが必要

上図のようなMLP(Multi Layer Perceptron)形式のニューラルネットワークは入力する数字の数(次元ということが多いです)が増えると取り扱いが難しくなります。たとえばピクセルサイズが$500 \times 500$のカラー画像の場合、入力層の次元は下記のようになります。
$$
\large
\begin{align}
500 \times 500 \times 3 = 750{,}000
\end{align}
$$

もし中間層の次元が入力層の次元と同じ$750{,}000$である場合、この計算に必要なパラメータの数は$750{,}000$の$2$乗になるので下記のように計算できます。
$$
\large
\begin{align}
750{,}000^{2} = 562{,}500{,}000{,}000
\end{align}
$$

上記は$5{,}600$億に対応し、昨今注目を集めるPaLMの$5{,}400$億と同様な数字になります。このようにMLPをそのまま適用すると$1$層の計算だけで計算量が大変大きくなります。

この解決にあたっては「入力の特徴を活用する」ということが原則用いられます。たとえば画像であれば「近傍のピクセルのRGB値に近いRGB値を持つ」、言語であれば「近傍の単語によって用いられる単語が決まる」などです。

画像の拡大例:線と背景の境界であってもそれぞれのピクセルは似通った色(RGB値)を持つ

上図は画像を拡大したものですが、拡大を行いピクセル単位に着目することで、それぞれのRGB値は近傍の値に概ね近い値を持つことが確認できます。このことを「高い相関を持つ」ということもあります。「相関」は統計学に出てくる「相関係数」と同じ意味です。

画像の場合はこのように「近傍のピクセルと似たようなRGB値を持つ」という特徴を元に畳み込みニューラルネットワーク(CNN)という手法を用いることが多いです。

ニューラルネットワークの構造的仮定②:RNN

画像ではCNNが用いられることが多い一方で、「時系列処理・信号処理・言語処理」などの数字や記号の列を取り扱う場合はリカレントニューラルネットワーク(RNN)という仕組みが従来的にはよく用いられてきました。

RNNの処理概要:中間層(隠れ層)の値を次の中間層に作用させる、基本的には数値を加算すると理解しておけば良い

入門書などではRNNの改良の一つであるLSTMが紹介されることが多いですが、TransformerによるパラダイムシフトによってLSTMはRNNの一種であると括ることが多くなったことも合わせて抑えておくと良いです。

ニューラルネットワークの構造的仮定③:グラフニューラルネットワーク

主なニューラルネットワークの構成の例にはCNNとRNNが挙げられることが多い一方で、近年ではグラフニューラルネットワーク(GNN)が注目を集めることも多くなりました。GNNはRNNの発展形であると見なすこともできるなど、大変強力な手法です。

グラフニューラルネットワークを理解するにあたっては、下図で取り扱った「グラフ」と「隣接行列」の対応を抑えておくと良いです。

グラフと隣接行列:左がグラフ、右が隣接行列に対応。たとえばグラフで$1$と$2$の点が連結していることを隣接行列では$1$行$2$列と$2$行$1$列の成分が$1$であることで表す。

グラフは点と線を用いて物事の関連性を表す考え方です。駅の路線図やフローチャートのように複雑な物事を簡易的に表すにあたってよく用いられます。グラフニューラルネットワークの解説は抽象的になりがちなので以下具体的な例を元に確認します。

緑の枠で囲った領域はそれぞれニューラルネットワークの中間層(隠れ層)に対応する、ここでは箱が$5$つあるので$5$次元の中間層を図示したものであると理解すればよい。左がRNN、右がグラフニューラルネットワークを表す。

上図はWord$2$vecで確認した「本屋、行く、統計、教科書、買う」の「RNN」と「類似度に基づくGNN」の参照構造です。RNNでは入力の順番に基づいて隠れ層の作用が行われる一方で、GNNではそれ以外の参照構造に基づいて隠れ層同士の相互作用の演算を行うことが可能です。

GNNは参照構造をグラフで与えることで計算を行うことができるので、処理の自由度が非常に大きくなります。たとえば時系列順にグラフを与える場合、GNNはRNNに一致します。

このように自由度の高い処理が実現できるグラフニューラルネットワーク(GNN)を元に単語の類似度に基づいてグラフを構築することで処理を定義したのがTransformerです。Transformerについては詳しくは次節で取り扱います。

なぜRNNでは十分なパフォマンスが出なかったのか

Transformerが出てくる以前は「時系列問題・言語処理」などを取り扱うニューラルネットワークにRNNやRNNを改良したLSTMの使用が検討されることが多かった一方で、入力が$20$〜$50$以上になるとうまく取り扱えないという問題がありました。

上記の問題は「入力を$1$つずつ処理し、中間層(隠れ層)を次の入力に作用させる」RNNの構造に起因します。直感的には「伝言ゲーム」や「都市伝説」のように「伝達処理」を$10$回、$20$回と繰り返すうちに最初の方の情報が消失すると解釈すると良いです。

たとえば一回あたりに$90$%の伝達効率だとする場合、伝達処理を$20$回行うと$0.9^{20}$を元に約$12.2$%、$50$回行うと$0.9^{50}$を元に約$0.5$%が得られます。計算の詳細は流しても良いので、「$90$%で伝達できる場合も回数が多くなると情報が消失する」だけ確実に抑えておきましょう。

Transformerの処理の流れ

Attention

Transformerのベースになった主要な処理の$1$つがAttentionです。Attentionは「中間層(隠れ層)の重み付け和」を計算することで「伝言ゲーム」のように情報が消失するRNNの問題の解決を行う手法です。

RNNとAttentionの図解:Attentionでは全ての中間層の重み付け和を元に出力層の計算を行う、実線は重み付け和を表す。

RNNでは入力する系列(記号列・単語列をまとめて系列といいます)に対し順々に処理を行いましたが、Attentionでは重み付け和を計算することで情報の消失を抑えることができます。これにより系列が長い場合も処理が可能になります。

オリジナルのTransformerではデフォルトで$512$までの長さの系列を取り扱うことが可能になるように実装されることも合わせて抑えておくと良いと思います。

self Attention

Attentionを用いる上で用意する必要があるのが「重み付け和」を計算するときの「重み」です。この値はどのように計算するのが良いでしょうか。「外部から与える」というのも可能である一方で、ニューラルネットワークの構成が大変複雑になるなど課題もありました。

この解決にあたって用いられるのがself Attentionという考え方です。self Attentionでは「入力データから中間層(隠れ層)を得る一方で、隠れ層の値に基づいてAttentionの重みの計算」も行います。

self Attentionでは隠れ層のベクトルの値に基づいてAttention計算に用いる重みの計算を行う

「入力に基づいてどのように重みを計算すると良いか」については様々な手法が考案されましたが、その中で「最もシンプルかつ強力な手法」がTransformerで用いられるDot Product Attentionです。

Dot Product Attention

Dot Product Attentionはself Attentionを実現する一つの手法であり、「単語」などの類似度に基づいてAttentionの重みの計算を行います。ここでDot Productは内積を意味し、大まかにはベクトルの類似度を計算することに対応します。

ベクトルを図で理解する場合、「向き」と「大きさ」を持った「矢印」であると見ることができますが、「内積」はこの「矢印」の類似度を計算する方法です。

$3$つのベクトルの例

たとえば上図のような$3$つのベクトルがある場合、「左と真ん中」は直交するので類似度は$0$、「左と右」、「真ん中と右」は少なからず同じ向きを向くので「$0$より大きい類似度」が得られればベクトルの類似度を計算したことになります。

内積では同じ位置の要素の掛け算を行い、それぞれの要素ごとに和を計算することでベクトルの類似度を計算します。図の例では具体的に下記のような計算を行います。
・左のベクトルと真ん中のベクトルの内積
$$
\large
\begin{align}
1 \times 0 + 0 \times 1 = 0
\end{align}
$$

・左のベクトルと右のベクトルの内積
$$
\large
\begin{align}
1 \times 0.7 + 0 \times 0.7 = 0.7
\end{align}
$$

・真ん中のベクトルと右のベクトルの内積
$$
\large
\begin{align}
0 \times 0.7 + 1 \times 0.7 = 0.7
\end{align}
$$

上記のような計算により、ベクトルの類似度を計算することができます。ここでは単純化にあたってベクトルの要素が$2$つかつ大きさが概ね等しい場合を取り扱いましたが、Transformerでも概ね同じようなイメージで理解することができます。

赤で囲った「統計」と「教科書」は同じ場所が$1$であることが多く類似度が高く(内積が大きい値で)計算される。同様に青で囲った「本屋」と「教科書」も同じ場所が$1$であることが多く類似度が高く計算される。

上記に基づいて類似度の高い単語を線で結ぶことで下図のようなグラフを得ることができます。

Attentionとグラフニューラルネットワーク

$2017$年のTransformerの論文では「RNNを用いないでAttentionのみを用いた」などと記載されており、多くのTransformerの解説コンテンツはこの記載に基づいてAttentionの解説に注力しがちです。

一方で、入門書ではMLP・CNN・RNNを学ぶことが多く、Transformerの解説で唐突にAttentionが出てくることで理解が難しいというのも起こりがちだと思います。実際問題、Attentionはどのように理解すると良いのでしょうか。

上記については「RNN」$\longrightarrow$「GNN(グラフニューラルネットワーク)」$\longrightarrow$「Attention・Transformer」の順に拡張したと解釈すると理解しやすいと思います。

上図は前節では取り扱ったRNNとグラフニューラルネットワークの対応を表すのに用いましたが、右のグラフニューラルネットワークにおける線は前項の「Dot Product Attention」で計算した結果に基づきます。

ここまでの内容を元に、「Transformerは類似度計算に基づいてグラフを構築したグラフニューラルネットワークである」と解釈できます。同時に「Attention処理はグラフニューラルネットワークにおける処理プロセスの$1$つである」と解釈することもできます。

「Attention・Transformer」と「グラフニューラルネットワーク」の対応は上図のように表すことができます。詳細については下記で取り扱ったので省略しますが、Attentionはグラフニューラルネットワークの処理プロセスの$1$つと見なせることは抑えておくと良いです。

Inductive biasとTransformer

当記事ではCNN、RNN、GNNなど、様々なニューラルネットワークを紹介しましたが、これらを理解する上でInductive biasという用語を抑えておくと良いです。

Inductive biasは「ニューラルネットワークを構築する際に設定する構造的仮定」のことを指します。具体的には「画像」は「ピクセルの値が近傍のピクセルと相関する」、「時系列問題」は「近い時点の入力が相関する」などが対応します。

同様にオリジナルのTransformerが取り組んだ「機械翻訳」では、「近い語順同士で相関する」と同時に「似た意味の単語が相関する」ということが起こり得ます。RNNではこの単語の意味まで取り扱えていなかった一方で、Transformerでは取り扱えるようになったというのがブレークスルーが生じた一因になったと解釈できます。また、Transformerでは「近い語順」を取り扱うにあたって、「Positional Encoding」という仕組みを用いることも合わせて抑えておくと良いです。このようにニューラルネットワークを構築する際には「問題の特性」をうまくニューラルネットワークの構造に反映させることが重要になります。

まとめ

Q&A

・グラフが唐突に出てきて難しい
当記事で出てきた「グラフ」は「グラフ理論」という分野の一部です。グラフ理論を詳しく学ぶと難しい一方で、当記事で出てきたレベルでは「グラフ」と「隣接行列」の対応を具体例を元に抑えておくだけで十分です。「行列」と「図」の対応を何度も確認することで理解できるのではないかと思います。

・Transformerが強力な理由
Attentionという仕組みに基づいて位置的には離れているが意味的に重要な関連性を取り扱うことができるようになったことが大きいと解釈できます。

・元論文を読むのに必要な数学レベル
Transformerの元論文を読むにあたっては「行列」について抑えている必要があります。「行列」を無理なく習得するにあたっては高校数学+線形代数の基本は抑えておくのが良いと思います。

さらなる学習にあたって

Udemyで解説コンテンツを作成いたしましたので、下記などを元に確認すると良いと思います。多少難しい内容も含まれますが、映像での解説なので理解しやすいのではないかと思います。