NL-286, Self-refine: Iterative refinement with self-feedback, NeurIPS 2023

◼ Comment

  • 이 논문은 자기가 생성한 응답에 대한 피드백을 생성하고 다시 재생성하는 프레임워크를 제시한다
  • 즉 LLM은 처음부터 완벽히 생성 못하는 단점이 있고
    • 이를 지속적으로 피드백을 통해서 재생성하면 품질이 좋아진다는 의미이다
  • 피드백은?
    • few-shot으로 구체적인 실행가능한 피드백을 생성하라고 LLM 자기자신을 통해 생성한다
    • 구체적인 피드백이 아니라, 고정된 General한 피드백을 줘서 재생성하라고 하면, 효과는 있지만 구체적인 피드백보다 좋지는 않다는 것을 보여준다.
  • 재생성은?
    • 피드백과 입력/이전 출력을 활용하여 few-shot으로 프롬프트 줘서 재생성한다
  • 다양한 벤치마크에서, 평가결과 꽤 많이 향상됨을 보여준다
  • 반복될수록 성능은 향상하지만 점점 saturation 되는 경향이 있다고 함
  • 아쉬운 점은
    • openai 모델들을 api을 통해 실험을 한것 같은데, gpt3.5, chatgpt, gpt4에 대해 효과적이라고 입증한다
    • 오픈소스 모델은 pretrained Vicuna-13B 했더니 효과가 없었다는 점을 말하는데, 이 부분을 좀 더 광범위하게 실험했어야 하지 않나 싶다 (instructed model이나 다른 model family 등)
  • 나의 궁금증은
    • LLM이 만약 환각 응답을 생성했다면, 본인이 알까? 였는데 이 논문의 과정을 생각해보면 안다는 것이다.
    • 이 논문이 환각 연구는 아니지만, 환각 입장에서도 반복 생성을 하면 성능이 좋아질거 같고 비슷한 연구가 요즘에 다수 존재한다
    • 즉 처음에 Greedy decoding으로 생성한 것은 부정확할 수 있고, 이는 모델의 내재된 지식을 통해 충분히 좋은 방향으로 수정될 수 있음을 시사한다.
    • 처음부터 잘 생성할 수 있는 디코딩 전략은 무엇일까...

Abstract

인간과 마찬가지로, 대규모 언어 모델(LLM)은 항상 첫 시도에서 최적의 결과를 내지 못한다. 본 논문에서는 사람들이 글을 수정하는 방식에서 착안하여, 자기 피드백을 통해 LLM의 초기 출력을 반복적으로 개선하는 방법인 SELF-REFINE을 제안한다. 핵심 아이디어는 LLM이 초기 출력을 생성한 후, 같은 LLM이 이 출력에 대한 피드백을 제공하고 이를 기반으로 스스로 개선하는 과정을 반복하는 것이다. SELF-REFINE 방법은 지도 학습 데이터나 추가적인 훈련, 강화 학습 없이도 하나의 LLM만을 사용하여 생성, 피드백, 개선의 역할을 모두 수행한다.

본 연구에서는 대화 응답 생성부터 수학적 추론까지 총 7개의 다양한 과제를 대상으로 GPT-3.5와 GPT-4와 같은 최신 모델을 활용하여 SELF-REFINE의 성능을 평가하였다. 평가된 모든 과제에서, SELF-REFINE을 통해 생성된 출력은 기존의 일회성 생성 방식보다 인간 평가와 자동 평가 지표 모두에서 선호되었으며, 평균적으로 과제 성능이 약 20% 절대값만큼 향상되었다. 본 연구는 GPT-4와 같은 최신 언어 모델이라 할지라도, 테스트 시점에서 단순하고 독립적인 SELF-REFINE 접근 방식을 통해 추가적인 성능 향상을 얻을 수 있음을 보여준다.

1 서론(Introduction)

대규모 언어 모델(Large Language Models, LLM)은 일관성 있는 출력을 생성할 수 있지만, 복잡한 요구 사항을 처리할 때 자주 한계에 부딪힌다. 특히 대화 응답 생성과 같이 다면적 목표가 존재하는 작업이나, 프로그램의 가독성 향상과 같이 명확하게 정의하기 어려운 목표를 가진 작업들이 이에 해당한다. 이러한 상황에서 최신 LLM들은 이해 가능한 초기 출력을 생성할 수 있지만, 원하는 품질을 달성하기 위해선 추가적인 반복적 개선(iterative refinement)—즉, 생성된 후보 출력을 더 나은 출력으로 점진적으로 변환하는 과정—으로부터 이득을 볼 수 있다.

기존의 반복적 개선 방법은 일반적으로 도메인에 특화된 데이터에 의존하는 개선 모델(refinement model)을 학습시키는 방식이다(예: Reid and Neubig (2022); Schick et al. (2022a); Welleck et al. (2022)). 또한, 외부 감독(supervision) 또는 보상(reward) 모델을 활용하는 접근법도 있는데, 이러한 방법은 방대한 학습 데이터나 값비싼 인간 어노테이션(human annotation)을 필요로 하므로(Madaan et al., 2021; Ouyang et al., 2022), 항상 현실적으로 적용 가능하지는 않다. 이러한 한계는 광범위한 작업에서 사용할 수 있으면서도 많은 감독 데이터를 요구하지 않는 효과적인 개선 방법의 필요성을 시사한다.

