라떼는말이야

[머신러닝] 활성화 함수(계단, 시그모이드, 쌍곡탄젠트, ReLU, 소프트맥스 함수) 파이썬 예제 본문

공부

[머신러닝] 활성화 함수(계단, 시그모이드, 쌍곡탄젠트, ReLU, 소프트맥스 함수) 파이썬 예제

MangBaam 2020. 11. 19. 18:39
반응형

활성화 함수 (Activation function)

입력 신호의 총합이 임계값을 넘어 설 때 특정값을 출력하는 함수.

계단 함수, 시그모이드 함수, ReLU 함수 등 다양한 활성화 함수가 존재.

 

계단 함수 (Step function)

import numpy as np
import matplotlib.pyplot as plt


def stepfunc(x):
    return np.where(x <= 0, 0, 1)   # x 값이 (x <= 0)을 만족하면 0 반환, 만족하지 못하면 1을 반환


x = np.arange(-10, 10, 0.1)         # x 값으로 -10 ~ 9.9까지 0.1 간격의 소수로 이루어진 배열
y = stepfunc(x)

plt.plot(x, y)
plt.title('step function')
plt.show()

result of step function

x 값:

x of step function

y 값:

y of step function

 


시그모이드 함수 (Sigmoid function)

시그모이드는 S를 닮았다는 의미를 가진다.  그리스 문자인 시그마(σ)가 라틴 문자의 S에 해당하기 때문에 σ로 줄여서 표기하기도 한다.

계단 함수의 경우 0 또는 1이 출력되지만, 시그모이드 함수를 사용하면 0 ~ 1 사이의 연속적인 실수가 출력된다.

시그모이드 함수를 구하는 식

import numpy as np
import matplotlib.pyplot as plt


def sigmoid(x):
    return 1 / (1 + np.exp(-x))     # 넘파이의 exp(x) 함수는 e^x를 구하는 지수 함수이다.


x = np.arange(-10, 10, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.title('sigmoid function')
plt.show()

result of sigmoid function

 


쌍곡탄젠트 함수 (Tanh function)

쌍곡탄젠트 함수는 시그모이드 함수처럼 S자 모양의 그래프로 표시되지만, 시그모이드 함수가 0 ~ 1 사이으 ㅣ값을 출력하는 것에 반해 쌍곡탄젠트 함수는 -1~ 1 사이의 값을 출력하는 차이점이 있다.

쌍곡탄젠트를 구하는 식

import numpy as np
import matplotlib.pyplot as plt


def tahn(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))


x = np.arange(-10, 10, 0.1)
y = tahn(x)

plt.plot(x, y)
plt.title("tahn function")
plt.show()

result of tahn function

+ numpy에서도 np.tahn() 함수를 제공한다.


ReLU 함수 (Rectified Linear Unit)

rectified 는 '정류된'이라는 의미로, ReLU 함수는 음수를 0으로 만든다.

즉, 입력이 0 이하일 경우에는 0을 출력하지만 입력이 0을 넘으면 입력 받은 값을 그대로 출력한다.

import numpy as np
import matplotlib.pyplot as plt


def relu(x):
    return np.maximum(0, x)     # 인수로 주어진 수 중 가장 큰 수를 반환


x = np.arange(-10, 10, 0.1)
y = relu(x)

plt.plot(x, y)
plt.title('ReLU function')
plt.show()

result of ReLU function


소프트맥스 함수 (Softmax function)

소프트맥스 함수는 분류 문제를 다룰 때 사용되는 활성화 함수이다.

입력받은 값들을 0 ~ 1 사이 값으로 정규화한다.

출력값들의 총합은 항상 1이 된다.

입력값 x가 n개 일 때 다음 수식으로 나타낼 수 있다.

 

소프트맥스 함수를 구하는 식

import numpy as np
import matplotlib.pyplot as plt


def softmax(x):
    return np.exp(x) / np.sum(np.exp(x))


result = softmax([1, 1, 2])
# result = [0.21194156 0.21194156 0.57611688]
# [1, 1, 2]가 입력값으로 주어지면, 2에 대항하는 클래스로 분류될 확률이 57%로 가장 높다.

print(result)

 

 

반응형
Comments