論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
ReLU
Rectified Linear Unit
深層学習

🔖 キーワード索引

ReLURectified Linear Unit深層学習

本ページは ReLU(Rectified Linear Unit)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。

💡 30秒で分かる結論

📍 文脈 — どこで使う概念か

ReLU(Rectified Linear Unit)は、 2010 年代の深層学習革命を支えた シンプルかつ画期的な活性化関数。 Nair & Hinton(2010)が AlexNet で大成功させ、 シグモイド・tanh に代わって標準となりました。 現在も CNN・MLP の中間層では事実上のデフォルト選択肢。

🎨 直感で掴む — 具体例で理解する

ReLU の定義は驚くほどシンプル:

ReLU(x) = max(0, x)

これだけ。 でもこのシンプルさが大きな利点をもたらします:

性質シグモイドtanhReLU
計算コストexp が必要exp が必要比較のみ
飽和(勾配消失)大(両端)大(両端)正側はなし
勾配最大 0.25最大 1.0正側で 1.0
スパース性負側で 0(疎)

📐 定義・数式

【ReLU】
$$\mathrm{ReLU}(x) = \max(0, x) = \begin{cases} x & x > 0 \\ 0 & x \le 0 \end{cases}$$
【ReLU の微分(勾配)】
$$\frac{d \mathrm{ReLU}}{dx} = \begin{cases} 1 & x > 0 \\ 0 & x < 0 \\ \text{未定義} & x = 0 \end{cases}$$
$x = 0$ では劣勾配を取る(実装は 0 が多い)
【Leaky ReLU】
$$\mathrm{LeakyReLU}(x) = \max(\alpha x, x), \quad \alpha = 0.01$$
負側でも微小勾配を持たせて Dying ReLU を防ぐ

🔬 記号・要素の読み解き

$\max(0, x)$
負を 0 に切り捨て、 正はそのまま通す
勾配 1(正側)
逆伝播で勾配が減衰しないので、 深いネットでも学習が進む
勾配 0(負側)
ニューロンが「死ぬ」原因にもなる
スパース性
半分くらいのニューロンが 0 出力 → 計算効率と汎化に有利
Leaky α
負側の小さい傾き(0.01 が標準)

🧮 数値例・実値計算

例:入力 $[-2, -0.5, 0, 0.5, 2]$ に各活性化関数を適用:

入力シグモイドtanhReLULeaky ReLU
−2.00.119−0.9640.0−0.02
−0.50.378−0.4620.0−0.005
0.00.5000.0000.00.0
0.50.6220.4620.50.5
2.00.8810.9642.02.0

🐍 Python 実装例

最小コードで動かしてみる例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import torch
import torch.nn as nn

# PyTorch での ReLU
relu = nn.ReLU()
x = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0])
print(relu(x))  # tensor([0., 0., 0., 0.5, 2.])

# Leaky ReLU(Dying ReLU 対策)
leaky = nn.LeakyReLU(negative_slope=0.01)
print(leaky(x))  # tensor([-0.02, -0.005, 0., 0.5, 2.])

⚠️ よくある落とし穴

❌ Dying ReLU
学習率が高すぎたり初期化が悪いと、 大量のニューロンが永久に 0 出力に。 Leaky ReLU で対策。
❌ 出力の非中心性
ReLU 出力は常に ≥ 0、 これがバイアスシフトを生む。 Batch Normalization で対処。
❌ 微分不可能点
$x=0$ で微分不能(実装は 0 を採用)。 理論的にはきれいでない。
❌ 負の情報損失
負の入力情報を完全に捨てる。 タスクによっては問題。
❌ 勾配爆発
正側で勾配が 1 なので、 深いネットでは累積で爆発することも。 Gradient Clipping で対処。