02.5 다층 퍼셉트론이 출동한다면

안타깝게도 퍼셉트론으로는 XOR 게이트를 표현할 수 없었습니다. 그렇다고 슬퍼할 필요는 없습니다. 사실 퍼셉트론의 아름다움은 ‘층을 쌓아’ 다층 퍼셉트론 multi-layer perceptron을 만들 수 있다는 데 있습니다. 이번 절에서는 층을 하나 더 쌓아서 XOR를 표현해볼 것입니다. ‘층을 쌓는다’는 말의 뜻은 잠시 뒤에 살펴보기로 하고, 우선은 XOR 게이트 문제를 다른 관점에서 생각해보기로 합시다.

2.5.1 기존 게이트 조합하기

XOR 게이트를 만드는 방법은 다양합니다. 그중 하나는 앞서 만든 AND, NAND, OR 게이트를 조합하는 방법입니다. 여기에서는 AND, NAND, OR 게이트를 [그림 2-9]와 같은 기호로 표기합니다. 참고로 [그림 2-9]의 NAND 게이트 출력부에 있는 ○ 기호는 출력을 반전한다는 뜻입니다.

그림 2-9 AND, NAND, OR 게이트 기호

그림 2-9

블록 쌓는 도로시와 토토 도로시와 토토가 계곡을 건너기 위해 AND, NAND, OR 블록들을 차곡차곡 쌓아 다리를 놓아 봅니다. 단층으로는 할 수 없던 일들이 가능해집니다.

그럼 XOR 게이트를 만들려면 AND, NAND, OR를 어떻게 조합하면 될까요? 각자 생각해봅시다. 힌트! [그림 2-10]의 ‘?’에 세 가지 게이트를 하나씩 대입하면 XOR를 완성할 수 있습니다.

그림 2-10 AND, NAND, OR 게이트 하나씩을 ‘?’에 대입해 XOR를 완성하자!

그림 2-10

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

[그림 2-11]과 같은 조합이라면 XOR 게이트를 구현할 수 있습니다. x1x2가 입력 신호, y가 출력 신호입니다. x1x2는 NAND와 OR 게이트의 입력이 되고, NAND와 OR의 출력이 AND 게이트의 입력으로 이어집니다.

그림 2-11 AND, NAND, OR 게이트를 조합해 구현한 XOR 게이트

그림 2-11

지니의 다층 퍼셉트론 설계도 지니가 두 층으로 이루어진 신비로운 설계도(2-Layer MLP)를 펼치며, 어떻게 복잡한 신호가 전달되는지 지도로 설명해줍니다.

그럼 [그림 2-11]의 조합이 정말 XOR를 구현하는지 살펴봅시다. NAND의 출력을 s1, OR의 출력을 s2로 해서 진리표를 만들면 [그림 2-12]처럼 됩니다. x1, x2, y에 주목하면 분명히 XOR의 출력과 같습니다.

그림 2-12 XOR 게이트의 진리표

그림 2-12

2.5.2 XOR 게이트 구현하기

이어서 [그림 2-11]처럼 조합된 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을 출력

이로써 XOR 게이트를 완성할 수 있었습니다. 지금 구현한 XOR를 뉴런을 이용한 퍼셉트론으로 표현하면 [그림 2-13]처럼 됩니다.

그림 2-13 XOR의 퍼셉트론

그림 2-13

XOR 작동원리 협동조업 도로시, 토토, 그리고 지니가 컨베이어 벨트 앞에서 부품을 가공해 다음 단계로 전달하는 협동 조업(XOR 공정)을 수행하고 있습니다.

XOR는 [그림 2-13]과 같은 다층 구조의 네트워크입니다. 이 책에서는 왼쪽부터 차례로 0층, 1층, 2층이라고 부르겠습니다.

그런데 [그림 2-13]의 퍼셉트론은 지금까지 본 AND, OR 퍼셉트론(그림 2-1)과 형태가 다릅니다. 실제로 AND, OR가 단층 퍼셉트론인 데 반해, XOR는 2층 퍼셉트론입니다. 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라 합니다.

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

[그림 2-13]과 같은 2층 퍼셉트론에서는 0층에서 1층으로 신호가 전달되고, 이어서 1층에서 2층으로 신호가 전달됩니다. 이 동작을 더 자세히 서술하면 다음과 같습니다.

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

덧붙여서, 이 2층 퍼셉트론의 동작을 공장의 조립라인에 비유할 수 있습니다. 1단(1층째) 작업자는 흘러오는 ‘부품’을 다듬어 일이 완료되면 2단(2층째) 작업자에게 건네줍니다. 2단의 작업자는 1단 작업자로부터 전달받은 ‘부품’을 다듬어 완성품으로 만들어 출하(출력)합니다. 이처럼 XOR 게이트 퍼셉트론에서는 작업자들 사이에서 부품을 전달하는 일이 이뤄집니다.

이상으로 2층 구조를 사용해 퍼셉트론으로 XOR 게이트를 구현할 수 있게 되었습니다. 다시 말해 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있었습니다. 이처럼 퍼셉트론은 층을 쌓아(깊게 하여) 더 다양한 것을 표현할 수 있답니다.

서브목차