Abstract:
- 이 논문은 사전 학습된 대형 언어 모델(예: GPT-3)에게 ’사용자 지시사항(instruction)’을 잘 수행하도록 추가로 학습시키는(Instruction Tuning) 방법을 제안함.
- 기존에는 사람이 직접 작성한 지시사항·데이터를 사용해 모델을 미세 조정하는 접근이 많았지만, 이 방식은 데이터의 규모나 다양성이 제한적이어서 모델의 범용성을 충분히 확보하기가 어려웠다는 문제가 있었음.
- SELF-INSTRUCT의 핵심 아이디어:
- 모델 자체 생성 데이터 활용(bootstrapping):
- 사람이 작성한 지시사항이 아닌, 모델 자체가 만들어낸(generated) 지시사항과 입력-출력 샘플을 활용해서 모델을 다시 학습함.
- 이 과정에서 모델이 생성한 결과물 중 무의미하거나 너무 유사한 것은 제거하고, 유효한 데이터만 남겨서 재학습 데이터셋으로 활용한다.
- 실제 성능 향상:
- 해당 기법을 ‘vanilla GPT-3(아직 지시사항 튜닝이 되지 않은 모델)’에 적용하면, SUPER-NATURALINSTRUCTIONS 벤치마크에서 원본 GPT-3 대비 33% 절대 향상을 달성했다고 함.
- 이는 OpenAI가 비공개 사용자 데이터와 사람의 정제된 레이블(인간 피드백)을 사용해 만든 InstructGPT와 거의 비슷한 수준임.
- 추가로, 전문가가 작성한 새로운 유형의 지시사항 세트로 모델을 평가했을 때, SELF-INSTRUCT를 이용해 튜닝한 GPT-3는 기존의 공개 지시사항 데이터로 학습한 모델보다 훨씬 좋은 성능을 보여주었고, InstructGPT와는 약 5% 차이만 남길 정도로 근접한 결과를 얻었음.
- 모델 자체 생성 데이터 활용(bootstrapping):
Introduction:
- 저자들은 SELF-INSTRUCT라는 ‘반(半)자동화된(Semi-Automated) 지시사항 튜닝 기법’을 제안함:
- 소수의 사람이 작성한 지시사항(Seed Task 세트)를 먼저 준비함. (논문에서는 175개 정도)
- 모델(예: GPT-3)이 이 seed 지시사항들을 참고하여 새롭고 다양한 지시사항(Tasks/Instructions)을 스스로 생성
- 모델이 생성한 지시사항별로, 입력(Input)-출력(Output) 예시도 모델이 다시 만들어낸 뒤 의미가 부족하거나 반복되는 지시사항/예시를 자동으로 필터링해 제거
- 남은 유효 데이터를 모아서 다시 모델을 미세 조정
- 이러한 과정을 여러번 반복해서 수만-수십개에 달하는 대규모 지시사항 데이터셋을 확보하고 파인튜닝함.
- 데이터 합성 -> 파인튜닝 과정을 여러 라운드를 걸쳐서 함.
Self Instruction Method - 자동으로 지시사항 데이터를 생성하는 파이프라인:
- ELF-INSTRUCT의 데이터 생성 파이프라인은 다음 네 가지 주요 단계로 구성됨:
- 지시사항 생성 (Instruction Generation)
- 분류 작업 식별 (Classification Task Identification)
- 입출력 예시 생성 (Instance Generation)
- 저품질 데이터 필터링 및 후처리 (Filtering and Postprocessing)
- 지시사항 생성 (Instruction Generation):
- 초기 소수의 사람이 작성한 지시사항(seed instructions)을 바탕으로 새로운 지시사항을 생성하여 작업 풀(task pool)을 확장하는 단계.
- 시드 데이터 초기화: 작업 풀을 175개의 작업(각 작업당 1개의 지시사항과 1개의 예시)으로 시작함. 이걸로 부트스트래핑 접근으로 새로운 데이터를 합성함.
- 매 단계마다 작업 풀에서 8개의 지시사항을 샘플링함. 이 중 6개는 사람이 작성한 지시사항이고, 2개는 이전 단계에서 모델이 생성한 지시사항임. 이는 데이터의 다양성을 높이기 위함입니다.
- 이렇게 샘플링한 지시사항을 이용해서 새로운 지시사항을 만드는거임. Few-shot 을 이용해서.
- 부트스트래핑 방식: 모델이 기존 지시사항의 패턴을 학습하여 새로운 지시사항을 생성함.
- 프롬프트 템플릿: 지시사항 생성을 위한 특정 프롬프트 형식(Table 5 참조)을 사용함.
- 분류 작업 식별 (Classification Task Identification) :
- 생성된 지시사항이 분류 작업(classification task)인지 비분류 작업(non-classification task)인지 식별함. 이는 출력 예시가 다르기 떄문임.
- 입출력 예시 생성 (Instance Generation):
- 식별된 지시사항에 대해 적절한 입력-출력 예시를 생성하여 각 작업을 구체화함.
- 지시사항에 맞는 입력과 출력 모두 LLM 이 생성함.
- 지시사항이 분류인지, 비분류인지에 따라서 예시 생성 접근 방법이 다름:
- 입력 우선 접근법 (Input-first Approach) - 비분류일 경우:
- 모델에게 먼저 입력 필드를 생성하도록 지시한 후, 해당 입력에 대한 출력을 생성함.
- 출력 우선 접근법 (Output-first Approach) - 분류 작업일 경우:
- 분류 작업의 경우, 먼저 가능한 클래스 라벨을 생성하고, 각 클래스 라벨에 조건화된 입력을 생성함.
- 입력 우선 접근법 (Input-first Approach) - 비분류일 경우:
- 저품질 데이터 필터링 및 후처리 (Filtering and Postprocessing):
- 생성된 지시사항과 예시 중에서 품질이 낮거나 중복된 데이터를 제거하여 데이터셋의 품질과 다양성을 유지함.
- 유사도 기준: 새로운 지시사항이 기존 지시사항과 ROUGE-L 유사도 0.7 미만일 경우에만 작업 풀에 추가함. 이는 지시사항의 다양성을 유지하기 위함임.
- 특정 키워드 제거: “image”, “picture”, “graph” 등의 키워드를 포함하는 지시사항은 텍스트 언어 모델이 처리하기 어려울 수 있으므로 제외함. (멀티 모달이었으면 제거 안했을듯)
- 입출력 예시 필터링:
- 중복 제거: 동일한 지시사항에 대해 동일한 입력-출력 쌍이 반복되지 않도록 함.
- 유효성 검사: 지시사항이 너무 길거나 짧거나, 출력이 입력을 반복하는 경우 등을 기준으로 필터링함.
- 모델이 좀 더 견고하게 만들기 위해서 다양한 프롬프트 템플릿을 사용하기도 한다고 함:
- 예를 들면 Task, Input, Output 이라는 prefix 를 쓴 것도 있지만 안쓴것도 있게.
Data Generation 을 위한 Prompt Template:
Data 다양성을 위한 노력:
- 여기서는 지시사항을 얼마나 다양하게 구성할 지 노력함:
- 이를 위해 생성된 지시사항이 어떤 유형으로 구성되어 있으며, 그 다양성이 어느 정도인지를 이해하기 위해 동사-명사 구조를 분석한다.
- 방법론적으로는 Berkeley Neural Parser 사용. 이는 지시사항의 문법 구조를 분석하는 도구로, 주로 문장의 주된 동사와 그에 직접 연결된 명사를 추출하는 데 사용됨.
- 이걸 사용해서 각 지시사항에서 루트(문장의 주된 동사)와 그에 가장 가까운 첫 번째 직접 목적어를 추출한다.
- 이렇게 구조적인 분석을 해보니 전체 52,445개의 지시사항 중 26,559개(약 절반)는 단순한 동사-명사 구조를 가지고 있었다고 함. 즉 다양한 의도와 텍스트 형식을 가진 지시사항이 생성되었음을 확인할 수 있었음.
- 그리고 생성된 지시사항이 초기 시드와 얼마나 다른지 ROUGE-L 을 이용해서 판단했다고 함.
- ROUGE-L 은 Longest Common Subsequence (LCS) 기반으로 두 텍스트를 비교함. 즉 두 텍스트의 가장 긴 공통 수열을 찾는거임.
- ROUGE-L 은 단어의 순서와 위치에만 의존. 의미적 유사성을 반영하지 못함.
Data 품질을 위한 노력:
- 데이터의 양과 다양성이 충분하다고 해서 반드시 데이터의 품질이 보장되는 것은 아님. 저품질의 데이터는 모델의 학습에 부정적인 영향을 미칠 수 있다.
- 품질 평가 방법:
- 샘플링 크기: 총 52,445개의 지시사항 중 무작위로 200개의 지시사항을 선택함.
- 인스턴스 선택: 각 지시사항에서 무작위로 1개의 입력-출력 인스턴스를 선택하여 총 200개의 인스턴스를 평가 대상으로 삼음.
- 평가자: 전문가 주석자(논문의 저자 중 한 명)가 평가를 수행함.
- 평가 기준:
- 지시사항의 의미성: 지시사항이 명확하고 실행 가능한지 여부
- 인스턴스 입력의 적합성: 입력이 지시사항에 부합하고, 적절한 형태인지 여부.
- 인스턴스 출력의 정확성: 출력이 지시사항과 입력에 적절히 응답하는지 여부.
- 평가 결과:
- 대부분의 지시사항: 의미 있는 지시사항이 많이 생성되었다고 함.
- 생성된 인스턴스: 일부 인스턴스는 노이즈(오류)를 포함하고 있었지만, 이는 합리적인 범위 내였다고 함.
- 데이터 품질 검사를 위해 무작위 샘플링을 통한 검사를 했다고 함.
Self Instruct 방법에서 Data Size 와 Quality 가 파인튜닝에 미치는 영향:
- 데이터 크기가 증가할수록 모델의 성능이 일관되게 향상됨. 하지만 16K 지시사항 이후: 성능 향상이 거의 멈추는 경향을 보였다고 함.
- 스케일링 법칙에서 데이터 규모가 일정 단계를 넘어서면 성능 향상이 떨어짐. 그래서 이때는 모델을 더 키워야함.
- 모델의 성능 향상을 위해서는 단순히 데이터의 양을 늘리는 것만으로는 한계가 있으며, 다양한 유형의 지시사항 데이터를 결합하는 것이 더 효과적일 수 있음을 시사함.
- 그리고 데이터를 생성하는 것도 일반 GPT-3 보다 뛰어난 InstructGPT 활용했더니 성능이 더 잘나왔다고 함. 일부 데이터만 변경했는데도 10% 정도 성능 향상이 있었다고.
'Generative AI > Fine-tuning' 카테고리의 다른 글
Reinforced Self-Training (ReST) for Language Modeling (0) | 2025.01.22 |
---|---|
Magicoder: Empowering Code Generation with OSS-INSTRUCT (0) | 2025.01.22 |
WizardLM: Empowering Large Language Models toFollow Complex Instructions (0) | 2025.01.21 |
Fine-tuned Language Models are Zero-shot Learners (0) | 2025.01.20 |
Self-Play Fine-Tuning Converts Weak Language Models to Strong Language Models (0) | 2025.01.16 |