#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クラス分類)Sigmoid0〜1の確率を出力
出力層(多クラス分類)Softmax合計1の確率分布を出力
出力層(回帰)なし(線形のまま)任意の数値を出力したい

まとめ

  • 活性化関数がないと、何層重ねても1層と同じになってしまう
  • 非線形性を加えることで、複雑なパターンを学習できる
  • ReLUは隠れ層の定番——シンプルで高速、かつ学習が安定する
  • Sigmoidは0〜1の確率を出したいとき
  • Softmaxは複数クラスの確率分布を出したいとき

次回は、ニューラルネットワークが実際にどう計算を進めるか——順伝播(フォワードパス) を具体的な数値で追いかけます。