|

파이썬을 이용한 시그모이드 함수 구현 및 시각화: 미분까지 완벽하게 이해하기

시그모이드(Sigmoid) 함수는 딥러닝에서 중요한 활성화 함수로, 주로 이진 분류 문제에서 많이 사용됩니다. 이 포스트에서는 파이썬을 이용해 이 함수를 직접 구현하고, 이를 그래프로 시각화하는 과정을 보여드리겠습니다. 더불어, 시그모이드 함수 미분도 구현하고, 그 시각화 결과까지 함께 알아보겠습니다. 실습 코드를 따라 하면서 Sigmoid 함수의 동작 원리를 더욱 명확히 이해할 수 있습니다.

시그모이드 함수란?

Sigmoid 함수는 다음과 같은 수식으로 정의됩니다.

S(x) = \frac{1}{1 + e^{-x}}

이 함수는 입력 값을 0과 1 사이의 값으로 변환해주는 비선형 함수로, 주로 뉴럴 네트워크에서 활성화 함수로 많이 사용됩니다. 이제 이 수식을 파이썬 시각화 구현을 해보고, 직접 그래프로 그려보겠습니다.

Sigmoid 함수 파이썬 시각화 구현

먼저, 시그모이드 함수를 파이썬 코드로 구현해 보겠습니다.

import numpy as np
import matplotlib.pyplot as plt

# 시그모이드 함수 정의
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# x 범위 설정
x = np.linspace(-10, 10, 100)

# 시그모이드 함수 적용
y = sigmoid(x)

# 시각화
plt.plot(x, y, label='Sigmoid')
plt.title('Sigmoid Function')
plt.xlabel('x')
plt.ylabel('S(x)')
plt.grid(True)
plt.legend()
plt.show()

위 코드는 Sigmoid 함수를 정의하고, 이를 시각화한 것입니다. np.linspace를 사용해 -10에서 10까지의 값을 생성하고, 각 값을 Sigmoid 함수에 적용하여 y 값을 계산한 후 그래프를 그립니다.

코드 해설

  • import numpy as np: 수치 계산을 위한 NumPy 라이브러리를 가져옵니다.
  • import matplotlib.pyplot as plt: 그래프 시각화를 위한 Matplotlib 라이브러리를 가져옵니다.
  • def sigmoid(x): return 1 / (1 + np.exp(-x)): Sigmoid 함수를 정의합니다. 이 함수는 입력값을 0과 1 사이의 값으로 변환합니다.
  • x = np.linspace(-10, 10, 100): -10부터 10까지 100개의 균등한 간격의 점을 생성하여 x 축 값으로 사용합니다.
  • y = sigmoid(x): 생성된 x 값들에 대해 Sigmoid 함수를 적용하여 y 값을 계산합니다.
  • plt.plot(x, y, label='Sigmoid'): x와 y 값을 이용해 Sigmoid 함수의 그래프를 그립니다.
  • plt.title('Sigmoid Function'): 그래프의 제목을 “Sigmoid Function”으로 설정합니다.
  • plt.xlabel('x')plt.ylabel('S(x)'): x축과 y축의 레이블을 각각 ‘x’와 ‘S(x)’로 설정합니다.
  • plt.grid(True): 그래프에 격자를 표시합니다.
  • plt.legend(): 그래프에 범례를 추가합니다.
  • plt.show(): 완성된 그래프를 화면에 표시합니다.
시그모이드 함수 시각화
( 파이썬으로 시각화한 시그모이드 함수 )

Sigmoid 함수 미분

Sigmoid 함수의 미분은 다음과 같이 정의됩니다:

S'(x) = S(x) \times (1 - S(x))

이 미분 함수도 파이썬으로 구현해보고 시각화해보겠습니다.

# 시그모이드 함수 미분 정의
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

# 시그모이드 함수 미분 적용
y_deriv = sigmoid_derivative(x)

# 시각화
plt.plot(x, y_deriv, label='Sigmoid Derivative', color='orange')
plt.title('Sigmoid Derivative Function')
plt.xlabel('x')
plt.ylabel("S'(x)")
plt.grid(True)
plt.legend()
plt.show()

