baesisi
← 목록으로
·NeurIPS 2023·논문리뷰

Language Models can Solve Computer Tasks

RCI(비평→개선) 프롬프팅을 task/state/agent 그라운딩 3단계에 적용해 컴퓨터 작업을 푸고 추론에도 전이

#논문리뷰#Paper Review#LLM#자기수정#Self-Correction#에이전트#LLM Agent
티스토리에서 원문 보기 →

NeurIPS 2023에 실린 RCI 논문을 읽고 정리했다. LLM에게 먼저 답을 내게 하고, 그 답의 문제를 스스로 찾게 한 다음, 찾은 문제를 바탕으로 답을 고치게 하는 프롬프팅 방법이다. 같은 해에 나온 Reflexion, Self-Refine과 함께 self-correction 계열의 초기 논문으로 자주 묶인다. 제목만 보면 웹 에이전트 논문인데, 추론 벤치마크 실험도 같이 들어 있다.

  • 저자: Geunwoo Kim (UC Irvine), Pierre Baldi (UC Irvine), Stephen McAleer (Carnegie Mellon University)
  • 게재: NeurIPS 2023 (arXiv:2303.17491)
  • 코드: posgnu/rci-agent

0. 한 줄 요약

파인튜닝도, 과제마다 만든 보상함수도 없이 초기 출력 생성, 비평, 개선으로 이어지는 RCI 프롬프팅만으로 MiniWoB++ 컴퓨터 작업에서 SL+RL SotA와 거의 같은 성능을 냈고, 같은 방식을 자연어 추론 벤치마크에도 적용한 논문이다. 다만 추론 쪽 결과는 정답과 맞으면 루프를 멈추는 설정에서 나왔다.

1. 문제 정의

풀려는 문제는 자연어 명령을 받아 클릭, 타이핑, 폼 작성처럼 컴퓨터에서 하는 일을 직접 처리하는 에이전트다. 기존 지도학습이나 강화학습 방식도 성능은 잘 나왔지만 데이터가 너무 많이 들었다. 대표격인 CC-Net은 104개 과제에 걸쳐 77명이 6,300시간 동안 만든 시연 240만 개를 썼다. 과제 하나에 평균 23,076개다. 이렇게 과제별로 시연과 보상함수를 따로 마련해야 하니, 시연 몇 개만 주고 새 과제를 풀게 하는 데까지는 가지 못했다.

LLM은 API 호출은 잘하는데, 키보드와 마우스로 화면을 직접 다루는 일에서는 imitation learning이나 RL보다 성능이 낮았다. 저자들은 그 이유를 세 가지 grounding 문제로 정리한다. 행동이 과제에 맞는지(task grounding), 지금 화면 상태에서 실행할 수 있는지(state grounding), 에이전트가 실제로 처리할 수 있는 형식인지(agent grounding)다. 이 논문은 이 세 단계를 하나씩 RCI로 풀어 보려는 시도다.

2. 기존 방법들의 한계

관련 연구는 부록 B에 정리되어 있는데, 내용으로 보면 네 갈래로 나눌 수 있다.

첫째는 CC-Net, World of Bits, Workflow-guided exploration처럼 화면이나 DOM 정보로 행동을 예측하는 네트워크를 처음부터 학습하는 방식이다. 잘 동작하지만 과제마다 전문가 데이터와 보상함수가 있어야 한다. 저자들은 시연 개수와 평균 성공률을 한 그래프에 놓은 Figure 4b로 이 차이를 보여준다. 이 그래프의 baseline 수치는 다시 돌린 게 아니라 각 논문에서 가져온 값이다.

둘째는 LLM에게 HTML을 읽히는 방식이다. Gur et al.(2022)의 WebN-T5-3B나 Furuta et al.(2023)은 RL 없이도 가능성이 있다는 걸 보였지만, LLM을 파인튜닝하는 데 여전히 전문가 시연이 꽤 많이 든다. WebN-T5-3B는 시연 12,000개로 T5를 파인튜닝했다.

셋째는 LLM에 행동을 붙인 에이전트다. Huang et al.(2022)은 생성한 행동을 미리 정한 행동 목록과 임베딩으로 맞춰 grounding했지만 state grounding은 고려하지 않았다. SayCan은 가치함수로 행동의 적합도를 곱해 주고, Inner Monologue는 state grounding용 피드백 루프를 갖고 있지만 미리 학습한 언어 조건부 로봇 정책에 기대기 때문에 일반화에 한계가 있다. Toolformer처럼 API 도구를 쓰는 방식은 도구를 사람이 만들어 줘야 하고 기능도 제한된다. 이 갈래와는 직접 비교한 실험이 없다.

