AI에 대한 여덟번째 이야기 : AI의 품격있는 진화 방법
AI의 시뮬레이션 진행 과정
일곱번째 이야기에 이어서 AI가 갈림길에서 오는 사람들을 왼쪽 또는 오른쪽 방향으로 가도록 통제하는 로봇을 만든다고 가정해 보자. 이를 학습시키기 위해서는 시뮬레이션이 필요하다. 우리가 실제로 로봇을 수천 대 제작하거나, 사람들을 고용해 수천 번 지나가게 할 수는 없기 때문이다. (실제로 사람을 고용할 수는 없다. 왜냐하면 안전상의 문제가 생길 수 있기 때문이다. 그 이유에 대해서는 읽다보면 알게 될 것이다.)
그러므로, 시뮬레이션 세상에서 시뮬레이션 중력과 마찰력, 기타 물리법칙이 작용하는 시뮬레이션 인간들도 필요하다. 여기에 등장하는 사람들은 키와 인종도 다르고 걷는 속도도 다르며, 통제에 따르는 정도가 모두 다르게 설정해야 되며, 실제 환경과 유사하게 환경을 만드는 것은 매우 어려운 문제다. 그러나 여기서는 이해를 위해 이 모든 환경과 시뮬레이션을 구성한 것을 이상없이 마쳤다고 가정하고 그 다음으로 넘어가겠다.(실제 기계학습은 절대 이렇게 간단하지 않다. 흥! 어림도 없지!!)
알고리즘이 무작위로 1세대 로봇을 만들어 내게 하자. 이것들은 심하게 무작위 적이다. 이것들은 심하게 무작위 적이라 우리가 생각하는 인간의 모습이 아니며, 어떤 것은 한쪽 다리가 길고 어떤 것은 머리만 너무 커서 아예 걸어다닐 수 없는 경우도 발생한다.
어쨋든 우리는 각 로봇을 우리의 시뮬레이션 복도에서 테스트해 본다. 로봇들은 맡은 역할을 잘 해내지 못한다. 사람들은 로봇 옆을 지나쳐 버리고 로봇은 털썩 주저앉거나 부질 없이 팔다리를 허우적댄다. 그 중 일부가 다른 로봇들보다 약간 왼쪽으로 쓰러져서 왼쪽 길을 살짝 막는다. 그러자 소심한 몇몇은 오른쪽 길로 가기로 한다. 그러면 해당 로봇은 다른 로봇보다 점수를 좀 더 받는다.
이제 2세대 로봇을 만들 차례다. 이제 어떤 로봇을 남기고 재현할지를 선택해야 한다. 그냥 최고의 로봇 하나만 살릴 수도 있지만 그렇게 되면 2세대 로봇이 너무 천편 일률적이 되어서 다른 로봇 디자인을 시도해 볼 수가 없을 것이다. 로봇들이 조금씩, 조금씩 진화하다 보면, 최종적으로는 더 좋은 결과가 나올 수도 있는데 말이다. 그래서 우리는 최고의 로봇 몇 종류를 택하고 나머지는 버릴 것이다.
다음으로 살아남은 로봇들을 재현할 방법이다. 선택의 여지는 많다. 1세대를 단순히 복제해서는 안된다. 우리는 로봇들이 더 나은 방향으로 진화하기를 바라기 때문이다. 우리가 가진 한 가지 선택지는 돌연변이mutation다. 무작위로 로봇을 하나 골라서 그 로봇에 관한 무언가를 무작위로 변형하는 방법이다.
우리가 사용할 수 있는 또 다른 선택지는 교차crossover다. 로봇 두 개를 무작위로 결합해 후손을 만드는 것이다.
우리는 또 로봇별로 후손을 몇 개나 만들지(가장 성공적인 로봇의 자손을 가장 많이 만들 것인가?), 어느 로봇을 어느 로봇과 교차시킬지(혹은 교차를 사용하긴 해야 할지), 죽은 로봇을 전부 후손으로 대체할지, 아니면 무작위로 생성한 로봇도 몇개 추가할지 결정해야 한다. 이런 옵션들을 조금씩 조정하는 것은 진화 알고리즘을 만드는 데 있어서 큰 부분을 차지한다.
어떤 옵션이, 말하자면 어떤 '하이퍼 파라미터 hyperparameter'가 가장 효과가 있을지 짐작하는 것도 종종 쉬운 일이 아니다.
2세대 로봇을 만들고 나면 사이클은 다시 시작된다. 우리는 이 로봇들이 시뮬레이션에서 사람들을 얼마나 잘 통제하는지 테스트한다. 이제 왼쪽으로 주저앉는 로봇이 더 많아진다. 2세대는 1세대에서 조금이나마 성공적이었던 로봇들의 후손이기 때문이다.
이렇게 여러 세대를 반복하고 나면, 뭔가 눈에 띄는 군중 통제 전략이 나타나기 시작한다. 로봇이 일어나는 법을 배우고 나면, 당초 '왼쪽으로 쓰러져 길을 막다시피 하라'라는 전략으로 진화한다. 또 다른 전략도 나타난다. '열심히 오른쪽을 가리켜라'라는 전략이다. 하지만 이들 전략 중에서 우리의 문제를 완벽하게 해결하는 전략은 없다. 아직도 로봇들은 수많은 사람이 왼쪽 길로 빠져나가게 두고 있다.
더 많은 세대가 반복된 후에 사람들이 왼쪽 복도로 진입하는 것을 아주 잘 막는 로봇이 출현한다.(드디어!!) 그런데 안타깝게도 이 무슨 운명의 장난인지, 이 로봇이 찾아낸 해결책은 '모든 사람을 죽여라'(!!!! 스카이 넷과 완벽하게 동일한 알고리즘이다!!!) 정확히 말해서 이 로봇이 찾아낸 해결책은 효과가 있는 셈이다. 왜냐하면 우리가 알고리즘에게 지시한 내용은 왼쪽 길로 들어서는 사람의 수를 최소화하라는 것 뿐이었기 때문이다.
악의 순수성이라고나 할까. 아니면 순수하기 때문에 악해질 수도 있다고 할까. AI라고 하는 것은 단독으로 일을 하지는 못하고 결국 말을 길들이거나, 소를 가지고 땅을 가는 것처럼 고도의 관리와 관심을 가지고 다룰 수 있어야만, 인간에게 도움이 되는 존재인 것이다.
우리가 만든 적합도 함수가 가진 문제점으로 인해, 알고리즘이 우리가 예기치 못한 방향으로 진화하고 말았다. 유감스러운 지름길을 택하는 것은 기계학습에서 늘 벌어지는 일이다. 보통은 이 정도로 극적이지는 않다.(우리에게는 다행스럽게도, 현실 세계에서 "모든 인간을 죽여라" 는 해결책은 보통 현실성이 매우 떨어진다. 우리는 여기서 자율적인 알고리즘에게 치명적인 무기를 쥐여주지 말라는 교훈을 얻을 수 있다.) 이게 바로 실험에서 실제 인간을 사용하지 않고 시뮬레이션 인간을 사용한 이유다!
우리는 다시 처음부터 다시 시작해야 한다. 이제 다음 장에서는 AI를 활용한 성공적인 실험의 진행 방법과 결론에 대해서 아홉번째 이야기로 다시 돌아올 예정이다.