반복적인 자기 개선(iterative self-refinement)은 인간의 문제 해결 과정에서 근본적인 특성이다(Simon, 1962; Flower and Hayes, 1981; Amabile, 1983). 

  • 반복적인 자기 개선이란 초기 초안을 생성한 후, 스스로 제공하는 피드백에 기반하여 초안을 점차적으로 수정하는 프로세스를 의미한다. 
  • 예컨대 동료에게 자료를 요청하는 이메일을 작성할 때, 처음엔 "자료를 최대한 빨리 보내주세요(Send me the data ASAP)."라고 직접적으로 요청할 수도 있지만, 작성자는 나중에 표현이 무례할 수 있음을 깨닫고 "안녕하세요 애슐리, 가능하실 때 자료를 보내주실 수 있을까요?(Hi Ashley, could you please send me the data at your earliest convenience?)"와 같이 수정할 수 있다. 
  • 코드 작성 시에도 프로그래머는 처음에는 '빠르게 대충' 구현을 한 후, 이후에 다시 코드를 효율적이고 가독성 있게 리팩토링(refactoring)할 수 있다. 
  • 본 논문에서 우리는 추가적인 훈련 없이도 LLM이 이러한 반복적 자기 개선을 수행하여 다양한 작업에서 더 높은 품질의 출력을 생성할 수 있음을 입증한다.

본 연구는 SELF-REFINE을 제안한다. SELF-REFINE은 **피드백(FEEDBACK)**과 **개선(REFINE)**이라는 두 가지 생성 단계를 반복적으로 번갈아 가며 고품질의 출력을 만들어낸다. 모델 M이 생성한 초기 출력을 동일한 모델 M에 다시 전달하여 피드백을 얻는다. 그런 다음 이 피드백을 다시 동일한 모델에 제공하여 이전 초안을 개선하게 된다. 이 과정은 미리 지정된 횟수만큼 반복하거나, 또는 모델 M이 더 이상 추가적인 개선이 필요하지 않다고 판단할 때까지 반복된다. 우리는 소수의 예시를 제시하는 few-shot 프롬프팅(Brown et al., 2020)을 사용하여 모델 M이 피드백을 생성하고, 그 피드백을 통해 출력을 개선하도록 안내한다. 

그림 1에서는 SELF-REFINE이 동일한 언어 모델을 사용해 피드백을 생성하고 출력을 개선하는 고차원적인 아이디어를 설명한다.

우리는 자연어 생성과 소스 코드 생성을 포함하여 다양한 도메인에 걸친 총 7개의 생성 작업에서 SELF-REFINE을 평가한다. 

평가 결과, SELF-REFINE은 강력한 LLM인 GPT-3.5(text-davinci-003 및 gpt-3.5-turbo; OpenAI; Ouyang et al., 2022)와 GPT-4(OpenAI, 2023)를 이용한 직접적 생성(direct generation) 대비 5~40%의 절대 성능 향상을 보였다. 

코드 생성 작업에서는 Codex(code-davinci-002; Chen et al., 2021)와 같은 강력한 코드 모델에도 SELF-REFINE을 적용했을 때 최대 13% 절대 성능 향상을 달성했다. 우리는 모든 코드를 공개하며, 이는 다른 LLM들에도 쉽게 확장될 수 있다. 요약하자면, 우리의 실험 결과는 LLM이 첫 시도에서 최적의 출력을 생성하지 못하더라도, 종종 유용한 피드백을 제공하고 이를 통해 자신의 출력을 향상시킬 수 있음을 보여준다. 다시 말해, SELF-REFINE은 추가적인 훈련 없이 하나의 모델만으로도 효과적으로 더 나은 출력을 얻을 수 있는 방법을 제공하며, 자기 피드백과 개선(iterative self-feedback and refinement)을 통해 이를 실현한다.

이 논문이 인용이 많이 된 이유가 있을법하군. 샘플링하고 재생성하는 프레임워크가 요즘 많던데, 이 논문이 좋은 레퍼가 될듯

2 SELF-REFINE을 이용한 반복적 개선(Iterative Refinement with SELF-REFINE)

입력 시퀀스가 주어졌을 때, SELF-REFINE은 초기 출력을 생성하고, 그 출력에 대한 피드백을 제공하며, 이 피드백을 바탕으로 출력을 개선한다. SELF-REFINE은 원하는 조건이 충족될 때까지 피드백과 개선을 반복한다. SELF-REFINE은 적절한 언어 모델과 세 가지 프롬프트(초기 생성용, 피드백용, 개선용)에 기반하며, 별도의 추가적인 훈련을 필요로 하지 않는다. SELF-REFINE의 개략적인 과정은 그림 1과 알고리즘 1에서 볼 수 있다. 이제, SELF-REFINE의 자세한 내용을 설명한다.

초기 생성(Initial generation)

입력값 xx, 생성 프롬프트 pgenp_{gen}, 모델 MM이 주어졌을 때, SELF-REFINE은 초기 출력 y0y_0을 다음과 같이 생성한다:

y_0 = M(p_{gen} \| x)