넷째는 ReAct, Reflexion처럼 외부 피드백을 받아 추론하는 방식이다. ReAct는 추론과 행동을 번갈아 하면서 hallucination과 오류가 이어지는 문제를 주로 다룬다. Reflexion은 ReAct에 이전 시행착오 경험을 더했는데, 저자들은 Reflexion이 과제별 성공 피드백을 여러 라운드 받아야 해서 RCI만큼 쉽게 확장되지 않는다고 주장한다. 다만 이 주장은 논증으로만 하고 비교 실험은 없다. 뒤에서 보겠지만 추론 실험에서는 RCI도 결국 정답 라벨이라는 피드백을 쓰고, 부록 C.2에서는 이 방식을 Self-Refine, Reflexion 등 선행 연구를 따른 것이라고 적는다. 그래서 이 대비가 어디까지 맞는지는 좀 따져 봐야 한다.

3. 방법

새로운 건 RCI 하나다. LLM이 먼저 출력을 만들고, 그 출력의 문제점을 스스로 찾고(critique), 찾은 비평을 반영해 출력을 고친다(improve). 비평을 프롬프트에 명시적으로 넣는 버전은 explicit RCI, 비평을 따로 생성하지 않고 이전 출력을 바로 고치게 하는 버전은 implicit RCI라고 부른다. 세 단계 grounding 분해와 두 RCI 버전의 구분은 이 아이디어를 컴퓨터 작업에 적용하기 위한 틀이라고 보면 된다.

파이프라인은 세 단계로 돌아간다.

먼저 task grounding에서는 과제 설명을 보고 LLM이 단계별 계획을 세운다. 이 계획에 explicit RCI를 한 번 적용해 비평과 개선을 거친다. 저자들은 MiniWoB++ 과제 대부분은 한 번이면 충분했다고 한다.

다음 state grounding에서는 계획에서 나온 행동을 현재 HTML 상태에 맞게 구체화한다. 예를 들어 "Bob이 보낸 이메일"이라는 추상적인 지시를 실제 HTML 요소에 연결하는 작업이다. 여기서는 implicit RCI를 쓴다. 두 번 이상 돌려도 성공률이 달라지지 않아서 한 번만 적용했다.

마지막 agent grounding에서는 행동이 에이전트가 실행할 수 있는 형식인지 확인하고, 아니면 implicit RCI로 다시 고친다. 실행할 수 있는 행동은 type, press, clickoption, movemouse, clickxpath 다섯 종류의 정규표현식으로 미리 정해 두었고, 여기 맞지 않는 명령은 무시된다. 실행 가능한 형식이 될 때까지 반복하는데, 최대 3번으로 잡았을 때 성능이 가장 좋았다. 그래도 실행할 수 없는 행동이 나오면 그 에피소드는 바로 실패로 처리한다.

이 구성을 모델이 실제로 하는 일과 사람이 짜 놓은 장치로 나눠 보면 경계가 좀 더 잘 보인다. 계획을 세우고, 비평하고, HTML을 이해해서 행동을 구체화하는 건 모델 능력이다. 반면 행동 공간을 다섯 가지 정규표현식으로 제한한 것, 각 단계의 반복 횟수, 형식 검증, 과제마다 넣은 2~3개의 시연은 사람이 설계했다. 과제별로 손본 부분도 있다. click-dialog-2에서는 state grounding이 오히려 엉뚱한 행동을 만들어서 이 단계를 뺐고, click-menu에서는 마우스를 올려야 메뉴가 펼쳐진다는 설명을 시연에 넣었다(부록 F). 성공 여부는 시뮬레이터가 주는 reward로 재는데, 방법 설명에는 이 reward를 RCI 루프 안에서 쓰는 단계가 없다. 내가 읽기로는 성공률을 계산할 때만 쓰이고, 컴퓨터 작업에는 정답을 보고 멈추는 장치가 없다. 다만 MiniWoB++라는 시뮬레이션 안에서만 검증했다.

