본문 바로가기
컴퓨터&프로그래밍&머신러닝

[딥러닝] 퍼셉트론 - 논리게이트 #2

by 토들백만장자 2020. 10. 26.

이전 포스팅을 보고와야 이해가 되므로 아래 링크를 먼저 보고 와주길 바란다. 

 

논리게이트#1 포스팅 보러가기

 

[딥러닝] 퍼셉트론 - 논리게이트 #1

우리나라에 알파고(AlphaGo) 사태가 일어난 이래 4년정도의 시간이 지난 지금, 머신러닝, 딥러닝이란 것에 대해 조금이라도 관심있는 사람들이라면 다 알고 있을법한 내용을 다루려고 한다. 블로

toddlemillionaire.tistory.com

이제 프로그램을 이용해서 논리게이트를 하나하나씩 구현해보겠다.

 

AND게이트를 먼저 살펴보자.

 

AND 게이트

입력신호 X1, X2가 모두 참(1)일때만 출력신호가 1임을 나타내는 그림이다. 

 

여러분이 인공지능이라고 가정해보고 X1, X2만을 입력 받았을 때 AND 게이트를 어떻게 구할 수 있을까?

 

스크롤을 내리기전에 10초 정도 생각해보길 추천한다.

 

 

 

.

.

.

.

.

.

.

.

.

.

.

 

AND 게이트 구분식

그림의 중간의 직선

 

$X1+X2-1.5$ 에 $X1$과 $X2$ 를 입력 했을 때

 

0보다 크면 True(1)을 ,

 

반대면 False(0)을 출력하면 된다.

 

파이썬으로 함수를 작성해보면 다음과 같다.

 

def AND_gate(x1,x2):
    if x1+x2-1.5 >= 0:
        return True
    else:
        return False
        
>>> AND_gate(1,1)
True
>>> AND_gate(1,0)
False
>>> AND_gate(0,1)
False
>>> AND_gate(0,0)
False        

 

 

여기까지 무리없이 같이 왔다면 빠른속도로 OR게이트와 NAND게이트를 살펴보자.

 

 

OR 게이트

 

def OR_gate(x1,x2):
    if x1+x2-0.5 >= 0:
        return True
    else:
        return False
        
 
>>> OR_gate(1,1)
True
>>> OR_gate(1,0)
True
>>> OR_gate(0,1)
True
>>> OR_gate(0,0)
False

 

 

NAND 게이트

(미안하다! 글쓰다 지금 알았는데 이전 포스팅의 NAND게이트 그림이 잘못되었다!)

 

def NAND_gate(x1,x2):
    if x1+x2-1.5 < 0:
        return True
    else:
        return False
        
 
>>> NAND_gate(1,1)
False
>>> NAND_gate(1,0)
True
>>> NAND_gate(0,1)
True
>>> NAND_gate(0,0)
True

 

 

자, 마지막 XOR게이트가 남았다. 

마지막 관문을 넘기전에 지금까지 살펴본 3개의 논리게이트의 형태를 잠시만 되돌아 보자.

 

결과물에서 참과 거짓을 판별하기위해 우리는 두 신호의 입력값을 하나의 직선을 부등식으로 구분지었다.

그렇다면 XOR게이트도 앞선 예시들과 같이 하나의 직선으로 가를수 있지 않을까?

XOR게이트를 하나의 직선으로 가를 수 있을까?

2차원 평면기준으로 국한시켜보면 하나의 직선으로는 쉽게 답을 구할 수가 없다.

즉 XOR게이트는 AND, OR, 그리고 NAND처럼 하나의 수식으로 구현 할 수 없다는 이야기이다. 

그렇다면 그냥 '안된다'라고 치부해버리고 말것인가?

 

.

.

.

.

 

혹시 당신은 지금까지 글의 전개를 보고 논리게이트는 꼭 직선으로만 구분지어야 한다는 생각에 사로잡힌건 아닐까?

 

그렇다! 논리게이트는 꼭 직선으로만 구할 필요는 없다! 해답은 아래와 같이 구할 수 있다.

XOR을 이렇게 나누면 구현 할 수 있다!

그렇다면 '곡선식을 어떻게 구하지?'라는 난감한 질문이 나올수 있는데 잠시뒤에 필자가 답을 내줄것이므로 

걱정하지 않아도 된다. 아무튼! 갑자기 중요한 내용이 여기서 훅 들어오는데 위와 같은 곡선식을 컴퓨터가 스스로 구해서 전기신호를 전송시키는 것이 바로 인공지능, (다층) 퍼셉트론이라고 한다.

 

XOR을 구현하자. 

구현방식은 바로 NAND게이트, OR게이트의 결과를 AND로 통과시키면 XOR결과가 나온다.

이해하기 쉽게 아래 표로 정리해보겠다.

 

1단계

X1 X2 1단 NAND 1단 OR
0 0 1 0
0 1 1 1
1 0 1 1
1 1 0 1

2단계(입력값이 1단계에서의 NAND값과 OR값이다)

1단 NAND 1단 OR 2단 AND   (XOR)
1 0 0
1 1 1
1 1 1
0 1 0

그래서 코드로 구현하면 다음과 같다.

 

 def XOR_gate(x1,x2):
     new_x1 = NAND_gate(x1,x2)
     new_x2 = OR_gate(x1,x2)
     return AND_gate(new_x1,new_x2)
     
>>> XOR_gate(1,1)
False
>>> XOR_gate(1,0)
True
>>> XOR_gate(0,1)
True
>>> XOR_gate(0,0)
False

 

지금까지 논리게이트를 파이썬으로 구현해보았다.

지난 포스팅과 이번 포스팅을 통해 대략적인 퍼셉트론과 머신러닝의 감을 잡았다면 필자로써는 아주 대성공이다.

다음 포스팅부터는 퍼셉트론을 구현하면서 나왔던 부분에 대해 한차례 깊이 고찰해가며 딥러닝에 대해서 이야기를 해보겠다. 

 

 

 

P.S 이.공계열 사람들은 미적감각도 정말 뛰어나야하는구나를 정말 많이 느낀다. 그림그리기가 생각보다 많이 버겁다 ㅎ

댓글