본문 바로가기
IT and AI

AI에 대한 일곱번째 이야기 : AI의 진화

by 창업가 2022. 6. 20.

진화 알고리즘

AI는 좋은 해결책을 추측하고 나서 테스트하는 방식으로 자신의 이해력을 가다듬는다. 위에서 설명한 기계학습 알고리즘 세 가지는 모두 시행착오를 이용해, 문제를 가장 잘 해결할 수 있는 방식으로 자신의 구조를 개선한다. 가장 간단한 시행착오 기법은 한 방향으로 조금식 계속 개선해 나가는 것이다. 종종 어느 숫자(예컨대 <슈퍼 마리오> 게임에서 얻는 점수)를 극대화하려고 할 때는 '언덕 오르기 hill climbing', (탈출한 바퀴벌레 수처럼) 극소화하려고 할 때는 '경사 내려가기gradient descent'라고 부르기도 한다. 

 하지만 목표에 점점 다가가는 이런 단순한 프로세스가 늘 최고의 결과만을 내는 것은 아니다. 단순한 언덕 오르기의 함정을 쉽게 이해할 수 있도록, 우리가 짙은 안개에 덮인 산에서 정상을 찾고 있다고 생각해 보자.

 단순한 언덕 오르기 알고리즘을 사용하면 무슨 일이 있어도 계속 오르막을 향할 것이다. 그러나 시작 지점에 따라 최정상, 즉 전체 최댓값 global maximam이 아니라 가장 낮은 정상, 즉 국소 최댓값local maximum 에서 멈춰버리게 될 수 있다.

 그래서 더 복잡한 형태의 시행 착오 기법들이 나와 있다. 이 기법들은 우리가 산의 다른 부분도 뒤져보게끔 설계되어 있다. 즉 몇 가지 방향으로 테스트 등반을 해본 후에, 가장 유망한 지역이 어디인지 결정한다.

 이런 전략을 사용하면 산을 더 효율적으로 탐험하게 될 것이다.

 기계학습 용어로 말하면, 이 산이 바로 탐색 공간 search space이다. 그리고 그 공간 어딘가에 우리의 '목표'가 있다. 즉 산 어딘가에 정상이 있다. 그리고 우리는 그 곳을 찾으려고 노력 중이다. 어떤 탐색 공간은 볼록한convex 형태다. 기본적인 언덕 오르기 알고리즘으로도 매번 정상을 찾을 수 있다는 뜻이다. 

 그런데 또 어떤 탐색 공간은 그보다 훨씬 더 성가시다. 최악은 '모래밭에서 바늘 찾기 needle-in-the-haystack problem'라고 불리우는 문제들이다. 이런 문제는 우연히 뒷걸음질하다가 최고의 해결책이 얻어걸릴 때까지, 그 해결책에 얼마나 가까워졌는지 단서도 거의 없다. 소수prime number를 찾는 것이 바로 이런 모래밭에서 바늘 찾기 문제의 예다. 

 이런 문제 해결의 최적 지점을 찾기 위한 전략 중에, 생물 진화의 과정에서 영감을 얻은 것이 있다. 진화를 모방하는 것은 상당히 일리가 있는 아이디어다. 무엇보다 진화란 '추측과 확인'이라는 과정을 여러 세대에 걸쳐 진행하는 절차이기 때문이다. 어느 생물이 이웃 생물들과 특정 부분에서 차이가 있어서 생존 확률과 번식 확률이 높아진다면, 그 유용한 특징은 다음 세대에도 전달될 수 있을 것이다. 같은 종의 다른 개체들보다 아주 조금이라도 더 빠르게 헤엄칠 수 있는 물고기가 있다면, 아마도 포식자들을 따돌릴 확률이 더 높을 테고, 그렇게 몇 세대가 지나면 헤엄이 빠른 후손들은 헤엄이 느린 후손들보다 조금 더 흔해질 수 있다. 그리고 진화는 강력한, 정말로 강력한 프로세스다. 생물들의 이동이나 정보처리와 관련해 셀 수 없이 많은 문제를 해결했고, 생물들이 빛과 화학합성으로부터 영양분을 추출하는 법 빛을 내고 하늘을 날고, 새똥처럼 보이게 스스로를 위장해 포식자들로부터 숨는 법을 알아냈다. 

 진화 알고리즘 evolutionary algorithm 에서 각각의 잠재적인 해답은 하나의 유기체와 같다. 각 세대 내에서 가장 성공한 해법이 살아 남아, 돌연변이를 일으키거나 다른 해법과의 짝짓기를 하며 번식을 한다. 더 훌륭한 후손을 생산하기 위해서다.

 복잡한 문제를 해결하려고 끙끙거린 적이 있는 사람이라면, 잠재적인 해법 하나하나를 마치 살아서 밥을 먹고 짝을 짓는 생명체처럼 생각한다는 것이 아연실색하게 느껴질 수도 있다. 하지만 좀 더 구체적으로 생각해보자.

 예를 들어, 우리가 '군중 통제' 문제를 해결하려고 한다고 치자. 

 복도에 갈림길이 있다. 우리는 사람들을 왼쪽 또는 오른쪽으로 가게 만드는 로봇을 설계하려고 한다.

 우리가 가장 먼저 할 일은 진화 알고리즘이 다양할 수 있다는 사실을 기억하고, 로봇이 어느 부분은 일정하게 유지하고 어느 부분은 알고리즘이 자유롭게 가지고 놀게 만들지를 결정하는 것이다. 우리는 몸통 디자인을 고정해 변수를 제한하고, 프로그램은 로봇이 돌아다니는 방식만 변화시키도록 할 수도 있다. 아니면 그냥 무작위로 시작해서 알고리즘이 아무런 제약 없이 처음부터 로봇 몸통을 스스로 디자인하게 할 수도 있다. 

 여기서 많은 자유를 주어 쥐나 지네, 곤충같은 모습을 하게 만들 수도 있지만, 여기서는 인간과 유사한 휴머노이드의 형태만을 허락한다고 가정하자. 그리고 신체의 각 부위는 움직일 수 있는 범위가 어느 정도 정해져 있다고 치자. 진화 용어로 풀면, 이게 바로 우리가 만들 로봇의 게놈genome인 셈이다. 

 다음으로 할 일은 하나의 숫자만 최적화하면 되도록 우리가 해결하려는 문제를 잘 정의하는 것이다. 진화 용어로 표현하면, 이 숫자가 바로 적합도 함수 fitness function이다. 개별 로봇이 우리의 과제에 얼마나 잘 들어맞는지 표현해 주는 단일한 숫자 말이다. 우리가 지금 만들려고 하는 것은 복도의 갈림길에서 사람들ㅇ르 한쪽으로 보낼 로봇이므로, 우선은 왼쪽 길로 가는 사람의 수를 최소화하는 것이 우리의 과제라고 치자. 이 수가 0에 가까울 수록 적합도가 높은 것이다. 

 여기까지가 실험을 위한 최소한의 변수 설정이었고, 그 시뮬레이션의 결과에 대해서는 AI에 대한 여덟번째 이야기로 이어서 다시 작성하도록 하겠다.

반응형