[GEN] 최신 LLM 발전 순서
[출처]
1. https://velog.io/@nellcome/Instruction-Tuning%EC%9D%B4%EB%9E%80
2. https://littlefoxdiary.tistory.com/101
- Zero-Shot and Few-Shot In-Context Learning => GPT3 - Language Models are Few-Shot Learners (2020)
- Instruction tuning => Finetuned Language Models Are Zero-Shot Learners: FLAN (2021)
- Reinforcement Learning from Human Feedback (RLHF) => Training language models to follow instructions with human feedback: InstructGPT (2022)
cf. Prompt Tuning => The Power of Scale for Parameter-Efficient Prompt Tuning (2021)
Self-Instruct => Self-Instruct: Aligning Language Models with Self-Generated Instructions (2022)
1. In-Context Learning
2018년 OpenAI는 GPT를 발표합니다.
이 때 GPT는 12개의 Transformer Decoder layers와 7000개가 넘는 책(4.6GB)을 통해 학습을 하였습니다.
이는 모델의 크기가 Pretrained Model의 성능에 영향을 준다라는 시사점을 내보였습니다.
이후 2019년 OpenAI는 GPT-2를 발표합니다.
기존 GPT와 달라진 점은 다음과 같습니다.
같은 아키텍처를 사용하지만 파라미터가 117M -> 1.5B로 크게 증가합니다.
학습데이터 또한 4GB -> 40GB(Reddit 수집)으로 크게 증가합니다.
GPT-2의 가장 큰 특징으로는 Zero-shot, Few-shot learning입니다.
GPT-2는 Task에 따른 Fine tuning 없이 기존 Task의 SOTA 모델들을 넘어섭니다.
이를 통해 잘 학습된 LLM 모델 하나로 모든 Task를 할 수 있을지도 모른다는 임팩트를 남깁니다.
이후 2020년 OpenAI는 GPT-3를 발표합니다.
GPT-3 또한 파라미터와 데이터를 크게 늘렸습니다.
파라미터는 1.5B -> 175B, 데이터는 40GB -> over 600GB로 크게 증가하였습니다.
GPT-3는 다음 그림과 같이 풀고자 하는 문제를 제시하기 이전에 여러 예시를 제시하여 문제의 Task를 특정합니다.
이는 새로운 Task를 배울 때 가중치 업데이트가 일어나지 않는 점에서 "in-context learning" 라고도 불립니다.
하지만 해당 방식의 한계점 또한 존재합니다.
바로 여러 스텝을 거쳐야 풀 수 있는 문제들과 같이 Prompt만으로 배우기 어려운 문제들입니다.
이러한 한계점을 해결하기 위해 Chain-of-Thought Prompting 방식이 등장합니다.
해결 방식을 step by step으로 제시함으로써 Model의 Prompt 이해도를 높입니다.
여기서 한 발자국 더 나아간 방식이 "Zero-shot chain-of-thought prompting"입니다.
이는 기존의 step by step 제시를 LLM inference 결과로 대체합니다.
2. Instruction Tuning
Instruction Tuning이란 구글의 FLAN(Finetuned Language Models are Zero-Shot Learners) 논문에서 처음 나온 개념입니다. LLM 모델을 Instruction 데이터셋을 통해 fine-tuning을 진행하고 이를 통해 zero-shot 성능을 높이는 방법입니다.
Instruction finetuning 등장 배경의 메인 키워드는 "Aligning"입니다.
이는 다음에 소개할 RLHF에도 등장하는 메인 키워드입니다.
기존 방식으로는 user의 의도와는 다른 답변을 주기 때문에 이를 finetuning으로 해결하려는 방법이 instruction finetuning이다.
이는 위 그림과 같이 Instruction, output의 pairs 데이터셋을 통해 학습을 진행합니다.
이 때 해당 데이터셋에는 다양한 종류의 Task가 instruction 형태로 들어 있습니다.
3. RLHF
참고하면 좋은 페이지:
- https://taeyuplab.tistory.com/10 (상세 설명)
- https://kyujinpy.tistory.com/79 (직관적 이해)
ChatGPT는 Instruction tuning 기법을 적용한 LM 모델에 Supervised Instruction tuning과 RLHF를 적용하여 만들어진 모델입니다.
해당 기술이 나오게 된 계기는 조금 더 인간의 취향에 맞는 답변을 얻기 위해서입니다.
RLHF는 instruction tuning보다 "alignment" 측면에서 뛰어나며 빠르게 연구되는 분야이기에 이러한 단점을 이겨낼 포텐셜이 존재합니다.
임의의 sample을 inference한 결과에 대한 human reward(사람의 평가)을 얻을 수 있을 때 결과에 대한 expected reward를 최대화 하고자 RL을 사용합니다. 즉, 이름 그대로 HF(Human Feedback = 사람의 평가)를 최대화 하기 위해 RL(강화 학습)을 사용합니다.
주요 특징 1)
human reward를 기반으로 학습을 진행하기에 결국 output에 대한 평가를 지속적으로 받아야합니다.
하지만 사람이 매번 참가하는 "human-in-the-loop"의 경우 학습의 비용이 너무 커지게됩니다.
그렇기에 Human Preference(=reward)를 예측하는 LM을 학습하여 사람 대신 평가를 진행합니다.
주요 특징 2)
ChatGPT 기준으로 40여명의 리뷰어가 점수를 매겼다고 합니다.
이러한 경우 리뷰어에 따라 기준이 애매모호 합니다.
그렇기에 모델을 학습할 때에는 점수가 아닌 등수를 매기는 형식으로 진행하였다고 합니다.
Step 1. Supervised Learning
원하는 의도와 맞게 학습을 진행하기 위해 데이터셋에서 적합한 데이터를 추출 후 Pre-trained LM에 지도 학습을 진행합니다.(Supervised Instruction Tuning)
학습을 위한 데이터셋을 수집하기 위해 다음과 같은 방법을 사용했습니다.
1) Labler or 개발자가 준비한 프롬프트와 직접 기록한 예상 답변
2) OpenAI API를 통해 문의한 프롬프트
해당 방법을 통해 데이터의 양은 적지만(12~15K) 고품질의 데이터 셋을 얻을 수 있었습니다.
이렇게 얻은 데이터셋을 통해 GPT 3.5 모델을 학습하였습니다.
in other words,
> 지시 프롬프트와 그에 대한 결과물로 이루어진 데이터셋을 정의 (demonstration dataset, 13K prompts)
- 프롬프트 데이터셋으로부터 지시 prompt를 샘플링 (예) 8살 아이에게 달착륙을 설명해보시오
- 라벨러는 프롬프트에 적합한 행동을 예시로 라벨링 (예) 몇몇 사람들이 달에 갔답니다 ~~
Step 2. Reward Model
학습된 모델이 생성한 여러 답변에 대해 레이블러가 랭킹을 매기고 이를 기반으로 강화학습 모델(RM)을 학습합니다.
이 때 모델은 (text, reward) 쌍으로 학습이 진행됩니다.
in other words,
Comparison dataset을 사용해 Reward Model(보상 모델) 학습
> Comparison dataset은 33K 개의 프롬프트로 이루어져 있으며 이를 Reward Model 학습에 적합하게 구성한 것
- comparison dataset은 프롬프트와 그에 따른 결과물들 (4-9개), 그리고 그 결과에 대한 선호도 순위로 구성됨
- 즉, 프롬프트가 주어질 때 Reward Model은 결과물들에 대해 사람의 선호도를 예측하는 방법을 학습
- 이때 사용한 프롬프트는 step 1의 demonstration dataset에서 사용한 것과 다름
Step 3. Reinforcement Learning (PPO)
모델과 RM을 함께 상호 작용하며 강화학습을 진행합니다.
해당 단계에서는 앞서 학습한 RM 모델의 reward를 통해 Model을 학습합니다.
- 학습 모델의 copy 모델에 weight를 freeze하여 준비한다.
- Frozen 모델과 학습 모델의 출력(text)간 KL divergence(출력 확률 차이)를 계산한다.
- 앞서 얻은 KL divergence와 RM 모델의 reward를 합쳐 Final reward를 생성한다.
- 이후 PPO 알고리즘에 따라 loss를 계산하여 모델 weight를 업데이트 합니다.
in other words,
: Step1의 SFT 모델을 Step2의 보상모델을 사용해 강화학습을 통해 추가 fine-tuning
> Proximal policy optimization algorithm(PPO) 사용
- Reward Model을 보상함수로 사용하여 정책을 최적화 (InstructGPT가 사람의 피드백을 얻는 방법)
> 강화학습을 통한 fine-tuning 과정은 다음과 같이 이루어진다 :
3-1) InstructGPT는 프롬프트를 보고, 그에 대한 결과 (completion)를 추론함
3-2) 이 결과물을 Reward Model이 평가하여 reward(보상)를 계산
3-3) 보상 값이 InstructGPT에게 주어지고, 모델은 정책을 업데이트하여 사람이 원하는 아웃풋에 더 가까운 결과를 내게 됨
요약하자면, 먼저 지시문에 따라 결과를 완성하는 초기 모델을 완성한 후,
사람의 feedback을 모사하는 보상 모델(reward model)을 확보하여
이를 통해 초기 모델이 사람이 더 선호하는 결과를 추론하도록 강화학습을 진행한 것!