Sigmod함수 미분

Sigmoid 함수는 S자와 유사한 완만한 커브 형태를 갖는 대표적인 Logistic 함수입니다. Sigmoid 함수는 모든 실수 입력 값을 0보다 크고 1보다 작은 미분가능의 특징을 갖습니다. Sigmoid 함수의 그래프와 미분 유도 과정을 설명하겠습니다.

 

1. Sigmod함수 그래프

(코드) 파이션으로 구현한 Sigmod 함수와 그래프

import math
import numpy as np

def sigmoid(x, deff=False):
    if deff:
        return sigmoid(x)*(1-sigmoid(x))
    else:
        return 1 / (1 + math.exp(-x))

# numpy의  linspace (start, end, num)를 이용해서 -8과 8사이에 100개의 값 생성
x = np.linspace(-8, 8, 100) 
sig = []
for itr in x:
    sig.append(sigmoid(itr))

import matplotlib.pyplot as plt
plt.plot(x, sig)
plt.grid(True)
 
plt.show()

 

1. Sigmoid 함수 정의

2. Sigmod함수 정의

 

2. Sigmod 함수 미분

Sigmoid를 Logistic Classification 의 가설로 사용하거나 비용을 최소를 찾는 Algorism 으로 사용할 ㅎradient Descent Algorithm 계산, Backprogation 계산 등에서 Sigmoid 함수의 미분이 사용됩니다. 이런 과정의 이해를 돕는 목적으로 sigmoid의 미분 과정을 정리합니다.

3. 미분 과정

3. Sigmoid 미분함수

 

 

4. Sigmod 미분 함수

그래프의 미분계수를 보면 최댓값은 0.25입니다. 딥러닝에서 학습을 위하여 Backpropagation 계산하는 과정에서 Sigmod 미분함수를 곱하는 과정이 포함됩니다. sigmoid 를 Acitivaton function 으로 사용하는 경우 은닉층의 깊이가 깊다면 오차율 계산이 어렵다는 문제가 발생합니다. 이것이 딥러닝에 sigmoid 를 사용할 때 Vanishing Gradient Problem 이 발행하는 이유입니다.

 

(코드) 파이션으로 구현한 Sigmod 미분함수와 그래프

import math
import numpy as np

def sigmoid(x, deff=False):
    if deff:
        return sigmoid(x)*(1-sigmoid(x))
    else:
        return 1 / (1 + math.exp(-x))


# numpy의  linspace (start, end, num)를 이용해서 -8과 8사이에 100개의 값 생성
x = np.linspace(-8, 8, 100)
sig = []
for itr in x:
    sig.append(sigmoid(itr, deff=True))

import matplotlib.pyplot as plt
plt.plot(x, sig)
plt.grid(True)

plt.show()

 

(참고) Vanishing Gradient Problem

  ayearofai.com/rohan-4-the-vanishing-gradient-problem-ec68f76ffb9b

 

Rohan #4: The vanishing gradient problem

Oh no — an obstacle to deep learning!

ayearofai.com