Recent Posts
Recent Comments
라떼는말이야
[머신러닝] 활성화 함수(계단, 시그모이드, 쌍곡탄젠트, ReLU, 소프트맥스 함수) 파이썬 예제 본문
반응형
활성화 함수 (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()

x 값:


y 값:

시그모이드 함수 (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()

쌍곡탄젠트 함수 (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()

+ 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()

소프트맥스 함수 (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)
반응형
'공부' 카테고리의 다른 글
[Python] 0.3 + 0.6은 0.9가 아니다?! (2) | 2021.08.22 |
---|---|
[Kotlin] 코틀린 range로 리스트 초기화 하기 (0) | 2021.07.28 |
[Kotlin] 코틀린의 collections-List, Set, Map (파이썬과 비교) (0) | 2021.07.24 |
IP 주소의 구성과 네트워크 부분, 호스트 부분 (0) | 2021.06.02 |
21/3/23 공부 기록 (0) | 2021.03.24 |
[CSS] 선택자 종류 (0) | 2021.01.23 |
[CSS] Inline CSS, Internal CSS, External CSS 장단점 (0) | 2021.01.23 |
[머신러닝] 분류 모델 - 소프트맥스 (아이리스 품종 분류) (0) | 2021.01.08 |