추론 벤치마크 쪽은 사정이 다르다. 논문은 RCI 루프를 최대 두 번까지 돌리고, 출력이 정답과 일치하면 그 자리에서 멈춘다(§3.1). 언제 멈출지를 정답 라벨로 정하는 셈이다. 저자들도 부록 C.2에서 이걸 "label feedback"이라고 부르며 피드백의 한 종류라고 인정한다. 컴퓨터 작업에서 반복 횟수를 정하는 조건은 "실행 가능한 형식이 될 때까지 최대 3번"이라 정답을 보지 않는다. 두 실험이 RCI라는 같은 이름 아래 묶여 있지만 이 부분은 꽤 다르다.

4. 실험 결과

컴퓨터 작업은 MiniWoB++에서 55개 과제를 골랐다. WebN-T5-3B와 공정하게 비교할 수 있는 과제들이고, HTML이 컨텍스트 길이를 넘는 과제 5개 등은 뺐다. 추론은 Kojima et al.(2022)과 같은 세팅에서 산술 6개(GSM8K, MultiArith, AddSub, AQuA, SVAMP, SingleEq)와 상식 2개(CommonSenseQA, StrategyQA), 모두 8개 벤치마크를 썼다. 모델은 GPT-3(davinci), InstructGPT-3(text-davinci-002), 그리고 RLHF를 거친 gpt-3.5-turbo와 gpt-4이고, 컴퓨터 작업의 주 실험은 gpt-3.5-turbo와 gpt-4로, 추론 실험은 gpt-3.5-turbo로 했다. 학습은 하지 않았고 temperature 0, max token 256으로 2023년 1~3월에 OpenAI API를 호출했다.

컴퓨터 작업의 주 결과는 Figure 4a다. RLHF를 거친 InstructGPT-3에 RCI를 붙이면 55개 과제 평균 성공률이 0.94였다. 부록 Table 18을 보면 이 평균에는 일부 과제에서 gpt-4로 낸 결과가 섞여 있다. WebN-T5-3B(0.50)보다 44%p, SL SotA(0.57)보다 37%p, RL SotA(0.67)보다 27%p 높고, SL+RL SotA(0.94)와는 거의 같다. 참고로 본문은 WebN-T5-3B 대비 차이를 41%라고 적어 그림의 수치와 조금 어긋난다. 이보다 앞서는 건 CC-Net(SL+RL) 0.94 하나인데, 이 버전은 미리 정해둔 사전에서 단어를 골라 타이핑하기 때문에 직접 비교하기 어렵다고 저자들이 밝힌다. 사전 없이 직접 타이핑하는 CC-Net은 0.85로 RCI보다 낮다(그림상 차이는 9%p인데 본문은 6% 앞선다고 적었다). 다만 이 값은 과제마다 성공률을 낸 뒤 평균한 것이라, 37%p를 '새로 풀게 된 과제 수'로 바로 바꿀 수는 없다. 과제별 성공률은 부록 Table 18과 Figure 10에 따로 나와 있다.

개인적으로는 성공률보다 Figure 4b의 데이터 효율이 더 인상적이었다. RCI는 과제당 시연을 2~3개만 쓰는데(부록 B.1에서는 평균 2개 미만이라고 적었다), 이는 WebN-T5-3B보다 120배, CC-Net보다 11,000배 적은 양이다. 그런데도 성능은 같거나 더 높다. 정확도와는 다른 축의 이득이고, 이 논문의 실질적인 기여는 이쪽이라고 생각한다.

추론 쪽 주 결과는 Table 1이다. Zero-Shot에 RCI를 붙이니 8개 벤치마크 모두 올랐다. GSM8K는 77.95에서 85.43으로 7.48%p, CommonSenseQA는 64.56에서 68.11로 3.55%p, StrategyQA는 48.81에서 61.81로 13.00%p 올랐다. 다만 앞에서 말했듯 이 수치는 정답과 일치하면 루프를 멈추는 설정에서 나왔다. CoT와 비교한 Table 2도 같은 설정이다.

ablation도 두 가지가 있다. Figure 5는 grounding 단계를 하나씩 뺐을 때의 결과를 easy, medium, hard 난이도별로 보여준다. 난이도마다 3개씩, 모두 9개 과제를 gpt-3.5-turbo로 돌린 결과다. 세 단계 중 어느 것을 빼도 성능이 떨어지고, 저자들은 세 단계의 기여도가 거의 비슷하다고 설명한다. 특히 agent grounding을 빼고 state grounding에서 나온 행동을 그대로 실행하면 쉬운 과제에서도 성공률이 baseline보다 60% 떨어진다. Figure 6은 언어 모델을 바꿔 가며 비교한 결과인데, instruction fine-tuning을 거치지 않은 GPT-3에서는 성능이 크게 떨어진다.

