Google DeepMind’s game-playing AI just found another way to make code faster

구글 딥마인드의 게임용 AI, 더 빠른 알고리즘을 발견하다

이미 수백만 명의 개발자들이 AI가 발견한 이 알고리즘을 사용하고 있다.

이론 컴퓨터과학 분야에서 딥마인드의 활약이 계속되고 있다. 지난 2022년 딥마인드는 게임 플레이용 AI 알파제로(AlphaZero)를 활용해 다양한 작업의 핵심이 되는 수학 문제의 새로운 풀이법을 찾아냈다. 이 발견으로 알파제로는 50년 만에 계산 시간을 단축하는 데 성공했다.

같은 방식으로 딥마인드는 두 번의 성과를 추가로 거두었다. 지난 4월 자매회사인 구글브레인(Brain)과 합병한 후 ‘구글 딥마인드’로 사명을 바꾼 딥마인드는 알파제로의 새로운 버전인 알파데브(AlphaDev)를 활용해 기존보다 최대 70% 더 빠른 속도로 항목을 정렬하는 방법을 발견했다.

또한 이들은 암호화에 사용되는 주요 알고리즘의 속도를 30%까지 높일 수 있는 방법을 찾아냈다. 이러한 알고리즘들은 소프트웨어의 가장 기본 구성 요소다. 따라서 이들 각각의 속도를 향상하면 전체 효율이 크게 올라 컴퓨팅 비용을 줄이고 에너지를 절약할 수 있다.

구글 딥마인드의 연구과학자 대니얼 맨코위츠(Daniel Mankowitz)는 “반도체가 물리적 한계에 다다르고 있다. 즉 무어의 법칙이 끝나가고 있다”고 말한다. 그는 “컴퓨팅을 최적화할 수 있는 새로운 혁신안을 찾아야 한다”고 말한다.

독일 카를스루에 공과대학교(Karlsruhe Institute of Technology)에서 효율적인 알고리즘 설계 및 구현 방법을 연구하는 피터 샌더스(Peter Sanders)는 “흥미로운 접근 방식이다. 정렬은 지금까지도 컴퓨팅에서 가장 널리 사용되는 서브루틴(subroutine, 부분 프로그램)이다”라고 말한다.

딥마인드는 해당 연구 결과를 최근 <네이처(Nature)>에 발표했다. 하지만 알파데브가 발견한 이 기술은 이미 수백만 명의 소프트웨어 개발자들 사이에서 널리 쓰이고 있다. 2022년 1월 딥마인드는 전 세계 최고 인기 프로그래밍 언어 중 하나인 C++의 관리 기관에 새 정렬 알고리즘을 제출했고, 이 알고리즘은 두 달간의 엄격한 독립적인 심사를 거쳐 C++ 라이브러리에 추가됐다. 이는 10년이 넘는 기간 동안 C++ 정렬 알고리즘이 개선된 첫 사례이자 AI를 사용해 발견된 알고리즘이 업데이트에 포함된 최초의 사례이기도 했다.

앞서 구글은 사내에서 활용하는 코드 중 가장 핵심적인 부분을 모아 C++ 라이브러리를 만들어 누구나 사용할 수 있도록 공개해 두었는데, 딥마인드는 앱세일(Abseil)이라 부르는 이 모음에 새 알고리즘을 추가했다. 이들 암호화 알고리즘은 모든 종류의 데이터에 대해 고유한 ID로 사용할 수 있는 해시라는 숫자를 계산한다. 현재 딥마인드는 새로운 알고리즘들이 하루에도 수조 번 사용되는 것으로 추정한다.

딥마인드는 바둑, 체스와 같은 게임에 적용할 목적으로 훈련한 강화학습 모델인 알파제로(AlphaZero)를 기반으로 알파데브를 개발했다. 여기서 주요 돌파구는 AI가 ‘더 빠른 알고리즘 찾기’를 일종의 게임으로 간주하여 승리하도록 훈련시킨 것이었다. 이 접근법은 2022년에 행렬 곱셈 속도를 높이기 위해 사용한 것과 같은 전략이었다.

