活性化関数 — ネットワークに「曲がる力」を与える
ニューロンの出力を最後にひと味変える小さな関数、それが活性化関数です。この一手間がないと、どれだけ層を重ねてもネットワークはただの直線製造機。シグモイドから ReLU、GELU まで、形・勾配・使いどころを動かして比べます。
1. まずは顔ぶれ — 関数ギャラリー
活性化関数は、前のレッスンで見た加重和 z を受け取って「どう反応するか」を決める、ニューロンの反応のクセのようなものです。ボタンで切り替えて、上段の関数の形と下段の導関数(勾配)を見比べてください。
下段の導関数は、学習のときそのまま掛け算される数です。スライダーで入力の点を動かすと、「その場所でどれくらい学べるか」が読み取れます。赤く塗られたゾーンに入ると勾配がほぼ 0 — つまり学習が止まります。
活性化関数ギャラリー — 形(上)と勾配(下)を同時に見る
f(x) =
f′(x) =
ReLU(x) = max(0, x)
現代のニューラルネットで最もよく使われる活性化関数は、たったこれだけの式
| 関数 | 出力の範囲 | 長所 | 弱点 |
|---|---|---|---|
| シグモイド | 0 〜 1 | 確率として読める。出力層では今も現役 | 両端で飽和して勾配消失。ゼロ中心でない |
| tanh | −1 〜 1 | ゼロ中心で学習が安定しやすい | やはり両端で飽和する |
| ReLU | 0 〜 ∞ | 計算が最速。正側で勾配が減衰しない | 負側で勾配 0 →「死んだ ReLU」 |
| Leaky ReLU | −∞ 〜 ∞ | 負側にも勾配を残し、死んだ ReLU を防ぐ | 傾き α はハイパーパラメータ |
| GELU | 約 −0.17 〜 ∞ | なめらかで高性能。Transformer の標準 | 計算がやや重い |
2. なぜ「非線形」が必要なのか
直線的な変換(線形変換)は、何回重ねても1回の線形変換にまとめられてしまうという宿命があります。
g(f(x)) = a2(a1x + b1) + b2 = (a2a1)x + (a2b1 + b2)
直線に直線を合成しても、ただの直線。1万層重ねても同じ
下のデモは、乱数で重みを決めた小さなネットワークが作る「入力 → 出力」の関数のグラフです。「線形だけ」モードで層の数を増やしても、グラフはまっすぐのまま。ところが「ReLU あり」に切り替えると、層を通るたびに折れ点が増え、ぐにゃぐにゃと複雑な形が作れるようになります。
層を重ねると関数はどう変わる? — 線形 vs ReLU
同じ乱数の重みを使い、活性化関数だけを切り替えています。白い点は「いまの入力 x に対する出力」をなぞるカーソル。「線形だけ」では層を増やしてもグラフは直線のまま=表現力ゼロ。「ReLU あり」では折れ点がどんどん増えていきます。
POINT — 非線形性こそ表現力の源
ReLU を挟んだネットワークは「折れ線」を組み合わせて、どんな複雑な関数にも好きなだけ近づける(万能近似)。層を重ねる意味を作っているのは、間に挟まる小さな非線形関数— これが活性化関数の存在理由。
3. 深くすると起きる事故 — 勾配消失
学習では、出力側で測った誤差の勾配を後ろの層から前の層へ掛け算しながら伝えていきます(誤差逆伝播法 — 詳しくは第4回)。ここで各層の活性化関数の導関数が毎回掛け算されるのがポイントです。
シグモイドの導関数は最大でも 0.25。つまり層を1つさかのぼるたびに、勾配はよくて 1/4 に縮みます。10層なら…
σ′(x) ≤ 0.25 → 0.2510 ≈ 0.000001
掛け算のたびに 1/4 以下。10層さかのぼると約100万分の1 — 手前の層にはほぼ何も届かない
勾配消失を目で見る — 10層をさかのぼる勾配のゆくえ
右端(損失側)から出発した勾配が、層をさかのぼるたびに「×係数」で目減りしていくアニメ。シグモイドでは数層で棒が見えなくなります(バーの上の数値に注目)。ReLU に切り替えると勾配はほぼそのまま届きます。消えゆく様子を最後まで見たいときは「縦軸を対数にする」をオンに。
注意 — 勾配消失は深層学習最大の壁だった
深いネットワークが長年学習できなかった最大の理由のひとつがこの勾配消失。ReLU の普及(+重みの初期化や正規化の工夫)によって深い層まで勾配が届くようになり、2010年代の深層学習ブームが始まった。「関数をひとつ取り替えただけ」が歴史を動かした好例。
4. 結局どれを使えばいい? — 現代のデフォルト
実務での選び方は、実はかなりシンプルです。
- 迷ったら ReLU。軽くて強い、隠れ層の標準。うまくいかなければ Leaky ReLU 系を試す。
- Transformer・LLM 系なら GELU。なめらかな ReLU として現代の定番。
- シグモイドと tanh を隠れ層に使うのは今や少数派。ただし「確率を出したい出力層」(2値分類のシグモイドなど)や RNN のゲートでは現役。
- 活性化関数は、ニューロンの出力に掛ける非線形な味付け。これがないと層を重ねる意味が消える。
- シグモイド/tanh は飽和し、深いネットで勾配消失を起こす。
- ReLU は「max(0, x)」だけなのに、勾配が減衰せず計算も軽い — 深層学習ブームの立役者。
- GELU は ReLU をなめらかにした現代の定番。Transformer・LLM で広く使われる。
一歩先へ — 「なめらかな ReLU」たちの時代
2016年前後、GELU や Swish(SiLU)といった「なめらかな ReLU」ファミリーが登場し、BERT・GPT 以降の Transformer では GELU 系が標準になった。さらに近年の LLM(LLaMA など)は SwiGLU のようにゲート機構と組み合わせた活性化を使う。60年前のステップ関数から始まった「どう曲げるか」の工夫は、最先端でもまだ続いている。