가장 중요한 ablation은 부록에 있다. Table 17은 정답 라벨 없이 RCI만 돌린 결과다. 저자들은 본문(§3.1)에서 이 결과를 '절반은 Zero-Shot과 같고 나머지는 떨어졌다'고 요약하지만, 표의 숫자를 보면 8개 중 7개가 떨어졌고 StrategyQA 하나만 48.42에서 48.81로 거의 같다. Zero-Shot CoT와 Few-Shot CoT에 RCI를 붙인 경우도 다섯 벤치마크 모두 떨어졌다. StrategyQA의 Zero-Shot 값이 Table 1(48.81)과 Table 17(48.42)에서 다르게 적혀 있다는 점도 눈에 띈다. GSM8K는 77.95에서 72.83으로 5.12%p, CommonSenseQA는 64.56에서 46.06으로 18.5%p나 떨어졌다. 저자들은 RCI가 맞는 답을 틀렸다고 비평하는 false negative critic 때문이라고 설명한다(§3.1). 본문 Table 1의 향상이 어디서 왔는지 알려주는 결과라서, 오히려 본문에서 다뤘어야 한다고 생각한다.

실패 사례도 세 유형으로 직접 분석해 놓았다. 첫째는 guess-number, search-engine, use-spinner처럼 계획을 길게 세워야 하는 과제다. guess-number는 50단계 넘게 숫자를 추측해 나가야 하는데, 진행하다 보면 계획에서 벗어난다. 둘째는 tic-tac-toe, use-autocomplete처럼 여러 단계를 내다봐야 하는 과제다. tic-tac-toe에서는 상대가 막거나 공격할 수를 예측하지 못한다. 셋째는 count-shape처럼 HTML에 시각 정보가 없는 과제다. 캔버스에 그려진 도형 개수를 세야 하는데 HTML만 봐서는 알 수가 없으니 성공률이 0.40에 그쳤다.

저자들이 직접 밝힌 한계도 있다. 주로 RLHF를 거친 InstructGPT-3 계열(gpt-3.5-turbo, gpt-4)로 실험해서 다른 모델에서도 되는지는 모른다. 긴 HTML은 컨텍스트 길이 때문에 다루기 어렵다. 행동도 주로 클릭과 타이핑이라 드래그나 복사·붙여넣기가 필요한 과제는 평가하지 않았다. 장기 전략보다 바로 다음 결정에 집중하는 구조이고, 한 번만 샘플링하는 방법보다 비용이 더 든다.

5. 읽으면서 든 의문

첫 번째는 추론 실험의 종료 조건이다. Table 1의 RCI는 출력이 정답과 맞으면 루프를 멈추는데, 실제로 쓸 때는 정답을 모르니 이렇게 할 수가 없다. 그리고 Table 17을 보면 이 신호를 뺐을 때 8개 중 7개에서 성능이 Zero-Shot보다 떨어진다. 내 해석으로는 Table 1에서 보이는 향상은 대부분 RCI의 비평 능력보다는 "정답이 나오면 멈춘다"는 오라클에서 나왔을 가능성이 크다. 초록과 서론은 "external feedback이 주어졌을 때"라고만 쓰고, 그 피드백이 정답 라벨이라는 건 §3.1의 한 문장과 부록 C.2에서야 나온다. 실제 환경에서는 이 설정을 재현할 수 없다는 점도 따로 짚지 않는다. 오라클 없는 결과가 부록에만 있다는 점이 이 논문에서 가장 아쉬웠다.

두 번째는 실험을 한 번씩만 돌렸다는 점이다. Table 1, 2와 Figure 4, 5, 6 어디에도 반복 실행이나 표준편차, 신뢰구간이 없다. temperature 0이니 결과가 결정론적이라고 볼 수도 있다. 하지만 API로 부르는 모델은 버전이 바뀌기도 하고 응답이 완전히 고정되어 있지도 않은데, 이 부분이나 프롬프트를 조금 바꿨을 때 결과가 얼마나 흔들리는지는 다루지 않는다.

세 번째는 비용 비교다. RCI는 과제 하나에 LLM을 여러 번 호출한다. task grounding에서 비평과 개선을 한 번씩 하고, state grounding과 agent grounding에서도 여러 번 호출한다. 그런데 한 번만 호출하는 Zero-Shot과 호출 수를 맞춰 비교한 결과는 없다. 저자들도 RCI가 더 비싸다고 한 줄로만 인정하고, 얼마나 더 드는지는 수치로 보여주지 않는다.