알파데브를 학습시킬 때는 컴퓨터 명령어들을 선택해 순서대로 배치한 다음 그 결과를 알고리즘으로 작동시키는 게임을 사용했다. 알파데브는 만들어진 알고리즘이 정확하면서도 기존 알고리즘보다 빠를 때 승리를 거두었다. 간단해 보이지만 이를 위해서 알파데브는 천문학적인 경우의 수를 따져보아야 했다.

이 문제에서 딥마인드는 어셈블리(assembly)라는 프로그래밍 언어를 사용하기로 했다. 어셈블리어는 컴퓨터 칩에서 숫자를 이동하는 방법에 대해 구체적인 지침을 제공하는데, 사실 어셈블리는 코드를 실행하는 기계어 바로 위 단계의 하위 수준(low-level) 언어이기 때문에 이를 가지고 코드를 짜는 사람은 거의 없다. 하지만 어셈블리는 알고리즘을 하위 단계로 세분화할 수 있다는 장점이 있어 지름길을 찾기에는 좋은 출발점이었다.

컴퓨터 칩에는 숫자를 넣어 처리하는 다양한 슬롯이 있다. 어셈블리는 이러한 슬롯을 조작하기 위한 기본 지침을 포함한다. 가령 A슬롯에 있는 숫자를 B슬롯으로 옮기도록 지시하는 ‘mov(A,B)’, A슬롯에 있는 숫자가 B슬롯에 있는 숫자보다 작은지, 같은지, 큰지 확인하도록 지시하는 ‘cmp(A,B)’ 같은 것들이 있다. 이러한 명령어들로 이루어진 긴 시퀀스들을 통해 컴퓨터는 다양한 작업을 수행하게 된다.

알파데브는 생성 중인 알고리즘에 새로운 어셈블리 명령어를 추가해 한 수(move)를 플레이한다. 처음에는 알파데브가 무작위로 명령어를 추가하므로 실행되지 않는 알고리즘이 생성된다. 하지만 알파제로가 보드게임을 플레이할 때 그랬던 것처럼, 알파데브는 시간이 지나면서 이기는 수를 두는 법을 배웠다. 알파데브는 실행 가능할 뿐 아니라 정확하고 빠른 알고리즘을 생성하는 명령어들을 추가했다.

딥마인드는 3~5개 항목으로 구성된 짧은 목록을 정렬하는 알고리즘에 집중했다. 더 긴 목록을 정렬할 때는 이 알고리즘들을 반복해서 호출하게 된다. 따라서 먼저 짧은 알고리즘들의 속도를 높임으로써 더 긴 알고리즘에서는 이들이 누적으로 이어지는 효과를 노릴 수 있었다.

그러나 짧은 알고리즘은 수십 년 동안 사람들의 손을 타고 최적화되어 왔다. 맨코위츠와 동료들은 개념 증명(proof of concept)으로 세 가지 항목으로 이루어진 목록을 정렬하는 알고리즘부터 시작했다. 인간이 고안한 최선의 알고리즘에는 18개의 명령어가 포함되어 있었다. 그들은 이 알고리즘을 개선할 수 있을 것으로 예측하지 못했다.

맨코위츠는 “솔직히 더 나은 결과를 얻을 수 있을 것으로 기대하지 않았다”라고 말한다. 그는 “그렇지만 놀랍게도 더 빠른 알고리즘을 만들 수 있었다. 처음에는 실수나 버그 같은 것으로 생각했지만, 프로그램을 분석한 결과 알파데브가 무언가 발견해 냈다는 사실을 깨달았다”라고 말한다.

알파데브는 세 가지 항목으로 된 목록을 18개보다 하나 적은 17개의 명령어로 정렬하는 방법을 찾아냈다. 그리고 특정 단계를 건너뛸 수 있다는 사실을 발견했다. 맨코위츠는 “나중에 살펴보고 나서 ‘와, 이게 정말 되는구나’라고 생각했다. 하지만 알파데브 없이 이 같은 것을 발견하기 위해서는 어셈블리어에 능통한 사람이 필요하다”라고 말한다.

