ReLU系活性化関数の派生(レルケイ カッセイカカンスウノハセイ)
ReLU(Rectified Linear Unit)を起点として開発された活性化関数ファミリーであり、Leaky ReLU・PReLU・ELU・SELU・ReLU6 等の派生が存在し、各々が dying ReLU 問題の解消や特定のアーキテクチャへの最適化を目指して設計されている。
ReLU(Rectified Linear Unit)は f(x) = max(0, x) で定義される最もシンプルな活性化関数であり、2012年の AlexNet(Krizhevsky et al.)で深層学習の実用化に貢献した。しかし負の入力に対して勾配がゼロになる「dying ReLU」問題があり、これを解消するための派生関数が多数提案されてきた。
概要
ReLU の登場以前、ニューラルネットワークでは sigmoid や tanh が標準的に使用されていたが、これらは勾配消失問題(vanishing gradient problem)を引き起こし、深い層のネットワークの学習を困難にしていた。ReLU は正の領域で勾配が一定(=1)であるため勾配消失を大幅に緩和し、AlexNet(2012年)で ImageNet SOTA を達成して以降、深層学習の標準的な活性化関数となった。2026年現在、CNN・GAN・強化学習モデルでは依然として ReLU 系が広く使用されるが、LLM(大規模言語モデル)では GELU・SwiGLU に主役の座を譲っている。
ReLU ファミリー一覧
| 活性化関数 | 数式 | 提案年 | 特徴 |
|---|---|---|---|
| ReLU | max(0, x) | 2010 (Nair & Hinton) | 計算が最速、dying ReLU 問題あり |
| Leaky ReLU | max(αx, x), α=0.01 | 2013 (Maas et al.) | 負の勾配を保持 |
| PReLU | max(αx, x), α は学習可能 | 2015 (He et al.) | 負の勾配を自動調整 |
| ELU | x if x>0, α(eˣ-1) otherwise | 2015 (Clevert et al.) | 出力平均をゼロに近づける |
| SELU | λ·ELU(x) | 2017 (Klambauer et al.) | 自己正規化を実現 |
| ReLU6 | min(max(0, x), 6) | 2010 (Krizhevsky) | モバイル推論向け量子化に最適 |
| CELU | max(0,x) + min(0, α(eˣ/ᵅ-1)) | 2017 (Barron) | ELU の連続微分可能版 |
| Hardswish | x·ReLU6(x+3)/6 | 2019 (Howard et al.) | MobileNet v3 で採用 |
dying ReLU 問題の詳細
ReLU の最大の問題は、学習中に大きな負の勾配が流入すると、その後ニューロンの出力が恒久的にゼロになる「dying neuron」現象である。
- 発生メカニズム: 重みの更新により W·x + b が常に負になると、ReLU(W·x + b) = 0 となり、勾配もゼロになるため二度と更新されない
- 発生率: 一般的なネットワークでは全ニューロンの 10-40% が dying neuron になり得る(学習率や初期化に依存)
- 対策: Leaky ReLU(α=0.01 で負の勾配を保持)、PReLU(α を学習パラメータ化)、ELU(指数関数で滑らかに接続)
各派生関数の採用事例
- ReLU: ResNet(2015年, 152層)、VGG(2014年)、YOLO v1-v3、DQN(DeepMind, 2015年)
- Leaky ReLU: DCGAN(2015年)の Discriminator、YOLO v4-v8 の Backbone
- PReLU: ResNet-v2(He et al., 2016年)。ImageNet で ReLU 比 0.5% の精度向上
- ELU: U-Net 系セグメンテーションモデル。医療画像解析で安定した学習に寄与
- SELU: 全結合ネットワーク(MLP)向け。Batch Normalization なしで自己正規化が成立
- ReLU6: MobileNet v1/v2(Google, 2017-2018年)。INT8 量子化との相性が最良で、Android Neural Networks API のデフォルト
- Hardswish: MobileNet v3(Google, 2019年)。Swish の近似で計算量を 60% 削減
LLM での位置づけ
ReLU は 2017年の Transformer 論文(Vaswani et al.)で FFN に採用されたが、その後の LLM 開発では以下の理由で GELU / SwiGLU に置き換えられた。
- 滑らかさ: GELU / SwiGLU は x=0 付近で微分が連続であり、大規模学習で勾配の安定性が向上
- 表現力: GLU 系はゲート機構により情報の流れを適応的に制御でき、同じパラメータ数でより高い精度を達成
- 実証データ: Shazeer(2020年)の実験で、同一条件下で SwiGLU が ReLU を perplexity 3% 以上上回ることが確認
ただし、ReLU は推論時の計算コストが最小であるため、エッジデバイス向け小規模モデル(TinyLLaMA 1.1B、Phi-1.5 1.3B 等)や蒸留モデルでは依然として有効な選択肢である。
PyTorch での実装
import torch.nn as nn
# 標準 ReLU
relu = nn.ReLU()
# Leaky ReLU(negative_slope=0.01 がデフォルト)
leaky_relu = nn.LeakyReLU(negative_slope=0.01)
# PReLU(num_parameters でチャネルごとの学習を指定)
prelu = nn.PReLU(num_parameters=256)
# ELU(alpha=1.0 がデフォルト)
elu = nn.ELU(alpha=1.0)
# SELU(自己正規化。lecun_normal 初期化と併用)
selu = nn.SELU()
# ReLU6(モバイル向け)
relu6 = nn.ReLU6()
よくある質問(FAQ)
Q1: 2026年現在、ReLU を新規プロジェクトで使うべきか? A: CNN(画像認識・物体検出)では ReLU が依然として最も一般的で問題ない。LLM / Transformer 系では GELU または SwiGLU を推奨する。エッジデバイス向け推論では ReLU6 / Hardswish が計算効率と量子化精度の両面で有利。
Q2: Leaky ReLU の α はいくつに設定すべきか? A: α=0.01 がデフォルトで多くのケースで十分だが、GAN の Discriminator では α=0.2 が広く使用される。PReLU を使えば α が自動学習されるため手動調整が不要になる。
Q3: SELU はなぜ普及しなかったのか? A: SELU の自己正規化特性は全結合ネットワークでのみ成立し、CNN・RNN・Transformer では保証されない。また Batch Normalization + ReLU の組み合わせが実用上十分な性能を発揮するため、SELU の利点が限定的だった。
まとめ
- ReLU は深層学習の実用化を牽引した活性化関数
- dying ReLU 問題を解消する Leaky ReLU / PReLU / ELU が派生として開発された
- LLM では GELU / SwiGLU が主流だが、CNN・GAN・エッジ推論では ReLU 系が依然として有効
- モバイル向けでは ReLU6 / Hardswish が量子化との相性で最適解