AI・データ●●●●○

Transformer

Transformer ・ とらんすふぉーまー

自己注意機構で系列全体の関係を並列に捉えるモデル構造。LLMをはじめ現代AIの土台。

✦ 30秒で試す — 航海「それ」が何を指すかを、AIは文中の全員に聞いて決めている文の長さを2倍にすると、関連の強さの計算量は?予想してみる

概要

Transformerは、2017年の論文「Attention Is All You Need」で提案されたニューラルネットワークの構造(アーキテクチャ)です。文章のような「並び順に意味があるデータ(系列データ)」を扱うためのモデルで、その中核にあるのが「自己注意機構(self-attention)」— 系列の中の各要素が、他のすべての要素との関連の強さを自分で計算する仕組みです。

登場からわずか数年で、機械翻訳・文章生成・画像認識・音声処理と、AIのほぼ全分野の標準構造になりました。大規模言語モデルのGPTやClaudeはもちろん、画像生成モデルの多くもTransformerを土台にしています。「現代AIの語彙はほぼすべてこの一枚の設計図の上にある」と言ってよいほどの、分水嶺となった発明です。

名前の由来は、入力の系列を別の系列へ「変換(transform)」するモデルであることから来ています。当初は機械翻訳(英語の系列→日本語の系列)のために設計されましたが、その仕組みが言語に限らない汎用性を持っていたことが、後の爆発的な普及につながりました。

なぜ生まれたか

Transformer 以前、文章を扱うモデルの主役は RNN(再帰型ニューラルネットワーク)とその改良版の LSTM でした。これらは文章を「先頭から1語ずつ順番に」読み、それまでの内容を内部状態という一つの記憶に圧縮しながら進む方式です。この設計には二つの根深い問題がありました。第一に、長距離の依存関係に弱いこと。「文頭の主語」と「文末の動詞」の関係を捉えるには、間のすべての語を通り抜けて記憶を持ち越す必要があり、距離が離れるほど情報が薄れてしまいます。第二に、並列化できないこと。3語目の処理は2語目の結果を待たなければ始められないため、GPUが得意とする「大量の計算を同時に走らせる」力を活かせず、学習に途方もない時間がかかりました。

Transformerはこの二つを同時に解決しました。逐次処理を完全に捨て、「各語が他のすべての語を直接見に行く」自己注意機構だけで文脈を捉えることにしたのです。どの語のペアも距離に関係なく1ステップで結びつき、しかも全語の計算を同時に実行できます。論文タイトルの「Attention Is All You Need(注意機構さえあればよい)」は、当時RNNの補助として使われていた注意機構を主役に据え、RNNそのものを不要にした、という宣言でした。

詳細

自己注意の直観 — 各語が全体を見渡して自分を更新する

自己注意の直観はこうです。文中の各トークン(語をさらに細かく分けた処理単位)は、まず埋め込みとして意味を表すベクトルに変換されます。そのうえで各トークンは「自分の意味を確定させるには、文中のどのトークンに注目すべきか」を計算し、注目した相手の情報を取り込んで自分のベクトルを更新します。たとえば「銀行の口座を開いた。それは便利だった」の「それ」は、「口座」に強く注目してその情報を取り込み、曖昧な指示語から「口座のこと」を表すベクトルに変わります。

この「注目の度合い」の計算を1語ぶん追ってみます。第一に、各トークンのベクトルに3つの行列を掛けて、3種類のベクトルを作ります。問い合わせのクエリ q(「私はどんな情報を探しているか」)、見出しのキー k(「私はどんな情報を持っているか」)、中身の値 v(「注目されたら渡す情報」)です。第二に、「それ」のクエリと全トークンのキーの内積を取ります。内積は2本のベクトルの向きがそろっているほど大きくなるので、これが関連度のスコアになります(次元数の平方根で割って大きさをそろえます)。第三に、スコアを softmax で合計1の重みに変えます。第四に、全トークンの値 v を、この重みで平均します。できあがった重み付き平均が、文脈を取り込んだ「それ」の新しいベクトルです。

クエリ qそれキー k内積 q・ksoftmax の重み銀行口座開いた便利1.63.50.81.012%77%5%6%新しい「それ」≒ 口座の情報Σ 重み × 値 v実際には文中のすべてのトークン(「それ」自身も含む)について同じ計算をし、全員ぶんを行列の掛け算で同時に行う
1語の更新 — クエリとキーの内積で重みを決め、値を重み付き平均する

q・k・v を作る3つの行列は、学習で決まります。つまり「どの語がどの語に注目すべきか」の基準そのものを、モデルはデータから身につけます。この「全員が全員を見て、重みで混ぜる」操作を、Transformer は多頭注意(multi-head attention)として何組も並行に走らせます。あるヘッドは係り受けに、別のヘッドは意味の近さに、というように異なる観点の関連を同時に捉え、それを何層も積み重ねることで、語どうしの関係から文章全体の論理まで、段階的に深い文脈を組み立てていきます。

下の部品では、9つのトークンを2次元のベクトルとして平面に置いてあります(簡単のため q・k・v はベクトルそのもの)。語を押してその語から見た注意に切り替えたり、点をドラッグして向きを変えたりして、重みと文脈ベクトルがどう動くかを確かめてください。

