🐼

なぜ Transformer はすごいのか?ざっくり直感でつかむ解説

に公開

はじめに

生成AIの基盤技術として今や知らない人はいない「Transformer」。
会社の勉強会で、私はこの Transformer をテーマに登壇しました。本記事ではその内容を整理し、「なぜ今 Transformer が重要なのか」「どのように動いているのか」 を直感的に理解できるようにまとめます。

Transformerとは?

2017年、Google の研究者による論文 「Attention Is All You Need」 で提案されたニューラルネットワークモデルです。
当初は機械翻訳や文章要約といった 系列データを別の系列データに変換する「系列変換タスク」 を想定して開発されましたが、その後の発展により ChatGPT をはじめとする大規模言語モデル(LLM)の基盤技術 となりました 。

Transformer以前のニューラルネットワークの問題点

Transformer の革新を理解するには、まず従来の手法の課題を押さえることが重要です。

  • RNN(再帰型ニューラルネットワーク)
    順次的に文を処理し、文脈を内包する形式ですが、長文になると勾配消失によって文脈を保持できず、長期依存関係が苦手です。また、逐次処理であるため並列化が難しく、学習に時間がかかります。

  • CNN(畳み込みニューラルネットワーク)
    局所的なパターン認識には強いものの、長文における離れた単語同士の関係を捉えるのは得意ではありません。

Transformerの強み

  • Transformer は Attention Mechanism(注意機構) を導入することで、以下の利点を持ちます:
    単語間の関連度を直接計算し、文脈を理解できる
    -> Self-Attention により、文中の任意の位置の単語同士の関係を数値的に表せる。

  • 長距離の依存関係を効率よく処理できる
    -> 「遠く離れた単語」同士も一度の計算で関連づけられるため、長文理解に強い。

  • 入力全体を並列に処理でき、学習の高速化を実現
    -> RNN のように逐次処理せず、一括で処理できるため GPU による並列化が可能。

Transformer がどうやって文脈を理解するかを直感でつかむ:例文で解説

ここでの解説は、あくまでイメージをつかむために大幅に単純化した説明です。実際のモデルではベクトルの次元数は数百~数千に及び、計算もより複雑ですが、本記事では「直感的な理解」を重視して解説しています。

形態素解析(単語の分割)

「彼女は駅で猫を見かけて写真を撮った。」という文を、そのままではモデルに入力できません。日本語はスペースで単語が区切られていないので、形態素解析によって最小単位に分割します。

彼女 / は / 駅 / で / 猫 / を / 見かけて / 写真 / を / 撮った / 。

トークンIDへの変換(数値化)

ニューラルネットワークは文字そのものを扱えないので、語彙辞書(Vocabulary) に基づいて各単語を 数値ID に変換します。
例)

彼女 / は/ 駅 / で/ 猫/ を/見かけて/写真/を/撮った/。

->

2154/17/3232/21/4610/18/3972/5577/18/6741/8

こうして文字列が「数字の並び」に変換されます。これを トークン化 と呼びます。

Embedding(意味ベクトルへの変換)

数字(トークンID)はただのラベルにすぎないので、「その単語の意味を数値で表したベクトル」 に変換します。モデルは「語彙数 × 次元数」の埋め込み行列を持ち、そこから対応する行を取り出します。
例)

2154/17/3232/21/4610/18/3972/5577/18/6741/8

->

[ 0.21, -0.45,  0.33 ], [ -0.18,  0.12,  0.04 ], [ 0.66, -0.05, -0.11 ], [ 0.03,  0.19,  0.07 ],
[ 0.45,  0.22, -0.09 ], [ -0.09, -0.14,  0.06 ], [ 0.30, -0.33,  0.48 ], [ 0.11,  0.44,  0.02 ],
[ -0.03,  0.06,  0.01 ], [ 0.59, -0.28, -0.17 ], [ -0.09, -0.14,  0.06 ],

実際には BERT などで768次元のベクトルですが、ここではイメージのため3次元に縮小して示しています。

Positional Encoding(位置エンコーディング)

Transformer には RNN のような「順序を自然に保持する仕組み」がないため、単語が文のどの位置にあるかという情報を数値ベクトルに加えます。
単語の意味ベクトルに「位置の情報ベクトル」を足し合わせることで、モデルは「どの単語が文中の何番目にあるか」を認識できます。

