다음학기부터 조지아텍에서 Artificial Intelligence 라는 코스를 듣게 된다. 이 석사 과정 프로그램 중에서 굉장히 어려운 코스로 유명하다.. 개학하기 한달 전인 지금부터 조금이라도 들어놔야 살아 남을 수 있을 것 같다는 느낌이 들어서 급하게 코스 비디오를 틀고 듣기 시작했다.
Game Playing
Search
Simulated Annealing
Constraint Satisfaction
Probability
Bayes Nets
Machine Learning
Pattern Recognition Through Time
Logic And Planning
Planning Under Uncertainty
코스 비디오는 대충 이런 순서로 되어 있지만 나는 과제-oriented 한 사람이기 때문에 1번 과제인 Search 를 먼저 들었다. 공교롭게도 저저번 학기에 들었던 로보틱스 인공지능 수업과 겹치는 토픽이라 이해하는데에는 크게 어렵지는 않았지만 새로운 개념도 있고 복습겸 들었던 것을 정리해 보도록 하겠다.
Search를 직역하면 찾다 / 검색하다 정도의 뜻이 될 것 같다. 밑에서는 "서치"라고 부르도록 하겠지만, 이 서치라는 알고리즘은 인공지능에게 굉장히 기초적인 개념이라고 생각하면 된다. 어떤 문제 (problem space라고도 부른다) 에 대한 답을 구할때 서치라는 알고리즘이 사용이 된다. 물론 이 서치알고리즘을 사용하기 위한 전제 조건들이 있는데 이건 나중에 서술하도록 하겠다. 서치를 설명할때 거의 항상 제일 먼저 등장하는 예제가 "경로찾기" 이다.
Arad 라는 도시에서 시작해서 Bucharest까지 가야한다고 생각해보자. 주어진 맵에서갈 수 있는 경로는 굉장히 많을 것이다. Sibiu로 가서 가는 경로 Tmisoara or Zerind 로 들려서 돌아가는 경로 등 경우의 수가 여러가지가 존재한다. Point A 에서 Point B로 연결되는 길은 각각의 길이 or weight or cost 가 부여가 되어 있다. Arad에서 Zerind까지는 75 Timisoara 까지는 118 등등.. 그리고 각각의 도시를 노드 or node 라고 부른다. 목적지까지 가는 경로를 최저 cost에 설정을 할 것인지, 아니면 방문하는 노드 수를 최소화 할 것인지에 따라서도 경로가 바뀔 것이다. 이런 설정을 다 해주고 인공지능에게 최적의 경로를 찾아달라고 하는 것이 서치 알고리즘이라고 생각하면 된다.
서치 알고리즘을 돌리기 위해 다음과 같은 정보들이 필요하다. 괄호 안에 들어간 것이 parameter다.
시작점에서부터 최종 목적지까지 조금씩 탐색을 시작하면 위와 같은 그림이 나오게 될 것이다. 중요하게 알아야 할 것은 Frontier 라는 개념인데, 카네기멜론 수업에서는 frontier를 이렇게 정의한다:
예..? 난 이렇게 수학적으로 써 놓은 걸 너무 싫어함 ㅠ
간단하게 설명하면 까만 점들은 내가 이미 탐색을 한 노드들이고 파란색은 아직 확인하지 못한 노드들인데, 빨간색 노드 (프론티어) 들이 내가 탐색하고 있는 최전방의 노드들 이라고 생각하면 되겠다. 이 빨간색 노드들에서 내가 가능한 actions들이 무엇이 있고 여기가 goal state인지 아닌지 확인을 해야하는 노드들인 셈이다. 이 과정을 처리하고나면 프론티어에 있던 노드가 explored 노드로 바뀌고 프론티어 영역이 한 노드 오른쪽으로 (위 그림 기준) 확장된다.
서치 알고리즘은 굉장히 다양한 variation들이 존재한다. 그 중 기본/뼈대가 되는 tree search algorithm을 먼저 설명해 보겠다.
이게 tree search 알고리즘의 뼈대라고 보면 된다. 다음 주차에서는 이 서치 알고리즘의 종류들을 몇가지 설명해 보도록 하겠다.