2.2 단순한 논리 게이트
2.2.1 AND 게이트
퍼셉트론을 활용한 AND 게이트를 살펴볼 수 있다.
AND 게이트는 입력이 둘이고 출력은 하나이다. 아래 [그림2-2]와 같은 입력 신호와 출력 신호의 대응 표를 진리표라고 한다. 이 그림은 AND 게이트의 진리표로, 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.
[그림 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 게이트를 뒤집은 것과 같다.
NAND 게이트를 표현하려면 예를 들어 (w1, w2, θ)=(-0.5, -0.5, -0.7)이 있으며 AND 게이트를 구현하는 매개변수의 부호를 모두 반전하기만 하면 NAND 게이트가 된다.
퍼셉트론 개념으로 위 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는 θ를 -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가 완료된다.
'딥러닝' 카테고리의 다른 글
05. 딥러닝 신경망 구현의 기초 - 출력층, 항등함수, 소프트맥스함수, 분류, 회귀 (1) | 2021.05.13 |
---|---|
딥러닝 넘파이(Numpy) 설치, 기초 연산 및 설명 (0) | 2021.05.05 |
04. 딥러닝 신경망(Neural Network) - 활성화 함수, 계단 함수, 시그모이드 함수, ReLU의 모든 것 (0) | 2021.05.01 |
03. 퍼셉트론의 한계와 다층 퍼셉트론 (0) | 2021.04.29 |
01. 퍼셉트론 - Perceptron (0) | 2021.04.28 |
댓글