퍼셉트론은 신경망의 기원이 되는 알고리즘이다.
이며, 가중합의 결과에 따라 y 출력이 1 또는 0으로 정해진다.
아래의 논리게이트를 퍼셉트론으로 구현해보자.
AND Logic Gate Perceptron
NAND Logic Gate Perceptron
OR Logic Gate Perceptron
# 단층 퍼셉트론 구현
# 여기서 b 는 편향을 의미
# x 는 입력
# y 는 출력
def AND(x1, x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.7
sum = np.sum(x*w) + b
if sum >= 0:
return 1
elif sum < 0:
return 0
def NAND(x1, x2):
x = np.array([x1,x2])
w = np.array([-0.5,-0.5])
b = 0.7
sum = np.sum(x*w) + b
if sum >= 0:
return 1
elif sum < 0:
return 0
def OR(x1, x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.2
sum = np.sum(x*w) + b
if sum >= 0:
return 1
elif sum < 0:
return 0
퍼셉트론은, 간단하게 설명했지만 이후 진행될 신경망부터는 조금더 자세히 다루어 보자
활성화 함수는, 입력값과 바이어스의 가중합을 기준으로 출력의 활성화 여부를 결정한다.
대표적인 함수 몇개와 구현 식을 살펴 보자.
## Activation Function
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()
def sigmoid(x):
return 1 / (1+ np.exp(-x))
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
def relu(x):
return np.maximum(0, x)
y = relu(x)
plt.plot(x,y)
plt.show()