altair의 프로젝트 일기
비정형 기계 만들기 본문
1. 튜링
학기 중에 오토마타 과목을 들으며 튜링 머신에 대해 배웠다. 과목 자체는 컴퓨터 과목이라기보다 수학 같았다. 하지만 과목에 대한 이야기보다, 튜링 머신과 튜링에 대해 더 많은 관심이 갔다는 점을 밝히고 싶다. 그래서 종강하자마자 튜링의 논문들을 번역한 책 "지능에 관하여"를 사서 읽어보았다. 책에는 다음과 같은 다섯 편의 논문 또는 강연이 수록되어 있었다.
1. 지능을 가진 기계 Intelligent Machinery (1948년)
2. 계산 기계와 지능 Computing Machinery and Intelligence (1950년)
3. 지능을 가진 기계라는 이단적 이론 Intelligent Machinery, a Heretical Theory (1951년경)
4. 디지털 컴퓨터가 생각할 수 있을까? Can Digital Computers Think? (1951년)
5. 체스 Chess (1953년)
튜링 머신에 대한 이야기보다는 컴퓨터와 기계지능(인공지능)에 관한 탐구와 담론이 주된 내용이었다. 세간에 '이미테이션 게임'으로 알려진 흉내 게임이나 당시 사람들의 인공지능에 대한 반감과 튜링의 반론도 흥미로웠지만, 가장 충격적이었던 것은 바로 그가 1950년대에 이미 인공지능의 학습을 예견했다는 것이었다.
알파고를 비롯한 유수의 인공지능들이 인간을 압도하는 모습을 여러차례 목도한 우리는 더 이상 인공지능의 존재에 의문을 품지 않는다. 또한 그것이 우리 인간의 지능을 모자르지만 어느 정도 모방하고 있다는 점도 부정하지 않는다. 유튜브 알고리즘은 우리가 관심있을 만한 영상을 끊임없이 추천해주며, 구글 광고는 우리의 소비 패턴을 분석하여 그에 맞는 광고를 보여준다. 이제 우리 일상에서조차 인공지능을 떨어뜨릴 수 없는 세상이 되었다.
고작 십년 정도 밖에 안되는 기간동안 인공지능은 그야말로 압도적으로 발전했다. 튜링이 이런 세상을 보면 뭐라고 할까? 그가 예견했던 일들이 고스란히 현실이 된 미래를 어떻게 바라볼까? 더 이상 사람들이 인공지능을 무섭게만 바라보지 않고 불가능하다고 주장하지 않는 세상을 보면 어떤 기분을 느낄까?
책의 많은 내용은 인공지능의 가능성을 다루고 있다. '지능을 가진 자'라는 인간으로서의 우월성을 잃을까 두려워하지만 않는다면, 인공지능의 존재는 충분히 예견 가능하고 수학적으로 존재를 증명할 수 있음을 보여준다. 그 중에서도 내 눈에 특히 띄었던 것은 인공신경망의 기초적 모델인 비정형 기계(Unorganized Machine)였다. 튜링은 이것이 인간 신경계의 가장 단순화된 모습이라고 주장했다.
임의로 배열된 다수의 소자들과 이를 잇는 선들로 이루어진 어떤 기계를 생각해보자. 만약 이 기계의 소자 중 입력 소자와 출력 소자가 있다면 선들의 배치와 소자가 현재 상태를 계산하는 방법에 따라 출력 결과가 바뀔 것이다. 튜링은 우리가 만약 그 출력 결과에 따라 이 기계가 스스로 변화할 수 있게 할 수 있다면 (비록 규모적으로 큰 차이가 있긴 하지만) 인간의 지능과 다를 바 없다고 주장한다.
또한 그는 이 이후에 더욱 놀라운 이야기를 하는데 바로 비정형 기계의 정형화, 즉 학습에 관한 이야기이다. 튜링은 결과 값에 따른 처벌과 보상을 통해 일종의 교육을 할 수 있으며 창의성도 구현할 수 있다고 주장한다. 심지어 지금에 와서는 유전 알고리즘으로 불리는 유전적 탐색과, 이미 존재하는 빅데이터를 학습하는 문화적 탐색 기법을 생각해냈다.
튜링이 탁월한 수학자이자 공학자라는 사실도 물론 중요하지만, 그가 60년이 지난 지금까지 우리에게 영감을 주는 이유는 기술에 관한 날카로운 통찰력 때문이 아닐까 싶다.
2. 비정형 기계
종강도 했겠다, 이번에 이 비정형 기계를 직접 구현해보고 싶었다. java로 구현했으며 결과물은 깃허브에서 볼 수 있다. 처음으로 어설프지만 유닛 테스트를 활용해 개발하였다.
튜링의 비정형 기계는 서로 이어져 있는 소자들로 구성되어 있다. 이번에는 확장성을 위해 Unit과 이를 서로 잇는 Edge로 구현하였다. Unit은 상태들을 입력으로 받아 계산해 현재 상태를 반환하는 특정 Calculator를 가진다. 마찬가지로, Edge는 이전 Unit에서 다음 Unit으로 상태를 전달하기 전에 처리하는 특정 StateDeliver를 가진다. 이를 통해 현재는 튜링의 A 타입 비정형 기계를 구현했지만, 이후에 NAND 게이트를 사용하지 않는 다른 형태의 Unit이라거나, 상태를 반전해 전달하는 Edge를 구현할 수 있었다.
또한 모든 Unit들과 Edge들을 모멘트(펄스)로 통제하는 Control 클래스를 구현하였다. 기초적인 형태의 CPU 클럭이라고 볼 수 있을 것이다. 한 기계의 모든 Unit과 Edge는 Control에 종속되며, 반대로 한 Control은 자신이 가지지 않은 외부의 어떤 Unit 또는 Edge들에 접근할 수 없다.
기계의 형태를 파일에서 읽기위한 Reader와 Mapper 또한 구현하였다. 예를 들어 파일에 "A 1 3 4 1"이라고 적혀 있으면 Mapper는 이를 "A 타입 Unit이며 ID는 1이고 3번과 4번 Unit을 이전 유닛으로 가지며 초기 상태는 참"으로 해석한다. 만약 "A 3 4 0"이라고 적혀 있다면 Reader는 새 Unit의 ID를 단조적으로 배정하며 "A 타입 Unit이며 3번 위치와 4번 위치에 있는 Unit을 이전 유닛으로 가지며 초기 상태는 거짓"이라고 해석한다. Reader는 이를 통해 모든 Unit들과 이를 잇는 Edge들을 생성할 수 있다.
다음 글에서는 구현한 비정형 기계과 간단한 유전 알고리즘을 사용해보고 결과를 살펴볼 것이다.
'IT > 기타' 카테고리의 다른 글
Git branch 전략에 대하여 (0) | 2024.09.14 |
---|---|
MySQL을 사용한 중복 파일 관리 프로그램 (1) | 2023.10.08 |
강의 자료를 동기화하면서 겪었던 시행착오들 (0) | 2023.04.07 |
비정형 기계와 유전 알고리즘 (0) | 2022.02.01 |
M-disc로 아카이빙한 후기 (0) | 2021.12.05 |