Deepmind의 AI는 코딩 기술을 배우고 있습니다.
그레고리 바버
컴퓨터 과학 분야에서 정렬보다 더 근본적인 작업은 없을 것입니다. 버블, 힙, 병합 등 원하는 대로 선택하세요. 컴퓨터 내부의 데이터를 재정렬하는 방법은 이론화되어 수백만 명의 초보자를 위한 연습 문제로 사용되었으며 전문 개발자에 의해 수십 년 동안 최적화되었습니다. 어떤 프로그래밍 언어에서든 sort() 함수를 입력하면 믿을 수 있는 코드가 됩니다. 만지지 마세요. 이미 훌륭하게 작동합니다.
그러나 작년에 Google Deepmind의 엔지니어가 개발한 AI 시스템은 중요할 정도로 크게 개선되었습니다. Deepmind가 AlphaDev라고 부르는 이 시스템은 인기 있는 코딩 언어인 C++에서 숫자로 된 짧은 시퀀스를 정렬하는 새로운 방법을 찾는 임무를 맡았습니다. 이는 내부적으로 AI가 어셈블리 코드로 새로운 알고리즘, 즉 C++와 같은 프로그래밍 언어와 컴퓨터 하드웨어 간의 격차를 해소하는 지침을 구축하도록 하는 것을 의미했습니다. C++ 개발자가 컴퓨터에 "정렬"하라고 지시하면 해당 명령은 컴퓨터의 메모리와 프로세서에 수행할 작업, 즉 데이터를 이동할 위치와 변경 방법을 정확하게 알려주는 기계 판독 가능 코드로 변환됩니다. 비트가 금속과 만나는 곳입니다.
실험은 효과가 있었습니다. 작년 4월부터 C++는 AI가 만든 새로운 정렬 알고리즘 세트 덕분에 약간 더 빠르게 실행되었습니다. 그러나 오늘 Nature에서 이 작업을 설명한 AlphaDev의 엔지니어에 따르면 이는 단지 첫 번째 단계에 불과합니다. 분류 프로젝트를 주도한 Deepmind의 연구 과학자 Daniel Mankowitz는 "우리는 전체 컴퓨팅 스택을 최적화하고 싶습니다."라고 말합니다. Mankowitz는 AlphaDev가 이미 정렬뿐만 아니라 해싱과 같은 다른 기본 작업에 대한 알고리즘을 개선했다고 말합니다.
이번 연구에는 참여하지 않았지만 MIT의 프로그램 합성 전문가인 Armando Solar-Lezama는 "나는 이 연구가 믿을 수 없을 만큼 흥미롭다고 생각한다"고 말했다. AI가 새로운 정렬 알고리즘을 생각해 내도록 하는 것은 유용합니다. 다양한 작업에 걸쳐 최첨단 코드를 작성하는 방법을 배울 수 있는 AI를 구축하는 것은 훨씬 더 큰 일이라고 그는 말합니다. 이는 AlphaDev가 코딩 자체에 대한 보다 근본적인 것을 배우기 시작했음을 의미합니다.
물론 상당한 제약이 따른다. "이것들은 매우 작은 프로그램입니다."라고 그는 덧붙입니다. 총 어셈블리 코드의 명령 수는 수십 개에 불과합니다. 그러나 이러한 작은 프로그램은 사람들이 사용할 수 있는 한 최적화되었기 때문에 컴퓨터 성능에 큰 병목 현상을 일으키는 경우가 많습니다. 전반적으로 AlphaDev의 새로운 C++ 정렬 알고리즘은 긴 숫자 시퀀스를 정렬할 때 이전 방법보다 1.7% 더 효율적이고 5개 항목 시퀀스의 경우 최대 70% 더 빠릅니다. 규모에 따라 이러한 개선 사항이 추가된다고 Mankowitz는 말합니다. AI로 작성된 코드가 C++의 주요 오픈 소스 라이브러리인 Libc++에 제출된 이후로 그는 알고리즘이 하루에 수조 번 사용되었다고 추정합니다.
이러한 개선은 체스나 바둑과 같은 Deepmind의 AI 마스터 게임을 돕는 데 사용되는 것과 동일한 접근 방식인 강화 학습이라는 기술 덕분입니다. 이런 유형의 AI는 행동을 통해 학습합니다. 이는 조립 프로그램 작성과 같은 특정 작업을 게임으로 처리하여 작동하며, AI는 프로그램의 효율성을 높이는 현명한 움직임에 대한 보상을 받습니다. 시간이 지남에 따라 시스템은 이 보상을 최대화하기 위해 작동하여 승리하는 Go 전략 또는 더 빠른 조립 프로그램을 가져옵니다. 이는 단어나 코드 작성 방법을 배우기 위해 엄청난 양의 데이터에 의존하는 GPT-4와 같은 대규모 언어 모델에서 발견되는 AI 종류와 다릅니다. 이는 인터넷의 분위기를 반영하는 글을 작성하거나 공통 코드 세그먼트를 생성하는 데 적합합니다. 그러나 AI가 이전에 본 적이 없는 코딩 문제에 대한 새롭고 최첨단 솔루션을 생산하는 데는 그리 능숙하지 않습니다.
제레미 화이트
에밀리 멀린
유선 직원
윌 나이트
체스나 바둑을 두는 것처럼 어셈블리 코드를 작성하는 것은 까다롭고 제한이 없는 작업이며 잠재적인 움직임과 망칠 수 있는 방법이 많습니다. C++ 또는 Python과 같은 최신 프로그래밍 언어는 인간 언어를 반영하는 짧은 명령을 사용하여 데이터를 이동하는 핵심을 가립니다. 1950년대에 이러한 "고급" 언어가 등장했을 때 일부 사람들은 프로그래밍 문제가 기본적으로 해결되었다고 믿었습니다. 그때까지 프로그래밍은 기본적으로 어셈블리 작업에 불과했습니다. 그래서 최초의 고급 언어 중 하나인 Fortran은 명령이 항상 작동하는 어셈블리 코드로 변환되었기 때문에 처음에는 "포트란 자동 코딩 시스템"으로 판매되었습니다. Solar-Lezama는 "Fortran은 인간이 할 수 있는 것보다 버그 없이 코드를 더 잘 작성할 것"이라고 말했습니다. "오늘 그 말은 우스꽝스럽게 들립니다. 하지만 사실이었습니다."