これにより、並列処理をしても文の順序情報を失わないのがポイントです。

Residual(残差接続)

Residual(残差接続) は、各サブレイヤーの出力に元の入力をたしたものを次の処理に回す仕組みです。
これによって、深いネットワークでも勾配が安定して伝播し、学習が安定します。また、情報が途中で失われにくく、元の状態を「思い出させる」役割も果たします。

Layer Normalization(レイヤー正規化)

各トークンのベクトルにはスケール(大きさのばらつき)があるため、平均を0・分散を1に正規化して扱いやすくします。
目的は以下の2つ:

  • 学習を安定・高速化するため(勾配爆発や消失を防ぐ)
  • すべてのトークンを公平に扱うため
    正規化のおかげで、Transformer は深い層でも効率的に学習できます。

Self-Attention(自己注意機構)

各単語が「他のどの単語に注目すべきか」を計算し、文脈を捉えます。
例)
「撮った」 ->「写真を」「猫を」「見かけて」と結びつく(動作の対象や背景を理解)
「見かけて」->「猫を」「駅で」と結びつく(誰が・どこで・何を見かけたかを理解)

こうして文全体の意味構造が浮かび上がります。では、この自己注意(Self-Attention)が実際にどのように計算されているのか、もう少し掘り下げて見ていきましょう。

1. Q, K, V の生成(ベクトル変換)
各入力トークン(例: 「彼女」「は」「写真」「撮った」)に対して、埋め込みベクトル x をもとに、Query ベクトル (Q)、Key ベクトル (K)、Value ベクトル (V)をそれぞれ線形変換で生成します。

Q = XW^Q, \quad K = XW^K, \quad V = XW^V

  • X: 入力トークンの埋め込みベクトル(行列)
  • W^Q, W^K, W^V: 学習可能な重み行列
  • Q, K, V: それぞれの変換後ベクトル
トークン 埋め込みベクトル x Q (Query) K (Key) V (Value)
彼女 [ 0.21, -0.45, 0.33 ] [ 0.12, -0.08, 0.33 ] [ 0.10, -0.02, 0.29 ] [ 0.15, 0.01, 0.40 ]
[-0.18, 0.12, 0.04 ] [-0.05, 0.11, 0.02 ] [ -0.04, 0.13, -0.01 ] [ 0.01, 0.02, 0.03 ]
写真 [ 0.59, -0.28, -0.17 ] [ 0.59, -0.28, -0.17 ] [ 0.60, -0.29, -0.16 ] [ 0.58, -0.27, -0.18 ]
撮った [ 0.03, 0.19, 0.07 ] [ 0.02, 0.14, 0.04 ] [ 0.03, 0.15, 0.01 ] [ 0.05, 0.12, 0.03 ]

2. Query と Key の内積で「関連度」を計算
注目したいトークン(例: 「撮った」)の Query ベクトル と、文中のすべての Key ベクトル の内積を計算します。
これにより「撮った」が各トークンにどれくらい関係しているかを数値化できます。

トークン 埋め込みベクトル x Q (Query) K (Key) V (Value)
彼女 [ 0.21, -0.45, 0.33 ] [ 0.12, -0.08, 0.33 ] _[ 0.10, -0.02, 0.29 ] [ 0.15, 0.01, 0.40 ]
[-0.18, 0.12, 0.04 ] [-0.05, 0.11, 0.02 ] [ -0.04, 0.13, -0.01 ] [ 0.01, 0.02, 0.03 ]
写真 [ 0.59, -0.28, -0.17 ] [ 0.59, -0.28, -0.17 ] [ 0.60, -0.29, -0.16 ] [ 0.58, -0.27, -0.18 ]
撮った [ 0.03, 0.19, 0.07 ] [ 0.02, 0.14, 0.04 ] [ 0.03, 0.15, 0.01 ] [ 0.05, 0.12, 0.03 ]

例)

  • 「撮った」の Query ベクトル: [0.02, 0.14, 0.04]

  • 「彼女」の Key ベクトル: [0.10, -0.02, 0.29]

0.02 × 0.10 + 0.14 × (-0.02) + 0.04 × 0.29 = 0.002 − 0.0028 + 0.0116 = 0.0108
  • 「は」の Key ベクトル: [-0.04, 0.13, -0.01]
