Deep Learning

XOR 게이트 (배타적 논리합, 논리회로, 파이썬으로 구현해보기)

햇농nongnong 2022. 5. 29. 21:13

XOR 게이트


def XOR(x1, x2) :
	s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

 

  • XOR 게이트 배타적 논리합 이라는 논리 회로; x1, x2 중 한 쪽이 1일 때만 1을 출력
  • 배타적; 자기 외에는 거부 - 따라서 하나만 자기일 때 1 출력
  • 퍼셉트론(단층)으로는 비선형 영역을 나타내야 하는 XOR 게이트 표현 불가
  • 따라서 층을 쌓은 '다층 퍼셉트론'을 통해 구현
  • = 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다. 
  • AND, NAND, OR 게이트를 조합하여 구현하기

 

XOR(0, 0)	# 0을 출력
XOR(1, 0)	# 1을 출력
XOR(0, 1)	# 1을 출력
XOR(1, 1)	# 0을 출력

 

  • 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있음
  • 퍼셉트론은 층을 쌓아 (깊게 하여) 더 다양한 것 표현 가능
    - 덧셈을 처리하는 가산기, 2진수를 10진수로 변환하는 인코더 등등 다양하게 표현 가능
    - 퍼셉트론을 이용해 '컴퓨터' 마저 표현 가능
  • 컴퓨터 = 정보를 처리하는 기계
    - 컴퓨터에 무언가를 입력하면 정해진 방법으로 처리하고 그 결과를 출력
    - 정해진 방법으로 처리한다는 것은 컴퓨터도 마치 퍼셉트론처럼 입력과 출력으로 구성된 특정 규칙대로 계산을 수행한다는 뜻
    - 컴퓨터 내부에서 이뤄지는 처리 매우 복잡할 것 같지만, 사실은 NAND 게이트의 조합만으로 컴퓨터가 수행하는 일 재현 가능
    - 즉 퍼셉트론으로도 컴퓨터를 표현할 수 있다는 놀라운 사실
  • 대체 얼마나 퍼셉트론 층을 깊게 쌓아야 컴퓨터를 표현할 수 있을까?
    - 놀랍게도 이론상 2층 퍼셉트론이면 가능
    - 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다
    - but 2층 퍼셉트론 구조에서 가중치를 적절히 설정하여 컴퓨터 만들기란 너무 어려움
    - NAND 등의 저수준 소자에서 시작하여 컴퓨터를 만드는 데 필요한 부품(모듈)을 단계적으로 만들어가는 쪽이 자연스러운 방법
    --> AND와 OR 게이트 - 반가산기와 전가산기 - 산술 논리 연산 장치 (ALU) - CPU  이런식으로 퍼셉트론으로 표현하는 컴퓨터는 이렇게 여러 층을 다시 층층이 겹친 구조로 만드는 방향

 

 

** 총 정리

  • 퍼셉트론은 입출력을 갖춘 알고리즘 - 입력을 주면 정해진 규칙에 따른 값 출력
  • 퍼셉트론에서 '가중치'와 '편향' 매개변수로 설정
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로 표현 가능
  • XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음
  • 2층 퍼셉트론을 이용하면 XOR 게이트 표현할 수 있음
  • 단층 퍼셉트론은 직선형 영역만 표현 가능, 다층 퍼셉트론은 비선형 영역도 표현 가능
  • 다층 퍼셉트론은 (이론상) 컴퓨터 표현 가능

 

 Reference

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