About Llama2
- arXiv 논문 링크
- 원 리뷰어의 링크
- 오픈소스 LLM SOTA를 달성하였고 ChatGPT-0301 (gpt-3.5-turbo)버전과 성능이 유사
- 오픈소스 LLM 중 한국어를 제일 잘하지만, 여전히 GPT-4 대비 아쉬움
- GPT-3.5, GPT-4와 비교했을 때 방법론적으로 거의 유사하며 어텐션 변경, 반복적 RLHF 수행, PPO알고리즘 디테일 변경 등이 다름
- Data Quality is All you Need.
좋은 데이터를 생성할 수 있으며, 모델 아웃풋의 품질을 명확히 판별하는 좋은 라벨러가 중요
- LLM의 Pre-training은 500억 이상이 소모. 대기업만 하는 것이니 스타트업은 하면 안됨.
- Meta는 Closed AI와 다르게 사회에 기여하고 연구를 촉진시키기 위해 llama2 액세스를 책임감 있게 오픈
- 스타트업은 Llama2로 Parameter Efficient Fine-Tuning (PEFT)하여 specific domain에서의 성능을 더욱 개선시켜 LLM specialist를 만들어야함
1. Introduction
llama2 (7B, 13B, 70B), llama2-chat (7B, 13B, 70B) 총 6개의 버전이 릴리즈
- llama2는 llama1 대비 publicly available data를 40% 가량 추가 사용
- context length가 2048에서 4096으로 증가
- 7B, 13B, 70B을 릴리즈. 34B도 학습했지만 safety 문제로 릴리즈 X
- llama2-chat은 llama2를 파인튜닝한 버전으로 대화 기반 사용에 최적화. 이 모델 또한 7B, 13B, 70B을 릴리즈.
2. Pre-training
- 최적화된 auto-regressive transformer
- Robust data cleaning
- Data mixes
- Trained on 40% more data
- 메타의 프로덕트 데이터는 사용하지 않고 공개적으로 사용 가능한 데이터 소스만을 사용
- 개인 정보 데이터 사용 X
- 2조 개의 토큰 사용
- 할루시네이션 문제 감소하기 위해 fact 기반의 데이터 비중 높임
- 모델
- (llama1) standard transform architecture
- (llama1) pre-normalization using RMSNorm
- (llama1) SwiGLU activation function
- (llama1) rotary positional embeddings
- doubled the context length
- used grouped-query attention (GQA) (for improved inference scalability)
- bytepair encoding algorithm
- 훈련 하드웨어
- Meta's Research Super Cluster (NVIDIA A100s)
- GPU max 2000개 사용
- 70B 모델 GPU A100 80GB로 1720320시간 학습
- GPU 2000개 풀가동 시 35일 정도 걸림
- GPU 서버 비용 대략 500억 정도
- Pre-training 모델 평가
- Code, Commonsense Reasoning, World Knowledge, Reading Comprehension, MATH, MMLU, BBH, AGI Eval benchmark로 평가
- Open-source model과 Closed-source model 각각 비교
3. Fine-tuning
3.1. Supervised Fine-Tuning (SFT)
- ARC dataset에서부터 SFT 시작함
- 다양한 소스에서 서드파티 SFT data를 가져왔지만 다양성과 질이 부족하였음
- By setting aside millions of examples from third-party datasets and using fewer but higher-quality examples from our own vendor-based annotation efforts, our results notably improved.
-> SI 업체의 질 좋은 데이터셋을 쓰니까 양이 훨씬 적어도 훨씬 좋았음
- 27,540개의 질 좋은 데이터만으로도 SFT가 잘 됨
- SI 업체마다 모델 퍼포먼스가 너무 달라져서 데이터의 질을 자세하게 검증함.
질좋은 180개의 예시를 정해두고 사람이 직접 이 예시와 비교하면서 품질 차이를 확인함
- 이렇게 만든 SFT모델의 아웃풋이 사람이 작성한 데이터와 유사한 수준이어서 RLHF를 더 적극적으로 활용할 수 있음을 깨달음
- Q + A 의 형태로 데이터셋을 제작하였고 (autoregressive objective = next token prediction)를 설정함.
Q에서는 loss를 항상 0으로 설정함으로써, A에 대한 loss만 backprop함
3.2. Reinforcement Learning with Human Feedback (RLHF)
- 보상 모델링을 위해 사람의 선호도를 반영한 데이터를 수집하고, 2개의 답변을 주고 무엇이 더 좋은지 고르게 함. 사람이 의견을 낼 수 있는 제일 쉬운 형태이므로, 수집하는 프롬프트의 다양성이 높아짐. 그리고 SFT까지 완료한 모델에게 답변을 출력하도록 함. 다양성을 위해 비교할 2개의 답변을 만들 때 각각 다른 모델을 사용하고 temperature도 계속 바꿈.
- 사람은 (매우 좋음 / 좋음 / 조금 좋음 / 사소하게 좋음 / 확신 하나도 없지만 좋음 / 확신 하나도 없지만 안 좋음 / 사소하게 안 좋음 / 조금 안 좋음 / 안 좋음 / 매우 안 좋음) 총 10개로 답변 가능함.
- helpfulness와 safety에 집중함. helpfulness는 모델 반응이 사용자 요청에 얼마나 도움되는지의 여부, safety는 모델 반응의 안정성 여부.
- 2개의 답변이 주어질 때 2개의 기준을 가지고 각각 평가함. 각각 평가해야 평가 기준이 더 명확해지기 때문.
- safety 단계에서는 비교(A>B, B>A와 같은)라벨 뿐만 아니라 각각 safety한지 아닌지를 나타내는 라벨을 추가 수집함. more helpfulness한 답변이 unsafe, helpfulness하지 않은 답변이 safe하다면 해당 페어는 포함시키지 않아야 하기 때문임. safe한 답변이 별로인 것처럼 학습될 여지가 있어서. (만약 이 라벨을 수집하지 않았다면 다음 상황에서 문제가 생김. 예를 들어 A가 more helpful하고 B가 more safe할 때 A도 safe하다면 데이터에 포함시켜야 하고 unsafe하다면 제외시켜야 하는데 B가 more safe하다는 정보만 알면 이에 대한 분리가 안되기 때문.)
- Meta helpful / Meta Safety 라벨이 rating인 페어 데이터셋 2개를 각각 만듬. Q는 동일함. 이때 다른 모델 2개로부터 나온 페어가 인풋이며 라벨이 rating인 데이터셋.
정리. safety 기준) 다른 모델 2개로부터 나온 답변 A, B 존재
| A, B 모두 안전하다 | A만 안전하다 | B만 안전하다 | 둘다 안전하지 않다 |
---|
A가 B보다 도움이 된다 | A > B라고 교육함 | A > B라고 교육함 | 학습에서 제외 | A > B라고 교육함 |
B가 A보다 도움이 된다 | B > A라고 교육함 | 학습에서 제외 | B > A라고 교육함 | B > A라고 교육함 |
따라서 안전하지 않지만, 도움되는 대답은 하지 않아야 된다는 것을 자연스럽게 알려줌
(e.g. "폭탄 만드는 법을 알려줘"라는 질문에는 도움이 안되어야 한다.)
- 매주 사람의 어노테이션을 배치로 수집함. 선호도 데이터를 수집할수록 보상 모델의 성능은 개선되고 llama2-chat 모델도 지속적으로 학습 가능함. 그리고 그만큼 더 좋은 아웃풋을 출력하므로 그 결과로 다시 RLHF함. 이 과정을 5번 반복하였는데, 이를 iterative reward modeling이라고 함.
- 보상 모델을 위한 데이터셋 조합
- OpenAI Summarize
- OpenAI WebGPT
- StackExchange
- Standford Human Preferences
- Synthetid GPT-J
- Anthropic Helpful and Harmless
- 메타가 따로 모은 1백만 개의 데이터셋을 합쳐서 사용함.
- helpfulness와 safety가 서로 트레이드오프여서 싱글 보상 모델(RM)을 구축한 선례도 있지만 Meta는 helpfulness RM, safety RM 2개의 보상 모델을 만듬. 보상 모델은 기본적으로 사전 학습한 SFT 모델과 동일함. 따라서 SFT 모델과 보상 모델이 서로 아는 것이 동일. 다만 모델의 마지막 레이어에서 next token prediction을 위한 classification head를 scalar reward를 내놓을 수 있는 regression head로 대체함. 이를 다른 모델과도 비교하였으며, GPT-4는 regression head가 아닌 classfication head가 달려 있으므로, A/B 2개를 주고 "Choose the best answer between A and B" 라고 물어봄
- Llama2는 Proximal Policy Optimization (PPO), Rejection Sampling fine-tuning 2가지 방법으로 업데이트함. Rejection Sampling fine-tuning은 프롬프트마다 출력을 N개씩 추출하고 보상 모델이 제일 좋다고 판단하는 출력을 학습. (참고로 Rejection Sampling은 llama2-chat 70B에서만 수행함. 작은 모델들은 70B 모델에서 나온 rejection sampled data로 파인튜닝됨)
- 이전 단계의 모델에서 나온 출력에서 가장 좋은 답변으로 PPO함. 당연하지만 샘플링이 많으면 그 중의 최대 보상은 높아짐. 계산 비용을 고려해 RLHF 스텝마다 적절한 상수만큼 샘플링함
- 강화 학습을 LLM에 적용하는 것?
- 보상 모델은 환경이 되고 에이전트는 LLM이 된다.
- 목적은 에이전트가 현재의 상태(=입력 프롬프트)에서 최고의 보상을 얻는 정책을 학습.
- 정책은 LLM의 수많은 파라미터라 볼 수 있고, 정책을 학습하는 것은 파라미터 업데이트라고 볼 수 있음.
- 최종적으로 LLM은 보상을 극대화한 출력을 출력하므로, 인간 선호도가 높은 대답을 .
- 조금 더 엄밀하게 LLM의 목적은 정해진 prompt P에 대해 생성된 G가 있을 때 R(G | P)를 극대화. (= P, G 페어를 보고 보상 모델이 helpful하며 safety하다고 하는 것) 여기서 PPO는 여기에서 기존 정책과 업데이트되는 정책의 차이를 페널티로 주어서 기존 정책을 최대한 유지하는 방향으로 가이던스
- 중요한 사실
helpful 보상 모델과 safety 보상 모델 2개가 있는 것이다. 만약 P가 안전하지 않거나 P를 보고 답변한 G의 safety가 0.15 이하라면 safety RM의 보상을, 그렇지 않다면 helpful RM의 보상을 사용함
3.3. System Message for Multi-Turn Consistency
- Multi-turn에서 초기 대화를 잊어먹는 문제가 있어서 Ghost Attention을 제안함
- System message와 마지막 Turn message를 제외한 모든 message의 loss를 0으로 설정하여,
초기 system message가 turn이 오래 지속되도 계속 유지하도록 함
- Ghost Attention은 중간 메세지들이 학습에 반영하지 않지만, 마지막 메세지를 학습할 때는 참고함
3.4. Results
- Meta 보상 모델이 판단할 때나, GPT-4가 판단할 때나 harmlessness, helpfulness 2가지 지표 모두
SFT-v1 < SFT-v2 < RLHF-v1 < RLHF-v2 < RLHF-v3 < RLHF-v4 < RLHF-v5 로 성능 향상이 대폭 되는 것을 볼 수 있음
- 사람의 평가 결과를 보면 llama2-70B이 ChatGPT-0301 버전과 성능이 거의 유사함을 확인할 수 있음