AI・機械学習
上級

GELU(Gaussian Error Linear Unit)(ジーイーエルユー)

GELU は入力値をガウス分布の累積分布関数(CDF)で確率的にゲーティングする活性化関数であり、BERT・GPT-2・GPT-3・GPT-4 で採用され、Transformer ベースモデルにおける標準的な活性化関数として広く普及している。

0 回閲覧
0 いいね

GELU(Gaussian Error Linear Unit)は、2016年に Dan Hendrycks と Kevin Gimpel が提案した活性化関数であり、入力 x に対してガウス分布の累積分布関数 Φ(x) を乗じる:GELU(x) = x · Φ(x) という形式で定義される。

概要

GELU の核心は「確率的ゲーティング」にある。ReLU が x < 0 を一律にゼロにするのに対し、GELU は入力値に応じて確率的に通過・遮断を決定する。この特性により、入力がゼロ付近の領域で滑らかな勾配が維持され、学習の安定性が向上する。Google の BERT(2018年, 110M/340M パラメータ)で初めて大規模に採用され、以降 OpenAI の GPT-2(2019年, 1.5B)、GPT-3(2020年, 175B)、GPT-4(2023年)と一貫して使用されている。2026年現在でも BERT 系エンコーダモデル(RoBERTa / DeBERTa-v3 / ELECTRA)の標準であり続ける。

数学的定義と近似

GELU の厳密な定義は以下の通りである。

  • 厳密形式: GELU(x) = x · Φ(x) = x · 0.5 · (1 + erf(x / √2))
  • tanh 近似: GELU(x) ≈ 0.5x · (1 + tanh(√(2/π) · (x + 0.044715x³)))
  • sigmoid 近似: GELU(x) ≈ x · σ(1.702x)

PyTorch では torch.nn.GELU(approximate='tanh') で tanh 近似を、torch.nn.GELU(approximate='none') で厳密計算を選択できる。GPT-2 の公式実装は tanh 近似を採用している。CUDA カーネルレベルでは cuDNN が GELU のネイティブ実装を提供しており、A100 GPU で ReLU 比 1.2 倍程度の計算コストに抑えられる。H100 では FP8 演算との組み合わせで更に高速化される。

GELU と他の活性化関数の比較

特性ReLUGELUSwishSwiGLU
数式max(0, x)x·Φ(x)x·σ(x)Swish(xW)⊙(xV)
微分の連続性不連続(x=0)連続連続連続
負の入力完全遮断確率的通過確率的通過確率的通過
計算コスト1.0x1.5x1.3x2.0x
主な採用モデル旧世代BERT/GPTEfficientNetLLaMA/Mistral

採用モデルと実績

  • BERT(Google, 2018年): GELU を LLM に初採用。110M/340M パラメータの2サイズで GLUE ベンチマーク SOTA を達成
  • GPT-2(OpenAI, 2019年): 1.5B パラメータ。tanh 近似 GELU を使用
  • GPT-3(OpenAI, 2020年): 175B パラメータ。Few-shot 学習の画期的な成果を GELU ベースで実現
  • GPT-4(OpenAI, 2023年): 推定 1.8T MoE パラメータ。GELU を継続採用
  • RoBERTa(Meta, 2019年): BERT の学習手法を改善し GELU を継続
  • DeBERTa-v3(Microsoft, 2021年): 改良型 GELU で SuperGLUE SOTA
  • ViT(Google, 2020年): Vision Transformer で GELU を採用し、画像認識にも GELU が波及

実装と最適化

import torch
import torch.nn.functional as F

# PyTorch 標準
gelu_exact = F.gelu(x, approximate='none')
gelu_tanh = F.gelu(x, approximate='tanh')

# 手動実装(教育用)
def gelu_manual(x):
    return 0.5 * x * (1.0 + torch.erf(x / 1.4142135623730951))

# tanh 近似の手動実装
def gelu_tanh_manual(x):
    return 0.5 * x * (1.0 + torch.tanh(
        0.7978845608028654 * (x + 0.044715 * torch.pow(x, 3))
    ))

TensorRT-LLM では GELU がネイティブ演算として最適化されており、A100 80GB で batch_size=32、seq_len=2048 の場合、GELU レイヤーの実行時間は約 0.8ms(ReLU: 0.5ms)である。

よくある質問(FAQ)

Q1: GELU と ReLU のどちらを選ぶべきか? A: 2024年以降の新規モデル開発では GELU(または SwiGLU)を推奨する。ReLU は dying neuron 問題があり、大規模モデルでは学習の安定性に差が出る。計算コストの差は GPU の並列処理で吸収される。

Q2: GELU の近似はどの程度正確か? A: tanh 近似の最大誤差は約 0.004(x ≈ -1.5 付近)であり、実用上は厳密計算と同等の精度が得られる。GPT-2/3 は tanh 近似で学習されており、近似による精度劣化は観測されていない。

Q3: GELU はなぜ SwiGLU に置き換えられつつあるのか? A: SwiGLU は FFN にゲート機構を導入することで、同じ計算予算でより高い表現力を実現する。Shazeer(2020年)の実験で SwiGLU が GELU を一貫して上回ることが示され、LLaMA 以降のデコーダモデルは SwiGLU に移行した。ただし BERT 系エンコーダモデルでは GELU が依然として標準。

まとめ

  • GELU は確率的ゲーティングにより滑らかな非線形性を実現する活性化関数
  • BERT / GPT シリーズの成功を支えた中核技術の一つ
  • tanh 近似が標準的に使用され、GPU 上で高効率に動作
  • デコーダ系 LLM では SwiGLU への移行が進むが、エンコーダ系では依然として標準