時系列データを処理する歴史と、並列化を阻む構造的な壁
Transformer以前のモデルが抱えていた物理的なボトルネックを紐解きます。
イントロダクション:なぜ今、2017年の「Transformer論文」に立ち返るのか?
GPT、Llama、Claudeなど、AIモデルの世代交代は速く、個別のモデルを追い続けるだけでも大変です。そこで比較の基準になるのが、2017年に発表された「Attention Is All You Need」です。
この論文を今読む理由は3つあります。
1. 現代LLMに共通する構造がわかる
文章の中で、どの単語同士が強く関係するかを計算する仕組み(Self-Attention)は、現在の多くのLLMにも受け継がれています。原論文を押さえると、新しいモデルの変更点も追いやすくなります。
2. 大規模化できた理由がわかる
Transformerは再帰を外し、学習時の計算を大きな行列演算として並列に処理しやすくしました。この特徴が、大量のデータと計算資源を使う現在のLLMを支えています。
3. トレードオフの解き方がわかる
並列化のために逐次処理を外すと、そのままでは語順を扱えません。Transformerは、単語同士の関係を調べるSelf-Attentionと、単語の位置を伝えるPositional Encodingを組み合わせて、この問題を解きました。
原論文を基準にすると、Transformerを部品と役割に分けて理解できます。まずは、著者たちが取り除こうとしたRNNとCNNの制約から見ていきましょう。
2. RNN(再帰型ニューラルネットワーク)のジレンマ
RNNは、文章や音声のように順番を持つデータを扱うための仕組みです。文章を先頭から一語ずつ読み、それまでの内容を「内部状態」と呼ばれるベクトルにまとめて、次の計算へ渡します。人が前に読んだ内容を覚えながら文章を読み進める動きに似ています。
計算を簡単に書くと、現在の状態 h(t) は、現在の入力 x(t) と直前の状態 h(t-1) から作られます。
h(t) = f(x(t), h(t-1))
順番をそのまま計算へ取り込めるのはRNNの長所です。一方で、この仕組み自体が2つの問題を生みます。
前の計算が終わるまで進めない
h(2) を求めるには h(1) が必要で、h(3) を求めるには h(2) が必要です。同じ文章の中では、各単語の計算を一斉に始められません。

複数の文章をまとめて処理することはできますが、文章内の計算は一語ずつ進みます。文章が長くなるほど待ち時間も増えるため、大量の計算を同時にこなすGPUの性能を活かしにくくなります。
遠い情報ほど届きにくい
RNNは、それまでの情報を内部状態へまとめ、次の位置へ順番に渡します。文頭の情報を文末で使うには、その間にある多くの計算を通らなければなりません。長い伝言ゲームのようなものです。

学習時には、この長い経路を逆向きにたどって誤差を伝えます。その途中で小さな値の掛け算が続くと、勾配がほとんどゼロになる「勾配消失」が起こり、離れた単語同士の関係を学びにくくなります。LSTMやGRUはこの問題を軽減しましたが、一語ずつ順番に計算する制約は残りました。
語順を自然に扱える一方で、計算を並列化しにくい。これがRNNのジレンマです。
3. CNN(畳み込みニューラルネットワーク)の妥協案
RNNの逐次計算を避ける方法として、研究者たちはCNNを言語処理へ応用しました。「Attention Is All You Need」でも、ByteNetやConvS2Sといった畳み込み型のモデルが比較対象として挙げられています。
同じ層なら一斉に計算できる
CNNは、入力の一部分にフィルター(カーネル)を当て、近くにある単語の特徴を取り出します。同じフィルターを文章の各位置へ適用しますが、RNNのように直前の位置の計算結果を待つ必要はありません。ひとつ前の層の結果がそろえば、同じ層にある各位置を並列に計算できます。

この構造なら、GPUが得意な一括計算を使えます。RNNが抱えていた「文章の先頭から一語ずつ待つ」という制約は外せました。
一度に見えるのは近くだけ
一方、通常の畳み込みが一度に見られるのは、フィルターの幅に収まる範囲だけです。幅3のフィルターなら、ある位置で直接扱えるのは周辺の3語です。文頭の主語と文末の述語を一層で結びつけることはできません。

