#04 人工知能入門 DNN基礎
活性化関数——「どこから反応するか」を決める
「線形」のままでは困る理由
前回の y = w×x + b という式を思い出してください。これは線形変換(直線的な変換)です。
では、線形変換を100層重ねたらどうなるでしょうか?
1層目: y1 = w1×x + b1
2層目: y2 = w2×y1 + b2 = w2×(w1×x + b1) + b2
= (w2×w1)×x + (w2×b1 + b2)
2層の組み合わせも、結局 W×x + B という1層分の線形変換と等しくなります。何層重ねても1層と同じになってしまうのです。
これでは「層を深くする」意味がありません。ここで活性化関数の出番です。
活性化関数とは
活性化関数(Activation Function)は、ニューロンの出力に「非線形性(曲がり)」を加える関数です。
入力 → [重み×入力 + バイアス] → [活性化関数] → 出力
線形変換 非線形変換
非線形性を加えることで、「曲がった境界線」「複雑なパターン」を学習できるようになります。
Sigmoid関数
シグモイド関数は「0〜1の範囲に押し込む」関数です。「確率っぽい値」を出したいときに使います。
数式: σ(x) = 1 / (1 + e^(-x))
※eはネイピア数(約2.718)
グラフイメージ:
1.0 | ___________
| /
0.5 |─────/──────────────
| /
0.0 |__/
+──────────────────→ x
-5 0 5
- x が非常に大きい → 出力は1に近づく
- x = 0 → 出力は0.5
- x が非常に小さい → 出力は0に近づく
つまり、「入力が大きいほど強く反応(1)、小さいほど反応しない(0)」という滑らかなスイッチです。
使いどころ: 2クラス分類の出力層(スパムか否か、など)。
ReLU関数
ReLU(Rectified Linear Unit、正規化線形ユニット)は「0より小さければ0、0以上ならそのまま通す」シンプルな関数です。
数式: ReLU(x) = max(0, x)
グラフイメージ:
| /
| /
| /
0.0 |_____/──────────────
+──────────────────→ x
-5 0 5
シンプルすぎて「こんなので大丈夫?」と思いますが、実は非常に優秀です。
ReLUが優れている理由:
- 計算が超高速(条件分岐1つだけ)
- 「勾配消失問題」(深い層で学習が進まなくなる問題)が起きにくい
- 現在の隠れ層ではReLUが第一選択
使いどころ: ほぼすべての隠れ層。
Softmax関数
ソフトマックス関数は「複数の値を確率(合計1)に変換する」関数です。
数式: Softmax(xi) = e^xi / Σe^xj
例(3クラス分類の出力がそれぞれ 2.0, 1.0, 0.1 のとき):
e^2.0 = 7.39
e^1.0 = 2.72
e^0.1 = 1.11
合計 = 11.22
クラス1: 7.39 / 11.22 = 65.9%
クラス2: 2.72 / 11.22 = 24.2%
クラス3: 1.11 / 11.22 = 9.9%
合計: 100.0%
「犬65.9%、猫24.2%、鳥9.9%」のように、各クラスの確率として出力できます。
使いどころ: 多クラス分類の出力層。
どれを使えばいいか
| 場所 | おすすめ活性化関数 | 理由 |
|---|---|---|
| 隠れ層 | ReLU(またはLeaky ReLU) | 高速・勾配消失に強い |
| 出力層(2クラス分類) | Sigmoid | 0〜1の確率を出力 |
| 出力層(多クラス分類) | Softmax | 合計1の確率分布を出力 |
| 出力層(回帰) | なし(線形のまま) | 任意の数値を出力したい |
まとめ
- 活性化関数がないと、何層重ねても1層と同じになってしまう
- 非線形性を加えることで、複雑なパターンを学習できる
- ReLUは隠れ層の定番——シンプルで高速、かつ学習が安定する
- Sigmoidは0〜1の確率を出したいとき
- Softmaxは複数クラスの確率分布を出したいとき
次回は、ニューラルネットワークが実際にどう計算を進めるか——順伝播(フォワードパス) を具体的な数値で追いかけます。