SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution 요약 설명
25 Feb 2025 | Paper Review Reinforcement Learning Code Generation Reward Design이번 글에서는 SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution 논문의 핵심 포인트만 간단히 정리한다.
- 2025년 2월 25일(Arxiv), 39th Conference on Neural Information Processing Systems (NeurIPS 2025)
- Wei, Yuxiang, Duchenne, Olivier, Copet, Jade, Carbonneaux, Quentin, Zhang, Lingming, Fried, Daniel, Synnaeve, Gabriel, Singh, Rishabh, Wang, Sida I..
- Meta AI, University of Illinois Urbana-Champaign, Carnegie Mellon University
- 논문 링크
- Github
요약
- SWE-RL은 학습 중 수정 후보를 실행하는 데 비용이 많이 들거나 실행 환경이 없을 때, 대규모 언어 모델(LLM)이 저장소 버그를 수정하도록 학습하는 방법을 다룬다. 70B 모델인 Llama3-SWE-RL-70B는 사람이 검증한 GitHub 이슈 500건으로 구성된 SWE-bench Verified에서 41.0%를 해결한다. 예제 응답으로 학습한 논문의 지도 미세조정(SFT) 베이스라인은 36.2%를 기록한다. 이 비교에서는 파일 탐색, 수정안 생성, 테스트, 최종 수정안 선택에 동일한 Agentless Mini 파이프라인을 사용한다.
- 이 방법은 선별한 GitHub pull request(PR) 273k개에 강화학습(RL)을 적용한다. RL은 생성한 출력에 보상을 부여해 모델을 최적화하는 방법이며, PR은 이슈와 연결된 저장소 변경 제안이다. 코드 변경을 표현한 패치를 생성하고, 생성한 패치와 병합된 개발자 패치 사이의 텍스트 유사도를 보상으로 사용한다. 형식이 잘못된 출력에는 −1의 페널티를 부여한다. 따라서 학습에는 실행 기반 보상을 사용하지 않는다.
- 이슈 수정만 학습해도 학습 영역 밖의 여러 과제에서 성능이 향상되며, 특히 코드 실행 추론과 수학에서 개선이 크다. 초기 모델의 라이브러리 활용 점수도 유지한다. 41.0%라는 결과는 이슈마다 패치 후보 500개와 재현 테스트 최대 30개를 사용해 얻었다. 재현 테스트는 보고된 버그와 수정 후 동작을 구분하도록 생성한 테스트다. 텍스트 유사도만으로 의미적 정확성을 입증할 수는 없으며, 논문은 모든 SWE-bench 평가에 오차 막대를 제공하지는 않는다.
1 Introduction
서론은 프롬프팅과 추론 파이프라인을 개선하는 동시에 기반 모델의 소프트웨어 공학 역량도 높여야 한다는 문제의식을 제시한다. 기존 코딩 RL은 주로 독립적으로 실행할 수 있는 프로그래밍 문제를 사용한다. 반면 저장소 수정에서는 실행 비용이 크고 필요한 환경이 없는 경우도 있다. SWE-RL은 코드 스냅샷, 변경 사항, 이슈, PR의 기록인 소프트웨어 진화 데이터로 학습하며, RL 과정에서 비공개 교사 모델의 출력을 요구하지 않는다.
도식은 저장소 데이터 준비와 정책 최적화를 구분한다. 생성한 패치는 병합된 개발자 패치와의 유사도에 따라 보상을 받고, 형식이 잘못된 응답은 −1을 받는다. 이 학습 과정에는 실행이 포함되지 않는다.
2 SWE-RL
SWE-RL은 버그 수정을 설명하는 이슈가 연결되어 있고 프로그래밍 파일의 변경을 포함해야 한다는 휴리스틱으로 고품질 PR 시드 273k개를 선별한다. 각 시드는 이슈 설명, 변경된 파일의 전체 내용, 관련된 미변경 파일 일부, oracle 패치를 제공한다. Oracle 패치는 참조로 사용하는 병합된 개발자 변경 사항이다. 미변경 파일을 포함하는 이유는 모델이 입력으로 주어진 모든 파일을 수정하려는 경향을 보였기 때문이다.
2.1 Reward modeling
최적화 대상 모델인 정책은 추론을 생성한 뒤 search/replace 편집을 출력한다. 이 편집 블록은 기존 코드와 대체할 코드를 지정한다. 식 (1)은 출력 형식이 잘못되면 R(o) = −1을 부여하고, 그렇지 않으면 R(o) = compare(patch_pred, patch_gt)를 부여한다. Python의 difflib.SequenceMatcher는 0과 1 사이의 시퀀스 유사도 점수를 반환한다. Group Relative Policy Optimization(GRPO)은 샘플링한 출력 그룹 안에서 보상을 정규화하는 RL 방법이다. 업데이트 크기를 제한하도록 확률비를 클리핑하는 목적함수와 참조 정책에서 벗어나는 정도에 대한 페널티를 사용해 정책을 최적화한다.
- 각 프롬프트에서 출력 G개를 샘플링하고, 각 출력의 보상에서 그룹 평균을 뺀 뒤 그룹 표준편차로 나누어 advantage를 계산한다. Advantage는 업데이트에 사용하는 상대적 보상이다.
- 학습에서는 파일 전체 내용을 제공하므로 모델이 수정안을 생성하기 전에 구체적인 결함 위치를 찾아야 한다. 버그와 관련된 파일을 찾는 파일 수준 위치 식별과 테스트 생성은 평가 파이프라인에 필요하지만, 별도의 RL 하위 과제로 명시적으로 학습하지는 않는다.
템플릿은 수정을 유일하게 명시적으로 학습하는 RL 과제로 설정하고, 추론과 해답 필드를 분리하도록 요구한다. 형식 페널티는 이러한 응답 구조를 강제한다. 초기 모델이 형식을 따르는 데 겪는 어려움은 뒤의 Table 2에서 정량적으로 제시한다.
2.2 Aha moments and generalized reasoning capabilities
저자들은 가정을 재검토하거나 대안을 탐색하거나 문제를 작은 부분으로 나누는 추론 구간을 “aha moments”라고 설명한다. Figure 3은 저장소 수정, 함수 구현, 수학에서 이러한 행동을 보여 준다. 선별된 사례는 모델 행동에 대한 저자들의 해석을 보여 준다. 전이에 대한 정량적 근거는 뒤의 벤치마크 평가에서 제시한다.
선별된 출력 3개는 초기 버그 가설을 재검토하고, 함수 구현의 대안을 고려하고, 수학 문제를 분해하는 모습을 보여 준다. 저자들이 주장하는 추론 행동을 보여 주지만, 해당 행동의 빈도나 정확도에 대한 인과적 기여를 측정하지는 않는다.
3 Evaluation
평가는 전체 이슈 해결, 참조 파일을 제공한 수정, 추론 시 샘플링, 다른 과제로의 전이, 보상 설계를 살펴본다. 이 실험들은 전체 Agentless Mini 파이프라인의 성능과 단순화된 조건에서 모델 자체가 보이는 수정 능력을 구분한다.
3.1 Experimental setup
Llama3-SWE-RL-70B는 Llama-3.3-70B-Instruct에서 시작해 16k-token 컨텍스트 윈도, 전역 배치 크기 512로 1,600 steps 동안 학습한다. 배치마다 문제 32개를 사용하고 문제마다 출력 16개를 샘플링한다. 각 전역 스텝에서는 학습 옵티마이저 Adam으로 한 차례 업데이트한다. 학습 실행에는 NVIDIA H100 그래픽 처리 장치(GPU) 512개를 사용하며, 실제 경과 시간은 약 32시간이다. Agentless Mini는 수정 단계에서 파일 전체 내용을 제공하고, 구체적인 결함 위치 식별도 해당 단계에서 수행하도록 한다.
- 주요 평가에서는 출력의 무작위성을 조절하는 샘플링 설정인 temperature를 1.0으로 두고 이슈마다 패치 500개를 생성한다. 상위 재현 테스트 30개를 실행에 사용하고, 테스트 결과에 따라 패치 후보의 순위를 다시 매긴다.
- 이슈마다 최상위 패치만 제출한다. 따라서 보고된 pass@1은 상당한 후보 생성과 선택 과정을 거친 최종 제출로 해결한 이슈의 비율이다.
- Llama3-SWE-SFT-70B는 동일한 초기 모델을 사용하며, 합성한 위치 식별 및 편집 예제에 Llama 3 코딩 및 일반 SFT 데이터를 혼합한다. Llama-3.3-70B-Instruct가 PR 시드를 참고해 합성 예제를 생성한다.
3.2 Main results
Llama3-SWE-RL-70B는 Agentless Mini를 사용한 SWE-bench Verified 평가에서 41.0%를 기록해 Llama3-SWE-SFT-70B의 36.2%보다 4.8%p 높다. 논문에 나열된 파라미터 수 100B 이하 모델 중 가장 높은 점수이며, B는 billion을 뜻한다. Table 1에서 Agentless를 사용한 GPT-4o는 38.8%, Agentless를 사용한 o1-preview는 41.3%를 기록한다. 다만 이 비교는 모델과 파이프라인의 조합이 다르므로 학습 방법의 효과만 분리하지는 못한다.
가장 직접적으로 비교할 수 있는 행은 Agentless Mini를 사용한 결과로, RL은 41.0, SFT는 36.2를 기록한다. 나머지 행은 논문이 보고하는 경쟁력을 보여 주지만, 모델과 scaffold가 달라 점수 차이를 학습만의 효과로 분리해 해석할 수는 없다.
3.3 Baseline comparison
참조 수정안이 식별한 파일인 oracle localized files를 컨텍스트로 제공하고, 매 단계에서 확률이 가장 높은 다음 토큰을 선택하는 greedy decoding을 사용하면 RL의 수정 점수는 34.8%, SFT는 29.6%다. 형식 정확도는 각각 95.6%와 96.2%로 비슷하므로, 출력 형식 준수만으로 설명되지 않는 개선을 뒷받침한다. 초기 Llama-3.3-70B-Instruct 모델은 greedy decoding에서 수정 점수 5.4%, 형식 정확도 12.2%를 기록한다. 형식이 잘못된 출력을 걸러내고 temperature 0.6에서 샘플 20개 중 가장 흔한 수정안을 선택하는 다수결을 적용하면 수정 점수는 16.6%, 형식 정확도는 44.6%로 높아진다.
참조 파일을 제공하면 수정 성능 비교에서 파일 위치 식별 오류를 제외할 수 있다. RL은 SFT의 수정 점수 29.6을 34.8로 높이지만, 형식 정확도는 96.2%에서 95.6%로 낮아진다. 따라서 수정 성능의 우위는 형식 정확도 향상으로 설명되지 않는다.
3.4 Scaling analysis with more samples
재현 테스트를 30개로 고정하고 수정 후보를 20개에서 160개로 늘리면 이슈 해결률이 33.6%에서 40.0%로 높아진다. 후보를 320개와 500개로 늘리면 각각 40.6%와 41.0%를 기록한다. 수정 후보를 500개로 고정하고 재현 테스트를 1개, 5개, 10개, 20개, 30개 사용하면 해결률은 각각 38.8%, 39.8%, 40.6%, 41.0%, 41.0%다. 실험한 범위에서는 추가 개선 폭이 줄어들며, 후보 생성과 테스트 기반 선택이 주요 결과의 점수에 어떻게 기여하는지 보여 준다.
테스트를 30개로 고정하면 수정 후보 곡선은 후보 20개에서 160개 사이에 6.4%p 상승하지만, 500개까지 늘려도 추가 상승은 1.0점에 그친다. 후보를 500개로 고정한 재현 테스트 곡선은 테스트 20개에서 41.0에 도달하고 30개에서도 같은 값을 유지한다.
3.5 Generalizability of RL
과제 예제를 제공하지 않는 0-shot 평가에서 greedy decoding을 사용하면 RL은 HumanEval+ 함수 생성 점수를 76.2에서 79.9로 높인다. CRUXEval-I/O 코드 실행 추론 점수는 60.5/61.9에서 71.6/75.5로, 엄격한 정답 추출을 적용한 MATH 수학 추론 점수는 63.2에서 73.7로 높아진다. BigCodeBench-Hard의 라이브러리 활용 점수는 28.4와 29.1로 유지된다. 일반 언어 이해 평가인 Massive Multitask Language Understanding(MMLU)은 86.49에서 86.82로 높아진다. MMLU는 범주별 정확도를 동일한 가중치로 평균하고, 나머지 벤치마크는 pass@1을 보고한다.
- MATH는 simple-evals 평가 소프트웨어의 “Answer: …” 형식을 사용한다. “\boxed…”로 작성한 답도 허용하면 초기 모델은 70.9, SFT는 71.7로 높아지고 RL은 73.7을 유지한다. 따라서 엄격한 채점에서 나타난 개선에는 형식 준수 향상도 포함된다.
- SFT 베이스라인은 초기 모델보다 HumanEval+, BigCodeBench-Hard 설정 2개, 엄격한 MATH, MMLU에서 점수가 낮아진다. 반면 CRUXEval 설정 2개와 완화된 기준의 MATH에서는 점수가 높아진다. 따라서 RL의 전이 결과에는 개선과 동률이 포함되며, SFT의 변화는 과제에 따라 다르다.
- 논문은 평가 잡음을 분석하는 도구인 Eval Arena를 사용해 유의수준 0.05에서 여러 결과를 종합한 유의성을 보고한다. 개별 평가의 유의성 기준으로는 MMLU에서 > 0.8%p, CRUXEval에서 3점, 전체 MATH에서 > 3점을 제시한다. 관측된 MMLU 개선 폭 0.33점은 명시된 개별 기준을 넘지 않는다. 여러 결과를 종합한 유의성 주장이 보고된 모든 개선의 개별 유의성을 뜻하지는 않는다.
표는 이슈 수정 이외의 과제로 전이가 일어나면서도 개선 폭이 고르지 않음을 보여 준다. 라이브러리 활용 점수는 초기 모델과 같고, CRUXEval은 크게 개선되며, MMLU의 개선은 작다. 엄격한 MATH 점수와 완화된 기준의 MATH 점수는 답변 형식이 측정된 수학 성능 개선에 어떤 영향을 주는지 보여 준다.
3.6 Reward ablation
보상 설계 비교 실험은 연속적인 패치 유사도 보상과 패치가 정확히 일치할 때만 1, 나머지는 0을 부여하는 이산 보상을 비교한다. 형식 페널티와 학습 설정은 동일하게 유지한다. 연속 보상은 oracle 파일을 제공한 수정에서 34.8%, 형식 정확도에서 95.6%를 기록하며, 이산 보상은 각각 29.0%와 94.2%를 기록한다. 이산 보상의 학습 보상은 학습이 끝날 때도 약 0에 머문다. 이는 개발자 패치와 정확히 일치하는 출력이 드물 때 부분적인 유사도 피드백이 실용적임을 뒷받침한다.
그림은 최종 성능 비교와 학습 보상 곡선을 함께 보여 준다. 연속 유사도 보상은 oracle 파일을 제공한 수정에서 34.8을 기록해 이산 보상의 29.0보다 높다. 정확히 일치해야 보상을 받는 이산 보상은 학습 종료 시에도 0에 가깝게 머물며, 긍정적 피드백이 드물다는 설명과 부합한다.
4 Related work
관련 연구에서는 소프트웨어 공학용 언어 모델과 소프트웨어 에이전트의 학습 방법을 다룬다. 모델을 둘러싼 추론 파이프라인과 기반 모델 자체를 개선하는 학습 과정을 구분한다.
4.1 Language models for software engineering
논문은 모델이 도구와 상호작용하며 행동을 선택하는 추론 프레임워크인 agentic scaffold와, 미리 정한 단계로 이슈 해결을 구성하는 pipeline-based scaffold를 구분한다. Agentless Mini는 코드 편집과 각 단계를 독립적으로 확장하는 데 중점을 둔 단순한 파이프라인으로 제시한다. 결론에서는 추론 단계를 분리하면 전체 작업 과정의 상호작용 피드백으로 학습하는 데 제약이 생긴다는 한계도 지적한다.
4.2 Training software agents
논문은 Lingma-SWE-GPT, SWE-Gym, SWE-Fixer를 SFT로 소프트웨어 공학 모델을 학습하는 선행 연구로 소개한다. 이 연구들은 GPT-4o 또는 Claude-3.5-Sonnet에서 얻은 증류 샘플을 활용하며, 증류 샘플은 더 강한 모델이 생성한 학습 예제다. SWE-RL은 공개 저장소 산출물을 시드 데이터로, 개발자 패치를 보상 참조로 사용해 Llama 모델에 RL을 적용한다. 비교 대상 시스템은 초기 모델, 학습 데이터, scaffold도 서로 다르므로 리더보드 점수만으로 RL의 인과적 이점을 입증할 수는 없다.
5 Conclusion
결론은 이슈 수정과 전이 성능의 개선을 소프트웨어 진화 데이터에 적용한 RL의 효과로 설명한다. 명시된 한계는 시퀀스 유사도가 기능적으로 동등한 대안 수정안을 억제할 수 있다는 점, 저장소 구조에 기반한 위치 식별이 충분한 전체 맥락을 제공하지 못한다는 점, 파이프라인 단계를 분리해 상호작용 피드백으로 학습하는 데 제약이 생긴다는 점이다. 이러한 한계는 보상이 정확성을 얼마나 반영하는지, 작업 절차가 전체 수정 과정을 얼마나 고려할 수 있는지에 영향을 준다.
부록
- NeurIPS Paper Checklist: 저자들은 이 연구를 실증 연구로 설명하고, 연산 자원과 실험 설정을 기록하며, 보상 및 평가 구현을 보충 자료에 포함했다고 밝힌다. 체크리스트에는 개인정보와 독점적 정보에 관한 고려로 당시 학습 데이터와 학습 파이프라인을 공유할 수 없다는 내용도 있다. 모든 SWE-bench 평가에 오차 막대를 포함하지 않았다는 점을 인정하며, 실행 비용과 벤치마크의 단일 시도 평가 관행을 이유로 든다.
- A Raw pull request data curation: 수집 범위는 Jan 1, 2015부터 Aug 31, 2024까지의 GitHub 이벤트이며, 4.6M cloned repositories를 처리한다. SWE-bench 저장소에서 유래하는 학습 오염을 방지하기 위해 해당 저장소를 모두 제외한다. 집계 결과 PR 인스턴스 24M개를 얻고, 필터링 후 고유 인스턴스 약 11M개가 남으며, 여기서 학습 시드 273k개를 선별한다. 컨텍스트에 제시된 모든 파일을 수정하려는 경향을 줄이기 위해 Llama-3.1-70B-Instruct로 관련된 미변경 파일을 예측한다.
- B Agentless Mini: 파이프라인은 관련 파일 경로를 샘플링하고, 파일 전체 내용으로 수정안을 생성하며, 관련 테스트 파일을 검색해 재현 테스트 생성에 참고하고, 회귀 테스트를 선택한다. 회귀 테스트는 수정 후에도 기존 동작을 유지하는지 확인하는 기존 테스트다. 재정렬에서는 먼저 회귀 테스트 실패가 가장 적은 패치를 남기고, 동일한 재현 테스트를 통과한 패치끼리 묶는다. 각 합의 그룹에는 \(|\mathcal{P}| \times |\mathcal{T}|^2\) 점수를 부여한다. P는 해당 그룹의 패치 집합이고 T는 통과한 재현 테스트 집합이다. 이후 점수가 가장 높은 그룹 안에서 다수결을 수행한다.
- C Synthesizing supervised-finetuning data: 베이스라인의 합성 데이터 생성 절차는 오픈소스 시드에서 지시문 예제를 생성하는 Magicoder의 접근법을 따른다. Llama-3.3-70B-Instruct는 참조 파일과 패치를 참고해 위치 식별 및 search/replace 편집 예제를 생성한다. 필터링에서는 필요한 파일의 포함 여부, 형식, 검색 블록과 입력 컨텍스트의 일치 여부를 확인한다. SFT 모델은 이 예제와 Llama 3 코딩 및 일반 SFT 데이터셋을 사용해 16k 컨텍스트 윈도에서 2B 토큰을 학습한다.
- D Complete prompt: 부록은 이슈와 파일 내용을 넣을 자리표시자, 분리된 <think> 및 <solution> 필드, 필수 search/replace 문법이 포함된 PROMPT_TEMPLATE을 제공한다. 각 편집은 파일을 지정하고 <<<<<<< SEARCH, =======, >>>>>>> REPLACE 구분자를 사용한다. 원본 들여쓰기를 정확히 유지하고 편집마다 별도 코드 블록을 사용해야 한다. 이러한 요구 사항은 학습 중 강제하는 출력 구조를 설명한다.
짧은 생각
논문의 SFT 베이스라인과 비교한 결과가 SWE-RL의 효과를 가장 명확하게 뒷받침한다. 전체 파이프라인의 이슈 해결과 참조 파일을 제공한 greedy decoding 수정이라는 2가지 평가에서 모두 성능이 높아지며, 후자의 형식 정확도는 조금 낮다. 초기 모델 대비 전이 개선은 CRUXEval에서 가장 크고, 완화된 MATH 채점 기준에서도 유지된다. 라이브러리 활용 점수는 그대로이고 MMLU 개선 폭은 작다. 이 방법은 실행이 필요 없는 학습 보상을 제공하지만, 유용한 수정안을 평가하고 선택하려면 여전히 실행이 필요하며, 가장 높은 보고 성능은 대규모 후보 샘플링을 사용한 결과다.