여기서 \| 기호는 연결(concatenation)을 나타낸다. 예컨대 그림 2(d)에서 모델은 주어진 입력에 대해 기능적으로 정확한 코드를 생성한다. 여기서 pgenp_{gen}은 작업에 특화된 few-shot 프롬프트(또는 지시문)를 나타내며, 이 프롬프트는 작업에 대한 입력-출력 쌍 x(k),y(k)\langle x^{(k)}, y^{(k)} \rangle을 포함한다.

피드백(FEEDBACK)

다음으로, SELF-REFINE은 동일한 모델 MM을 사용하여 출력에 대한 피드백 fbtfb_t를 생성한다. 이는 피드백 생성을 위한 작업별 프롬프트 pfbp_{fb}를 이용한다:

fb_t = M(p_{fb} \| x \| y_t)

직관적으로 피드백은 출력의 다양한 측면을 다룰 수 있다. 예를 들어, 코드 최적화 작업에서는 피드백이 코드의 효율성, 가독성, 전반적인 품질 등을 다룰 수 있다. 

여기서 프롬프트 pfbp_{fb}는 입력-출력-피드백 삼중쌍(input-output-feedback triples) x(k),y(k),fb(k)\langle x^{(k)}, y^{(k)}, fb^{(k)} \rangle 형태의 예시를 제공하며, 모델이 구체적이고 실천 가능한(actionable and specific) 피드백을 생성하도록 유도한다.

<예시 1>

입력(input): [...]

출력(output): [...]

피드백(feedback): [...]

---

<예시 2>

입력(input): [...]

출력(output): [...]

피드백(feedback): [...]

---

...

---

<현재 입력>

입력(input): [현재 입력 x]

출력(output): [현재 출력 y_t]

피드백(feedback):  # 모델이 이 부분을 생성하게 됨

---

위처럼 few-shot을 통해 모델이 실천가능한 피드백을 생성하도록 지시하게 하는 것이다

'실천 가능한(actionable)'이라는 말은 출력을 개선하는 데 유효한 구체적인 행동을 포함한다는 의미이다. '구체적(specific)'이라는 말은 출력에서 변경해야 할 구체적인 문구를 지목한다는 의미이다. 예컨대 그림 2(e)의 피드백은 “이 코드는 반복문(for loop)을 사용하는 무식한 방법(brute force)으로 느립니다. 더 나은 접근법은 공식 (n(n+1))/2(n(n+1))/2를 사용하는 것입니다.”라고 말한다. 이는 공식 사용이라는 명확한 행동을 제안하고 있으며, 반복문이라는 특정 요소를 지적하므로 구체적이다.

개선(REFINE)

다음으로, SELF-REFINE은 자신의 피드백을 기반으로 최신 출력을 개선하기 위해 다시 모델 MM을 사용한다:

y_{t+1} = M(p_{refine} \| x \| y_t \| fb_t)

예를 들어, 그림 2(f)에서 초기 출력과 생성된 피드백을 바탕으로 모델은 더 짧고 빠르게 작동하는 새로운 구현을 생성한다. 

여기서 프롬프트 prefinep_{refine}은 입력-출력-피드백-개선된 출력의 네 가지 요소로 이루어진 사중쌍(input-output-feedback-refined quadruples) x(k),yt(k),fbt(k),yt+1(k)\langle x^{(k)}, y^{(k)}_t, fb^{(k)}_t, y^{(k)}_{t+1} \rangle 형태의 예시를 제공하여, 피드백에 따라 출력을 개선하는 방법을 보여준다.

이것도 피드백처럼 few-shot 형태로 수정하라고 지시하는 형태인걸로 보임

SELF-REFINE의 반복 수행(Iterating SELF-REFINE)

SELF-REFINE은 FEEDBACK과 REFINE 단계를 원하는 종료 조건(stop condition)이 충족될 때까지 번갈아 수행한다. 

종료 조건 stop(fbt,t)stop(fb_t, t)은 미리 지정된 횟수 tt에서 종료하거나, 피드백에서 종료를 나타내는 지표(예: stop 점수)를 추출하여 결정된다. 

실제로, 프롬프트 pfbp_{fb}에서 모델이 종료 지표를 생성하도록 지시할 수 있으며, 종료 조건은 작업별로 결정된다.

이전의 반복 과정을 모델에 전달하기 위해, 과거의 피드백과 출력을 프롬프트에 계속 추가한다. 직관적으로 이는 모델이 과거의 실수에서 배우고 반복하지 않도록 도와준다. 보다 정확하게 표현하면, 위의 개선 식은 실제로 다음과 같이 표현된다:

y_{t+1} = M(p_{refine} \| x \| y_0 \| fb_0 \| \dots \| y_t \| fb_t)

마지막으로, 우리는 SELF-REFINE의 최종 개선된 출력 yty_t를 최종 결과로 사용한다.

알고리즘 1은 SELF-REFINE의 과정을 요약하여 보여주며, 그림 2에서는 대화 응답 생성(Dialogue Response Generation, Mehri and Eskenazi, 2020)과 코드 최적화(Code Optimization, Madaan et al., 2023) 과제에서의 예시를 보여준다. 

부록(Appendix) S에서는 다양한 작업에 대해 사용된 pgen,pfb,prefinep_{gen}, p_{fb}, p_{refine} 프롬프트의 예시를 제시한다. 