⚡ 体験: 1語が全員を見て、重みで混ぜる(自己注意)
文(押すと、その語から見た注意に切り替わる)銀行の口座を開いたそれは便利だった埋め込みの平面 — 点はつかんで動かせる原点文脈ベクトル銀行の口座を開いたそれは便利だった「それ」から各トークンへの重み(合計100%)銀行10%の0%口座63%を0%開いた4%それ17%は0%便利5%だった0%
選んだ語それいちばん注目している語口座 63%「それ」の注目先口座

「それ」を選んであります。「それ」から全トークンへの注意の重みが線の太さで出ていて、いちばん強いのは「口座」(63%)です。ほかの語の点をドラッグして「それ」と同じ向きへ動かすと、注意が移ります。

逐次処理の RNN との違いを並べると、Transformer の設計の狙いがよく分かります。

RNN — 逐次処理昨日買った本を読む前の語の結果を待つバケツリレー遠い語の情報は途中で薄れる並列化できないTransformer — 自己注意昨日買った本を読む各語が他の全語を直接参照する距離に関係なく1ステップで結びつく全語を同時に計算できる
RNNとTransformerの情報の流れ方の違い — 逐次のバケツリレーか、全語への直接参照か

構成要素 — 注意機構だけではない

Transformer の1層(ブロック)は、自己注意と、その出力をトークンごとに変換する順伝播ネットワーク(フィードフォワード層)のペアでできていて、大規模なモデルではこれを数十〜百数十層積み重ねます(GPT-3 は96層、Llama 3.1 405B は126層)。学習を安定させる残差接続と正規化層が各所に挟まれているのも、深く積めるようになった重要な工夫です。もうひとつ欠かせないのが位置エンコーディングです。自己注意は全トークンを対等に見るため、そのままでは語順の情報が消えてしまいます。そこで各トークンに「自分が何番目か」を表す信号を混ぜ込み、語順を回復しています。元論文は正弦波で作った位置の信号を足していましたが、現在の LLM の多くは、q と k を位置に応じて回転させる RoPE(回転位置埋め込み)を使っています。

元論文の構成は、入力文を読むエンコーダと出力文を作るデコーダの二部構成でした。その後、文章の理解タスク向けにエンコーダだけを使う BERT 系、文章生成向けにデコーダだけを使う GPT 系へと分かれ、現在のLLMの主流はデコーダのみの構成です。デコーダの自己注意には、自分より後ろのトークンの重みを0にする「マスク」がかかっていて、各トークンは前のトークンだけを見て次の1トークンを予測します。これがそのまま LLM の文章生成の仕組みになっています。

並列化がスケール則への扉を開いた

Transformerの歴史的な意義は、精度の向上そのもの以上に「学習を並列化できるようにしたこと」にあります。全トークンの計算が同時に走るためGPUを数千台束ねた分散学習と相性が良く、機械学習の世界に「データ量・計算量・モデルの規模を増やすほど、性能が予測可能なかたちで伸び続ける」というスケール則(scaling laws)の発見をもたらしました。モデルを大きくする競争が合理的な戦略になったのはこのためで、Transformerなくして現在のLLMの規模は成立していません。

一方で弱点も構造に由来します。自己注意は全トークンの組み合わせを計算するため、計算量は系列長の2乗で増えます。一度に読める長さの上限であるコンテキストウィンドウが存在するのはこのためです。長い文書を扱うほどコストが急増するこの制約に対し、注意の範囲を絞る工夫や効率的な実装(FlashAttentionなど)、状態空間モデルのような代替アーキテクチャの研究が現在も活発に続いています。Transformerは完成形ではなく、いまも進化の途上にある土台なのです。

試問

「銀行 の 口座 を 開いた 。 それ は 便利 だった」の9つのトークンが、2次元のベクトル(平面の点)として置かれています。「それ」から各トークンへの注意の重み(合計100%)が、線の太さと右の棒で出ています。いまは「口座」に最も強く注目しています。「それ」以外の点はつかんで動かせます。

✦ 命題挑戦中

「それ」の点は動かさずに、「それ」の注意の半分以上を「銀行」へ向けよ

  • 「それ」がいちばん強く注目する語が「銀行」
  • 「それ」から「銀行」への重みが 50%以上
⚡ 体験: 1語が全員を見て、重みで混ぜる(自己注意)
文(押すと、その語から見た注意に切り替わる)銀行の口座を開いたそれは便利だった埋め込みの平面 — 点はつかんで動かせる原点文脈ベクトル銀行の口座を開いたそれは便利だった「それ」から各トークンへの重み(合計100%)銀行10%の0%口座63%を0%開いた4%それ17%は0%便利5%だった0%
選んだ語それいちばん注目している語口座 63%「それ」の注目先口座

「それ」を選んであります。「それ」から全トークンへの注意の重みが線の太さで出ていて、いちばん強いのは「口座」(63%)です。ほかの語の点をドラッグして「それ」と同じ向きへ動かすと、注意が移ります。