0.02 × (−0.04) + 0.14 × 0.13 + 0.04 × (−0.01) = −0.0008 + 0.0182 − 0.0004 = 0.0170
  • 「写真」の Key ベクトル: [0.25, 0.15, 0.32]
0.02 × 0.25 + 0.14 × 0.15 + 0.04 × 0.32 = 0.005 + 0.021 + 0.0128 = 0.0388
  • 「撮った」(自分自身)の Key ベクトル: [0.03, 0.15, 0.01]
0.02 × 0.03 + 0.14 × 0.15 + 0.04 × 0.01 = 0.0006 + 0.021 + 0.0004 = 0.0220

3. Softmax でスコアを正規化
softmax関数で確率分布を求めます。これがAttentionスコアです。実際のAttentionでは、スコアをSoftmaxに入れる前にスケーリング(例:√dkで割る)を行います。これによりSoftmaxの勾配が極端にならずすぎず、安定した学習が可能になります。
※以下の数値例では計算をわかりやすくするため、スケーリング(√dk)を省略しています。

例)
「彼女」 :24.72%
「は」   : 24.88%
「写真」  : 25.43% ←一番高い(最も関連性が高い)
「撮った」 : 24.97%

4. Value ベクトルの加重平均を計算
Attention スコアを Value ベクトル に掛け合わせ、すべての単語について和をとります。これにより「撮った」の文脈を反映した新しいベクトルが得られます。
例)

トークン Attention スコア V (Value ベクトル) Attention × V(要素ごとの積)
彼女 0.2472 [0.15, 0.01, 0.40] [0.0371, 0.0025, 0.0989]
0.2488 [0.01, 0.02, 0.03] [0.0025, 0.0050, 0.0075]
写真 0.2543 [0.58, -0.27, -0.18] [0.1475, -0.0687, -0.0458]
撮った 0.2497 [0.05, 0.12, 0.03] [0.0125, 0.0300, 0.0075]
合計 [0.1996, -0.0312, 0.0681]

5. 出力ベクトルを次の層に渡す
最終的に、「撮った」というトークンの 意味ベクトル + 文脈情報 を反映した新しい表現が得られます。これを次の層に渡すことで、文全体の意味理解が進みます。

Self-Attentionまとめ

  • 各トークンから Q, K, V を作る
  • Query と Key の内積で関連度を計算
  • Softmax で確率化(Attention スコア)
  • Value を加重平均して文脈を反映
  • 出力ベクトルを次の層に渡す

この流れが Self-Attention の仕組み であり、Transformer が「文脈を理解」する仕組みです。
Self-Attention の流れを理解したところで、次に重要になるのが Multi-Head Attention(マルチヘッド・アテンション) です。

先ほど見たような「1つの視点での自己注意」だけでは文脈理解に偏りが出てしまうため、Transformer では複数の異なる視点を並行して学習し、組み合わせる仕組みが導入されています。

Multi-Head Attention

Self‑Attention を複数の「ヘッド」(視点)で並行して計算します。各ヘッドは独自に Query, Key, Value に線形変換を行い、Attention を計算した後、全ヘッドの出力を連結(concat)し、再び線形変換で統合して最終出力を生成します。

各ヘッドは異なる関係性を強調して捉えるため、例えば、あるヘッドは「主語と動詞」のような文法的関係を捉え、別のヘッドは「場所と動作」や「意味的なつながり」などを捉えるなど、複数視点から情報を抽出できるようになります。
その結果、文脈を多角的に理解し、組み合わせることで、Transformer はより精緻で強力な文脈理解を実現します。

Transformerまとめ

Transformer は

  • 単語同士の関係を直接数値化できる Self-Attention
  • 複数の視点から関係性を捉える Multi-Head Attention
  • 並列処理による高速学習

といった特徴を備えることで、従来のRNNやCNNが抱えていた課題を解決し、大規模言語モデル(LLM)の基盤として欠かせない存在になりました。

本記事では「ざっくりと直感で理解する」ことを目的に解説しました。もしここで紹介した仕組みに興味を持ったなら、ぜひこれを足がかりにしてさらに学びを深めてみてください。
理論を掘り下げたり実装を追いかけたりすることで、Transformer の面白さや奥深さが一層見えてきます。

Discussion