이 아이디어의 핵심은 SELF-REFINE이 동일한 하나의 언어 모델을 사용하여 출력을 생성하고, 피드백을 얻으며, 이를 바탕으로 개선까지 수행한다는 점이다. 이는 프롬프트 예시에 존재하는 감독(supervision) 정보에만 의존하는 방식이다.

generate-feedback-regenerate 이런 게 루프로 도는 것인데, LLM few-shot prompting으로 생성했다고 보면 될 듯. 자세한 프롬프트는 부록 S

3 평가 (Evaluation)

우리는 SELF-REFINE을 총 7개의 다양한 작업에서 평가하였다: 

  • 대화 응답 생성(Dialogue Response Generation, Mehri and Eskenazi, 2020), 
  • 코드 최적화(Code Optimization, Madaan et al., 2023), 
  • 코드 가독성 개선(Code Readability Improvement, Puri et al., 2021), 
  • 수학적 추론(Math Reasoning, Cobbe et al., 2021), 
  • 감정 전환(Sentiment Reversal, Zhang et al., 2015) 
  • 그리고 우리가 새롭게 소개하는 두 가지 작업인 약어 생성(Acronym Generation)과 제약 생성(Constrained Generation; Lin et al.(2020)의 난이도를 높인 버전으로, 3-5개가 아닌 20-30개의 키워드 조건을 요구)이다.

모든 작업에 대한 예시와 데이터셋 통계는 부록(Appendix) A의 표 4에서 제공된다.

3.1 SELF-REFINE 구현 방법 (Instantiating SELF-REFINE)

우리는 2장에서 설명한 높은 수준의 SELF-REFINE 구조를 다음과 같이 구현하였다. 

  • FEEDBACK(피드백)과 REFINE(개선)의 반복은 원하는 출력 품질이나 작업별 기준에 도달할 때까지 최대 4회 반복하였다. 
  • 다양한 모델 간 일관된 평가를 위해, ChatGPT나 GPT-4와 같이 지시사항을 잘 따르는 모델에서도 FEEDBACK과 REFINE을 모두 few-shot 프롬프트로 구현했다.

기본 LLM 모델(Base LLMs)

우리의 주 목표는 강력한 기본 LLM 모델의 성능이 SELF-REFINE을 통해 향상될 수 있는지를 평가하는 것이다. 따라서, SELF-REFINE을 적용하지 않은 동일한 기본 LLM 모델과 SELF-REFINE의 성능을 비교하였다. 

모든 작업에서 세 가지의 강력한 기본 LLM 모델을 사용하였다: 

  • GPT-3.5(text-davinci-003), ChatGPT(gpt-3.5-turbo), GPT-4(OpenAI, 2023).
  • 오픈소스 모델에서는 왜 안해봤을까? 
  • 코드 관련 작업에서는 추가적으로 Codex(code-davinci-002)를 사용하였다. 

모든 작업에서 GPT-3.5 또는 GPT-4는 기존 최고 성능(state-of-the-art)을 보여주었다. 

  • 기존 작업에서 프롬프트가 존재하는 경우(코드 최적화 및 수학적 추론 등)는 동일한 프롬프트를 사용하였고, 그렇지 않은 경우의 프롬프트 작성 방법은 부록(Appendix) S에서 자세히 기술하였다. 
  • 모든 설정에서 온도(temperature)를 0.7로 설정한 greedy decoding을 사용했다.

다음은 논문의 3.2 Metrics (평가 지표)3.3 Results (결과) 섹션을 빠짐없이 한글로 번역한 내용입니다.


3.2 평가 지표 (Metrics)

본 연구에서 사용한 평가 지표는 다음 세 가지로 나뉜다.

  • 작업 특화 평가 지표(Task-specific metric): 가능한 경우, 기존 연구에서 사용된 자동화된 평가 지표를 활용하였다. 예컨대, 수학적 추론(Math Reasoning)의 경우는 문제 해결률(% solve rate), 코드 최적화(Code Optimization)의 경우는 최적화된 프로그램의 비율(% programs optimized), 제약 생성(Constrained Generation)의 경우는 키워드 커버리지(coverage %)를 사용했다.

  • 인간 평가(Human-pref): 대화 응답 생성(Dialogue Response Generation), 코드 가독성 개선(Code Readability Improvement), 감정 전환(Sentiment Reversal), 약어 생성(Acronym Generation)과 같이 자동 평가 지표가 존재하지 않는 작업의 경우, 생성된 출력 일부에 대해 블라인드(blind) 방식으로 사람 평가자가 두 가지 출력 중 선호하는 출력을 선택하도록 하는 A/B 테스트 평가를 수행했다. 추가 세부 사항은 부록(Appendix) C에서 제공된다.

  • GPT-4 평가(GPT-4-pref): 인간 평가 외에도, 최근 연구들(Fu et al., 2023; Chiang et al., 2023; Geng et al., 2023; Sun et al., 2023)을 따라 GPT-4를 인간 평가를 대체할 수 있는 평가자로 사용했다. 실제 인간 평가와의 상관성이 높게 나타났다(감정 전환: 82%, 약어 생성: 68%, 대화 응답 생성: 71%). 코드 가독성 개선의 경우, GPT-4에 맥락에 따라 변수 이름이 얼마나 적절한지를 평가하도록 지시하였다(예: x=[] → input_buffer=[]). 추가 세부 사항은 부록(Appendix) D에서 제공된다.


