728x90

퍼셉트론으로는 XOR 게이트를 표현할 수 없습니다. 그러나 사실 퍼셉트론의 아름다움은 '층을 쌓아' 다층 퍼셉트론(multi-layer perceptron)을 만들 수 있다는 데 있습니다. 이번 절에서는 층을 하나 더 쌓아서 XOR을 표현해볼 것입니다. 

 

2.5.1 기존 게이트 조합하기

XOR 게이트를 만드는 방법은 다양합니다. 그중 하나는 앞서 만든 AND, NAND, OR 게이트를 조합하는 방법입니다.

 

여기에서는 AND, NAND, OR게이트를 아래 그림과 같은 기호로 표기합니다. 참고로 아래 그림의 NAND 게이트 출력부에 있는 ○기호는 출력을 반적한다는 뜻입니다.

 

 

그럼 XOR게이트를 만들려면 AND, NAND, OR를 어떻게 조합하면 될까요? 

 

※앞에서 말한 퍼셉트론의 한계는 정확히 말하면 '단층 퍼셉트론으로는 XOR 게이트를 표현할 수 없다', 또는 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다'가 됩니다. 앞으로는 퍼셉트론을 조합하여, 즉 층을 쌓아서 XOR 게이트를 구현하는 모습을 보게 됩니다.

 

[그림 1] AND, NAND, OR 게이트를 조합해 구현한 XOR 게이트

위 그림의 조합이 정말 XOR를 구현하는지 살펴봅시다. NAND의 출력을 s1, OR의 출력을 s2로 해서 진리표를 만들면, 아래 표처럼 됩니다. 

$x1$ $x2$ $s1$ $s2$ $y$
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

 

2.5.2 XOR 게이트 구현하기

그림 1처럼 조합된 XOR 게이트를 구현해보겠습니다. 지금까지 정의한 함수 AND, NAND, OR를 사용하면 다음과 같이 구현할 수 있습니다.

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

이 XOR 함수는 기대한 대로의 결과를 출력합니다.

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

 

 

[그림 2] XOR의 퍼셉트론

XOR은 위 그림과 같은 다층 구조의 네트워크입니다. 왼쪽부터 차례로 0층, 1층, 2층이라고 부르겠습니다.

잉처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라 합니다.

 

★그림 2의 퍼셉트론은 모두 3층으로 구성됩니다만, 가중치를 갖는 층은 사실 2개(0층과 1층 사이, 1층과 2층 사이)뿐이니 2층 퍼셉트론이라 부르기로 합시다. 문헌에 따라선 구성 층의 수를 기준으로 3층 퍼셉트론이라하는 경우도 있습니다.

 

그림 2와 같은 2층 퍼셉트론에서는 0층에서 1층으로, 이어서 1층에서 2층으로 신호가 전달됩니다. 이 과정을 자세히 서술해보겠습니다.

1. 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.

2. 1층의 뉴련이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 이 입력 신호를 바탕으로 y를 출력한다.

 

이 2층 퍼셉트론의 동작을 공장의 조립라인에 비유할 수 있습니다.

 

1. 1단(1층째) 작업자는 흘러오는 '부품'을 다듬어 일이 완료되면 2단(2층째) 작업자에게 건네줍니다.

2. 2단의 작업자는 1단 작업자로부터 전달받은 '부품'을 다듬어 완성품으로 만들어 출하(출력)합니다.

 

이처럼 XOR게이트 퍼셉트론에서는 작업자들 사이에서 부품을 전달하는 일이 이뤄집니다.

 

결론

 

단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있었습니다. 이처럼 퍼셉트론은 층을 쌓아(깊게 하여) 더 다양한 것을 표현할 수 있습니다.

728x90