Deep Learning

계단 함수 (step function) 란?

햇농nongnong 2022. 5. 29. 22:31

계단 함수


  • 계단 함수(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

  • 밑바닥부터 시작하는 딥러닝