3.3 결과 (Results)

표 1은 주요 평가 결과를 요약하여 보여준다.

  • SELF-REFINE은 모든 모델 크기에서 기본 모델(Base) 대비 일관되게 성능을 향상시켰으며, 모든 평가 작업에서 이전 최고 성능(state-of-the-art)을 뛰어넘었다. 
  • 예를 들어, 코드 최적화 작업에서 GPT-4+SELF-REFINE은 기본 GPT-4의 성능을 8.7% 절대값만큼 개선하여, 최적화 비율을 27.3%에서 36.0%로 향상시켰다. 
  • 신뢰 구간(confidence intervals)은 부록(Appendix) J에서 제공된다. 코드 관련 작업에서는 CODEX를 사용한 경우에도 비슷한 경향이 나타났으며, 해당 결과는 부록(Appendix) F에 기술되어 있다.

가장 높은 성능 개선을 보인 작업 중 하나는 제약 생성(Constrained Generation) 작업이었다. 

  • 이 작업은 모델이 최대 30개의 주어진 개념을 포함하는 문장을 생성해야 하는데, 최초 시도에서 일부 개념이 누락되는 경우가 많아 SELF-REFINE을 통해 반복적으로 수정할 수 있는 기회가 많기 때문이다. 또한 이 작업은 매우 많은 합리적인 출력이 가능한데, SELF-REFINE은 가능한 출력 공간을 효과적으로 탐색하는 데 유리하였다.

대화 응답 생성(Dialogue Response Generation), 감정 전환(Sentiment Reversal), 약어 생성(Acronym Generation)과 같이 선호도 기반의 작업에서도 SELF-REFINE은 특히 큰 성능 향상을 보였다. 

  • 예를 들어, 대화 응답 생성 작업에서 GPT-4의 선호도 점수는 SELF-REFINE을 적용할 때 49.2% 절대값(25.4% → 74.6%) 만큼 개선되었다. 유사하게, 다른 선호도 기반 작업에서도 모든 모델에 걸쳐 상당한 성능 향상을 관찰할 수 있었다.

수학적 추론(Math Reasoning) 작업에서 상대적으로 성능 개선이 적었던 이유는 오류를 정확히 식별하기 어려운 모델의 한계 때문으로 분석된다. 

  • 수학 문제에서의 오류는 미세하고, 때로는 특정 줄이나 잘못된 연산만으로도 발생할 수 있다. 게다가 일관성 있게 보이는 추론 과정은 LLM을 속여 “모든 것이 좋아 보인다(everything looks good)”고 판단하게 만들 수 있다(예: ChatGPT의 피드백은 94%의 경우에 “everything looks good”이었다). 부록(Appendix) H.1에서는 수학적 추론에서 SELF-REFINE이 외부 소스를 통해 수학 답변의 오류를 식별할 수 있을 경우 성능이 크게(5% 이상) 향상될 수 있음을 보인다.

기본 LLM 모델의 크기에 따른 성능 향상 정도를 비교하면, 일반적으로 GPT-4+SELF-REFINE이 GPT-3.5+SELF-REFINE이나 ChatGPT+SELF-REFINE보다 모든 작업에서 더 나은 성능을 보였다. 

  • 이는 심지어 GPT-4의 초기 성능이 GPT-3.5나 ChatGPT보다 낮았던 경우에도 동일한 경향을 나타냈다. 
  • 따라서 SELF-REFINE은 GPT-4와 같은 더 강력한 모델들이 표준적이고 일회적인 출력 생성 방식으로는 표현되지 못하는 잠재력을 최대한 활용할 수 있도록 돕는 것으로 보인다. 다른 강력한 baseline들과의 비교는 부록(Appendix) F에 추가로 제공된다.

모든 모델에서 높은 성능 향상을 보인 것은 꽤 놀라운 일이군

  • GPT4가 단순히 사용하면 성능이 안좋은 경우도 있는데, 결국 refine하면 제일 좋아진다는 것도 흥미로운듯
  • 근데 평가 점수가 어떤 점수이지? code,math 빼고는 GPT4 점수인거 같은데, 그래서 바이어스가 생긴 것일 수도 있긴함..

4 분석(Analysis)

SELF-REFINE의 세 가지 주요 단계는 피드백(FEEDBACK), 개선(REFINE), 그리고 이 둘을 반복적으로 수행하는 것이다. 본 절에서는 각 단계가 얼마나 중요한지에 대해 추가적인 실험을 통해 분석한다.

피드백 품질의 영향(The impact of the feedback quality)

피드백 품질은 SELF-REFINE에서 결정적 역할을 한다. 

피드백의 영향을 정량적으로 평가하기 위해, 특정하고 실천 가능한 피드백(actionable feedback)을 사용하는 SELF-REFINE과 두 가지 변형(일반적인 피드백을 사용하는 경우와 피드백 없이 단지 반복적으로 개선하는 경우)을 비교했다. 

  • 예컨대 코드 최적화(Code Optimization) 작업에서는, "반복문에서의 중복 계산을 피하라"와 같은 실천 가능한(actionable) 피드백이 문제를 명확히 지적하고 개선 방향을 제안하는 반면, 
  • "코드의 효율성을 높여라"와 같은 일반적(generic) 피드백은 구체적이지 않다. 
