Python의 시그 모이 드 함수

Muhammad Waiz Khan 2023년1월30일
  1. math모듈을 사용하여 Python에서 Sigmoid 함수 구현
  2. numpy.exp()메서드를 사용하여 Python에서 Sigmoid 함수 구현
  3. SciPy라이브러리를 사용하여 Python에서 Sigmoid 함수 구현
Python의 시그 모이 드 함수

이 튜토리얼에서는 파이썬에서 시그 모이 드 함수를 사용하는 다양한 방법을 살펴볼 것입니다. 시그 모이 드 함수는 수학적 로지스틱 함수입니다. 통계, 오디오 신호 처리, 생화학 및 인공 뉴런의 활성화 기능에 일반적으로 사용됩니다. 시그 모이 드 함수의 공식은F(x) = 1/(1 + e^(-x))입니다.

math모듈을 사용하여 Python에서 Sigmoid 함수 구현

math모듈을 사용하여 Python에서 자체 시그 모이 드 함수를 구현할 수 있습니다. 시그 모이 드 함수를 구현하려면math모듈의math.exp()메소드가 필요합니다.

아래 예제 코드는 Python에서 시그 모이 드 함수를 사용하는 방법을 보여줍니다.

import math


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

이 구현의 문제점은 수치 적으로 안정적이지 않고 오버플로가 발생할 수 있다는 것입니다.

파이썬에서 시그 모이 드 함수를 수치 적으로 안정적으로 구현 한 예제 코드는 다음과 같습니다.

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

numpy.exp()메서드를 사용하여 Python에서 Sigmoid 함수 구현

파이썬에서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

SciPy라이브러리를 사용하여 Python에서 Sigmoid 함수 구현

또한SciPy라이브러리에서expit이라는 sigmoid 함수를 가져 와서 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]