본문 바로가기
딥러닝

02. 단순한 논리회로와 퍼셉트론 구현하기

by Go! Jake 2021. 4. 28.

 

- 이전글: 01. 퍼셉트론 - Perceptron

  2.2 단순한 논리 게이트

 

  2.2.1 AND 게이트

퍼셉트론을 활용한 AND 게이트를 살펴볼 수 있다.

AND 게이트는 입력이 둘이고 출력은 하나이다. 아래 [그림2-2]와 같은 입력 신호와 출력 신호의 대응 표를 진리표라고 한다. 이 그림은 AND 게이트의 진리표로, 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.

 

[그림 2-2]

 

[그림 2-2]를 만족하는 매개변수 조합은 무한히 많다. w1, w2, θ의 조합을 살펴 보면, (0.5, 0.5, 0.8) 또는 (1.0, 1.0, 1.0) 때 모두 AND 게이트의 조건을 만족한다. 매개 변수를 이렇게 설정하면 x1과 x2 모두가 1일 때만 가중 신호의 총합이 주어진 임계값을 웃돌게 된다.

 

  2.2.2 NAND 게이트와 OR 게이트

NAND는 Not AND를 의미하며, 그 동작은 AND 게이트를 뒤집은 것과 같다.

 

[그림 2-3]

 

NAND 게이트를 표현하려면 예를 들어 (w1, w2, θ)=(-0.5, -0.5, -0.7)이 있으며 AND 게이트를 구현하는 매개변수의 부호를 모두 반전하기만 하면 NAND 게이트가 된다.

 

 

[그림 2-4]

 

퍼셉트론 개념으로 위 OR 게이트도 구성할 수 있다.

 

주요한 개념은 퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 똑같다는 것이다. 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값뿐이다. 즉 매개변수의 값만 적절히 조정하여 AND, NAND, OR로 변하게 된다.

 

  2.3 퍼셉트론 구현하기

  2.3.1 간단한 구현부터

 

def AND(x1,x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <=theta:
        return 0
    else:
        return 1

AND 게이트 함수를 표현하면 위와 같다. 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그 외에는 0을 반환한다.

 

input

def AND(x1,x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <=theta:
        return 0
    else:
        return 1

print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

output

0
0
0
1

위와 같이 AND 게이트가 구현되었음을 알 수 있다.

 

  2.3.2 가중치와 편향 도입

 

 

식 2.1
식 2.2

 

위 식 2.1과 식 2.2는 θ를 -b로 바꿨을 뿐, 의미는 동일하다.

식 2.2의 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다.

 

>>> import numpy as np
>>> x = np.array([0, 1])
w = np.array([0.5, 0.5])
b = -0.7
>>> w*x
array([0. , 0.5])
>>> np.sum(w*x)
0.5
>>> np.sum(w*x)+b
-0.19999999999999996

 

넘파이를 이용해 배열끼리의 곱셈을 한다. np.sum()을 통해 입력한 배열에 담긴 모든 원소의 총합을 계산한다. 이 가중치에 편향을 더하면 식 2.2가 완료된다.

 

- 다음글: 03. 퍼셉트론의 한계

 

댓글