EunGyeongKim

활성화 함수(Activation Function) 종류 본문

ML & DL/딥러닝

활성화 함수(Activation Function) 종류

EunGyeongKim 2023. 3. 3. 13:48

활성화 함수는 전이 함수라고도 하며 결과값을 내보낼 때 사용하는 함수이다. 이전 layer의 결과값을 변환하여 다른 layer로 전달할때의 값을 계산할때 주로 사용된다. 

 

시그모이드 함수

 매끄러운 계단같은 함수. 0에서 1까지 서서히 변하는 함수. 주로 신경망 활성화 함수로 활용됨. 일반적으로 함수 결과값이 0.5보다 크거나 같으면 1로 분류하고, 0.5보다 작으면 0으로 분류함

통계학에서도 로지스틱 분포, 정규 분포, 스튜던트 t분포 등 누적분포 함수로 시그모이드 곡선이 자주 등장함. 

시그모이드 함수는 가역함수로, 역은 로짓 함수.

데이터를 단순화 할 수 있는 신경망의 마지막 계층으로 배치되는 경우가 많음.

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

import numpy as np
import matplotlib.pyplot as plt
 
def sigmoid(x):
    return 1 / (1 +np.exp(-x))
 
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

-> 로그함수를 이용하여 지수함수를 부드럽게 만들어 준 수정된 비용함수

 

로짓 함수(Logit function)

시그모이드의 역함수. 

0~ 1사이의 확률값과 - \( \infty  \)에서 \( \infty  \)사이의 확률값을 표현해줌. 표준 로지스틱 분포와 관련된 함수.

로짓함수는 0~1영역에 존재하기 때문에 확률을 이해하는데 가장 많이 사용됨. 

데이터를 단순화 할 수 있는 신경망의 마지막 계층으로 배치되는 경우가 많음.

분류확률을 결정할 때 확률을 실수로 변환할 수 있음.

수식은 : \( f(x) = log \frac{x}{1-x} \)

import matplotlib.pyplot as plt
import numpy as np
from scipy.special import logit, expit

x = np.linspace(0, 1, 501)
y = logit(x)

plt.plot(x, y)
plt.grid()
plt.ylim(-6, 6)
plt.xlabel('x')
plt.title('logit(x)')
plt.show()

소프트맥스 함수

k 벡터 실수값을더해서 1이 될 수 있는 값으로 변환해줌.( a1, a2, a3, a4, a5 [0.1, 0.2, 0.1, 0.2, 0.4]  )

0~1 사이이므로 확률로 해석 가능함. 

수식 : \( f(x) = \frac{e^{x_i}}{\sum^{K}_{i=1} e^{x_j}} \)

import numpy as np

def softmax(x):
    exp_x = np.exp(x)
    sum_exp_x = np.sum(exp_x)
    y = exp_x / sum_exp_x

    return y

x = np.array([3, 6, 13, 6])
y = softmax(x)
print(y)
#[4.53152282e-05 9.10180689e-04 9.98134323e-01 9.10180689e-04]

가우스함수

x=0을 중심으로 종모양을 하고 있음. 이 함수는 곡선을 근사하는 기저함수로 사용됨.

수식은 \( y = exp(-x^2) \)

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

def gauss(mu, sigma, a):
    return a*np.exp(-(x-mu)**2 / sigma **2)

x = np.linspace(-4, 4, 100)
plt.figure(figsize=(4,4))
plt.plot(x, gauss(0,1,1), 'black', linewidth=3)
plt.ylim(-.5, 1.5)
plt.xlim(-4,4)
plt.grid(True)
plt.show()

ReLU함수

0보다 작은 값이 나온경우 0을, 0보다 크면 그 값을 그대로 반환하는 함수.

내부 hidden layer에 ReLU를 적용하고, 맨 마지막에 sigmoid 함수를 적용하는 경우가 많음.

import matplotlib.pyplot as plt
import numpy as np

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-1, 1, 500)
y = relu(x)

plt.plot(x, y)
plt.grid()
plt.ylim(-1, 2)
plt.xlabel('x')
plt.title('ReLU(x)')
plt.show()

 

Comments