活性化関数(ReLU, Sigmoid, Softmax など)

Kerasにおける**活性化関数(activation function)**は、ニューラルネットワークの各ニューロンにおいて線形変換の結果に非線形性を導入するために使用されます。これにより、ネットワークは線形では表現できない複雑な関係を学習することが可能になります。

以下に代表的な活性化関数を詳しく説明します。


1. ReLU(Rectified Linear Unit)

関数定義:

f(x)=max(0,x)f(x) = \max(0, x)

特徴:

  • 入力が0以下なら出力は0、正の値ならそのまま出力。

  • 現在もっとも広く使用されている活性化関数の1つ。

  • **勾配消失問題(vanishing gradient problem)**が少なく、学習が速い。

利点:

  • 計算が簡単。

  • 負の入力を遮断することでスパース性(出力の多くが0)を持つ。

欠点:

  • 負の領域では勾配が0となり、ニューロンが「死ぬ(dead neuron)」可能性がある。


2. Sigmoid(シグモイド関数)

関数定義:

f(x)=11+exf(x) = \frac{1}{1 + e^{-x}}

特徴:

  • 出力は常に (0, 1) の範囲。

  • 主に**出力層(バイナリ分類)**で使用される。

利点:

  • 出力が確率的な解釈を持つため、分類タスクに適している。

欠点:

  • 勾配消失問題が発生しやすい(特に深いネットワークで学習が困難になる)。

  • 出力が中心(0)に対して対称でないため、重み更新が非効率になりやすい。


3. Softmax(ソフトマックス関数)

関数定義(多クラス分類用):

f(xi)=exijexjf(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}

特徴:

  • 出力が各クラスに対する確率分布を表す。

  • 出力の総和が常に1になる。

  • 主に多クラス分類の出力層で使用される。

利点:

  • 確率的な出力が得られるため、分類に対して直感的。

欠点:

  • 計算量がやや多く、対数関数や指数関数を用いるため数値的に不安定になることがある。


その他の活性化関数(補足)

活性化関数 特徴と用途
tanh 出力範囲は (-1, 1)。sigmoidよりも中心が0に近く、隠れ層でsigmoidより有利な場合がある。
LeakyReLU ReLUの改良。負の入力に対してもわずかに勾配を保つことで「dead neuron」を防止。
ELU / SELU より滑らかに負の領域を扱い、勾配消失に対処。主に深いネットワークで使用される。

Kerasでの活性化関数の使用例

python
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense model = Sequential([ Dense(64, activation='relu', input_shape=(100,)), Dense(10, activation='softmax') # 多クラス分類用出力層 ])

まとめ

名称 主な用途 出力範囲 非線形性 備考
ReLU 隠れ層 [0, ∞) あり 高速かつ効果的
Sigmoid バイナリ分類の出力層 (0, 1) あり 勾配消失に注意
Softmax 多クラス分類の出力層 (0, 1), 総和=1 あり 確率的解釈

Kerasではこれらの活性化関数をactivation='relu'などの形式で簡単に指定できます。モデルの目的に応じて適切な関数を選択することが重要です。

生成日:2025/05/22