계단 함수
- 계단 함수(step function) = 임계값을 경계로 출력이 바뀌는 활성화 함수
- 입력이 0을 넘으면 1을 출력하고, 그 외에는 0을 출력하는 함수
- 퍼셉트론에서는 활성화 함수로 "계단 함수"를 이용한다.
- 활성화 함수로 쓸 수 있는 여러 후보 중에서 퍼셉트론은 계단 함수를 채용
- 활성화 함수를 계단 함수에서 다른 함수로 변경하는 것이 신경망의 key point!
def step_function(x) :
if x > 0:
return 1
else :
return 0
- 위는 인수 x 가 실수(부동소수점)만 받아들임
- 즉, step_function(3.0) 은 가능하지만, 넘파이 배열을 인수로 넣을 수 없음
- step_function(np.array([1.0, 2.0])) 은 안됨
def step_function(x) :
y = x > 0
return y.astype(np.int)
- x 라는 넘파이 배열을 준비하고 그 넘파이 배열을 위 함수에 넣기
- 넘파이 배열에 부등호 연산을 수행하면 배열의 원소 각각에 부등호 연산을 수행한 bool 배열이 생성됨
- 배열 x 의 원소 각각이 0보다 크면 True, 0 이하면 False 로 변환한 새로운 배열 y 가 생성됨
ex) x = np.array([-1.0, 1.0, 2.0])
y
--> array([False, True, Ture], dtype=bool) - y는 bool 배열. 우리가 원하는 계단 함수는 0이나 1의 'int 형' 을 출력하는 함수
- 따라서 배열 y의 원소를 bool 에서 int형으로 바꿔줌
ex) y = y.astype(np.int)
y
--> array([0, 1, 1]) - 넘파이 배열의 자료형을 변환할 때는 astype() 메서드 이용
- 원하는 자료형 (ex. np.int) 을 인수로 지정하면 됨
- 여기서 bool -> int 로 변환하면서 True 는 1로, False 는 0으로 변환됨
** 계단 함수 그래프 그리기
import numpy as np
import matplotlib.pylab as plt
def step_function(x) :
return np.array(x > 0, dtype = np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
출력된 그래프 :
- np.arange(-5.0, 5.0, 0.1) 은 -5.0 에서 5.0 전까지 0.1 간격의 넘파이 배열 생성
- 즉 [ -5.0, -4.9, ... , 4.9 ] 생성 - step_function() 은 인수로 받은 넘파이 배열의 원소 각각을 인수로 계단 함수를 실행해, 그 결과를 다시 배열로 만들어 돌려줌
- 이 x, y 배열을 그래프로 그린 결과가 위의 그래프 - 계단 함수는 0을 경계로 출력이 0에서 1 로 바뀜
- 계단 함수라고 불리는 이유 : 값이 바뀌는 형태가 계단처럼 생겼기 때문
Reference
- 밑바닥부터 시작하는 딥러닝
'Deep Learning' 카테고리의 다른 글
비선형 함수를 사용하는 이유 (신경망, 선형함수 비교) (0) | 2022.05.31 |
---|---|
시그모이드 함수 (sigmoid function) 란? (계단 함수와의 비교) (0) | 2022.05.31 |
신경망과 활성화 함수 (activation function) (0) | 2022.05.29 |
XOR 게이트 (배타적 논리합, 논리회로, 파이썬으로 구현해보기) (0) | 2022.05.29 |
AND, OR, NAND 게이트 구현 (논리 회로 구현하기) (0) | 2022.05.29 |
댓글