AI・機械学習
初級
Transformer Architecture(トランスフォーマーアーキテクチャ)
Transformer Architectureは、人工知能・機械学習分野における重要な概念・技術です。
0 回閲覧
0 いいね
2026/4/25 更新
関連タグ
AI
機械学習
初心者向け
Transformer Architecture(トランスフォーマーアーキテクチャ)
概要
Transformer Architecture(トランスフォーマー)は、2017 年に Google の研究者が論文「Attention Is All You Need」で発表した、ニューラルネットワークの革新的なアーキテクチャです。従来の RNN や CNN に代わって Self-Attention メカニズムを中心に据え、並列処理能力・長距離依存の学習・スケーラビリティに優れます。現代の大規模言語モデル(GPT、BERT、Llama、Claude、Gemini)、画像認識(ViT)、音声認識(Whisper)など、ほぼすべての AI 分野の基盤技術となっています。
歴史的背景
従来の課題
- RNN/LSTM: 逐次処理で並列化困難、長距離依存が苦手
- CNN: 局所的特徴に偏り、グローバルな依存関係の捕捉が弱い
Transformer の革新
- Self-Attention: 全トークン間の関係を並列計算
- スケーラビリティ: パラメータ数の増加で性能向上
- 汎用性: 言語、画像、音声、コードすべてに適用可
基本構造
エンコーダー-デコーダー型(オリジナル)
Input → Encoder → Context → Decoder → Output
エンコーダー(Encoder)
- 入力: トークン列
- 処理: 双方向の文脈理解
- 用途: 分類、理解タスク(BERT)
デコーダー(Decoder)
- 入力: エンコーダーの出力 + 生成済みトークン
- 処理: 次トークン予測
- 用途: 生成タスク(GPT)
主要コンポーネント
1. Self-Attention(自己注意機構)
全トークン間の関連度を計算:
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
- Q (Query): 問い合わせベクトル
- K (Key): キーのベクトル
- V (Value): 値のベクトル
- d_k: キーの次元数(スケーリング)
動作:
- 各トークンを Q、K、V に変換
- Q と K の内積で関連度計算
- Softmax で確率化
- V との重み付き和を出力
2. Multi-Head Attention
複数の Attention を並列実行:
- ヘッド数: 通常 8、12、16、32 等
- 各ヘッド: 異なる部分空間での Attention
- 結合: 全ヘッドを結合して出力
効果:
- 多様な関係性: 構文、意味、位置等を捉える
- 表現力向上: 単一 Attention より豊富
3. Positional Encoding(位置エンコーディング)
Transformer は並列処理のため、位置情報を別途付加:
- Sinusoidal: 三角関数ベース(オリジナル)
- Learned: 学習可能な位置埋め込み
- RoPE(Rotary Position Embedding): 回転行列ベース(Llama、GPT-NeoX)
- ALiBi: 相対位置バイアス(BLOOM)
4. Feed-Forward Network
位置ごとの非線形変換:
FFN(x) = max(0, xW_1 + b_1)W_2 + b_2
- 隠れ層: モデル次元の 4 倍が一般的
- 活性化関数: ReLU、GELU、SwiGLU
5. Layer Normalization
安定した学習のための正規化:
- Pre-LN: 現代の主流(GPT、Llama)
- Post-LN: オリジナル
6. Residual Connection(残差接続)
勾配消失を防ぐスキップ接続:
output = LayerNorm(x + Sublayer(x))
モデル規模の進化
BERT(Google、2018)
- Base: 110M パラメータ
- Large: 340M パラメータ
- エンコーダーのみ
- 用途: 分類、検索、理解
GPT シリーズ(OpenAI)
| モデル | 年 | パラメータ |
|---|---|---|
| GPT-1 | 2018 | 117M |
| GPT-2 | 2019 | 1.5B |
| GPT-3 | 2020 | 175B |
| GPT-4 | 2023 | ~1.7T(推定) |
デコーダーのみ、用途: 生成、対話
T5(Google、2019)
- エンコーダー-デコーダー
- Text-to-Text: すべてのタスクを統一形式
- スケール: 11B パラメータ
Llama シリーズ(Meta)
- Llama 1: 2023、7B〜65B
- Llama 2: 2023、7B〜70B
- Llama 3: 2024、8B〜405B
- Llama 3.3: 2024、70B
DeepSeek V3(2024)
- 671B パラメータ(MoE)
- アクティブ: 37B
- 性能: GPT-4 に匹敵
バリエーション
Encoder のみ
- BERT: Bidirectional
- RoBERTa: BERT の改良
- DeBERTa: Disentangled Attention
- ViT: Vision Transformer
Decoder のみ
- GPT シリーズ
- Llama シリーズ
- Mistral、Qwen
Encoder-Decoder
- T5: Text-to-Text
- BART: 再構成型事前学習
- PaLM: Google
MoE(Mixture of Experts)
- Mixtral 8x7B: 8 エキスパートから 2 選択
- Mixtral 8x22B: 高性能
- DeepSeek V3: 256 エキスパート
- メリット: パラメータ増加でも計算量抑制
計算量
Self-Attention の計算量
O(n² × d)
- n: シーケンス長
- d: モデル次元
- 問題: 長文でメモリ爆発
高速化技術
- Flash Attention: メモリ効率、2-4× 高速
- Sparse Attention: 一部の位置のみ計算
- Linear Attention: O(n) への近似
- Grouped-Query Attention(GQA): Llama 2 以降
- Multi-Query Attention(MQA): PaLM
Transformer の応用
自然言語処理
- 機械翻訳: Google Translate、DeepL
- 文章生成: ChatGPT、Claude、Gemini
- 要約: T5、Pegasus
- 質問応答: BERT、GPT
- 感情分析: RoBERTa
画像処理
- 画像分類: ViT、Swin Transformer
- 物体検出: DETR
- セグメンテーション: SAM
- 画像生成: DiT(Sora、SD3)
音声
- 音声認識: Whisper(OpenAI)
- 音声合成: Tortoise TTS
- 音楽生成: MusicLM
マルチモーダル
- CLIP: 画像 + テキスト
- DALL-E: テキスト → 画像
- Gemini: オムニモーダル
- GPT-4o: 音声 + 画像 + テキスト
コード
- GitHub Copilot: コード補完
- Codex、Code Llama: 専用コードモデル
- StarCoder: オープンソース
科学
- AlphaFold 2: タンパク質構造予測
- Galactica: 科学文献
学習手法
Pre-training
- 大規模コーパス: Web、書籍、コード
- Self-supervised: ラベル不要
- MLM: Masked Language Modeling(BERT)
- CLM: Causal Language Modeling(GPT)
Fine-tuning
- タスク特化: 分類、生成、翻訳
- 少量データ: 転移学習
- LoRA: 効率的なファインチューニング
RLHF
- ChatGPT の秘密: 人間の選好で調整
- Reward Model: 報酬モデル
- PPO: 方策最適化
実装例(PyTorch)
import torch
import torch.nn as nn
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.d_model = d_model
self.num_heads = num_heads
self.d_k = d_model // num_heads
self.q_linear = nn.Linear(d_model, d_model)
self.k_linear = nn.Linear(d_model, d_model)
self.v_linear = nn.Linear(d_model, d_model)
self.out = nn.Linear(d_model, d_model)
def forward(self, q, k, v, mask=None):
B = q.size(0)
Q = self.q_linear(q).view(B, -1, self.num_heads, self.d_k).transpose(1, 2)
K = self.k_linear(k).view(B, -1, self.num_heads, self.d_k).transpose(1, 2)
V = self.v_linear(v).view(B, -1, self.num_heads, self.d_k).transpose(1, 2)
scores = torch.matmul(Q, K.transpose(-2, -1)) / (self.d_k ** 0.5)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn = torch.softmax(scores, dim=-1)
out = torch.matmul(attn, V)
out = out.transpose(1, 2).contiguous().view(B, -1, self.d_model)
return self.out(out)
限界と課題
1. 計算コスト
- O(n²): 長文で爆発
- 対策: Flash Attention、Sparse Attention
2. データ要件
- 大規模コーパス必須
- 対策: Transfer Learning、Few-shot
3. 解釈性
- ブラックボックス
- 対策: Attention 可視化、Probing
4. バイアス
- 学習データの継承
- 対策: RLHF、Debiasing
関連用語
- Self-Attention、Multi-Head Attention
- Positional Encoding、RoPE
- BERT、GPT、Llama
- Flash Attention、GQA、MoE
- Vision Transformer(ViT)