Transformerとは?Self-Attentionで並列に読む仕組み
RNNの逐次処理の限界をどう越えたか
Transformerはモデルではなく設計方式だ。2017年のGoogleの論文「Attention Is All You Need」で出てきた。Encoderだけを使えばBERT、Decoderだけを使えばGPT・Claude・GeminiのようなLLMになる。
それ以前のRNN・LSTMは文を前から1単語ずつ読む必要があり、並列に回しにくく、文が長いと前の方の情報がぼやけた。TransformerはSelf-Attentionで文の中のすべての位置を一度に見る。トークンごとにQuery・Key・Valueのベクトルを作り、ほかのトークンをどれだけ参考にするか(attention score)を計算する。順番の情報はPositional Encodingで別に足す。
3種類の名前を混ぜない
「LLMとディープラーニングは何が違う?」から始まって、「BERTはディープラーニングの下位概念?」「ClaudeもGPT系?」まで質問が続いたことがある。詰まるところは毎回同じだった。構造の名前(Transformer、Encoder、Decoder)、モデルの名前(BERT、GPT、Claude)、道具の名前(Hugging Face transformers、Claude Code)が1つの文に混ざって出てくる。3つを分けたら全部ほどけた。
Rails開発者にはこのたとえがいちばん早く通じた。
MVCパターン ↔ Transformerの構造 (概念、設計方式)
Rails / Django ↔ Hugging Face transformers (その概念を使いやすくしたコード)
EncoderとDecoderの違いは「後ろを見られるか」だ。Encoderは「私は[?]だ」のように空欄の前後を全部見て当てる。Decoderは「私は学生」までだけを見て次のトークンを当てる。後ろはcausal maskで隠す。
| BERT(Encoder) | GPT系LLM(Decoder) | |
|---|---|---|
| 学習 | 穴埋め | 次トークン予測 |
| 得意なこと | 分類・検索・埋め込み | 生成・対話・推論 |
| 規模 | base 1.1億・large 3.4億パラメータ | 数十億以上 |
紛らわしい名前も一緒に整理しておくと楽だ。GPTはOpenAIのモデルのブランドなので、「Decoder-only」と同じ意味ではない。Claude・GeminiはAnthropic・Googleがそれぞれ作ったDecoderベースのLLMで、GPT系ではない。Claude Code・ChatGPTはモデルではなく、モデルを使う道具・アプリだ。
LLMは別の軸だ
「Transformerの中にLLMとBERTがある」とまとめると軸が混ざる。Encoder-only・Decoder-onlyは構造の軸で、LLM(大規模言語モデル)は規模・用途の軸だ。今のLLMがほぼすべてDecoder-onlyなので、同じ言葉のように使われているだけだ。
同じ構造なのになぜ性能が違うのか
骨組みが似ているのは確かだ。差は構造の外で生まれる。規模(パラメータ・層数)、学習データ、その後の追加学習(RLHFなど)、tokenizerがすべて違い、その結果である重みはまったく別物になる。Shopifyと個人ブログがどちらもMVCだからといって似たアプリではないのと同じだ。重みが何を持っているかは構造は回路図、重みはつまみの位置に続けて書いた。
モデル名と構造が混ざってチーム内の話がかみ合わないなら、negabaroに気軽に相談してもらって構わない。
キーコンセプト
入力テキストをトークンに分割 → 各トークンを埋め込みベクトルに変換
Positional Encodingを追加 — トークンの位置情報をベクトルに加算
各トークンからQuery(Q)、Key(K)、Value(V)ベクトルを生成
Attention Scoreを計算: softmax(QK^T / √d) × V — 各トークンが他のトークンにどれだけ注目するかを決定
Multi-Head Attention: 複数のattentionを並列実行 → 多様な関係パターンを捕捉
Feed-Forward Network + Layer Normalization + Residual Connectionで最終出力を生成
メリット
- ✓ 完全な並列処理が可能 → GPU活用を最大化
- ✓ 長いシーケンスでも情報損失なし(Self-Attention)
- ✓ 多様なタスクに汎用的に適用
- ✓ スケーリング則(モデルが大きいほど性能向上)
デメリット
- ✗ O(n²)メモリ — シーケンス長の二乗に比例するメモリ使用
- ✗ 大規模学習に膨大なGPU/TPUが必要
- ✗ 位置情報を別途エンコードする必要がある
- ✗ 学習データの偏りをそのまま反映