そこでCNNは層を重ねます。最初の層が近くの単語をまとめ、次の層がその結果をさらにまとめる。上の層へ進むほど、ひとつの出力が参照できる範囲、つまり「受容野」が広がります。
距離に応じて長くなる経路
ここで見るべきなのは、全体の計算量だけではありません。離れた2語の情報が出会うまでに、何層を通るかという「経路長」です。経路が長いほど、遠い位置どうしの関係を学ぶのは難しくなります。

原論文は、ConvS2Sでは必要な経路が単語間の距離に対して線形に増え、拡張畳み込みを使うByteNetでは対数的に増えると説明しています。ByteNetは増え方をかなり抑えましたが、距離に関係なく一層で直接つながるわけではありません。
RNNとCNNの違い
RNNは語順に沿って処理できますが、同じ文章の中では計算を並列化しにくい。CNNは同じ層の各位置を並列に計算できますが、離れた単語を結ぶには層を重ねる必要があります。
求められていたのは、各位置を並列に計算でき、遠く離れた単語どうしも短い経路で結べる仕組みでした。Self-Attentionは、文章中のすべての位置を一層で直接比較することで、この2つを両立させます。
4. Transformerのブレイクスルー:再帰を捨てて「すべてを1ステップで結ぶ」
RNNは順番待ちが必要で、CNNは離れた単語を結ぶまでに複数の層を通ります。Transformerは、この2つの制約をSelf-Attention(自己注意機構)で取り除きました。
発想の転換は明快です。文章を時系列データとして受け取っても、計算まで一語ずつ進める必要はない。すべての単語を同時に入力し、単語どうしの関係を一斉に調べます。
すべての単語を直接つなぐ
Self-Attentionでは、各単語が文章中のほかの単語を参照し、「どの単語をどれだけ重視するか」を計算します。
たとえば、文頭の主語と文末の述語が離れていても、その間にある単語を伝言ゲームのように経由する必要はありません。同じ層の中で、2つの単語を直接結びつけられます。

ここでいう「1ステップ」とは、文章全体の計算が一瞬で終わるという意味ではありません。ある単語の情報が別の単語へ届くまでに通る経路が、Self-Attentionの一層で済むという意味です。
最大パス長がO(1)になる
ニューラルネットワークでは、離れた情報どうしを結ぶ経路が短いほど、順伝播の情報や逆伝播の勾配を伝えやすくなります。この経路の最長値が「最大パス長」です。

文章の長さを n、ベクトルの次元数を d、畳み込みの幅を k とすると、原論文のTable 1では次のように整理されています。
- Self-Attention:計算量
O(n²d)、逐次操作数O(1)、最大パス長O(1) - RNN:計算量
O(nd²)、逐次操作数O(n)、最大パス長O(n) - CNN:計算量
O(knd²)、逐次操作数O(1)、最大パス長O(logₖn)
RNNでは、100語離れた位置へ情報を渡すために、最大100回の逐次的な経路を通ります。CNNは同じ層を並列に計算できますが、離れた位置まで受容野を広げるには層が必要です。CNNの O(logₖn) は、拡張畳み込みなどで受容野を効率よく広げる構成を前提としています。
Self-Attentionでは、文章内のどの2語も一層で直接つながるため、距離が伸びても最大パス長は O(1) のままです。文頭と文末の関係を学ぶための道のりが、単語間の距離に左右されません。
並列化しやすいが、計算量はゼロではない
Self-Attentionには、RNNのような単語単位の順番待ちがありません。各単語の組み合わせを行列演算としてまとめて計算できるため、GPUによる並列処理と相性がよい構造です。

原論文が想定した翻訳タスクのように、文章長 n がベクトル次元 d より小さい条件では、O(n²d) のSelf-Attentionは、O(nd²) のRNNより1層あたりの計算量も小さくなります。
ただし、Self-Attentionは全単語の組み合わせを比較するため、文章が長くなると計算量とメモリ使用量が n² に比例して増えます。最大パス長が O(1) であることと、計算量が O(1) であることは別です。
RNNとCNNの壁を同時に越えた
Transformerが実現したのは、次の2点です。
- 単語ごとの順番待ちをなくし、同じ層の計算を並列化する
- 離れた単語どうしを、一層のSelf-Attentionで直接結ぶ

再帰も畳み込みも使わず、Attentionを中心に文章全体の関係を計算する。この設計によって、大規模な並列学習へ進む道が開かれました。
では、Self-Attentionは「どの単語を重視するか」をどうやって数値に変えるのでしょうか。次回は、Query・Key・Valueをベクトルの検索システムとして読み解きます。



