인공지능 - 현대적 접근방식1

인공지능 - 현대적 접근방식1

인공지능의 친척쯤 되는 일을 하면서 인공지능의 큰 줄기를 알지 못하는게 답답했다. 그리하여 인공지능의 입문서로 유명한 이 책 <인공지능: 현대적 접근 1>을 지르게 되었는데, 책을 구입하고는 거의 반년을 지나버린 것 같다. 그리고 이번 여름, 인공지능의 첨병 가운데 하나인 IBM에서 인턴으로 일하게 된 것을 핑계로 책장을 펴보게 되었다.

인공지능은 참 재밌는 분야다. 인간의 지능을 따라하려고 애쓰는 분야인만큼 ‘생각의 방식’과 관련이 있으면 모조리 연관있다고 해도 무방하다. 책은 엉뚱하게도 철학으로 시작해서 수학, 경제학, 신경과학, 심리학, 컴퓨터 공학, 제어이론과 인공두뇌학, 언어학과의 연관성을 설명한다. 인공지능의 역사에 대해서도 자세히 설명하는데 그 대략은 이렇다. 

인공지능은 1943년 1) 매컬록과 핏츠가 제안한 신경세포의 수학적 모델에 관한 연구, 2) 철학자 러셀과 화이트 헤드의 ‘명제논리의 형식분석’, 3) 계산에 관한 튜링의 이론, 이렇게 세 방향에서 시작되었다. 1949년 헵이 뉴런의 학습 방식에 대한 결과를 발표한 이후, 마빈 민스키, 딘 에드먼즈가 신경망 컴퓨터를 만들며 인공지능 시대가 열린다. 1956년 다트머스에서, 매카시, 민스키, 섀넌, 로체스터 등의 학자들은 IBM 엔지니어들과 모여 인공지능 연구를 본격적으로 시작한다. 목표는 ”언어를 사용하고 추상과 개념을 형성하고, 지금은 사람만 풀 수 있는 종류의 문제를 풀고, 스스로를 향상시키는 기계를 만드는 방법”을 개발하는 것이다. 카네기 공대의 Logic Theorist 같이 구체적인 프로그램이 출시 되었고, 인공지능은 열기를 더해갔다. 인공지능의 한 분야인 인공 신경망도 점점 번성해서 Adalines, Perceptron 이 정립되었다.

하지만, 초기의 인공지능은 단순한 구문 조작 능력을 벗어나지 못했고, 문제의 크기가 증가함에 따라 계산량이 처리 불가능할 정도로 증가해버리는 Intractibility 문제로 인해 더 이상 발전하지 못했고, 그 열기는 시들어 버렸다. 한술 더 떠 인공신경망의 대세였던 Perceptron은 그 뛰어난 학습능력에도 불구하고, 표현 가능한 상태의 수가 너무 적다는 문제를 풀지 못했다. 인공지능은 다른 길을 찾기 시작했다. 인간을 닮지는 못하더라도, 문제를 잘 푸는데 집중하기로 말이다. 이렇게 자리 잡은 지식기반 시스템은 ‘어려운 문제를 풀려면 그 답을 이미 거의 알고 있어야 한다’는 말로 설명할 수 있겠다. 전문가 집단의 자문을 구해, 예상가능한 문제지들의 답을 미리 적어두고 이를 ‘잘’ 찾는 방식이다. 이런 Knowledge-intensive한 방식들은 의학과 자연어 분야을 비롯한 여러 분야에서 좋은 성과를 냈고, 산업적으로도 좋은 성과를 거두었다.

이에 더해, Back-propagation의 활용을 계기로 한때 인기를 끌었던 신경망이 다시 부활하게 된다. 여러 층으로 구성된 신경망을 훈련할 수 있게 되면서, 다양한 인공지능 알고리즘이 개발되기 시작했다. Hidden Markov Chain, Bayesian network를 시작으로 요즘엔 RNN, CNN, LSTM, GAN 등이 (인기리에) 사용되고 있다. 여기에 구글을 비롯한 데이터 괴물들이 자신의 데이터를 활용해 무시무시한 결과를 뿜어내고 있다. 그리고, 단순히 주어진 문제를 풀어내는 인식기/계산기의 기능을 넘어 인간처럼 사고하고 행동하는 HLAI(Human-level AI)에 대한 연구도 2004년의 심포지엄을 기점으로 시작되었다. 아직 인간 수준의 의식을 재현할 수 있을지에 대해선 의견이 분분하지만, 경제-문화-사회적으로 커다란 변화를 일으킬 것만은 분명해 보인다.

