SJ_Koding

[LLM] 적은 데이터로 fine-tuning하자! LIMA: Less Is More for Alignment 리뷰 (Meta, 2023) - 上편 본문

LLM

[LLM] 적은 데이터로 fine-tuning하자! LIMA: Less Is More for Alignment 리뷰 (Meta, 2023) - 上편

성지코딩 2024. 5. 3. 11:06

LLM을 파인튜닝 할 일이 생겼는데, 무엇보다 새로운 도메인에서 잘 추론할 수 있도록 하기위해 데이터셋이 당연히 많아야 한다고 생각했었다. 예를 들어 Function calling기능을 수행할 때, Function을 어느 prompt에서 호출할 지 잘 알기 위해서는 당연히 수많은 데이터셋으로 이를 구별시켜야 한다고 생각했다.

그런데, 이 생각이 편향된 생각임을 깨닫게 된 논문이 Meta에서 발표한 LIMA: Less Is More for Alignment(2023) 논문이다.

 

Abstract

저자는 LLM이 훈련되는 두 단계에 대해 설명하고 있다. 첫 번째는 unsupervised pretraining으로 raw text로부터 general-purpose representations을 학습한다는 것이고, 두 번째는 대규모 instruction tuning과 강화학습으로 최종 작업과 사용자 선호에 더 잘 맞도록 모델을 조정하는 것이다.

이 논문에서는 LIMA라는 LLaMa-65B 기반(모델 구조는 동일) 모델을 소개하며, 해당 모델은 upervised loss를 사용하여 1,000개의 정밀하고 엄선된 prompt와 response만으로 fine tuning된 모델이다. (여기서 fine-tuning이 full-param tuning인지, LoRA를 통한 튜닝인지 언급되어있지 않아, full-param으로 가정) 이 과정에서 강화학습이나 human preference modeling은 진행하지 않았다고 한다.

LIMA는 소수의 예제만으로도 놀라울 정도로 강력한 성능을 보여주며, 여행 일정 계획이나 역사에 대한 추측 등 복잡한 쿼리도 우수한 성능을 보인다고 주장한다. 또한 훈련 데이터에 나타나지 않은 새로운 작업(Zero-shot)에 대해서도 잘 일반화한다.

 

1. Instruction

LM은 general-purpose representations을 학습하여 거의 모든 언어 이해나 생성 작업에 전이할 수 있도록 pretrained된다. 이를 위해 대규모 다중 백만 예제 데이터셋을 사용하는 instruction tuning과 최근에는 수백만 명의 human annotators와의 상호작용을 통해 수집된 human feedback에서 배우는 강화 학습 (RLHF)방법이 제안되었다. 기존의 alignment방법은 ChatGPT수준의 성능을 달성하기 위해 상당한 계산량과 데이터가 필요한데, LIMA는 강력한 pretrained LM이 주어진 경우, 단지 1,000개의 엄선된 train sample로 fine-tuning 함으로써 놀라운 성능을 달성 할 수 있다는 것을 보여준다.

LIMA는 모델이 사용자와 상호 작용하는 스타일이나 형식을 학습하는 간단한 과정을 통해 alienment가 이루어질 수 있다는 가설을 세웠다.해당 가설을 검증하기 위해 실제 user prompt와 high quality response를 대략적으로 모방하는 1,000개의 예제를 큐레이션 했다. LIMA는 Stack Exchange와 wikiHow와 같은 커뮤니티 포럼에서 상위 750개의 질문과 답변을 품질과 다양성을 기준으로 선정했다. 이를 통해  1,000개로 fine-tuning된 pretrained LLaMA-65B인 LIMA가 만들어졌다.

300개의 어려운 test prompt를 사용하여 LIMA를 비교실험 했다. RLHF로 훈련된 OpenAI의 Davinci003과 52,000예제로 훈련된 Alpaca의 65B 매개변수 복제 모델보다 LIMA의 성능이 우수했다.(But, GPT-4, Claude, Bard보다는 대체로 못함) 

LIMA는 데이터 양을 늘리는 것 보다 프롬프트 다양성을 늘리면서 데이터 품질을 최적화할 때 더 큰 이득이 있음을 밝혀냈다. 또한 multi-turn 데이터가 전혀 없음에도 30개만 추가로 학습했더니 성능이 대폭 향상되기도 했다.

2. Alignment Data

LIMA는 "Superficial Alignment Hypothesis" 가정을 정의했다: model의 knowledge와 capabilities는 전적으로 pretraining을 통해 학습 되며, alignment는 사용자와 상호작용할 때 어떤 subdistribution 형식을 사용해아하는지를 학습한다는 가정이다.

만약, 위 가정이 맞고 alignment가 주로 학습 스타일에 관한 것이라면, Superficial Alignment Hypothesis의 추론은 다소 적은 수의 예제로 pretrained LM을 충분히 tuning할 수 있다고 주장한다.

이 목적을 위해, 스타일적으로 서로 aligned한 출력(응답)을 가지지만, 입력(프롬프트)은 다양한 1,000개의 prompt와 responses로 이루어진 데이터셋을 수집한다 (Figure 10 참고). 구체적으로는, 도움이 되는 AI asistant 스타일의 출력을 추구한다. 

또한 300개의 프롬프트로 이루어진 테스트세트와 50개의 개발 세트도 수집했다. 사용된 데이터 소스는 하단 Table 1을 참고하자.

 

Table 1. 사용된 데이터셋 소스 (750K tokens, split over exactly 1,000 sequences)

 

2.1 Community Questions & Answers

