코드 수리(Code Repair)를 위한 앵커드 셀프 플레이(Anchored Self-Play)
요약
코드 수리 성능을 높이기 위해 강화학습 기반의 '앵커드 셀프 플레이(ASP)' 기법을 제안합니다. 기존 셀프 플레이의 편향 문제를 해결하기 위해 코드 임베딩 유사도 보상과 참조 버그를 활용하여 합성 버그와 실제 버그 모두에서 높은 수리율을 달성했습니다.
핵심 포인트
- 강화학습 기반의 생성기-수정기 셀프 플레이 구조 제안
- 셀프 플레이 시 발생하는 비현실적 버그 편향 문제 해결
- 코드 임베딩 유사도 보상을 통한 앵커드 셀프 플레이(ASP) 도입
- BugSourceBench 벤치마크에서 표준 방식 대비 수리율 대폭 향상
코드 수리(Code Repair)는 언어 모델(LMs)에게 중요한 능력입니다. 버그가 있는 프로그램과 유닛 테스트(unit tests)가 주어졌을 때, 언어 모델은 테스트를 통과하는 수정된 프로그램을 생성해야 합니다. 코드 수리 데이터는 제한적이기 때문에, 우리는 언어 모델을 사용하여 버그-수정(bug--fix) 태스크를 생성함으로써 감독(supervision)을 확장하는 것을 목표로 합니다. 우리는 단일 모델이 강화학습(reinforcement learning)을 통해 버그를 생성하고 이를 수정하도록 학습하는 __생성기-수정기 셀프 플레이(generator--fixer self-play)__를 제안합니다. 수정기(fixer)가 개선됨에 따라, 생성기(generator)는 더 어려운 버그를 생성하도록 적응하며, 이는 자동 커리큘럼(automatic curriculum)을 형성합니다. 이 커리큘럼이 일반화되는지 테스트하기 위해, 우리는 실제적인 버그 소스를 포괄하는 수리 벤치마크인 BugSourceBench를 도입합니다. 여기에는 사람이 작성한 코드의 버그, 언어 모델(LM)이 생성한 코드의 버그, 그리고 사람이 편집한 언어 모델 생성 코드의 버그가 포함됩니다. BugSourceBench에서 우리는 셀프 플레이(self-play)가 어렵지만 비현실적인 버그로 편향(drift)된다는 것을 발견했습니다. 이는 합성(synthetic) 버그에 대해서는 성능을 향상시키지만, 사람이 작성한 버그에 대해서는 성능을 저하시킵니다. 우리는 생성 시 코드 임베딩 유사도(code-embedding similarity) 보상을 추가하고 참조 버그를 수정기 학습에 혼합함으로써, 작은 참조 세트로 셀프 플레이를 고정(anchor)하는 앵커드 셀프 플레이(Anchored Self-Play, ASP)를 제안합니다. 다양한 버그 소스에 걸쳐, ASP는 가장 높은 수리율(fix rates)을 달성하였으며, 표준 셀프 플레이 대비 평균 수리율을 상대적으로 $+24$%, 절대적으로 $+7.0$ pp 향상시켰습니다. 이는 언어 모델과 사람 모두로부터 발생한 버그 모두에서 성능 향상을 보였습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기