NVIDIA 연구진은 프린스턴 대학교 및 메릴랜드 대학교와 함께 PivotOPD를, 멀티턴 LLM 에이전트를 위한 온폴리시 증류 기법으로 소개했습니다. PivotOPD의 온폴리시 증류는 에이전트가 가장 치명적인 초기 실수를 피하도록 하고, 어쨌든 실수가 발생했을 때 복구하도록 학습시킵니다. 13개 베이스라인을 상대로 Qwen3-1.7B 및 Qwen3-8B 학생 모델에서 ALFWorld, WebShop, 검색 기반 QA에서 최고 평균 성적을 기록했습니다. 핵심은 복구는 학습 가능하지만 표준 OPD는 이를 거의 가르치지 못한다는 것입니다.
TL;DR
- 규모: 모델이 아닌 학습 방법입니다. Qwen3-1.7B 및 Qwen3-8B 학생 모델, 그리고 SWE-Bench Verified에서 Nemotron-3.5-SFT 학생 모델로 테스트되었습니다.
- 실행 환경: NVIDIA H100 노드에서 학습되었습니다. 추론 비용 추가가 0이므로 학습된 에이전트는 기반 모델이 실행되는 어디서든 실행됩니다.
- 성능: 3개 시드 전반에 걸쳐 13개 베이스라인 대비 8개 벤치마크별 평균 전 항목에서 1위.
- 최고: 재생된 핵심 실수 중 72.7%에서 복구, 표준 OPD는 20.3%.
- 최악: 1.7B 학생 모델의 ALFWorld 'Look' 작업에서 55.9%, SOD는 83.9%.
- 요약: 최고: 결과 기반 RL만으로는 도달할 수 없는 복구 능력을 가르칩니다. 최악: 재생 가능한 환경과, 실패한 롤아웃의 77.8%에서 오라클과 일치하는 피벗을 제공하는 교사 모델에 의존합니다.
멀티턴 에이전트에서 핵심 실수란 무엇인가?
핵심 실수란 작업 완료까지의 최단 남은 경로를 늘리거나 해결 불가능하게 만드는 행동입니다. ALFWorld의 심볼릭 오라클이 매 턴마다 이를 측정합니다.
Qwen3-8B, Qwen3-30B-A3B, Qwen3-235B-A22B 전반에서 실패한 롤아웃의 59%(262개 중 155개)가 하나를 포함했습니다. 첫 핵심 턴은 30턴 중 턴 8에서 12 사이로 이른 시점(중앙값)에 도달했습니다. 이후 에이전트들은 복구하지 못한 채 18~21턴을 더 낭비했습니다.
Qwen3-8B 실패 사례 재생에서 핵심 턴을 수정하면 성공률이 8%에서 59%로 상승했습니다. 실수를 그대로 두고 다음 2턴 동안 올바른 행동을 강제한 경우에도 58%에 도달했습니다.
표준 온폴리시 증류는 왜 이를 놓치는가?
표준 OPD는 홀드아웃 실패율을 79%에서 56%로 낮췄습니다. 그러나 핵심 턴 이후의 실패는 51%에서 49%로 겨우 감소했습니다. 올바른 행동은 모든 핵심 턴에서 확률이 1% 미만에 머물러 8개 롤아웃으로는 거의 샘플링되지 않았습니다.
결과 기반 RL도 같은 사각지대를 공유합니다. 모든 롤아웃이 실패하면 그룹 상대 이득은 0입니다.
PivotOPD는 어떻게 작동하는가?
PivotOPD는 그룹 기반 RL에 3가지 구성 요소를 추가하며, 단일 PPO 업데이트에서 결합됩니다.
- 피벗 탐지: 더 큰 교사 모델이 각 롤아웃과 그 결과를 사후에 읽고 후보 턴을 선정하여 각 턴에서 골드 행동을 지정합니다. 학생의 행동이 골드 행동과 다를 때 그 턴을 핵심으로 간주합니다. ALFWorld에서 탐지된 피벗은 실패한 롤아웃의 평균 77.8%에서 오라클 피벗의 1턴 이내에 위치합니다.
- 예방적 증류 (역방향 KL): 학생 모델의 동결된 복사본이 골드 행동 힌트를 받고 학생 자신의 응답을 재채점합니다. 이를 통해 학생이 저지른 실수에서 벗어나도록 유도합니다.
- 회복 증류 (forward KL): 각 전환 후 교사는 최대 K 회복한다. 힌트가 주어진 자가학습기(self-teacher)는 복구 응답을 작성하고, 힌트가 없는 학생 모델이 이를 학습합니다. Forward KL은 질량을 넓게 덮는(mass-covering) 특성이 있어, 학생 모델이 거의 샘플링하지 않는 행동까지 끌어올립니다.
교사는 행동의 이름만 지정합니다. 토큰 수준의 목표는 학생 자신의 힌트가 포함된 분포에서 나옵니다.
PivotOPD는 에이전트 벤치마크에서 어떤 성능을 보이나요?
1.7B 학생 모델과 함께 PivotOPD는 ALFWorld에서 평균 73.7%를 기록하며 SDAR보다 5.5점 높습니다. Search-based QA에서는 평균 44.5%로 RLSD보다 5.9점 높습니다. WebShop에서는 점수에서 RLSD를 1.2 차이로, 성공률(76.6%)에서는 14.1 차이로 앞섭니다.
8B 학생 모델의 경우 ALFWorld에서 93.0%, 검색 기반 QA에서 47.4%, WebShop 성공률 81.9%에 도달합니다. 격차는 더 작지만 최소 1.8포인트입니다.
Qwen3-8B를 자체 교사로 사용했을 때에도 PivotOPD는 3개 벤치마크 전부에서 최소 1.5점, 평균 3.9점 차이로 승리합니다.
에서 SWE-Bench Verified, Nemotron-3-Super가 가르친 Nemotron-3.5-SFT 학생 모델은 62.8%에서 66.0%로 향상되었습니다. 표준 OPD는 63.0%에 도달했으며, 교사 모델의 점수는 73.0%입니다.
복구 능력이 두드러진다. 72개의 재현된 핵심 실수에서 PivotOPD는 72.7%의 확률로 복구한 반면, 기본 모델은 8.3%, 표준 OPD는 20.3%, 예방 전용은 45.8%에 그쳤다. 복구까지 평균 9.7턴이 걸렸는데, 최적치는 6.2턴이다.
Prev</button><button class="btn" id="mtp-next">다음 </button></div> </div> <div class="panel" data-p="2"> <div class="tog" id="mtp-tog"><button class="on" data-m="s">Qwen3-1.7B</button><button data-m="l">Qwen3-8B</button></div> <div id="mtp-bench"></div> <p class="muted">논문의 Table 1에서 3개 시드에 대한 평균값입니다. 가장 강력한 베이스라인들과 비교했습니다. PivotOPD는 13개 베이스라인을 상대로 8개 벤치마크별 평균 전체에서 1위를 차지했습니다.</p> <div class="bench"><h6>SWE-Bench Verified 해결률 (Nemotron-3.5-SFT student)</h6><div id="mtp-swe"></div></div> </div> <div class="panel" data-p="3"> <p>72개의 오acle 라벨이 붙은 pivotal mistakes를 정책당 8번 재생했습니다. 각 정책이 그럼에도 과제를 완료하는 빈도는 얼마나 될까요?</p> <div id="mtp-rec"></div> <p class="muted">복구까지의 평균 턴 수: PivotOPD 9.7, 표준 OPD 12.3, 베이스 13.4, 최적 6.2.</p> <button class="btn" id="mtp-case">재생 사례 연구</button> <div class="case"> <div class="col"><h6>베이스 모델</h6><div id="mtp-ca"></div></div> <div class="col"><h6 style="color:#76B900">PivotOPD 모델</h6><div id="mtp-cb"></div></div> </div> </div> <div class="ft"><span>출처: <a href="https://arxiv.org/abs/2609.40285" target="_blank" rel="noopener">arXiv 2609.40285</a></span><b>© Marktechpost</b></div> </div> <script> (function(){ var R=document.getElementById('mtp-pivotopd'); function $(s){return R.querySelector(s);} function $$(s){return R.querySelectorAll(s);} function resize(){try{parent.postMessage({mtpPivotOPDHeight:R.offsetHeight+40},'*');}catch(e){}} var shown={}; $$('.tab').forEach(function(b){b.onclick=function(){ $$('.tab'). forEach(function(x){x.classList.remove('on')});b.classList.add('on'); var p=b.getAttribute('data-p'); $$('.panel').forEach(function(x){x.classList.toggle('on',x.getAttribute('data-p')===p)}); if(p==='2')bench(mode); if(p==='3')rec(); setTimeout(resize,50);}); /* panel 1 */ var T=$('#mtp-turns'),cells=[]; for(var i=1;i<=30;i++){var d=document.createElement('div');d.className='t';d.textContent=i;T.appendChild(d);cells.push(d);} var timer; function play(recover){clearInterval(timer);cells.forEach(function(c){c.className='t'});var k=0; timer=setInterval(function(){var c=cells[k];var n=k+1; if(n<10)c.className='t ok';else if(n===10)c.className='t pv'; else if(recover){c.className=n<=12?'t rc':(n<=16?'t ok':'t');} else c.className='t wa'; k++; if(recover&&n===16){clearInterval(timer);$('#mtp-cap').textContent='실수 이후 유도된 복구를 거쳐 작업을 완료했습니다. 리플레이에서는 유도 턴 2회로 58%의 성공률을 보였습니다.';} if(k>=30){clearInterval(timer);$('#mtp-cap').textContent='복구 없음: 남은 20개 턴이 낭비됩니다. 실제 에이전트는 평균 18~21개 턴을 낭비했습니다.';} },90);} $('#mtp-play1').onclick=function(){play(false)};$('#mtp-play2').onclick=function(){play(true)}; function count(){ $$('.stat b[data-c]').forEach(function(b){var t=+b.getAttribute('data-c'),v=0;var iv=setInterval(function(){v+=2;if(v>=t){v=t;clearInterval(iv);}b.textContent=v+'%';},20);});} /* panel 2 */ var S=[ {h:'1. 피벗 감지',b:'더 큰 교사 모델이 각 롤아웃과 그 결과를 사후에 읽고, 후보 턴을 선정하여 골드 액션을 지정합니다. 학생 모델의 액션이 다를 때 해당 턴은 피벗 턴으로 판정됩니다. 감지된 피벗은 평균적으로 실패한 ALFWorld 롤아웃의 77.8%에서 오라클의 피벗과 1턴 이내에 일치했습니다.',f:['<span class="chip">롤아웃 + 결과</span>','<span class="arr">→</span>','<span class="chip">교사 모델</span>','<span class="arr">→</span>','<span class="chip r">피벗 턴 t</span>','<span class="chip g">Gold action</span>']}, {h:'2. 예방적 증류(reverse KL)',b:'정답 행동(gold action)의 힌트를 받은 동결된(frozen) 학생 모델은 특권적 self-teacher가 됩니다. 이는 학생이 실제로 작성한 응답을 다시 점수 매겨, 실수로부터 확률을 멀어지게 합니다. 가중치 w_prev는 작게 유지됩니다(0.001).',f:['<span class="chip">t 시점의 학생 응답</span>','<span class="arr">→</span>','<span class="chip">Self-teacher + 힌트(gold)</span>','<span class="arr">→</span>','<span class="chip g">역방향 KL 업데이트</span>']}, {h:'3. 회복적 증류(forward KL)',b:'피벗 이후, 교사는 다음 K턴 각각에 대해 회복 행동(recovery action)을 지정합니다. 힌트를 받은 self-teacher가 회복 응답을 작성하고, 힌트를 받지 않은 학생이 이를 학습합니다. Forward KL은 mass-covering이므로 학생이 거의 샘플링하지 않는 행동들을 끌어올립니다. 최적 K: ALFWorld에서는 2, WebShop과 Search QA에서는 1.',f:['<span class="chip r">실수 후 상태</span>','<span class="arr">→</span>','<span class="chip">교사: 회복 행동</span>','<span class="arr">→</span>','<span class="chip">Self-teacher가 응답 작성</span>','<span class="arr">→</span>','<span class="chip g">Forward KL 업데이트</span>']} ]; var si=0; function step(i){si=(i+3)%3;$$('.step').forEach(function(x){x.classList.toggle('on',+x.getAttribute('data-s')===si)}); var s=S[si];$('#mtp-detail').innerHTML='<h5>'+s.h+'</h5><p style="margin:0">'+s.b+'</p><div class="flow">'+s.f.join('')+'</div>';setTimeout(resize,30);} $$('.step').forEach(function(x){x.onclick=function(){step(+x.getAttribute('data-s'))}}); $('#mtp-prev').onclick=function(){step(si-1)};$('#mtp-next').onclick=function(){step(si+1)};step(0); /* panel 3 */ var B={s:[ ['ALFWorld 평균 성공률 (%)',[['PivotOPD',73.7],['SDAR',68.2],['OPID',61.3],['RLSD',60.7],['GRPO',42. 7]]], ['검색 기반 QA 평균 정확도 (%)',[['PivotOPD',44.5],['RLSD',38.6],['SOD',38.2],['GRPO',37.7]]], ['WebShop 성공률 (%)',[['PivotOPD',76.6],['OPID',68.0],['RLSD',62.5],['GRPO',57.0]]]], l:[ ['ALFWorld 평균 성공률 (%)',[['PivotOPD',93.0],['RLSD',90.8],['Skill-SD',88.6],['GRPO',35.3]]], ['검색 기반 QA 평균 정확도 (%)',[['PivotOPD',47.4],['OPID',45.6],['OPSD',43.3],['GRPO',37.5]]], ['WebShop 성공률 (%)',[['PivotOPD',81.9],['SDAR',79.7],['RLSD',78.9],['GRPO',75.0]]]]}; function bars(el,rows,max){el.innerHTML=rows.map(function(r){return '<div class="row'+(r[0]==='PivotOPD'?' me':'')+'"><span class="lb">'+r[0]+'</span><span class="tr"><span class="bar" data-w="'+(r[1]/max*100)+'"></span></span><span class="v">'+r[1].toFixed(1)+'</span></div>'}).join(''); requestAnimationFrame(function(){setTimeout(function(){el.querySelectorAll('.bar').forEach(function(b){b.style.width=b.getAttribute('data-w')+'%'})},40)});} var mode='s'; function bench(m){mode=m;var W=$('#mtp-bench');W.innerHTML='';B[m].forEach(function(g){var d=document.createElement('div');d.className='bench';d.innerHTML='<h6>'+g[0]+'</h6><div></div>';W.appendChild(d);bars(d.lastChild,g[1],100);}); bars($('#mtp-swe'),[['교사',73.0],['PivotOPD',66.0],['Std OPD',63.0],['학생',62.8]],100);setTimeout(resize,60);} $$('#mtp-tog button').forEach(function(b){b.onclick=function(){$$('#mtp-tog button').forEach(function(x){x.classList.remove('on')});b.classList.add('on');bench(b.getAttribute('data-m'));}}); /* panel 4 */ function rec(){bars($('#mtp-rec'),[['PivotOPD',72.7],['이전만 사용',45.8],['Std OPD',20.3],['기준',8.3]],100);setTimeout(resize,60);} var CA=[['턴 1-2: 냉장고에 계란이 ',''],['턴 3: 냉장고에서 토마토를 꺼냄','bad'],['턴 4: 전자레인지로 이동',''],['턴 5: 토마토를 전자레인지로 옮김','bad'],['턴 6-30: 계란을 끝내 찾지 못함','bad'],['✕ 실패','bad']]; var CB=[['턴 1-2: 냉장고에 계란이 없음',''],['턴 3: 냉장고에서 토마토를 꺼냄','bad'],['턴 4: 복구가 시작됨, 테이블로 이동','good'],['턴 5: 토마토를 옆에 내려놓음','good'],['턴 6: 테이블에서 계란을 꺼냄','good'],['턴 7-11: 계란을 식힌 후 전자레인지로 옮김','good'],['✓ 성공','good']]; function fill(el,arr){el.innerHTML=arr.map(function(a){return '<div class="ln '+a[1]+'">'+a[0]+'</div>'}).join('');} function caseplay(){fill($('#mtp-ca'),CA);fill($('#mtp-cb'),CB);var a=$$('#mtp-ca .ln'),b=$$('#mtp-cb .ln');var k=0;var iv=setInterval(function(){if(a[k])a[k].classList.add('show');if(b[k])b[k].classList.add('show');k++;if(k>7)clearInterval(iv);},380);setTimeout(resize,60);} $('#mtp-case').onclick=caseplay; fill($('#mtp-ca'),CA);fill($('#mtp-cb'),CB);$$('#mtp-pivotopd .ln').forEach(function(x){x.classList.add('show')}); count(); window.addEventListener('load',resize);window.addEventListener('resize',resize);setTimeout(resize,300); })(); </script> </body></html> ">PivotOPD는 다른 에이전트 증류 방법들과 어떻게 비교됩니까?
| 지표 | PivotOPD | OPSD (표준 OPD) | OPID | SDAR | RLSD |
|---|---|---|---|---|---|
| 핵심 아이디어 | 교사가 감지한 핵심(pivotal) 턴에서 실패를 방지하고 복구 | 모든 응답에 대한 특권적 self-teacher | 온폴리시 hindsight 기반의 계층적 기술 | 시그모이드 게이트 보조 손실로서의 OPSD | self-distillation이 갱신 크기를, RLVR이 방향을 결정 |
| 교사가 작성한 복구 응답으로 학습 | 예 (forward KL) | 아니오 | 아니오 | 아니오 | 아니오 |
| ALFWorld 평균, Qwen3-1.7B | 73.7 | 12.4 | 61.3 | 68.2 | 60.7 |
| Search QA 평균, Qwen3-1.7B | 44.5 | 36.8 | 37.5 | 37.1 | 38.6 |
| WebShop 성공률, Qwen3-1.7B | 76.6 | 10.1 | 68.0 | 57.0 | 62.5 |
| ALFWorld 평균, Qwen3-8B | 93.0 | 46.7 | 83.7 | 83.8 | 90.8 |
| 코드 | 곧 공개 예정 | GitHub | GitHub | 공개되지 않음 | 공개되지 않음 |
점수 출처: PivotOPD 표 1.
학습 비용은 얼마이며, 직접 실행해 볼 수 있을까요?
PivotOPD는 학습만 변경하므로 추론 시 추가 비용이 전혀 들지 않습니다. 1.7B 학생 모델로 ALFWorld에서 4개의 H100 GPU를 사용할 때, GRPO 대비 오버헤드는 100 단계 시점에서 12.4%입니다. K = 1입니다. 다음에서 94.2%로 급증하는데, K = 2인데, 이는 이후 복구 과정에서 환경 재현(environment replay)이 필요하기 때문입니다. 선택된 예산은 K = 2이고 ALFWorld에서 K 웹샵(WebShop)과 검색 기반 QA에서 = 1.
핵심 요약
- 실패한 에이전트 배포의 절반 이상이 1번의 초기에 발생한 회복 가능한 실수에 달려 있습니다.
- 표준 OPD는 이러한 실패 사례를 거의 다루지 못합니다: 51% 대 49%.
- PivotOPD는 재현된 실수 중 72.7%를 회복하는 반면, OPD는 20.3%에 그쳤습니다.
- ALFWorld, WebShop 및 Search QA에서 13개의 베이스라인 대비 최고의 평균 성능을 기록했습니다.
- 0의 추론 오버헤드가 있지만, 코드는 아직 공개되지 않았습니다.
다음을 확인해 보세요 논문 그리고 그 프로젝트 페이지. 이 프로젝트의 연구자에게 모든 공이 돌아갑니다. 또한, 언제든지 저희를 트위터 그리고 우리의 다음 항목에 참여하는 것을 잊지 마세요 ML 서브레딧 150k+ 및 다음 구독: 우리의 뉴스레터. 잠깐만요! 텔레그램 사용하시나요? 이제 텔레그램에서도 저희와 함께하실 수 있습니다.
해당 게시물 NVIDIA PivotOPD, 멀티턴 AI 에이전트가 중대한 실수로부터 복구하도록 학습시키다 최초 게재: MarkTechPost.