네 번째는 빠진 대조군이다. 비평 없이 다시 샘플링만 반복하는, 가장 단순하고 싼 방법과의 비교가 없다. 그래서 RCI의 성능 향상이 비평 내용 덕분인지, 단순히 여러 번 시도했기 때문인지 구분할 수 없다. temperature 0이라 같은 프롬프트를 그대로 다시 넣으면 같은 답이 나오겠지만, 그렇다면 더더욱 "다시 생각해 보라" 정도의 단순한 재시도와 비교했어야 비평이 실제로 효과가 있었는지 알 수 있다.

다섯 번째는 MiniWoB++에 맞춰진 전제다. MiniWoB++는 HTML 상태가 깔끔하고 성공 여부를 자동으로 판정할 수 있는 시뮬레이션 환경이다. count-shape 실패 사례에서 보듯, 화면에 그려진 것을 봐야 하는 실제 웹에서는 HTML만으로 상황을 파악할 수 있다는 전제가 맞지 않는다. 저자들도 한계에서 복잡한 UI는 HTML만으로 이해하기 어려워 다른 modality가 필요하다고 적었다.

반대로 아이디어 하나를 두 분야에 일관되게 적용한 구조라서, 기여가 어디서 나왔는지는 분명하다. 무엇보다 Table 17을 감추지 않고 부록에라도 공개한 점은 정직했다고 생각한다. 이 표가 없었다면 위의 첫 번째 의문은 아예 확인할 수도 없었을 것이다.

6. 정리

컴퓨터 작업 실험은 설득력이 있다. 루프를 멈추는 조건이 정답이 아니라 형식 검증이라 오라클 문제에서 비교적 자유롭다. 과제당 시연 2~3개, CC-Net보다 11,000배 적은 데이터로 SL+RL SotA와 거의 같은 성능을 냈다는 건 그 자체로 의미 있는 결과다. 9개 과제라는 작은 범위이긴 하지만, 세 단계 grounding을 하나씩 뺀 ablation도 각 단계가 필요하다는 걸 잘 보여준다.

추론 실험은 다르게 읽어야 한다. "RCI가 CoT보다 추론을 잘하게 만든다"는 주장은 정답 라벨로 멈추는 설정에서만 성립하고, 저자들이 직접 공개한 Table 17을 보면 오라클이 없을 때는 대부분의 벤치마크에서 성능이 오히려 떨어진다. 성격이 다른 두 실험을 RCI라는 하나의 틀로 묶으면서, 추론 쪽이 정답 라벨에 기대고 있다는 점을 본문에서 충분히 드러내지 않은 게 가장 큰 약점이다.

이 논문에서 하나 가져간다면, self-correction 결과를 볼 때는 언제 멈추는지를 무엇이 정하는지부터 확인해야 한다는 점이다. 같은 RCI라도 형식 검증으로 멈추느냐, 정답으로 멈추느냐에 따라 결과의 의미가 완전히 달라진다.

7. 같이 읽어볼 논문

  • Kojima et al. (NeurIPS 2022), Large Language Models are Zero-Shot Reasoners. Zero-Shot-CoT 논문이고, 이 논문의 추론 실험 세팅과 데이터셋 구성을 그대로 가져왔다.
  • Wei et al. (NeurIPS 2022), Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. Few-Shot-CoT 베이스라인이 나온 원 논문이다.
  • Humphreys et al. (ICML 2022), A data-driven approach for learning to control computers. CC-Net 논문으로, 컴퓨터 작업에서 주로 비교한 SL+RL SotA다.
  • Yao et al. (ICLR 2023), ReAct: Synergizing Reasoning and Acting in Language Models. 추론과 행동을 번갈아 하는 에이전트 구조로, 이 논문이 관련 연구에서 비교하는 대상이다.
  • Shinn et al. (NeurIPS 2023), Reflexion: Language Agents with Verbal Reinforcement Learning. 과제별 성공 피드백이 필요해 확장이 어렵다고 이 논문이 비판한 방법이다. 거꾸로 Reflexion은 RCI를 평가 단계 없이 정해진 횟수만큼 다시 시도하는 방법으로 소개한다. 두 방법이 어떤 피드백 신호를 쓰는지 비교하며 읽으면 좋다.
  • Madaan et al. (NeurIPS 2023), Self-Refine: Iterative Refinement with Self-Feedback. 저자들이 같은 계열의 최근 연구로 직접 언급하는 논문이다.