표 2는 피드백의 명확한 영향을 보여준다.

  • Generic feedback도 효과는 있지만, 문제를 명확히 지적하고 개선하는 방향의 피드백이 훨씬더 효과적임을 보여줌

코드 최적화의 경우, SELF-REFINE의 특정 피드백(27.5)에서 일반적 피드백(26.0)으로 성능이 약간 하락하고, 피드백이 없으면(24.8) 더욱 떨어진다. 이는 일반적인 피드백도 어느 정도는 도움이 되지만, 특정하고 실천 가능한 피드백이 더욱 우수한 결과를 가져온다는 것을 시사한다.

이러한 효과는 감정 전환(Sentiment Transfer)과 같은 작업에서 더욱 두드러지는데, 특정 피드백에서 일반적 피드백으로 바뀌면 성능이 43.2에서 31.2로 크게 하락하고, 피드백이 없으면 작업 자체가 실패한다. 유사하게, 약어 생성(Acronym Generation) 작업에서도 실천 가능한 피드백이 없으면 성능이 56.4에서 48.0으로 하락한다. 이러한 결과는 특정하고 실천 가능한 피드백이 SELF-REFINE에 얼마나 중요한지를 강조한다.

반복적인 FEEDBACK-REFINE 단계의 중요성(How important are the multiple iterations of FEEDBACK-REFINE?)

그림 4는 반복 횟수가 증가할수록 출력 품질이 평균적으로 향상됨을 보여준다. 

예컨대 코드 최적화 작업에서 초기 출력(y0)의 점수는 22.0이며, 3회의 반복 후(y3)에는 28.8로 향상된다. 마찬가지로 감정 전환 작업에서 초기 출력은 33.9이며, 세 번의 반복 후에는 36.8로 증가한다. 제약 생성(Constrained Generation)에서도 비슷한 향상 경향이 나타나는데, 초기 점수 29.0에서 세 번의 반복 이후 49.7로 증가한다. 

그림 4는 반복 횟수가 증가함에 따라 추가적인 개선 효과가 점점 줄어드는 경향(수익 감소)을 보여준다. 

  • 전체적으로, FEEDBACK-REFINE의 반복은 출력의 품질을 유의미하게 향상시키지만, 반복이 계속될수록 추가적인 개선의 여지는 자연스럽게 줄어든다.
  • 반복될수록 성능이 어퍼 바운드가 존재하는느낌. 이를 그래프로 그려줬다면 시각화가 더 잘됐을듯

그러나 다면적 피드백이 주어지는 약어 생성(Acronym Generation)과 같은 작업에서는 반복 횟수가 늘어나도 출력 품질이 항상 단조롭게 증가하지 않을 수 있다. 즉, 반복 도중 한 가지 측면이 개선되면서 다른 측면이 저하될 수도 있다. 이를 해결하기 위해 SELF-REFINE은 다양한 품질 측면에 대해 수치적 점수를 생성함으로써 균형 잡힌 평가를 가능하게 하고 적절한 출력을 선택하도록 했다.

단순히 여러 출력을 생성하는 것과 개선하는 것의 차이(Can we just generate multiple outputs instead of refining?)

SELF-REFINE이 성능을 높이는 이유가 반복적 개선 때문인지 아니면 단지 더 많은 출력을 생성했기 때문인지를 확인하기 위해, SELF-REFINE과 ChatGPT가 개선 없이 4개의 출력을 생성하는 경우를 비교했다. 이때 1 대 다(1 vs. k)의 평가를 통해 SELF-REFINE이 다수의 초기 출력보다 우수한지를 확인했다. 즉, SELF-REFINE의 출력이 이 다수의 초기 출력 전부보다 좋은지 평가하였다. 그림 6(부록 H)에 나타난 결과에 따르면, 난이도가 더 높은 1 대 다 평가에서도 SELF-REFINE의 출력이 모든 초기 출력들보다 사람들에게 더 선호되었다. 이 결과는 단지 여러 출력을 생성하는 것보다는 피드백에 따른 개선이 중요하다는 것을 보여준다.

더 약한(작은) 모델에서도 SELF-REFINE이 효과적인가?(Does SELF-REFINE work with weaker models?)

3.3절에서 수행한 실험은 가장 강력한 모델들을 대상으로 이루어졌다. 더 작은 모델에서도 SELF-REFINE이 효과적인지 확인하기 위해, 덜 강력한 기본 모델인 Vicuna-13B(Chiang et al., 2023)를 이용하여 SELF-REFINE을 실험했다. 

