LLMの活性化関数(エルエルエムノカッセイカカンスウ)
活性化関数とは、ニューラルネットワークの各層で入力信号に非線形変換を加える数学的関数であり、LLM(大規模言語モデル)では GELU・SwiGLU・GeGLU などが主流として採用され、モデルの表現力と学習効率を決定づける要素である。
活性化関数(Activation Function)は、ニューラルネットワークの各ニューロンが受け取った入力の総和に対して非線形変換を適用する関数である。LLM の性能はこの関数の選択に大きく左右される。
概要
活性化関数はニューラルネットワークに非線形性を導入する役割を担う。線形変換のみでは多層ネットワークを積み重ねても単一の線形変換と等価になるため、非線形活性化関数が不可欠となる。2017年の Transformer 論文(Vaswani et al.)では ReLU が採用されたが、2023年以降の LLM では GELU・SwiGLU・GeGLU が主流となった。GPT-4(2023年)は GELU を、LLaMA 2/3(Meta, 2023-2024年)は SwiGLU を、Gemma 2(Google, 2024年)も GeGLU を採用している。2025-2026年の最新モデルでは SwiGLU が事実上のデファクトスタンダードとなり、Mistral Large 2(2024年)、Qwen 2.5(2024年)、DeepSeek-V3(2025年)のいずれも SwiGLU ベースのアーキテクチャを採用する。
主な活性化関数の種類
LLM で使用される主要な活性化関数は以下の通りである。
- ReLU(Rectified Linear Unit): f(x) = max(0, x)。計算が極めて高速だが、負の入力に対して勾配がゼロになる「dying ReLU」問題がある
- GELU(Gaussian Error Linear Unit): f(x) = x * Φ(x)。入力を確率的にゲーティングし、滑らかな非線形性を実現。BERT・GPT-2/3/4 で採用
- SwiGLU: Swish 関数と GLU(Gated Linear Unit)を組み合わせた活性化関数。LLaMA 全シリーズ、Mistral、Qwen で採用
- GeGLU: GELU と GLU の組み合わせ。Gemma シリーズで採用
- Swish / SiLU: f(x) = x * σ(x)。ReLU の滑らかな代替として Google Brain が提案(2017年)
- Mish: f(x) = x * tanh(softplus(x))。YOLOv4 等の画像認識で人気だが LLM での採用は限定的
- ReLU²(Squared ReLU): f(x) = max(0, x)²。PaLM(Google, 2022年)の一部レイヤーで使用
- GEGLU / ReGLU / SwiGLU の GLU ファミリー: FFN の中間層を2分割し、一方をゲートとして使用する構造
主要LLMと採用活性化関数
| モデル | 開発元 | パラメータ数 | 活性化関数 | 公開年 |
|---|---|---|---|---|
| GPT-4 / GPT-4o | OpenAI | 非公開(推定1.8T MoE) | GELU | 2023-2024 |
| LLaMA 3.1 405B | Meta | 405B | SwiGLU | 2024 |
| Gemma 2 27B | 27B | GeGLU | 2024 | |
| Mistral Large 2 | Mistral AI | 123B | SwiGLU | 2024 |
| Qwen 2.5 72B | Alibaba | 72B | SwiGLU | 2024 |
| DeepSeek-V3 | DeepSeek | 671B MoE | SwiGLU | 2025 |
| Claude 3.5 Sonnet | Anthropic | 非公開 | 非公開(GELU系推定) | 2024 |
| Phi-3 Medium | Microsoft | 14B | SwiGLU | 2024 |
計算効率とメモリ使用量の比較
活性化関数の選択はモデルの計算コストに直結する。
| 活性化関数 | FLOPs(相対値) | メモリ効率 | 勾配安定性 | 主な採用先 |
|---|---|---|---|---|
| ReLU | 1.0x(基準) | 最高 | dying ReLU問題あり | 旧世代 Transformer |
| GELU | 1.5x | 良好 | 安定 | BERT, GPT系 |
| SwiGLU | 2.0x(FFN 2/3 分割) | 中程度 | 非常に安定 | LLaMA, Mistral, Qwen |
| GeGLU | 2.0x(FFN 2/3 分割) | 中程度 | 非常に安定 | Gemma |
| Swish | 1.3x | 良好 | 安定 | EfficientNet |
SwiGLU / GeGLU は FFN の隠れ層を 2/3 に分割してゲート機構を導入するため、同じ隠れ層サイズでは計算量が約 1.5 倍になる。ただし、同じ計算予算内で比較すると精度が一貫して向上するため、2024-2026年の大規模モデルでは標準的に採用される。LLaMA 3 の FFN 隠れ層は 14,336 次元だが、SwiGLU のゲート機構により実効的な隠れ層は 14,336 × 2/3 ≈ 9,557 次元となる。
PyTorch での実装例
import torch
import torch.nn as nn
import torch.nn.functional as F
class SwiGLU(nn.Module):
def forward(self, x):
x, gate = x.chunk(2, dim=-1)
return F.silu(gate) * x
class GeGLU(nn.Module):
def forward(self, x):
x, gate = x.chunk(2, dim=-1)
return F.gelu(gate) * x
class FeedForward(nn.Module):
def __init__(self, dim, hidden_dim, activation='swiglu'):
super().__init__()
if activation == 'swiglu':
self.w1 = nn.Linear(dim, hidden_dim * 2, bias=False)
self.act = SwiGLU()
elif activation == 'geglu':
self.w1 = nn.Linear(dim, hidden_dim * 2, bias=False)
self.act = GeGLU()
else:
self.w1 = nn.Linear(dim, hidden_dim, bias=False)
self.act = nn.GELU()
self.w2 = nn.Linear(hidden_dim, dim, bias=False)
def forward(self, x):
return self.w2(self.act(self.w1(x)))
選び方・設計指針
活性化関数の選択は以下の指針に基づく。
- 新規 LLM 開発: SwiGLU を第一候補とする。2024-2026年の実績が最も豊富で、ハイパーパラメータの知見も蓄積されている
- BERT 系エンコーダモデル: GELU が標準。RoBERTa・DeBERTa・ELECTRA すべて GELU を採用
- 計算資源が限られる場合: ReLU または GELU。GLU 系は FFN のパラメータ数が 1.5 倍になるため、小規模モデルではオーバーヘッドが目立つ
- 量子化との相性: SwiGLU は INT8/INT4 量子化との相性が良好。GPTQ・AWQ・GGUF いずれの量子化手法でも精度劣化が小さい
- 推論最適化: SwiGLU は FlashAttention-2 や vLLM との組み合わせで最適化が進んでおり、TensorRT-LLM でもネイティブサポートされる
関連概念との違い
| 概念 | 役割 | 適用箇所 |
|---|---|---|
| 活性化関数 | 非線形変換を導入 | FFN 中間層 |
| 正規化(LayerNorm / RMSNorm) | 入力分布を安定化 | Attention 前後 |
| ドロップアウト | 過学習を防止 | 学習時のみ |
| Attention | トークン間の関係性を計算 | Self-Attention 層 |
よくある質問(FAQ)
Q1: なぜ 2024年以降の LLM では SwiGLU が主流なのか? A: SwiGLU は同じ計算予算で ReLU や GELU より一貫して高い精度を達成するためである。PaLM の論文(Google, 2022年)で GLU 系の優位性が大規模に実証され、LLaMA(Meta, 2023年)が SwiGLU を採用して以降、事実上の標準となった。
Q2: 活性化関数を変えるだけでモデル精度は変わるのか? A: 変わる。Shazeer(2020年)の論文では、同一アーキテクチャ・同一データで活性化関数のみを変更した実験で、SwiGLU が ReLU に対して perplexity を 2-5% 改善した。ただし、活性化関数の変更に伴い FFN のハイパーパラメータ(隠れ層サイズ)の再調整が必要になる。
Q3: GELU の近似計算とは何か? A: GELU の正確な計算には誤差関数 erf が必要だが、計算コストが高い。PyTorch では tanh 近似(GELU(x) ≈ 0.5x(1 + tanh(√(2/π)(x + 0.044715x³))))が標準で使用される。GPT-2 の公式実装もこの近似を採用している。
Q4: 自作の小規模モデルではどの活性化関数を選ぶべきか? A: パラメータ数 1B 未満の小規模モデルでは GELU が無難な選択である。SwiGLU は FFN パラメータが 1.5 倍になるため、1B 未満ではオーバーヘッドが目立つ場合がある。1B 以上であれば SwiGLU を推奨する。
まとめ
- 活性化関数は LLM の非線形性を決定する重要な設計要素
- 2024-2026年のデファクトスタンダードは SwiGLU(LLaMA / Mistral / Qwen / DeepSeek)
- GELU は BERT 系エンコーダモデルと GPT 系で依然として広く使用
- GeGLU は Google の Gemma シリーズが採用
- GLU 系(SwiGLU / GeGLU)は FFN パラメータが 1.5 倍になるが、精度向上が一貫して確認される
- 量子化・推論最適化との相性も SwiGLU が最も良好