이 코드는 Sigmoid 함수의 미분을 계산하고, 그 결과를 시각화합니다. 미분 값은 원래 Sigmoid 함수에서 도출되며, 기울기가 가장 큰 구간이 x=0 근처임을 그래프에서 확인할 수 있습니다.

코드 해설

  • def sigmoid_derivative(x): return sigmoid(x) * (1 - sigmoid(x)): Sigmoid 함수의 미분을 정의합니다. Sigmoid 함수의 미분은 S(x) * (1 – S(x))로 표현됩니다.
  • y_deriv = sigmoid_derivative(x): 앞서 정의한 x 값들에 대해 Sigmoid 함수의 미분을 적용하여 y_deriv 값을 계산합니다.
  • plt.plot(x, y_deriv, label='Sigmoid Derivative', color='orange'): x와 y_deriv 값을 이용해 Sigmoid 함수의 미분 그래프를 오렌지색으로 그립니다.
  • plt.title('Sigmoid Derivative Function'): 그래프의 제목을 “Sigmoid Derivative Function”으로 설정합니다.
  • plt.xlabel('x')plt.ylabel("S'(x)"): x축과 y축의 레이블을 각각 ‘x’와 ‘S'(x)’로 설정합니다.
  • plt.grid(True): 그래프에 격자를 표시합니다.
  • plt.legend(): 그래프에 범례를 추가합니다.
  • plt.show(): 완성된 그래프를 화면에 표시합니다.
시그모이드 함수 미 분 시각화
( 시그모이드 함수 미 분 시각화 )

Sigmoid 함수와 미분 함수 비교 시각화

이제, Sigmoid 함수와 그 미분 값을 같은 그래프에서 비교해보겠습니다. 이를 통해 Sigmoid 함수의 특성과 미분 함수의 변화를 한눈에 볼 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

# Sigmoid 함수 정의
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# x 범위 설정
x = np.linspace(-10, 10, 100)

# Sigmoid 함수 적용
y = sigmoid(x)

# Sigmoid 함수 미분 계산
y_deriv = y * (1 - y) # derivative of sigmoid

# Sigmoid 함수와 미분 함수 함께 시각화
plt.plot(x, y, label='Sigmoid', color='blue')
plt.plot(x, y_deriv, label='Sigmoid Derivative', color='orange') # y_deriv is now defined
plt.title('Sigmoid Function and Its Derivative')
plt.xlabel('x')
plt.ylabel('Value')
plt.grid(True)
plt.legend()
plt.show()

위 코드는 Sigmoid 함수와 미분 함수를 동시에 시각화한 것입니다. 이 그래프를 통해 Sigmoid 함수가 x값에 따라 어떻게 변화하며, 그 미분이 어떤 패턴을 보이는지 확인할 수 있습니다.

시그모이드 함수와 미분 함수 비교 시각화
( 시그모이드 함수와 미분 함수 비교 시각화 )

시그모이드 함수 사용 이유

시그모이드 함수는 여러 이유로 딥러닝에서 중요한 역할을 합니다. 그중 대표적인 이유는 이진 분류 문제에서 출력 값을 0과 1 사이로 제한해 확률로 해석할 수 있기 때문입니다. 또한, 미분이 가능해 역전파(Backpropagation) 과정에서 기울기 계산이 용이합니다. 하지만 기울기 소멸 문제를 야기할 수 있다는 단점이 있어, 현재는 ReLU 등의 함수가 더 많이 사용되기도 합니다.

정리하기

이번 포스트에서는 파이썬을 이용한 시그모이드 함수 구현과 그 미분을 시각화하는 과정을 다루었습니다. 시그모이드 함수는 딥러닝에서 중요한 활성화 함수로, 이진 분류 문제에서 확률 계산에 많이 사용됩니다. 이를 직접 구현하고 그래프를 그려보면서, 함수의 동작 원리와 그 미분의 변화를 쉽게 이해할 수 있었을 것입니다. 시그모이드 함수의 개념과 파이썬 실습을 통해, 딥러닝 모델을 더 잘 이해하고 활용할 수 있기를 바랍니다.

유사한 게시물