Vicuna-13B 모델은 초기 출력 생성은 가능했지만 개선 과정에서는 어려움을 겪었다. 

  • 특히 피드백을 요구되는 형식에 맞춰 일관성 있게 생성하지 못했고, Oracle(정확한) 피드백이나 하드코딩된 피드백을 제공하더라도 개선을 제대로 하지 못했다. 
  • Vicuna-13B 모델은 출력을 개선하는 대신 같은 출력을 반복하거나 무관한 환각(hallucinated) 출력을 생성했다. 
  • 이러한 이유로, 대화 기반으로 훈련된 Vicuna-13B 모델이 지시 기반(instruction-based) 모델에 비해 few-shot으로 주어진 테스트 과제에서 일반화 능력이 떨어지는 것으로 추정된다. 
  • 구체적인 예시 출력과 추가적인 분석은 부록(Appendix) G에 제공된다.
  • Instructed model을 왜 안해봤지? Vicuna-13B PLM만 쓴거 같은데, 다른것도 해봤으면 좋았을거 같음...

질적 분석(Qualitative Analysis)

SELF-REFINE이 생성한 피드백 및 개선 결과를 코드 최적화(Code Optimization, Madaan et al., 2023)와 수학적 추론(Math Reasoning, Cobbe et al., 2021)에서 총 70개의 샘플(성공 사례 35개, 실패 사례 35개)을 수동으로 분석했다. 두 작업 모두에서 피드백은 대부분 실천 가능한(actionable)이었으며, 문제의 측면을 정확히 지적하고 개선 방법을 제안했다.

SELF-REFINE이 원래의 출력을 개선하는 데 실패한 경우, 대부분은 잘못된 피드백 때문이었다. 

  • 실패 사례의 33%는 피드백이 오류 위치를 잘못 지적했고, 61%는 피드백이 잘못된 개선 방향을 제시했다. 
  • 오직 6%의 경우만이 좋은 피드백을 올바르게 반영하지 못한 개선 과정의 문제였다. 
  • 이는 정확한 피드백이 SELF-REFINE에서 매우 중요함을 시사한다.

성공 사례에서는 개선 모델이 정확하고 유용한 피드백을 통해 원래의 출력을 정확히 수정한 경우가 61%였다. 흥미롭게도 개선 모델은 피드백이 부분적으로 부정확할 때도 문제를 수정할 수 있는 경우가 33%나 되어, 부정확한 피드백에도 견고함(resilience)을 보였다. 

향후 연구에서는 개선 모델의 견고성을 더 분석하고, 이를 강화하는 방법을 탐구할 수 있을 것이다. 

그림 5에서는 SELF-REFINE이 브루트포스(brute-force) 접근법을 동적 프로그래밍(dynamic programming)으로 변환하여 프로그램의 효율성을 크게 개선한 예시를 보여준다. 

다른 데이터셋에 대한 추가 분석은 부록(Appendix) H에 있다.

5 관련 연구(Related work)

인간 및 기계가 생성한 자연어(Natural Language, NL) 피드백을 이용하여 출력을 개선하는 접근법은 다양한 작업에서 효과적임이 입증되었다. 예를 들어, 요약 생성(Scheurer et al., 2022), 스크립트 생성(script generation, Tandon et al., 2021), 프로그램 합성(program synthesis, Le et al., 2022a; Yasunaga and Liang, 2020) 및 기타 작업들(Bai et al., 2022a; Schick et al., 2022b; Saunders et al., 2022a; Bai et al., 2022b; Welleck et al., 2022)이 있다. 이러한 개선(refinement) 방법들은 피드백의 출처(source), 형태(format), 개선기(refiner)의 획득 방식에 따라 다르다. 관련 접근법을 요약한 표는 표 3에 제시되어 있으며, 추가적인 논의는 부록(Appendix B)을 참조하라.

피드백 출처(Source of feedback)

인간은 효과적인 피드백의 출처임이 잘 알려져 있다(Tandon et al., 2021; Elgohary et al., 2021; Tandon et al., 2022; Bai et al., 2022a). 그러나 인간 피드백은 비용이 크기 때문에, 일부 접근법들은 인간 피드백 대신 스칼라 보상 함수(scalar reward function)를 대체물로 활용하기도 한다(예: Bai et al., 2022a; Liu et al., 2022; Lu et al., 2022; Le et al., 2022a; Welleck et al., 2022). 

컴파일러(Yasunaga and Liang, 2020) 또는 위키백과 편집(Wikipedia edits, Schick et al., 2022b)과 같은 도메인 특화된 피드백을 사용하는 접근법들도 존재한다. 최근에는 대규모 언어 모델(LLM)을 활용하여 일반적인 도메인에서 피드백을 생성하는 연구도 이루어지고 있다(Fu et al., 2023; Peng et al., 2023; Yang et al., 2022). 하지만 본 연구는 동일한 LLM이 자기 자신이 생성한 출력에 대해 피드백을 생성하고, 동일한 LLM을 이용하여 출력을 개선하는 최초의 연구이다.

피드백의 표현 방식(Representation of feedback)

피드백의 표현 방식은 일반적으로 자연어(NL)와 비자연어(non-NL) 형태로 나눌 수 있다. 비자연어 피드백(non-NL feedback)은 인간이 제공한 예시 쌍(Dasgupta et al., 2019)이나 스칼라 보상(scalar reward; Liu et al., 2022; Le et al., 2022b) 형태로 제공될 수 있다. 본 연구는 NL 피드백을 사용하며, 이를 통해 같은 언어 모델이 직접 출력을 생성하고, 자기 자신에게 자연어 형태로 피드백을 제공하여 출력을 개선할 수 있게 한다. 이 방식은 GPT-4와 같은 사전 학습된(pretrained) 대규모 언어 모델을 쉽게 활용할 수 있도록 해준다.