LIMA는 세 개의 커뮤니티 (Stack Exchange, wikiHow and Pushshift Reddit)에서 데이터를 수집했다. 대체로 Stack Exchange와 wikiHow에서의 답변은 도움이 되는 AI 에이전트의 행동과 잘 맞아 자동으로 추출할 수 있었다고한다.

반면에 높은 투표를 받은 Reddit의 답변은 유머러스하거나 장난을 치는 경향이 있어 더 수동적인 접근이 필요했다.

Stack Exchanged

스택 오버플로가 속한 커뮤니티. 좋아요 기능이 탑재되어있다. LIMA는 품질과 다양성을 모두 통제하고 우선 STEM 관련 75개(프로그래밍, 수학, 물리학)와 그 외 99개 (영어, 요리, 여행 등)로 나누었다. 이후 다음 각 세트에서 200개의 질문과 답변을 \tau = 3의 temperature를 사용하여 다양한 도메인의 균일한 샘플을 얻기 위해 샘플링했다. 각 Exchange사이트 내에서, 본문 없이 제목만으로 자체 완결성이 있는 가장 높은 점수들의 질문을 선택한다. 그리고 각 질문에 대해 가장 높은 점수를 받은 답변을 선택하며 이는 최소 10점 이상이다. AI assistant 스타일에 부합하기 위해, 너무 짧은 (1200자 미만), 너무 긴(4096자 이상), 1인칭("I", "my")으로 작성된 답변이나 다른 답변을 언급하는 답변을 자동으로 필터링했다. 또한 링크, 이미지, HTML태그들을 response에서 제거하고 코드 블록과 리스트만 유지했다. Stack Exchange 질문들은 제목과 설명을 모두 포함하므로, 일부 예시에서는 제목을 prompt로, 다른 예시에서는 설명을 prompt로 무작위 선택했다.

WikiHow

wikiHow는 다양한 주제에 대한 240,000개 이상의 방법론 기사를 특징으로 하는 온라인 wiki style의 출판물이다. 다른 wiki사이트처럼 누구나 접근 가능하지만, article 는 엄격하게 통제되어 대부분 고품질의 내용을 유지한다. wikiHow에서 200개의 article을 샘플링하며, 다양성을 보장하기 위해 카테고리 19개에서 선택했고 제목을 prompt로 ("오믈렛을 어떻게 요리하나요?") 그리고 기사의 본문을 response로 사용한다.

The Pushshift Reddit Dataset

알고있는 Reddit. LIMA는 Reddit의 글들이 종종 재치있고 비꼬는 댓글이 진지하고 유익한 댓글보다 더 많은 투표를 받는 경우가 있었기 때문에, 샘플을 r/AskReddit과 r/WritingPrompts라는 두 개의 부분 집합으로 제한하고 각 커뮤니티에서 가장 많이 투표받은 게시물 내에서 수동으로 예제를 선택했다. r/AskReddit에서는 본문 없이 제목만 있는 70개의 자체 완결적인 prompt를 찾아 test set으로 사용한다. 이유는 상위 답변이 반드시 신뢰할 수 있는 것은 아니기 때문이다.

r/WritingPrompts는 fiction stroy의 전제를 포함하고 있고, 이를 창의적으로 완성하도록 장려받는다. 예를 들어 Love poem, Science fiction story와 같은 주제를 포괄하는 150개의 prompt와 high-quality response dataset을 찾아 train-set에 추가하였다. 

2.2 Manually Authored Examples

데이터를 온라인 커뮤니티에서 질문된 것 이외에도 다양화를 위해, 저자들은 직접 예제 문장을 만들었다. 이를 위해 두 그룹의 저자 (Group A, Group B)를 지정하여 각각 250개의 prompt를 만들게 한다. 해당 prompt들은 저자들의 관심사나 그들의 친구들의 관심사에서 영감을 받아 작성된다.

Group A에서는 200개의 프롬프트를 train set으로, 50개를 development set으로 선택했고, Group B에서는 문제가 있는 프롬프트를 필터링한 후 남은 230개를 Test set으로 사용한다.

train set으로 사용될 200개의 prompt에는 질 높은 답변을 추가로 제공하며, 해당 답변들은 연구자들이 직접 작성했다. 대신, 답변 작성 시에 일관된 톤을 유지하고 일관된 톤이란 것은 질문에 대한 인정과 함께 답변을 제공하는 형태를 의미한다.

초기 실험 결과, 이러한 일관된 형식이 모델 성능을 개선하는 것으로 나타났으며, 이는 모델이 단계별로 사고를 형성하는 데 도움을 줄 수 있다고 추측했다. 해당 접근은 "Let's think step-by-step"와 같은 prompt로 지원된다.

또한 일부 toxicity나 malevolence(악의)가 있는 13개의 train prompt를 포함한다. 저자는 command를 부분적으로 또는 완전히 거부하는 response를 신중하게 작성하고, assistant가 왜 이에 따르지 않을지를 설명한다. Test셋에도 비슷한 문제를 가진 30개의 prompt가 있으며, 이는 섹션 4.3에서 분석한다. 수동으로 작성한 sample외에도, 저자는 Super-Natural Instructions에서 50개의 훈련 예제를 샘플링했다. 구체적으로, summarization, paraphrasing, style transfer과 같은 50개의 자연어 생성 작업을 선택하고, 각 작업에서 무작위로 하나의 sample을 선정한다. (일부 예제는 약간 수정하여 위에서 언급한 200개의 샘플의 스타일과 일치화 시킴) 

Super-Natrual Instructions에서의 작업 분포가 잠재적 사용자 primpt의 분포와 다르다는 것이 분명하지만, 저자는 이 작은 샘플이 train sample전반에 다양성을 추가하고 모델의 robust를 증가시킬 수 있다는 것이라고 주장한다.