좋은 프로그래밍의 비결은 코드 작성에 대해 우리가 알고 있는 모든 것을 무시하는 것일 수 있다. 적어도 AI에게는 말이다.
터무니없어 보이지만 DeepMind의 새로운 코딩 AI는 경쟁이 치열한 프로그래밍 경쟁에서 인간 코더의 약 50%를 이겼다. 표면적으로 작업은 상대적으로 간단하게 들린다. 각 코더는 일상 언어로 문제를 제시하고 참가자는 작업을 가능한 한 빨리 그리고 바라건대 오류 없이 해결하기 위해 프로그램을 작성해야 한다.
그러나 AI 코더에게는 엄청난 도전이다. 에이전트는 인간에게 자연스러운 작업인 작업을 먼저 이해한 다음 최고의 인간 프로그래머도 도전하는 까다로운 문제에 대한 코드를 생성해야 한다.
AI 프로그래머는 새로운 것이 아니다. 2021년에 비영리 연구소인 OpenAI는 12개 이상의 프로그래밍 언어에 능숙하고 자연스럽고 일상적인 언어에 맞춰진 프로그램인 Codex를 출시했다. AlphaCode라고 불리는 DeepMind의 AI 릴리스를 차별화하는 것은 부분적으로 필요하지 않은 것이다.
이전 AI 코더와 달리 AlphaCode는 상대적으로 순진하다. 컴퓨터 코드 구문이나 구조에 대한 내장 지식이 없다. 오히려 유아가 모국어를 이해하는 것과 다소 유사하게 학습한다. AlphaCode는 "데이터 전용" 접근 방식을 취한다. 기존 코드의 양동이를 관찰하여 학습하고 궁극적으로 "단어"와 "문구"(이 경우 코드 스니펫)를 유연하게 분해하고 결합하여 새로운 문제를 해결할 수 있다.
CodeContest(경쟁 프로그래밍의 배틀 랩 고통)에 도전했을 때 AI는 문제의 약 30%를 해결하면서 인간 경쟁자의 절반을 이겼다. 성공률이 미미해 보일 수 있지만 이는 매우 복잡한 문제이다. 예를 들어 OpenAI의 Codex는 유사한 벤치마크에 직면했을 때 한 자릿수 성공을 거두었다.
연구에 참여하지 않은 MIT의 아르만도 솔라-레자마(Armando Solar-Lezama) 박사는 “매우 인상적이다.”고 말한다.
AlphaCode가 다루는 문제는 일상적인 응용 프로그램과는 거리가 멀다. 학교에서 열리는 정교한 수학 토너먼트라고 생각하면 된다. 코드가 오류로 가득 차 있기 때문에 AI가 프로그래밍을 완전히 인수할 가능성도 낮다. 그러나 일상적인 작업을 대신하거나 인간 프로그래머를 피하는 즉시 사용 가능한 솔루션을 제공할 수 있다.
아마도 더 중요한 것은 AlphaCode가 AI 코더를 설계하는 새로운 방식을 위한 길을 열어준다는 것이다. 과거 경험은 잊고 데이터에 귀를 기울여야 한다.
연구에 참여하지 않은 카네기 멜론 대학과 피츠버그의 보쉬 AI 센터의 J. Zico Kolter 박사는 "이 절차가 올바른 코드를 생성할 가능성이 있다는 것이 놀랍게 보일 수 있다."고 말했다. 그러나 AlphaCode가 보여주는 것은 AI가 당면한 작업을 진정으로 "이해"하는지 여부가 논쟁의 여지가 있더라도 "적절한 데이터와 모델 복잡성이 주어지면 일관된 구조가 나타날 수 있다"는 것이다.
코드 언어
AlphaCode는 AI를 활용하여 더 나은 프로그램을 생성하려는 최신 시도이다.
코딩은 요리책을 쓰는 것과 비슷하다. 각 작업에는 여러 계층의 정확성이 필요하다. 하나는 레시피의 개요와 유사한 프로그램의 전체 구조이다. 또 다른 하나는 무엇을 해야 하는지, 각 재료가 얼마나 들어가야 하는지, 어떤 온도에서 어떤 도구를 사용해야 하는지에 대한 각 단계를 설명하는 것과 같이 매우 명확한 언어와 구문으로 각 절차를 자세히 설명한다.
핫 초콜릿을 만들기 위한 카카오와 같은 각 매개 변수는 컴퓨터 프로그램에서 "변수"라고 한다. 간단히 말해서, 프로그램은 변수를 정의해야 한다. 카카오의 경우 "c"라고 한다. 그런 다음 "c"를 우유 및 설탕 변수와 같은 다른 변수와 혼합하여 최종 문제를 해결한다. 김이 나는 멋진 핫 초콜릿 머그잔을 만드는 것이다.
어려운 부분은 그 모든 것을 AI로 번역하는 것이다. 특히 간단해 보이는 요청을 입력할 때: 핫초코 만들어 줘라.
2021년에 Codex는 AI 코드 작성에 첫 진출했다. 팀의 아이디어는 인간 언어를 해석하고 모방하는 능력으로 전 세계를 강타한 프로그램인 GPT-3에 의존하는 것이었다. 이후 놀라울 정도로 복잡하고 유쾌한 대화에 참여하는 재미있고 사악하지 않은 챗봇인 ChatGPT로 성장했다.
그래서 요점이 뭘까? 언어와 마찬가지로 코딩은 변수, 구문 및 구조의 시스템에 관한 것이다. 기존 알고리즘이 자연어에 대해 작동한다면 코드 작성에 유사한 전략을 사용하지 않는 이유는 무엇일까?
AI 코딩 AI
AlphaCode는 그러한 접근 방식을 취했다.
AI는 GPT-3의 기반이 되는 "대형 언어 모델"이라는 머신러닝 모델을 기반으로 한다. 여기서 중요한 측면은 많은 데이터이다. 예를 들어 GPT-3는 인간의 언어를 "해석"하기 시작하기 위해 디지털 서적 및 Wikipedia 기사와 같은 온라인 리소스에서 수십억 단어를 입력했다. Codex는 인기 있는 온라인 소프트웨어 라이브러리인 Github에서 스크랩한 100GB가 넘는 데이터로 교육을 받았지만 까다로운 문제에 직면했을 때 여전히 실패했다.
AlphaCode는 대규모 언어 모델과 유사하게 작동한다는 점에서 Codex의 "심장"을 상속한다. 그러나 두 가지 측면에서 차이가 있다고 Kolter는 설명했다.
첫 번째는 학습 데이터이다. Github 코드에서 AlphaCode를 교육하는 것 외에도 DeepMind 팀은 13,500개 이상의 과제가 있는 이전 두 데이터 세트의 CodeContests에서 사용자 지정 데이터 세트를 구축했다. 각각은 당면한 작업에 대한 설명과 여러 언어로 된 여러 잠재적 솔루션과 함께 제공되었다. 그 결과 당면한 과제에 맞게 조정된 방대한 훈련 데이터 라이브러리가 탄생했다.
Kolter는 “모든 ML[머신러닝] 시스템에서 가장 중요한 교훈은 실행 시간에 보게 될 데이터와 유사한 데이터에 대해 교육을 받아야 한다는 것이다.”라고 말했다.
두 번째 트릭은 숫자의 힘이다. AI가 코드를 조각별로(또는 토큰별로) 작성하면 유효하지 않거나 잘못된 코드를 작성하기 쉬워 프로그램이 충돌하거나 이상한 결과가 나오게 된다. AlphaCode는 이전 AI 시도보다 더 많은 단일 문제에 대해 백만 개 이상의 잠재적 솔루션을 생성하여 문제를 해결한다.
온전한 검사로 결과를 좁히기 위해 AI는 간단한 테스트 사례를 통해 후보 해결을 실행한다. 그런 다음 유사한 항목을 클러스터링하여 각 클러스터에서 하나만 못 박아 챌린지에 제출한다. 이 작업에 참여하지 않은 코넬대학교의 Kevin Ellis 박사는 이것이 가장 혁신적인 단계라고 말했다.
시스템은 놀라울 정도로 잘 작동했다. 일련의 새로운 문제에 도전할 때 AlphaCode는 두 가지 컴퓨팅 언어(Python 또는 C++)로 가능한 솔루션을 내뱉으면서 터무니없는 언어를 걸러낸다. 5,000명 이상의 인간 참가자와 경쟁했을 때 AI는 전문 프로그래머의 약 45%를 능가했다.
차세대 AI 코더
아직 인간 수준은 아니지만 AlphaCode의 강점은 독창성이다.
이전 교육 코드의 섹션을 복사하여 붙여넣는 대신 AlphaCode는 "읽기 자료"에서 많은 양의 코드나 논리를 복사하지 않고 영리한 스니펫을 제시했다. 이러한 창의성은 데이터 기반 학습 방식 때문일 수 있다.
AlphaCode에서 빠진 것은 "코드 생성과 관련된 머신러닝 모델의 모든 아키텍처 설계"라고 Kolter는 말했다. 컴퓨터 코드를 작성하는 것은 정교한 건물을 짓는 것과 같다. 솔루션을 생성하기 위해 컨텍스트가 명확하게 포함된 정의된 구문이 필요한 프로그램으로 고도로 구조화되어 있다.
AlphaCode는 아무것도 하지 않는다. 대신, 대규모 언어 모델이 텍스트를 생성하고 전체 프로그램을 작성한 다음 잠재적인 실수를 확인하는 것과 유사한 코드를 생성한다(작성자로서 이것은 이상하게도 친숙하게 느껴진다). AI가 이것을 정확히 어떻게 달성하는지는 미스테리로 남아 있다. 프로세스의 내부 작업은 아직 불가해한 기계 "마음" 안에 묻혀 있다.
AlphaCode가 프로그래밍을 인수할 준비가 되었다는 의미는 아니다. 때로는 변수를 생성하지만 사용하지 않는 것과 같이 머리가 긁히는 결정을 내린다. 또한 제한된 양의 예에서 작은 패턴(나를 긁은 고양이 무리는 모든 고양이가 사악함)과 해당 패턴의 출력에서 작은 패턴을 기억할 수 있는 위험도 있다. Kolter는 문제를 이해하지 못하지만 문제를 이해하지 못하지만 솔루션을 "맹목적으로 모방"할 수 있는 AI인 확률론적 앵무새로 만들 수 있다고 설명했다.
대부분의 머신러닝 알고리즘과 유사하게 AlphaCode도 코드가 공개적으로 공개되더라도 소수만이 활용할 수 있는 컴퓨팅 성능이 필요하다.
그럼에도 불구하고 이 연구는 자율적인 AI 코더를 위한 대안 경로를 암시한다. 기계에 전통적인 프로그래밍 지혜를 부여하는 대신 단계가 항상 필요한 것은 아니라는 점을 고려해야 할 수도 있다. 오히려 자연어를 다루는 것과 마찬가지로 AI 코더가 성공하기 위해 필요한 모든 것은 데이터와 규모이다.
Kolter는 “AlphaCode가 주사위를 던졌다. 데이터 세트는 공개된다. 미래가 어떻게 될지 보자.”
이미지 출처: DeepMind