왜 집단지성의 방향성이 중요한가
입자 군집 최적화 (particle-swarm optimization (PSO))는 1995년 Kennedy와 Eberhart에 의해 처음 세상에 보고된 알고리듬*이다.
*(https://ieeexplore.ieee.org/document/488968)
최적화에 대해 잘 알고 있던 분들은 이를 쉽게 이해하지만, 처음 배우는 분들은 쉽게 이해하기 어려울 수도 있다.
이를 조금이라도 쉽게 이해하는 한 가지 방법은 새떼의 움직임을 생각하는 것이다. 새가 단독으로 비행을 할 때 자기 주변에 어느 지점에 먹이가 많을 것인지 알기 위해서는 3차원 공간을 모두 탐색해 봐야 한다. 당연히 시간도 많이 걸리고 새의 에너지에는 한계가 있으므로 대부분 먹이 잡이는 실패로 돌아가, 그 새는 그날 끼니를 굶어야 하는 일이 다반사다. 그렇지만 두 마리가 짝을 이룬다면 어떨까? 당연히 시간은 1/2로 줄어들고, 먹이를 찾을 확률은 2배로 늘어날 것이다. N마리라면 어떨까? 시간은 1/N로 줄어들고 확률은 N배로 늘어날까? 물론 N이 작은 수라면 그렇겠지만, 새떼가 충분히 많아지면 (즉, N이 충분히 커지면), 조금 더 효과적인 방법이 생길 수 있다. 예를 들어 N마리의 새 중, 어떤 새가 먹잇감이 많이 몰려 있는 것처럼 보이는 곳을 '우연히' 발견했다면 다른 새보다 더 빠르게 그곳으로 날아갈 것이다. 그러면 천천히 여기저기 랜덤 하게 날고 있던 새들은 '그 새가 뭔가 발견했나 보다!'라고 생각하면서 (실제로 생각하는지는 모르겠음) 그 새를 따라갈 것이고, 결국 그 새떼에는 하나의 큰 흐름이 순식간에 생기게 된다. 큰 흐름이 생기기 시작하면 나머지 새들도 '뭔가 있나 보다!' 생각하면서 그 흐름 (대세)을 따라가게 되고, 새떼는 겉으로 보기에 마치 한 덩이처럼 특정한 방향으로 특정한 지점을 향해 군무하듯 이동한다. 우리가 겨울 철새의 집단적 움직임에서 많이 보던 양태다.
전역 최적화 (global optimization) 관점에서 보았을 때, 어떤 알고리듬이 국소 최적점 (local minima)에 빠져서 좀처럼 쉽게 그곳으로부터 탈출하기 어렵게 되는 결말은 제일 피하고 싶은 특징 중 하나다. 최적화해야 하는 함수 f가 explicit 함수라면, 미리 대략적인 최적점을 파악할 수 있어서 탈출 프로토콜을 설계할 수 있겠지만, 그렇지 못 한 상황이라면 어디가 진짜 global minimum인지 알 수 없기에, 하염없이 국소 최적점에서 세월을 보내야 할 수도 있다. 보통의 최적화 알고리듬은 머신러닝에서도 기본으로 가져다 쓰는 경사하강법 (gradient descent)을 활용한다. 그런데 국소 최적점에서는 더 이상 경사가 바뀌지 않기 때문에, 업데이트가 안 된다. 그래서 자주 국소 최적점에 갇히는 현상이 생긴다. 이를 방지하기 위해 다양한 글로벌 최적화 알고리듬이 개발되었고, 그중 하나가 바로 위에서 언급한 PSO 방법이다.
위에서 PSO를 새떼의 자발적인 집단적 움직임 형성에 비유했듯, PSO의 기본 철학은 single agent가 아닌 multi-agent의 추적이다. single agent만 활용했을 경우, 최적화 방법은 대략 다음과 같은 방법으로 지점 업데이트 방식을 따른다.
x_i(t+1) = x_i(t) + v_i(t), v_i(t) = -alpha*(delta_f)/(delta_x),
분자동역학 (molecular dynamics) 시뮬레이션에 익숙한 분들이라면 이 공식은 그냥 뉴턴 운동 방정식을 discrete 형태로 나타낸 것에 불과하다는 것을 금방 눈치채실 것이다. 최적화해야 하는 어떤 함수가 f고, 그 함수의 변화율에 대해 가중치 alpha를 곱해서 시점 t에서의 위치를 다음 시점 t+1에서의 위치로 계속 업데이트하는 방식으로 이렇게 single agent가 진행되면, delta_f/delta_x가 0에 가까워지는 지점에서는 더 이상의 위치의 변화가 없다. 이것이 single-agent 기반으로 최적화를 했을 때 자주 국소점에 갇히게 되는 근본적인 원인 중 하나다.
PSO는 이를 극복하기 위해 multi-agent를 쓴다. 함수 f의 정의역 전역에 multi-agent를 랜덤 하게 뿌린다. 그리고 각 지점에서의 각자의 경사 (gradient vector)를 계산하고, 이를 속도로 환산한다. 그러면 특정 i번째 agent의 위치 업데이트를 그 agent 자체의 정보뿐만 아니라, 주변 나머지 N-1개의 agent 정보도 같이 활용해서 할 수 있다. 마치 새 한 마리가 나머지 새떼의 움직임을 포착하여 그 움직임을 자신의 원래 움직임에 반영하여 자신의 다음 경로 결정에 활용하는 것과 같은 이치다. 이렇게 되면 다음과 같은 공식을 쓸 수 있다.
x_i(t+1) = x_i(t) + v_i(t),
v_i(t) = [-alpha*(delta_f)/(delta_x)] + [-beta*sigma_j~N-1(delta_f/_delta_x)],
여기서 v_i(t)를 좀 더 단순하게 표현하면, v_i(t) = A*v_i0(t) + B*v_bar(t)라고 쓸 수 있다. 여기서 A와 B는 개별 입자와 나머지 군집들의 정보에 대한 가중치다. 계산 전에 미리 설정해 놓아야 한다. 만약 군집들의 정보가 최적화에 더 가까우면, 설사 특정 i번째 입자가 국소 최적점에 갇힌 상황이라고 해도, 이제는 속도 성분이 0이 아니기 때문에 i번째 입자의 위치는 계속 update가 가능하다. 즉, 국소 최적점 탈출이 가능하다. 이를 조금 더 일반적인 관점에서 생각해 보면, agent가 많아지면 많아질수록 이 집단은 이제 '협력'하여 global optimization 경로로 접어들게 될 가능성이 높아진다고 볼 수도 있다. (물론 이때 agent들은 최대한 independent 해야 만들어 두어야 한다.) PSO를 단순히 single-agent 업데이트를 여러 번 반복 MC 시행하여 그들의 평균치를 찾는 방법으로 오해하는 분들이 간혹 있는데, 이런 맥락에서 생각해 보면 사실 잘못 이해하고 있는 것이다. PSO의 핵심은 단순히 N을 늘려서 답을 찾을 확률을 선형으로 높이는 것이 아닌, single agent가 나머지 군집과 정보를 실시간으로 교환하면서 해를 찾는 과정에 있다. 이 '집단과의 정보교환'이 없으면, PSO는 그냥 single-agent optimization을 말 그대로 여러 번 반복하는 것에 지나지 않는다.
PSO가 내포한 최적화 '철학'은 연구에 있어서 협력의 의미를 다시금 되새기는 기제가 되기도 한다. 사실 단독으로 하는 연구는 결국 개인의 레벨에서 하는 연구라 한계가 있기 마련이다. 물론 간혹 천재적인 개인 한 사람이 혁명적인 연구 결과를 내놓는 경우도 있으나, 그것은 주로 20세기 중반 이전의 일이다. 지금처럼 대부분의 분야가 너무 빨리 발전하고, 풀어야 하는 문제가 점점 줄어드는, 즉 포화 상태로 가고 있는 상황에서는 집단 지성에 의한 해결이 훨씬 더 효과적이고 효율적인 방법이 된다. 나 혼자 고민했더라면 수 백, 수 천 시간, 심지어 수년이 걸렸을지도 모르는 문제를, 다른 분야에서는 조금 더 일반론적인 관점에서 이미 좋은 툴이나 이론으로 만들어 두었다면 그 정보를 받아서 자신의 해를 구하는 업데이트 도구로 활용하면 된다. 공학자들이 물리학이나 수학에서 이루어진 선행 연구 결과를 적극 참고하여 활용하는 것이 좋은 사례다. 문제는 그 정보가 존재하는지 조차 모르는 상태에서 여전히 많은 연구자들이 이른바 'reinvent the wheel' 시행착오를 계속 반복한다는 것이다. 사실 이는 인터넷 기반의 협력 도구가 아무리 활성화되어도 분야 간의 벽이 너무 높거나 서로 사용하는 언어가 다르거나 문화가 다르면 쉽게 극복할 수 없는 한계로 작용하는 부분이기도 하다.
학문에 있어 global optimization이 무엇인지, 그것이 있긴 한 것인지는 내가 판단하기에 벅찬 문제다. 그렇지만 적어도 연구자 개인이 혼자만의 세계에 갇혀서 local optimization에 안주하거나, 그것으로부터 탈출하려고 해도 탈출하지 못하는 상황에 비하면, 연구자들이 서로 정보를 교환하고 벽을 넘을 수 있는 시도를 하는 것은 훨씬 더 진보에 가까운 방법이 될 것이라 생각한다. 연구자들이 이러한 방향으로 가기 위해 지금까지 연구 성과를 주로 과거에는 학회에서, 근래에는 논문으로 보고하고, 최근에는 인터넷으로, 그리고 프리프린트로 공유해 오고 있지만, 어제 썼던 글에서 언급한 것처럼, 어느 시점부터 noise가 너무 많아지기 시작하면 집단 정보의 quality가 낮아지고, 그래서 자신의 방향을 업데이트하는 것이 오히려 오류 확률을 높이는 덫이 될 수도 있다.
집단으로 협력하여 연구한다는 것이 자신과 직접적인 관계를 가진 동료들하고만 하는 것은 아니다. 넓게 보면 해당 커뮤니티 전체, 그리고 나아가 인류 전체와 협력 연구를 한다고 생각할 수 있다. 즉, 좁게는 커뮤니티를 위해, 나아가 인류 전체의 지식 진보를 위해 연구자들이 독립적이면서도 협력적인 agent로 연구할 수 있어야 할 것이다. 이런 관점에서 본다면 자신이 보고하려고 하는 혹은 출판하려고 하는 논문이 '집단지성'의 한 piece로서 충분히 그 역할을 감당할 수 있을 것인지 연구자들 (물론 나를 포함)은 한 번 더 스스로 심사숙고하면 좋지 않을까 한다. 결국 연구는 나만 좋자고 하는 것에 머물게 되면 취미에 불과한 것일 뿐이기 때문이다.