프로필사진

IT Anthology/encyclopedia

[밑러닝] XOR 문제의 해결, 층 쌓기

다각 2020. 3. 11. 14:20

* 이 글은 <밑바닥부터 시작하는 딥러닝2 (저자: 사이토 고키)> 책을 읽으며 정리한 글입니다.
* 나중에라도 제가 참고하기 위해 정리해 두었으며, 모든 내용을 적은 것이 아닌,
필요하다고 생각되는 부분만 추려서 정리한 것임을 미리 밝힙니다.


목차

  1. XOR 문제 리마인트
  2. XOR 문제 해결
  3. 다층 퍼셉트론 (multi-layer perceptron)

1. XOR 문제 리마인드

지난 포스트에서, 풀기 어려운 난제에 대해 이야기한 바가 있다. 문제를 풀기에 앞서, 문제가 무엇인지 리마인드를 해보자.
AND, NAND, OR 게이트 등은 2차원의 공간 상에 표현했을 때, 하나의 선만으로 빨간 동그라미와 파란 세모와의 구역을 구분지을 수 있었다. 예를 들면, 아래는 OR 게이트를 시각화한 것이다.

하지만 XOR 게이트는 하나의 선만을 가지고 구분지을 수가 없었다.

이것을 해결하기 위한 방법이 많지만, 우리는 그 중에서도 가장 간단한, '그냥 선 한번 더 그어버리지 뭐'를 사용해보겠다.

 

2. XOR 문제 해결

'그냥 선 한번 더 그어버리지 뭐'는 파란 세모들만 영역에 들어오게 하기 위해 선을 두번 그어버리는 수법이다. AND와 NAND, OR 게이트를 모두 시각화해봤을 때, XOR은 OR과 NAND의 겹치는 부위이다. 즉, 어떤 정보가 들어왔을 때 OR 게이트를 거치고 난 정보와 NAND 게이트를 거치고 난 정보를 AND로 조합하면 우리가 원하는 XOR 정답이 나온다는 얘기다.

이것을 진리표로 체크해보면 다음과 같다.

$x_1$ $x_2$ OR($x_1$, $x_2$) NAND($x_1$, $x_2$) AND(OR, NAND) XOR
0 0 0 1 0 0
1 0 1 1 1 1
0 1 1 1 1 1
1 1 1 0 0 0

위의 표에서 알 수 있듯이, NAND와 OR 게이트를 거친 정보가 AND로 조합되어 최종적으로 XOR과 같은 결과를 보인다는 사실을 알 수 있다. 겨우 4개의 점이 맞냐 아니냐를 판단하는 게 뭐 그리 대수냐고 할 수 있겠지만, 사실 이 XOR 문제 해결의 핵심은 비선형의 문제를 선형 문제의 조합으로 풀 수 있다는 데에 있다.

 

위의 사항을 파이썬으로 구현해보면 다음과 같다. 

def XOR(x1, x2):
    h1 = OR(x1, x2)
    h2 = NAND(x1, x2)
    y = AND(h1, h2)
    if y > 0 :
        return 1
    else:
        return 0

(XOR의 구현에는 지난 포스트에서 구현한 OR과 NAND, AND 함수를 이용한다.)

 

3. 다층 퍼셉트론 (multi-layer perceptron)

XOR 문제를 해결하면서, 우리는 아주 자연스럽게 퍼셉트론의 층을 '쌓았다'.

'쌓았다'라는 말이 직관적으로 와닿지 않을 독자분들을 위해 위에서 한 작업들을 시각적으로 표현해보면 다음과 같다.

지난번의 단층 퍼셉트론과 비교했을 때, 회색 층이 한층 늘어난 것을 볼 수 있다.

 

이것이 인공 신경망(Neural Network) 아이디어의 시초이다. 즉, 판가름하는 단층의 게이트들을 '쌓고 조합해서' 복잡한 판가름을 해보자는 얘기다.

 


 

정리
여기까지 잘 따라왔다면, '그렇다면 다층 퍼셉트론이 곧 인공신경망이라는 얘기인가?'하는 적절한 의문을 던질 수 있겠다. 물론 퍼셉트론이 인공신경망의 시초라는 찬사로 장을 열긴 했다. 하지만, $x_1$과 $x_2$의 XOR 게이트를 구현하는 데에만 6개의 가중치와 3개의 편향, 즉 9개의 변수를 결정해야 하는데, 층이 더 많아지고 노드($x_n$)가 더 많아지면, 이걸 언제 일일이 계산하고 앉아있겠나?

 

이걸 해결하기 위해 신경망의 학습법이 등장한다. 신경망의 '학습'에 대해 이해하기 전에, 신경망이 어떤 존재인지 먼저 다음 포스트에서 짚고 넘어가보자.