알파데브는 4개 항목 정렬 알고리즘에 대해서는 인간이 만든 28개 명령어 조합을 이기지 못했다. 그러나 5개 항목 정렬 알고리즘은 이전의 46개의 명령어에서 4개를 줄인 42개 버전을 만들면서 인간을 이겼다.

이는 알고리즘 처리 속도를 상당히 향상할 수 있는 수준이다. 보통의 인텔 스카이레이크 칩 기준으로 5개 항목을 정렬하는 기존의 C++ 알고리즘은 약 6.91 나노초(10억분의 1초)가 소요된다. 그런데 알파데브가 발견한 알고리즘은 2.01 나노초로 약 70% 더 빨랐다.

딥마인드는 알파데브의 발견을 2016년 이세돌 9단과의 바둑 대결에서 알파고가 둔 기묘하지만, 승리로 이끈 한 수에 견준다. 맨코위츠는 “모든 전문가가 그 수를 보고 ‘이것은 옳지 않은 수, 잘못된 수’라고 말했다. 그러나 실제로는 올바른 수였고, 알파고는 결국 게임에서 승리했다. 그뿐 아니라 이에 영향을 받아 이 전략을 채택하는 프로 바둑 기사들까지 생겼다”라고 말한다.

샌더스는 이에 대해 인상적인 성과임에도 과대평가 돼서는 안 된다는 생각이다. 그는 “머신러닝 기술이 프로그래밍의 판도를 바꾸고 있다는 사실에 동의하고, 모두가 머지않아 AI가 새롭고 더 나은 알고리즘을 발명할 수 있을 것으로 기대한다. 하지만 우리는 아직 그 수준에 도달하지 못했다”라고 말한다.

우선 샌더스는 알파데브가 어셈블리에서 사용할 수 있는 명령어의 일부만 사용한다는 점을 지적한다. 그에 의하면 기존의 많은 정렬 알고리즘들은 알파데브가 시도하지 않은 명령어를 사용한다. 이러한 이유로 기존의 최선 방식과 알파데브를 비교하기는 더 어렵다.

알파데브에 한계가 있는 것은 사실이다. 알파데브는 5개 항목 정렬 알고리즘을 짜는 데 가장 길게는 130개의 명령어를 사용했다. 단계마다 알파데브는 (더 많은 명령어가 있지만) 297개의 가능한 명령어들 가운데 한 가지를 선택했다. 맨코위츠는 “선택할 수 있는 명령어가 297개가 넘어가거나 이를 조합해 알고리즘이 명령어 130개 이상으로 길어질 경우 학습 속도가 느려졌다”라고 말한다.

이는 297개의 명령어(혹은 게임 수)만으로도 알파데브가 만들 수 있는 알고리즘의 수가 체스의 가능한 게임 수(10의 120승)와 우주의 원자 수(약 10의 80승 개)로 추정)보다 많기 때문이다.

개발팀은 더 긴 알고리즘의 경우 어셈블리 대신 C++ 명령어를 사용하도록 알파데브를 조정할 계획이다. 보다 상위 수준에서 접근하면 특정 지름길을 놓칠 수도 있지만, 이 방법으로 알파데브를 더 광범위한 알고리즘에 적용할 수 있을 것이다.

또한 샌더스는 특히 더 긴 알고리즘들을 대상으로 인간과 알파데브의 접근 방식이 더 철저히 비교 분석되길 바란다. 딥마인드는 이 역시 계획하고 있다고 말한다. 맨코위츠는 알파데브와 인간이 고안한 최선의 방법을 결합하여, AI가 백지상태에서가 아닌 인간의 직관을 밑바탕으로 알고리즘을 구축할 수 있게 하려고 한다.

앞으로는 더 효율적인 방법들이 더 많이 발견될 것이다. 맨코위츠는 “인간이 이러한 프로그램을 살펴 개선점을 파악하기 위해서는 높은 전문성과 엄청난 시간이 필요하다. 며칠에서 몇 주도 걸릴 수 있다. 그렇기 때문에 이전에 누구도 시도하지 않았다”라고 말한다.

미리보기 2회1회

MIT Technology Review 구독을 시작하시면 모든 기사를 제한 없이 이용할 수 있습니다.