02.6 NAND에서 컴퓨터까지

다층 퍼셉트론은 지금까지 보아온 회로보다 복잡한 회로를 만들 수 있습니다. 예를 들면, 덧셈을 처리하는 가산기도 퍼셉트론으로 만들 수 있습니다. 2진수를 10진수로 변환하는 인코더, 어떤 조건을 충족하면 1을 출력하는 회로(패리티 검사 회로)도 퍼셉트론으로 표현할 수 있습니다. 사실은 퍼셉트론을 이용하면 ‘컴퓨터’마저 표현할 수 있습니다!

지니의 NAND 컴퓨터 조립 지니가 조그마한 회색 NAND 벽돌 블록들을 차곡차곡 모아 거대하고 신비로운 ‘NAND 컴퓨터’ 본체를 뚝딱 빌드해냅니다.

컴퓨터는 정보를 처리하는 기계죠. 컴퓨터에 무언가를 입력하면 정해진 방법으로 처리하고 그 결과를 출력합니다. 정해진 방법으로 처리한다는 것은 컴퓨터도 마치 퍼셉트론처럼 입력과 출력으로 구성된 특정 규칙대로 계산을 수행한다는 뜻입니다.

컴퓨터 내부에서 이뤄지는 처리가 매우 복잡할 거 같지만, 사실은 (놀랍게도) NAND 게이트의 조합만으로 컴퓨터가 수행하는 일을 재현할 수 있습니다. NAND 게이트만으로 컴퓨터를 만들 수 있다? 이 말은 곧 퍼셉트론으로도 컴퓨터를 표현할 수 있다는 놀라운 사실로 이어집니다. 지금까지 살펴본 것처럼 NAND 게이트는 퍼셉트론으로 만들 수 있기 때문이죠.

도로시의 가산기 블록 분석 도로시가 블록 가산기(Adder)를 이리저리 맞춰보며 2진수 덧셈 연산(1 + 1 = 10)의 규칙을 발견하고 매우 신기해합니다.

NOTE_ “NAND 게이트의 조합만으로 컴퓨터를 만든다”라는 말이 믿어지지 않을지도 모르겠네요. 이것이 어떻게 가능한지 궁금한 분께는 『The Elements of Computing Systems: Building a Modern Computer from First Principles』(The MIT Press, 2005)를 읽어보시길 권합니다. 이 책은 컴퓨터를 깊이 이해하고자 “NAND에서 테트리스까지!”라는 구호 아래, 실제로 NAND로 테트리스가 작동하는 컴퓨터를 만듭니다. 이 책을 읽으면 NAND라는 단순한 소자만으로 컴퓨터와 같은 복잡한 시스템이 만들어진다는 것을 실감할 수 있을 겁니다.

이처럼 다층 퍼셉트론은 컴퓨터도 만들 정도로 복잡한 표현을 해냅니다. 대견하죠! 그럼 어떤 구조의 퍼셉트론이면 컴퓨터를 표현할 수 있을까요? 층을 얼마나 깊게 하면 컴퓨터가 만들어질까요?

토토의 ALU 발판 밟기 토토가 커다란 돌판 컴퓨터 연산 장치인 ‘ALU’ 위에 발을 딛자, 마법 연기와 함께 2진수 비트들이 찬란하게 공중으로 떠오릅니다.

그 답은 “이론상 2층 퍼셉트론이면 컴퓨터를 만들 수 있다”입니다. 말도 안 되는 소리 같지만, 2층 퍼셉트론, 정확히는 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다는 사실이 증명되었습니다(3장 참고). 그러나 2층 퍼셉트론 구조에서 가중치를 적절히 설정하여 컴퓨터를 만들기란 너무 어렵습니다. 실제로도 NAND 등의 저수준 소자에서 시작하여 컴퓨터를 만드는 데 필요한 부품(모듈)을 단계적으로 만드는 쪽이 자연스러운 방법입니다. 즉, 처음에는 AND와 OR 게이트, 그다음에는 반가산기와 전가산기, 그다음에는 산술 논리 연산 장치(ALU), 그다음에는 CPU라는 식이죠. 그래서 퍼셉트론으로 표현하는 컴퓨터도 여러 층을 다시 층층이 겹친 구조로 만드는 방향이 자연스러운 흐름입니다.

이 책에서는 컴퓨터를 만들지 않습니다. 그래도 퍼셉트론은 층을 거듭 쌓으면 비선형적인 표현도 가능하고, 이론상 컴퓨터가 수행하는 처리도 모두 표현할 수 있다는 점을 기억해주세요.

서브목차