シグモイド関数

シグモイド関数は、ニューラルネットワークの活性化関数として広く使用されている関数です。この関数は、入力された値を0から1の間の値に変換し、その形状はS字型の曲線を描きます。シグモイド関数は、その滑らかな曲線の特性により、非線形な変換を提供し、ニューラルネットワークにおいて複雑なパターンやデータの分類を可能にします。以下のような数式で表現されます。

しかし、シグモイド関数にはいくつかの欠点もあります。特に、その微分の最大値が0.25しかないため、勾配消失問題(gradient vanishing problem)が発生しやすく、これは深層学習において学習効率を低下させる要因となります。勾配消失問題とは、ニューラルネットワークの層が深くなるにつれて、伝搬していく誤差が小さくなり、学習が進まなくなる現象です​​。

シグモイド関数の他にも、活性化関数には様々な種類があります。例えば、ReLU関数(Rectified Linear Unit)は、入力が0以下の場合は0を出力し、0以上の場合は入力値をそのまま出力します。ReLUは誤差逆伝播の際に勾配消失しにくい特性を持ちますが、入力が0以下の場合の微分値が0になるため、学習がうまく行かない場合もあります。他にも、tanh関数やソフトマックス関数などがあり、それぞれ特有の特性を持ちます​​。

シグモイド関数はまた、ロジット(logit)の逆関数としても知られ、統計処理の数値計算ライブラリでは標準シグモイド関数をexpit関数と呼ぶこともあります。シグモイド関数は、入力値が非常に大きいか小さい場合に0または1に漸近し、変曲点は(0, 0.5)で点対称の性質を持っています​​。

シグモイド関数のグラフ

シグモイド関数のグラフは以下のようなコードで実装することができます。

import matplotlib.pyplot as plt
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("Sigmoid(x)")
plt.grid(True)
plt.show()