개선기의 유형(Types of refiners)

피드백과 개선 결과의 쌍(pairs)을 이용하여 지도 학습(supervised) 기반의 개선기(refiner)를 학습하는 방법이 존재한다(Schick et al., 2022b; Du et al., 2022; Yasunaga and Liang, 2020; Madaan et al., 2021). 그러나 지도 학습 데이터를 모으는 것은 비용이 높기 때문에, 일부 방법들은 모델이 생성한 데이터를 이용하여 개선기를 학습하기도 한다(Welleck et al., 2022; Peng et al., 2023). 다만 이 경우 개선기를 각 도메인에 대해 별도로 학습해야 하는 단점이 존재한다. 또한 Yang et al.(2022)는 이야기 생성(story generation)을 위한 피드백과 개선 프롬프팅 방식을 제시하였다. 본 연구에서는 별도의 개선기를 학습하지 않고, 동일한 모델을 개선기와 피드백 제공자로 사용하여 여러 도메인에 걸쳐 효과적인 결과를 얻을 수 있음을 보인다.

비(非)개선 기반 강화학습(RL) 접근법(Non-refinement reinforcement learning (RL) approaches)

명시적인 개선 모듈(refinement module)을 두는 대신, 스칼라 보상 함수를 직접 최적화하는 방식으로 피드백을 반영하는 대안적 접근법도 존재한다. 예를 들어 강화 학습(reinforcement learning)을 활용한 접근법이 대표적이다(Stiennon et al., 2020; Lu et al., 2022; Le et al., 2022a). 이 방법들은 본 논문에서 제안한 SELF-REFINE(더 일반적으로는 개선 기반 접근법)과 다음과 같은 측면에서 차이를 보인다. 우선 강화학습 방법은 중간 생성 과정에서 피드백에 직접 접근하지 못하고 최종 결과만을 평가하여 학습한다. 또한 이러한 강화학습 접근법들은 SELF-REFINE과 달리 모델의 파라미터(parameter)를 직접 업데이트해야 한다.

6 한계점 및 논의 (Limitations and Discussion)

본 연구의 주된 한계점은, 기본으로 사용하는 언어 모델이 충분한 few-shot 모델링 능력 또는 지시사항(instruction)을 따르는 능력을 가져야 한다는 점이다. 이를 통해 별도의 지도 학습(supervised learning) 없이도 모델이 자체 피드백을 제공하고, 이를 기반으로 출력을 개선할 수 있다.

또한 본 연구의 실험에 사용된 모델(GPT-3.5, ChatGPT, GPT-4 및 CODEX)은 오픈소스가 아닌 언어 모델이다. 기존 문헌(Ouyang et al., 2022)에서는 이러한 모델들의 구체적인 세부 사항(사전 훈련 데이터(pretraining corpus), 모델 크기, 모델 편향 등)에 대한 정보가 충분히 공개되어 있지 않다. 또한 이 모델들은 무료로 사용 가능하지 않으며, 연구 목적으로 사용하려면 일정한 비용이 요구된다. 그러나 우리는 실험의 재현성을 보장하기 위해 코드와 모델 출력 결과를 공개한다.

본 연구의 또 다른 한계점은 모든 실험이 영어로 작성된 데이터셋만을 대상으로 수행되었다는 점이다. 다른 언어에서는 현재 사용된 모델이 동일한 효과를 제공하지 못할 수 있다.

마지막으로, 악의적인 사용자가 프롬프팅(prompting) 기법을 활용하여 모델이 유해하거나 위험한 출력을 생성하도록 유도할 가능성도 존재한다. 본 연구에서 제안한 방법은 이러한 악용 가능성에 대해 명시적으로 방어 수단을 갖추고 있지 않다.

LLM의 능력에 의존하는 형태.. 실험은 게다가 클로즈 모델들에서 효과 있다고 보여진것

7 결론 (Conclusion)

본 논문에서는 대규모 언어 모델(LLM)이 자기 자신의 출력에 대해 반복적으로 피드백을 제공하고 개선할 수 있도록 하는 새로운 접근법인 SELF-REFINE을 제안하였다. SELF-REFINE은 단일 언어 모델(LLM) 내에서 작동하며, 별도의 훈련 데이터나 강화 학습을 필요로 하지 않는다. 우리는 SELF-REFINE의 단순성과 활용 가능성을 다양한 작업에서 입증하였다. 본 연구는 다양한 작업에서 SELF-REFINE의 잠재력을 제시함으로써, 실제 환경에서 인간의 창의적 프로세스가 수반하는 비용을 절감할 수 있는 대규모 언어 모델(LLM)의 발전 및 응용 가능성을 높이기 위한 지속적인 탐구와 개발에 기여한다. 우리는 본 연구에서 제안한 반복적인 접근법이 이 분야의 추가적인 연구를 촉진할 수 있기를 희망한다. 이를 위해 우리는 코드, 데이터 및 프롬프트를 모두 공개하며 다음 웹사이트에서 제공한다: https://selfrefine.info/.

Reference

댓글