本ページは ReLU(Rectified Linear Unit)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
ReLU(Rectified Linear Unit)は、 2010 年代の深層学習革命を支えた シンプルかつ画期的な活性化関数。 Nair & Hinton(2010)が AlexNet で大成功させ、 シグモイド・tanh に代わって標準となりました。 現在も CNN・MLP の中間層では事実上のデフォルト選択肢。
ReLU の定義は驚くほどシンプル:
ReLU(x) = max(0, x)
これだけ。 でもこのシンプルさが大きな利点をもたらします:
| 性質 | シグモイド | tanh | ReLU |
|---|---|---|---|
| 計算コスト | exp が必要 | exp が必要 | 比較のみ |
| 飽和(勾配消失) | 大(両端) | 大(両端) | 正側はなし |
| 勾配 | 最大 0.25 | 最大 1.0 | 正側で 1.0 |
| スパース性 | 密 | 密 | 負側で 0(疎) |
例:入力 $[-2, -0.5, 0, 0.5, 2]$ に各活性化関数を適用:
| 入力 | シグモイド | tanh | ReLU | Leaky ReLU |
|---|---|---|---|---|
| −2.0 | 0.119 | −0.964 | 0.0 | −0.02 |
| −0.5 | 0.378 | −0.462 | 0.0 | −0.005 |
| 0.0 | 0.500 | 0.000 | 0.0 | 0.0 |
| 0.5 | 0.622 | 0.462 | 0.5 | 0.5 |
| 2.0 | 0.881 | 0.964 | 2.0 | 2.0 |
最小コードで動かしてみる例:
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.]) |