Python のシグモイド関数

Muhammad Waiz Khan 2023年1月30日
  1. Python で math モジュールを使用してシグモイド関数を実装する
  2. Python で numpy.exp() メソッドを使用してシグモイド関数を実装する
  3. Python で SciPy ライブラリを使用して Sigmoid 関数を実装する
Python のシグモイド関数

このチュートリアルでは、Python でシグモイド関数を使用するためのさまざまな方法を調べます。シグモイド関数は数学的なロジスティック関数です。これは、統計、音声信号処理、生化学、および人工ニューロンの活性化関数で一般的に使用されます。シグモイド関数の式は F(x) = 1/(1 + e^(-x)) です。

Python で math モジュールを使用してシグモイド関数を実装する

math モジュールを使用して、Python で独自のシグモイド関数を実装できます。シグモイド関数を実装するには、math モジュールの math.exp() メソッドが必要です。

以下のサンプルコードは、Python でシグモイド関数を使用する方法を示しています。

import math


def sigmoid(x):
    sig = 1 / (1 + math.exp(-x))
    return sig

この実装の問題は、数値的に安定しておらず、オーバーフローが発生する可能性があることです。

Python でのシグモイド関数の数値的に安定した実装のサンプルコードを以下に示します。

import math


def stable_sigmoid(x):

    if x >= 0:
        z = math.exp(-x)
        sig = 1 / (1 + z)
        return sig
    else:
        z = math.exp(x)
        sig = z / (1 + z)
        return sig

Python で numpy.exp() メソッドを使用してシグモイド関数を実装する

Python で numpy.exp() メソッドを使用してシグモイド関数を実装することもできます。math.exp() メソッドを使用したシグモイド関数の実装と同様に、numpy.exp() メソッドを使用してシグモイド関数を実装することもできます。

math.exp() に対する numpy.exp() メソッドの利点は、整数または浮動小数点数の他に、配列の形状で入力を処理できることです。

以下は、Python で numpy.exp() メソッドを使用した通常のシグモイド関数の実装です。

import numpy as np


def sigmoid(x):

    z = np.exp(-x)
    sig = 1 / (1 + z)

    return sig

シグモイド関数を数値的に安定して実装するには、最初に入力配列の各値の値を確認してから、シグモイドの値を渡す必要があります。このために、以下のサンプルコードに示すように、np.where() メソッドを使用できます。

import numpy as np


def stable_sigmoid(x):

    sig = np.where(x < 0, np.exp(x) / (1 + np.exp(x)), 1 / (1 + np.exp(-x)))
    return sig

Python で SciPy ライブラリを使用して Sigmoid 関数を実装する

SciPy ライブラリに expit と呼ばれるシグモイド関数をインポートするだけで、Python のシグモイド関数の SciPy バージョンを使用することもできます。

以下のサンプルコードは、SciPy ライブラリを使用してシグモイド関数を使用する方法を示しています。

from scipy.special import expit

x = 0.25
sig = expit(x)

expit() メソッドは、上記の実装よりも低速です。expit() メソッドの利点は、リストや配列などのさまざまなタイプの入力を自動的に処理できることです。

from scipy.special import expit

sig = expit(np.array([0.25, 0.5, 0.6, 0.7, 0.4]))
print(sig)

出力:

[0.5621765  0.62245933 0.64565631 0.66818777 0.59868766]