이 책은 인공지능을 설명하기 위해 ‘지능적 에이전트’ 개념을 소개한다. 에이전트는 센서를 통해 자신의 환경을 인지하고, 작동기를 통해 어떤 동작을 취하는 주체를 말한다. 어찌보면 인간의 함수적 속성을 단순화시킨 개념으로 볼 수도 있겠다. 그리고 이런 일련의 프로세스는 에이전트 프로그램으로 구현된다. 결국, ‘이럴 땐 이렇게, 저럴 땐 저렇게’ 반응하는 기계를 만드는 것이 목적이다. 문제는 환경이 너무 복잡해서 주어지는 입력을 출력으로 1:1 매칭 시키려다 보면 엄청나게 많은 정보가 프로그램에 담겨야 한다는 것이다. 이런 방식을 Table-Driven-Agent 방식이라고 한다. 모든 입력과 모든 출력을 대응시키는 테이블을 저장하고 있다가, 주어진 입력에 답을 내는 방식이다. 100100 픽셀 이미지를 읽어 저장된 숫자 0~9 를 인식한다고 해보자. 명암을 무시한다고 해도 입력의 경우의 수는 2^10000으로 엄청나게 크다. 출력은 10개에 불과하지만, 컴퓨터가 기억해야하는 모든 경우의 수는 2^1000010개로, 거의 무한에 가까운 수다. 절대로 컴퓨터에 미리 담을 수 없는 양이기 때문에, 어느정도의 ‘근사’를 통해 문제를 해결해야한다. 에이전트는 좋은 ‘근사’를 하기 위해 여러 방식을 취하는데 그 종류로는, Simple Reflex Agent, Model-based Agent, Goal-based Agent, Utility-based Agent, Learning Agent 등이 있다.

Agent 에 대한 일반론 이후에는 구체적인 Agent의 예가 제시된다. 3장에서는 Problem-Solving Agent는 Search를 통해 문제를 해결한다. Search Tree, Graph-Search Algorithm와 정보가 불충분한 경우의 검색방법을 배울 수 있다. 4장에는 Local search, Simulated Annealing, Genetic Algorithm, Online search, Belief State 등을 다룬다. 5장은 여러 Agent가 상호 작용하는 Game theory 상황을 푼다. 이런 알고리즘을 Adversarial search(대항검색)이라고 한다. Minmax algorithm, alpha-beta pruning, stochastic game 등을 배울 수 있다. 6장은 제약 만족 문제로, 하나의 솔루션, 가능한 상태를 여러 변수들의 조합으로 설명하는 경우의 문제 풀이법이다. 

7장부턴 인간의 지능을 제대로 따라하려는 노력에 대한 이야기가 시작된다. 인간이 외부 환경에 대한 단순 반응하는 존재가 아닌 것 처럼, 인공지능도 반사 메커니즘이 아닌 ‘지식’을 이용해 ‘추론’하게 만들 수 있을까? 지식 기반 에이전트 (Knowledge-based agent)는 이런 도전의 결과물이다. 지식기반 에이전트는, 일련의 명제들 (지식)을 알고는 있지만 구체적인 상황에 대해서는 모른다. 

웜푸스라는 괴물이 사는 던전을 여행하는 사람은, 그 던전에 한번도 들어간 적이 없더라도 상식을 활용해 동굴을 탈출 할 수 있다. ‘웜푸스가 죽을 땐 비명소리를 지른다’, ‘금덩이가 옆방에 있으면 반짝하는 빛을 볼 수 있다’ 등등의 상식들 말이다. 인간의 강점은 이런 단순 명제, 추상적 명제를 구체적인 상황에 끌어와서 ‘금을 찾아서 웜푸스를 피해 동굴을 빠져나간다’는 목적을 달성해는 추론 능력에 있다. 그리고, 지식기반 에이전트는 이를 목표로 개발 되었다. 이를 위해 컴퓨터는 논리학, 진리표, 구문의 이해, 추리와 증명을 알고 있어야 한다. 더 나아가 ‘언어’ 그 자체를 컴퓨터가 이해할 수 있어야 한다.(8장) 그러면 일상적 언어를 컴퓨터가 이해(분해)해서 추리과정을 거쳐 문제를 해결할 수 있다.(9장) (와우…) 여기에 고전적 계획 수립(10장), 실세계에서의 계획수립과 실행(11장), 지식 표현 (12장)등 지식기반 에이전트를 구성하기 위해 필요한 문제/문제해결방식의 표현/계획에 대해서도 소개한다.  (8장부터는 점점 추상적인 논의가 진행되어서 지루한 감이 있다….)

1권은 주로 인공지능의 역사와, 기본적 문제의식, 지식기반 에이전트에 대한 소개가 주를 이룬다. 다음 달에 읽기 시작할 2권은 1권의 추상적인 해설 보다는, 베이즈망/ 히든 마르코프 체인 / 의사결정론/ 인공신경망 / 통계학습 / 강화학습 등 구체적인 머신런닝 알고리즘을 논하게 된다. 역시 구체적인게 이해하기 쉬운 만큼, 기대가 된다. 

인공지능의 레전설들이 작성한 만큼, ‘인공지능이 대체 무엇인가?’ 하는 막연한 궁금증을 어느 정도 풀수 있는 책이다. 컴퓨터 프로그래밍에 대한 전문적인 훈련을 받지 않은 사람도 (단, 인내심을 갖고) 읽을 수 있도록 친절하게 쓰인 글이니, 인공지능에 관심있는 비전공자에게도 추천한다.

This is a preview of Clap Button, a new feedback and analytics tools for Hydejack, built by yours truly. You can try it out on localhost for free, but it will be removed (together with this message) when building with JEKYLL_ENV=production. To use Clap Button on your site, get a subscription
and set clap_button: true in your config file.