Llama 2 — 오픈 기반 모델 및 파인튜닝된 채팅 모델
Digest: 대형 언어 모델(LLM, Large Language Model) 시장에서 ChatGPT·Claude·Bard 같은 폐쇄형 모델들이 학습 방법론을 공개하지 않아, 연구 커뮤니티는 정렬(alignment, 인간 의도에 맞게 모델을 조정하는 과정) 기술을 재현하거나 개선하기 어려웠다. 기존 오픈소스 모델들(Falcon, Vicuna 등)은 인간 선호도 평가에서 상용 모델에 일관되게 뒤졌고, 특히 멀티턴 대화에서 시스템 프롬프트를 잊어버리거나 안전성과 유용성이 충돌하는 문제를 해결하지 못했다. Meta의 핵심 통찰은 유용성과 안전성을 하나의 보상 모델(Reward Model, RM) 로 동시에 최적화하려는 시도가 근본적으로 충돌을 일으킨다는 점이며, 이를 Dual RM(목적별로 분리된 두 개의 보상 모델)으로 분리하면 두 목표를 독립적으로 최적화할 수 있다는 것이다. Llama 2는 이 통찰을 바탕으로 27,540개 고품질 샘플로 SFT(Supervised Fine-Tuning)를 거친 뒤, Helpfulness RM과 Safety RM을 분리 운용하는 반복적 RLHF(Reinforcement Learning from Human Feedback) 파이프라인을 구축했으며, **Ghost Attention(GAtt)**이라는 기법으로 시스템 메시지를 모든 대화 턴에 주입해 위치 감쇠(트랜스포머가 멀리 있는 토큰을 잊는 현상) 문제를 아키텍처 수정 없이 해결했다. 결과적으로 Llama 2-Chat 70B는 ChatGPT 대비 36% 승률·31.5% 동률(약 68% 비패배율)을 기록했고, Vicuna-33B 대비 75% 이상 승률을 달성했으며, 7B 기준 Llama 1 대비 TruthfulQA(모델 진실성 벤치마크)에서 +21.37%p, ToxiGen(독성 생성 벤치마크)에서 -7.61%p 개선되었다(Human Eval 및 벤치마크 결과). 다만 학습 데이터의 89.70%가 영어에 편중되어 다국어 성능이 제한되고, RM이 유사한 품질의 응답 쌍을 구별할 때 정확도가 55.3%에 그쳐 경계선 사례 처리가 불안정하며, GPT-4 수준의 최상위 폐쇄형 모델과는 여전히 격차가 존재한다. 남겨진 질문은 Dual RM 패턴을 Helpful/Safe 이외의 목표 쌍(예: 창의성/정확성)으로 확장할 때 효과가 유지되는지, 그리고 반복 RLHF의 각 라운드가 수렴하는 조건은 무엇인지이다.
섹션별 요약
Abstract
대규모 언어 모델(LLM)의 오픈소스 공개와 안전한 대화형 AI 개발에 대한 수요가 증가하는 가운데, Meta는 7B에서 70B 파라미터 규모의 사전학습 및 파인튜닝 LLM 컬렉션인 Llama 2를 개발·공개한다. 핵심 목표는 대화 사용 사례에 최적화된 Llama 2-Chat을 통해 클로즈드소스 모델의 대안을 오픈소스 생태계에 제공하는 것이다. 파인튜닝 방법론으로는 SFT(Supervised Fine-Tuning)와 RLHF(Reinforcement Learning from Human Feedback)를 적용하였으며, 안전성 강화를 위한 이중 보상 모델(helpfulness RM + safety RM) 구조를 사용한다. 대부분의 벤치마크에서 기존 오픈소스 채팅 모델을 능가하였고, 사람 평가 기준 유용성과 안전성 측면에서 클로즈드소스 모델의 대체재로 고려될 수 있음을 보고한다.
저자 contribution
- 7B~70B 파라미터 규모의 사전학습 및 대화 특화 파인튜닝 LLM 컬렉션(Llama 2 및 Llama 2-Chat)을 오픈소스로 공개
- SFT와 반복적 RLHF(helpfulness·safety 이중 보상 모델 포함) 파이프라인을 적용하여 오픈소스 채팅 모델 대비 벤치마크 성능 및 사람 평가 기준 유용성·안전성을 향상
- 파인튜닝과 안전성 개선 방법론을 상세히 공개하여 책임감 있는 LLM 개발을 위한 커뮤니티 기여 기반을 마련
왜 이 연구를 하는가?
핵심 질문: 오픈소스 LLM이 폐쇄형 상용 챗 모델(ChatGPT, Claude, Bard)에 필적하는 정렬 품질을 달성할 수 있으며, 그 방법론을 완전히 공개하는 것이 가능한가?
기존 접근법의 한계
| 한계 | 설명 |
|---|---|
| RLHF 방법론의 불투명성 | ChatGPT, Bard, Claude 등 고성능 상용 챗 모델은 데이터 큐레이션 방식, RLHF 하이퍼파라미터, 안전성 프로토콜을 공개하지 않아 커뮤니티의 정렬 연구 발전을 저해한다. |
| 기존 오픈소스 모델의 성능 열위 | Falcon, MPT, Vicuna 등 이전 오픈소스 공개 모델들은 인간 선호도 평가에서 상용 모델 대비 일관되게 낮은 성능을 보였으며, 재현 가능한 안전성 파인튜닝 파이프라인이 부재했다. |
| 멀티턴 대화 일관성 저하 | 긴 대화에서 시스템 프롬프트가 망각되는 등 멀티턴 대화 일관성이 저하되는 문제가 기존 접근법에서 해결되지 않았다. |
| Helpfulness-Safety 트레이드오프 | 안전성을 강화할수록 유용성이 저하되는 트레이드오프 문제를 체계적으로 다룬 오픈 연구가 없었다. |
핵심 통찰
- 모델 가중치 공개만으로는 부족하다. 데이터 구성, 반복적 RLHF(V1-V5), 이중 보상 모델 전략을 포함한 전체 학습 레시피의 공개가 커뮤니티 발전에 필수적이다.
- Helpfulness와 Safety는 단일 보상 모델로 동시에 최적화하기 어렵다. 두 목표를 분리된 RM으로 독립 학습한 뒤 혼합 전략을 적용하면, 안전성 향상이 유용성을 희생시키지 않을 수 있다.
Introduction
대형 언어 모델(LLM)은 AI 어시스턴트로서 탁월한 능력을 보이고 있으며, 실사용에 적합한 성능을 위해 instruction tuning과 RLHF를 통한 정렬이 필수적으로 요구된다. 그러나 ChatGPT, Bard, Claude 등 고성능 상용 챗 모델들은 데이터 큐레이션, RLHF 하이퍼파라미터, 안전성 프로토콜 등 핵심 방법론을 공개하지 않아, 학술 커뮤니티의 정렬 연구 발전이 구조적으로 제한되어 있다. 기존에 공개된 오픈소스 모델들(Falcon, MPT, Vicuna)은 인간 선호도 평가에서 상용 모델에 비해 낮은 성능을 기록했으며, 재현 가능한 안전성 파인튜닝 파이프라인을 제공하지 못했다.
이 연구는 이러한 격차를 해소하기 위해 Meta가 두 가지 모델 패밀리를 공개한다. 첫째, Llama 2 베이스 모델은 2조 토큰의 사전학습 코퍼스(기존 대비 40% 증가), 4,096 토큰으로 두 배 확장된 컨텍스트 길이, 34B 및 70B 변형에 적용된 Grouped-Query Attention(GQA)을 특징으로 하며 7B, 13B, 70B 규모로 제공된다. 둘째, Llama 2-Chat은 대화 최적화 파인튜닝 변형으로, SFT와 반복적 RLHF(V1-V5) 및 helpfulness·safety를 각각 담당하는 이중 보상 모델을 통해 구축된다. 핵심 목표는 모델 가중치뿐 아니라 상세한 학습 레시피 전체를 공개함으로써, 폐쇄형 모델과의 성능 격차를 투명하게 좁히는 것이다.
Methods
프레임워크 개요
Llama 2-Chat은 사전학습 기반 모델을 SFT → Dual Reward Model 학습 → Iterative RLHF(V1~V5) → Safety Fine-Tuning 순서로 파이프라인을 구성하며, Ghost Attention(GAtt)으로 멀티턴 일관성을 보장한다.
핵심 구성요소
-
Supervised Fine-Tuning (SFT): 27,540개의 고품질 vendor-curated 어노테이션을 사용. 입력은
[INST] <<SYS>> ... <</SYS>> [/INST]형식의 chat template으로 구성되며, loss는 assistant 응답 토큰에만 적용(user prompt 토큰은 zero-out). cosine LR 스케줄(2e-5), weight decay 0.1, batch size 64, seq length 4096, 2 epoch. -
Dual Reward Model (Helpfulness RM + Safety RM): helpfulness와 safety가 상충 관계임을 인식해 두 개의 RM을 분리 학습. 둘 다 chat model 체크포인트에서 초기화. binary ranking loss에 margin 항 m(r) 추가 — 선호 차이가 명확한 쌍에는 큰 마진, 근접한 쌍에는 작은 마진 적용. 총 2,919,326 비교 쌍(내부 Meta 1,418,091 + Anthropic HH + OpenAI Summarize/WebGPT + StackExchange + Stanford SHP + synthetic GPT-J).
-
Iterative Fine-Tuning / RLHF (V1~V5): 두 병렬 알고리즘을 단계적으로 적용.
- Rejection Sampling(70B 전용): K개(최대 100개) 출력을 샘플링 후 RM 스코어 기준 최상 샘플로 파인튜닝. 소형 모델은 70B 결과를 distill.
- PPO: V4부터 rejection-sampled 모델 위에 표준 PPO 적용. KL 패널티 계수 β=0.01(7B/13B), 0.005(34B/70B). LR 1e-6 constant, PPO-clip 0.2, batch 512, mini-batch 64, 200-400 iterations.
- Experience Replay: 초기 iteration에서 시(poetry) 등 이전 역량이 손실되는 현상을 발견 → 최신 iteration뿐 아니라 모든 이전 iteration의 상위 샘플을 포함해 학습.
-
Ghost Attention (GAtt) ⭐: 멀티턴 대화에서 초기 system message가 망각되는 문제를 해결하는 SFT 데이터 증강 기법. 증강 시에는 모든 user 메시지에 system instruction을 첨부해 최신 RLHF 체크포인트로 응답을 샘플링하고, 학습 시에는 첫 번째 턴에만 instruction을 유지하고 이전 assistant 메시지의 loss를 zero-out한다. 결과적으로 20+ 턴에서도 일관된 페르소나 유지 및 미학습 제약(“haiku로 답하라” 등)으로의 전이 가능.
-
Safety Fine-Tuning / Safety Context Distillation: 3-tier 위험 분류(불법/혐오·해악/비전문 조언)와 6가지 공격 벡터에 대응. Safety Context Distillation은 “You are safe and responsible” prefix를 붙여 응답을 생성한 뒤, prefix 없이 그 응답으로 파인튜닝 — safety 성향을 가중치에 내재화. Safety RM이 이득이 있는 샘플에만 선택적으로 적용.
주요 하이퍼파라미터
- SFT: LR 2e-5(cosine), weight decay 0.1, batch 64, seq_len 4096, 2 epochs
- Reward Model: LR 5e-6(70B) / 1e-5(smaller), batch 512 pairs, 1 epoch, cosine to 10%, AdamW β₁=0.9 β₂=0.95 ε=1e-5
- PPO: β(KL) = 0.01(7B/13B) / 0.005(34B/70B), LR 1e-6 constant, clip 0.2, batch 512, mini-batch 64, 200-400 iterations
발견 (Findings)
- Reward Model 신뢰 구간 의존성: Safety RM과 Helpfulness RM 모두 “significantly better” 쌍에서 94.3% 정확도를 달성했으나, “negligibly better” 쌍에서는 55.3%로 급락. RM이 명확한 품질 차이가 있는 경우에만 신뢰할 수 있으며, 미세한 차이에서는 판별력이 크게 저하됨을 시사한다.
- 모델 크기와 승률의 비선형 관계: Llama 2-Chat 34B가 Vicuna-33B 및 Falcon-40B 대비 75% 이상 승률을 기록했으나, 70B 모델은 ChatGPT 대비 36% 승률에 그쳤다. 파라미터 규모 두 배임에도 closed-source 최상위 모델과의 격차가 존재.
- Safety RLHF의 실질적 효과: 사전 학습 단계 Llama 2 7B TruthfulQA 33.29% → Safety RLHF 적용 후 개선. 70B는 50.18% 달성. Llama 1-7B 대비 truthfulness +21.37%p, toxicity -7.61%p로 safety fine-tuning 효과가 수치로 확인된다.
Results
Reward Model 정확도: Helpfulness RM 평균 70.6%, Safety RM 평균 64.3%. “Significantly better” 쌍 94.3% vs “negligibly better” 쌍 55.3%로 신뢰도가 쌍 품질 차이에 강하게 의존.
모델 기반 평가 (버전별 진화): GPT-4 중립 평가자 기준 Llama 2-Chat의 ChatGPT 대비 승률은 SFT 초기부터 V5까지 단조 증가하여 약 60% 도달.
인간 평가 (4,000 프롬프트, 3명 평가):
- Llama 2-Chat 7B vs MPT-7B-chat: 60% 승률
- Llama 2-Chat 34B vs Vicuna-33B / Falcon-40B: 75% 이상
- Llama 2-Chat 70B vs ChatGPT: 36% 승 + 31.5% 동률 (≈68% 비패배율)
- Llama 2-Chat 70B vs PaLM-bison: 실질 우위
평가자 간 일치도 Gwet’s AC2: 0.37(유사 출력) ~ 0.55(명확한 우세).
Safety 벤치마크: TruthfulQA 7B 33.29% / 70B 50.18%, ToxiGen 7B 21.25% / 70B 24.60%. Llama 1-7B 대비 truthfulness +21.37%p, toxicity -7.61%p.
Ghost Attention 효과: 20+ 턴에서 시스템 토큰 attention 지속 활성화 확인. “always answer in Haiku” 등 미학습 제약도 zero-shot 전이.
Discussion
Llama 2의 결과는 방법론 전체를 공개하면서도 클로즈드 소스 모델에 경쟁하는 성능을 달성함으로써, RLHF가 비공개여야만 효과적이라는 “경쟁적 해자(moat)” 논거를 정면으로 반박한다. 고품질 SFT 27,540개가 수백만 건의 서드파티 샘플을 능가한다는 결과는 데이터 양보다 질이 결정적임을 시사한다. 이중 보상 모델(dual RM) 구조는 단일 RM에서 필연적으로 발생하는 helpfulness-safety 트레이드오프를 구조적으로 해소하며, 반복적 RLHF(V1→V5)는 단일 SFT 패스 이후 나타나지 않던 도구 사용·시간 추론 등의 창발적 능력을 유도한다.
저자가 인정한 한계
- 사전학습 데이터의 89.70%가 영어로 구성되어, 비영어권 안전성 및 유용성이 보장되지 않는다.
- 사전학습 데이터 컷오프가 2022년으로, 시간적 지식 지연이 발생한다.
- 보상 모델 평균 정확도 약 70%, “경계선” 쌍에서 55.3%로 레이블 노이즈가 크다.
- 인간 평가 주관성이 크며, AC2 지수 0.37–0.55 수준.
- 의료·법률 등 도메인 특수 사용 사례에서 안전성 미보장, 추가 테스트 필요.
- 서구·영어 편향이 모델에 전파될 가능성.
- 34B 모델은 충분한 레드팀 검증 미완료로 비공개.
향후 방향
- 다국어 SFT·RLHF 파이프라인 구축 → 비영어권 안전성 한계 대응.
- 보상 모델 신뢰도(특히 경계선 쌍) 향상을 위한 교정(calibration) 기법.
- Ghost Attention을 더 긴 컨텍스트 및 더 많은 제약 유형으로 확장.
이론적 의의
- 오픈소스 RLHF의 경쟁력 증명: 방법론 공개와 성능 경쟁력이 양립 가능함을 실증.
- 이중 보상 모델의 일반화 가능성: 다중 목표 선호 최적화의 범용 패턴. helpful ↔ safe를 넘어 helpful ↔ honest, safe ↔ informative 등으로 확장 가능.
- 반복적 Rejection Sampling + PPO 하이브리드 레시피: 대규모 후처리의 표준 절차로 채택 가능한 하이브리드 훈련 레시피 확립.
- Ghost Attention — 데이터 중심의 위치 감쇠 해결책: 트랜스포머의 초기 컨텍스트 어텐션 위치 감쇠를 아키텍처 변경 없이 데이터 구성 방식으로 해결.
Discussion Points
- 논쟁점: 오픈소스 공개가 연구 가속화와 악용 위험 가속화를 동시에 초래. 34B 모델 비공개 결정이 사후 레드팀 검증 완료 시 공개로 전환될지 불명확.
- 검증 필요 가정: RM 정확도 70%가 실제 사용자 안전 경험에 충분한지는 실세계 배포 데이터 없이 검증 불가. Ghost Attention의 zero-shot 전이가 “암기가 아닌 진정한 메커니즘”이라는 주장은 해석 가능성 방법을 통한 내부 어텐션 분석으로 별도 확인 필요.
- 후속 연구: (1) 이중 RM 구조를 N-목표(N>2)로 일반화할 때 RM 간 충돌 해소 방법, (2) 경험 재현 전략의 최적 샘플 비율 및 도메인 이전, (3) Ghost Attention이 100K+ 토큰 장문 컨텍스트에서도 위치 감쇠를 극복하는지 검증.
Chat Template 심층 분석 — Llama 2 표준과 현대 LLM 비교
이 섹션은 Llama 2의 chat template(
[INST]/<<SYS>>)과 Ghost Attention(GAtt)을 instruction tuning 관점에서 한 덩어리로 해설하고, 현대 LLM(Llama 3, ChatML, Tulu 3, Gemma, Phi-3 등)이 수렴하고 있는 표준 규격과 비교한다. 특히 prefill과 loss 계산 경계, 그리고 role token(system/user/assistant)의 설계 철학 차이를 다룬다.
1. Llama 2의 Chat Template 구조
Llama 2가 공식 레포(facebookresearch/llama)의 generation.py에서 사용하는 형식은 다음과 같다. 여기서 {...}는 실제 값이 들어갈 자리를 뜻한다.
Single-turn (system prompt 포함)
<s>[INST] <<SYS>>
{system_prompt}
<</SYS>>
{user_message} [/INST] {assistant_response} </s>
Multi-turn
<s>[INST] <<SYS>>
{system_prompt}
<</SYS>>
{user_1} [/INST] {assistant_1} </s><s>[INST] {user_2} [/INST] {assistant_2} </s><s>[INST] {user_3} [/INST] ...
실제 토큰 레이어에서 꼭 알아야 할 구조적 디테일
<s>(BOS, id=1),</s>(EOS, id=2)만 진짜 special token이다. 이 둘은 Llama 1에서 이미 등록되어 있었고, Llama 2는 그대로 물려받아 재사용한다.[INST],[/INST],<<SYS>>,<</SYS>>는 special token이 아니라 일반 문자 시퀀스(literal string)다. tokenizer에 unique ID가 없고, BPE가[,INST,]같은 sub-piece로 쪼갠다. SFT 과정에서 반복 노출되어 모델이 역할 경계로 “학습”하게 된다.- 매 턴마다
<s>... </s>로 감싼다. 모델 입장에선 여러 개의 독립 시퀀스가 concatenate된 것처럼 보이지만, causal attention은 전체를 하나의 context로 본다. 이 구조 덕분에 추론 시 KV 캐시를 그대로 이어붙이며 턴을 늘릴 수 있다. - system prompt는 첫 번째
[INST]안쪽에만 한 번 들어가고, 2번째 턴부터는 생략한다. 즉 토큰 시퀀스상 system 영향은 물리적으로 초반에만 존재하며, 뒤로 갈수록 attention 거리에 의해 자연 감쇠한다 — 이 현상이 바로 Ghost Attention이 해결하려는 문제다.
2. Prefill vs Loss 계산 — 어디서 gradient가 흐르는가
Instruction tuning(SFT)에서 언어 모델은 여전히 next-token prediction 목적함수(cross-entropy)를 쓰지만, 모든 토큰에서 loss를 계산하지는 않는다. 어떤 토큰은 “모델이 봐야 할 입력”이고, 어떤 토큰은 “모델이 생성해야 할 정답”이다. 이 경계를 조정하는 것이 bookkeeping에 해당하는 label masking(labels[i] = -100 또는 IGNORE_INDEX)이다.
Llama 2 SFT의 masking 규칙
<s>[INST] <<SYS>>{sys}<</SYS>>\n\n{user}[/INST] {assistant} </s>
│◄──────── prefill (loss = 0, labels = -100) ──────►│◄── loss ON ──►│
↑
여기서부터 gradient 흐름
| 구간 | 내용 | Forward 통과 | Loss 계산 | 역할 |
|---|---|---|---|---|
<s>[INST] <<SYS>>...<</SYS>> {user} [/INST] | 시스템 + 유저 | ✅ 본다 | ❌ masked | Prefill — 조건부 문맥 |
{assistant} | 어시스턴트 응답 | ✅ | ✅ cross-entropy | Target — 학습 목표 |
</s> | 턴 종결 | ✅ | ✅ | 종료 신호 학습 |
즉 Llama 2 SFT는 user prompt 토큰들을 “zero-out”(저자 표현)하고 assistant response에만 gradient를 흘린다. 이는 InstructGPT 이래의 표준 관행이며, 그 이유는 명확하다:
- user prompt에 loss를 걸면 모델이 “사용자가 어떤 질문을 할지”를 학습하게 되는데, 이는 파인튜닝의 목표(지시 따르기)와 무관할 뿐 아니라 RM·RLHF 단계의 response 분포를 왜곡한다.
- 반대로 assistant response에만 loss를 걸면 모델은 **“이 맥락이 주어졌을 때 어떻게 응답해야 하는지”**만 학습한다.
Multi-turn에서의 loss
일반적인 multi-turn SFT에서는 모든 assistant turn에 loss를 건다(각 assistant 응답 토큰에 cross-entropy). 즉 한 대화에 assistant가 3번 나오면 3개 구간 모두 gradient 대상.
Ghost Attention의 예외 규칙
Ghost Attention 증강 데이터에서는 한 가지 미묘한 수정이 들어간다:
<s>[INST] <<SYS>>{sys}<</SYS>>\n\n{user_1}[/INST] {assistant_1} </s>
│
loss = 0 (MASKED!)
<s>[INST] {user_2}[/INST] {assistant_2} </s>
│
loss ON
...
증강 시: 원래 데이터 한 쌍을 생성할 때 모든 user turn 앞에 system instruction을 복사한 뒤, 최신 RLHF 체크포인트로 응답을 샘플링한다. 학습 시: 첫 턴(시스템 지침을 포함한 턴)의 assistant 응답은 loss masking한다.
왜? 이렇게 하지 않으면 모델이 “첫 턴 스타일을 그대로 복사” 하는 법만 배운다(암기). Loss를 0으로 만들면 모델은 첫 턴 assistant 응답을 문맥으로만 받아들이고, 진짜 학습은 2턴 이후의 “system instruction을 따르는 응답”에 집중한다. 결과적으로 모델은 “system message가 있을 때의 행동 양식”을 일반화하게 된다.
핵심 요약: Llama 2의 loss 경계는 두 단계 규칙이다.
- 기본 규칙: user prompt → mask, assistant response → loss.
- GAtt 예외: 시스템 지침이 처음 등장한 턴의 assistant 응답은 추가로 mask → “형태를 암기하지 말고 system을 따르는 법만 배워라”.
3. 현대 LLM Chat Template 표준 규격 비교
Llama 2 이후 2년간 LLM chat template은 거의 ChatML 변형으로 수렴했다. 아래 비교표는 system/user/assistant 토큰을 중심으로 정리한 것이다.
| 모델 (출시) | System | User | Assistant | BOS / EOS | 역할 토큰 = special token? |
|---|---|---|---|---|---|
| Llama 2 (2023) | <<SYS>> ... <</SYS>> (user 안에 중첩) | [INST] ... [/INST] | (공백 1개 뒤) → </s> | <s> / </s> | ❌ literal |
| Llama 3 / 3.1 (2024) | <|start_header_id|>system<|end_header_id|>\n\n{sys}<|eot_id|> | <|start_header_id|>user<|end_header_id|>\n\n{msg}<|eot_id|> | <|start_header_id|>assistant<|end_header_id|>\n\n{resp}<|eot_id|> | <|begin_of_text|> / <|end_of_text|> | ✅ 모두 special |
| ChatML (OpenAI 2023 / Qwen / Hermes) | <|im_start|>system\n{sys}<|im_end|> | <|im_start|>user\n{msg}<|im_end|> | <|im_start|>assistant\n{resp}<|im_end|> | — | ✅ special |
| Tulu 3 (2024) | <|system|>\n{sys}\n | <|user|>\n{msg}\n | <|assistant|>\n{resp}<|endoftext|> | — / <|endoftext|> | ✅ special |
| Gemma 2 (2024) | (system role 없음 — user 앞에 prepend) | <start_of_turn>user\n{msg}<end_of_turn> | <start_of_turn>model\n{resp}<end_of_turn> | <bos> | ✅ special |
| Mistral Instruct v0.1/0.2 (2023) | (없음) | [INST] {msg} [/INST] | {resp}</s> | <s> / </s> | ❌ (Llama 2 계승) |
| Mistral v0.3 / Mixtral Instruct (2024) | [INST] {sys}\n\n{msg} [/INST] (일부), 또는 별도 tool/system token | [INST] | (공백) </s> | <s> / </s> | ✅ v0.3부터 일부 특수화 |
| Phi-3 (2024) | <|system|>\n{sys}<|end|> | <|user|>\n{msg}<|end|> | <|assistant|>\n{resp}<|end|> | — / <|endoftext|> | ✅ special |
| DeepSeek-V2/V3 | <|begin▁of▁sentence|>{sys} | User: {msg}\n\nAssistant: | {resp}<|end▁of▁sentence|> | ✅ BOS special | 일부 special |
| Qwen 2/2.5 | ChatML 채택 (<|im_start|>…) | 동일 | 동일 | — | ✅ special |
설계 진화 관찰
- literal → special token 전환이 대세이다. Llama 2가 literal 방식을 쓴 건 Llama 1 tokenizer를 그대로 쓰기 위한 실용적 선택이었다. 이후 거의 모든 모델은 role token을
added_tokens.json에 등록해 unique ID를 부여한다. - Llama 3가 도입한
<|start_header_id|>{role}<|end_header_id|>패턴은 역할을 확장 가능한 파라미터로 만든 것이다.system,user,assistant외에도ipython,tool,tool_response같은 새 role을 재훈련 없이 추가할 수 있다. Anthropic의 Claude가 XML 태그(<system>,<tool_use>)로 가는 방향과 철학이 비슷하다. - Gemma는 system role을 제거하고 user turn 앞에 prepend한다. Google의 주장은 “system prompt는 첫 user turn의 일부일 뿐”이며, 이렇게 하면 학습 데이터 구성이 단순해지고 system prompt의 지나친 “magical” 취급을 피할 수 있다는 것이다.
- ChatML은 사실상의 de facto 표준이 되었다. OpenAI의 원조 포맷을 Qwen·Tulu·Hermes·다수 커뮤니티 모델이 채택했다.
이것이 왜 중요한가 — Role Token = Attention Sink
Xiao et al. “Efficient Streaming Language Models with Attention Sinks” (2023)와 후속 해석 가능성 연구는, 역할 토큰이 attention의 “싱크”(sink)로 기능한다는 점을 보였다. 즉 모델은 이 토큰들에 비정상적으로 많은 attention mass를 할당하며, 이는 단순한 경계 표시를 넘어 “문맥 전환 신호” 및 “전역 정보 집합 지점” 역할을 한다. 따라서:
- Special token이 있으면: 모델이 단일 ID를 anchor로 쓸 수 있어 역할 전환 학습이 쉽다.
- Literal string이면: 모델이 여러 sub-piece(”[”, “INST”, ”]“)에 분산된 attention 패턴을 학습해야 한다 → 일반적으로 더 많은 SFT 데이터가 필요.
Llama 2가 Dual RM·Ghost Attention 같은 정렬 기법으로 이 단점을 보완했다면, Llama 3는 template level에서 문제를 제거한 셈이다.
4. Instruction Tuning 관점의 Prefill/Loss — 현대와 Llama 2의 공통 뼈대
이 부분이 사용자가 가장 궁금해한 “어디까지 prefill하고 어디부터 loss를 계산하는가”의 현대 표준 형태다.
표준 SFT 루프 (Llama 3 / ChatML / Tulu 3 공통)
────────────────── prefill (loss masked) ────────────────── ─── loss ON ─── ── mask ──
<|begin_of_text|>
<|start_header_id|>system<|end_header_id|>\n\n{sys}<|eot_id|>
<|start_header_id|>user<|end_header_id|>\n\n{msg}<|eot_id|>
<|start_header_id|>assistant<|end_header_id|>\n\n
{response} <|eot_id|>
<|start_header_id|>user<|end_header_id|>\n\n{msg_2}<|eot_id|> ← 다시 prefill (masked)
<|start_header_id|>assistant<|end_header_id|>\n\n
{response_2} <|eot_id|>
규칙 (현대 LLM 공통)
<|begin_of_text|>+ 모든 system/user turn +<|start_header_id|>assistant<|end_header_id|>\n\n까지는 prefill — forward는 통과하지만 labels는 -100.{assistant response}+<|eot_id|>는 loss ON — assistant가 생성해야 할 토큰들. 보통<|eot_id|>도 loss에 포함해 모델이 정확히 언제 끝내야 하는지 학습한다.- Multi-turn이면 이 패턴을 반복 — 다음 user turn부터는 다시 masked prefill, 다음 assistant 구간이 다시 loss ON.
- 일부 레시피(Tulu 3 등)는
train_only_last_assistant=true같은 옵션으로 마지막 assistant turn만 loss를 걸기도 한다. 데이터 품질이 후반부에 집중되어 있거나 길이 불균형이 심할 때 사용.
구현 레벨의 세부사항
- HuggingFace
transformers의DataCollatorForCompletionOnlyLM은response_template(예:"<|start_header_id|>assistant<|end_header_id|>\n\n")을 기준으로 자동 masking한다. - 더 정교한 방법은 토큰 단위로 직접
labels를 구성하는 것 — 각 role 경계를 tokenizer로 찾아내고, assistant 구간 밖의 모든 토큰을 -100으로 치환. - prefill 길이는 KV cache에도 관련이 있다. 추론 시에는 system + user만 prefill하고 그 이후 token-by-token decoding하지만, 학습 시에는 모든 토큰이 한 번에 forward된다.
Llama 2 → 현대 전환 요약
| 측면 | Llama 2 | 현대 표준 (Llama 3 / ChatML / Tulu 3) |
|---|---|---|
| Role 구분자 | literal [INST], <<SYS>> | special token (<|start_header_id|>, <|im_start|>, <|user|>) |
| System role 위치 | user 메시지 안에 중첩 | 독립 role, 별도 turn |
| 턴 경계 | <s>...</s> 반복 | <|eot_id|> 또는 <|im_end|> 한 토큰 |
| Multi-turn system 유지 | Ghost Attention(데이터 증강) 필요 | 구조적으로 system turn을 별도 보존 + template 반복 |
| Tokenizer 호환성 | Llama 1과 100% 호환 | added_tokens 확장 필요 |
| Prefill/Loss 규칙 | user mask, assistant loss (GAtt는 첫 turn assistant도 mask) | 동일 (일부는 마지막 assistant만 loss) |
5. Ghost Attention을 현대 관점에서 다시 보기
Ghost Attention은 “Llama 2의 chat template이 system role을 첫 번째 turn의 내부에만 두었기 때문에 생긴 구조적 문제”를 데이터 증강으로 푼 것이다. 현대 template은 이 문제를 근본적으로 다른 두 가지 방식으로 완화한다:
- Llama 3 / ChatML / Tulu 3 방식: system을 독립된 turn으로 두어 항상 시퀀스 앞부분에 고정 배치. 하지만 여전히 “앞쪽 토큰에 대한 attention 감쇠” 문제는 남아 있다. 이는 position encoding(RoPE)의 한계이지 template의 한계는 아니다.
- Anthropic Claude 방식(예상): system prompt를 모든 user turn마다 재주입하는 것으로 알려져 있다. 이는 본질적으로 Ghost Attention과 동일한 아이디어를 추론 시점에 적용한 것 — 다만 학습 loss 마스킹은 사용자에게 노출되지 않는다.
즉 **“멀티턴에서 system 명령을 유지하기 어렵다”**는 근본 문제는 아직 해결되지 않았고, 세 가지 대응책이 병존한다:
- 데이터 증강 (Llama 2 Ghost Attention) — 학습 단계에서 이미 매 턴마다 system을 본 것처럼 데이터 구성.
- Template 구조화 (Llama 3 / ChatML) — system을 명시적 독립 turn으로 분리해 토크나이저 수준에서 보존.
- 추론 시 재주입 (일부 상용 시스템) — 매 API 호출마다 system을 다시 prepend.
현재 연구 흐름은 (2)를 기본으로 하고, context 길이가 길어지면 (3)을 보조로 쓰는 방향이다.
★ Insight ─────────────────────────────────────
- “Chat template 설계”는 단순 형식 문제가 아니라 attention 설계다. Role token을 special token으로 등록하면 모델은 그 토큰을 attention sink로 써서 효율적 역할 전환을 학습한다. Llama 2의 literal 방식은 이 메커니즘을 못 썼기 때문에 Ghost Attention 같은 데이터 쪽 보완이 필요했다.
- Prefill과 loss 경계는 “모델이 무엇을 학습하는가”를 결정한다. User prompt에 loss를 걸면 모델이 “질문을 생성”하도록 학습되어 instruction following이 망가진다. Ghost Attention의 추가 masking은 “정답을 복붙하지 말고 system을 따르는 방법을 학습하라”는 미세 조정이다.
- 현대 LLM이 ChatML로 수렴한 이유는 확장성이다.
<|start_header_id|>{role}<|end_header_id|>패턴은 tool-use, multi-modal, agentic role 같은 새 역할을 재훈련 없이 추가할 수 있게 해준다 — Llama 2 방식이라면[FUNC_CALL]같은 새 literal마다 충분한 데이터를 모아 재학습해야 한다.
─────────────────────────────────────────────────
실험 결과 상세
| 모델/방법 | 데이터셋/평가 | 지표 | 점수 | vs. 베이스라인 |
|---|---|---|---|---|
| Llama 2-Chat 70B | Human Eval vs ChatGPT | 승률 (%) | 36.0% 승 + 31.5% 무 | ChatGPT 대비 동률 수준 |
| Llama 2-Chat 70B | Human Eval vs PaLM-bison | 승률 (%) | 유의미한 우위 | PaLM-bison 대비 +우세 |
| Llama 2-Chat 34B | Human Eval vs Vicuna-33B | 승률 (%) | >75% | Vicuna-33B 대비 +>25%p |
| Llama 2-Chat 34B | Human Eval vs Falcon-40B | 승률 (%) | >75% | Falcon-40B 대비 +>25%p |
| Llama 2-Chat 7B | Human Eval vs MPT-7B-chat | 승률 (%) | 60.0% | MPT-7B-chat 대비 +10%p |
| Helpfulness RM | 평균 RM 정확도 | 정확도 (%) | 70.6% | — |
| Safety RM | 평균 RM 정확도 | 정확도 (%) | 64.3% | — |
| Helpfulness RM | ”유의미한 우위” 쌍 | 정확도 (%) | 94.3% | “근소한 우위” 대비 +39%p |
| Helpfulness RM | ”근소한 우위” 쌍 | 정확도 (%) | 55.3% | 무작위(50%) 대비 +5.3%p |
| Llama 2 70B | TruthfulQA | 정확률 (%) | 50.18% | Llama 2 7B 대비 +16.89%p |
| Llama 2 7B | TruthfulQA | 정확률 (%) | 33.29% | Llama 1-7B 대비 +21.37%p |
| Llama 2 70B | ToxiGen | 독성 ↓ | 24.60% | — |
| Llama 2 7B | ToxiGen | 독성 ↓ | 21.25% | Llama 1-7B 대비 -7.61%p |
프레임워크 다이어그램
graph TB A["사전학습 (2조 토큰, 공개 데이터)"] --> B["SFT (27,540 annotations, LR=2e-5, batch=64, 2 epochs)"] B --> C["Helpfulness RM (binary ranking + margin, LR=5e-6, batch=512 pairs)"] B --> D["Safety RM (binary ranking + margin, LR=5e-6, batch=512 pairs)"] C --> E["반복적 RLHF V1"] D --> E E --> F["Rejection Sampling (K=100, 70B only)"] E --> G["PPO (β=0.005 for 70B, LR=1e-6, 200-400 iter)"] F --> H["반복 RLHF V2-V5 + GAtt 데이터 증강"] G --> H H --> I["Llama 2-Chat V5 (7B / 13B / 70B)"]
재현성 및 신뢰도 평가
| 항목 | 등급 | 비고 |
|---|---|---|
| 코드 공개 | ✅ | github.com/facebookresearch/llama 추론 코드 공개. 학습 루프 코드 미포함. |
| 가중치 공개 | ✅ | HuggingFace meta-llama 저장소에 7B/13B/70B 공개 (라이선스 동의 후 접근). |
| 데이터 공개 | ❌ | 27,540 SFT 어노테이션 및 RLHF 선호도 데이터 미공개. |
| 학습 설정 | ⚠️ | LR, 배치, K, β 등 핵심 하이퍼파라미터 공개. V1-V5 각 단계별 세부 설정 불완전. |
| 평가 세팅 | ⚠️ | TruthfulQA/ToxiGen은 공개 벤치마크로 재현 가능. Human Eval은 내부 평가자(비공개). |
| 종합 등급 | B | 가중치 공개로 추론 재현 가능하나, 학습 데이터 미공개 및 내부 Human Eval로 완전 재현 불가. |
주장별 신뢰도
| # | 주장 | 신뢰도 |
|---|---|---|
| 1 | Llama 2-Chat 70B가 ChatGPT에 근접한 성능 | 🟡 |
| 2 | 34B/70B가 Vicuna/Falcon 대비 75%+ 승률 | 🟡 |
| 3 | Helpfulness RM 94.3% (“significantly better” pairs) | 🟡 |
| 4 | 70B vs 7B TruthfulQA +16.89%p | 🟢 |
| 5 | 반복 RLHF가 safety+helpfulness 동시 향상 | 🟡 |
| 6 | GAtt가 멀티턴 시스템 프롬프트 일관성 유지 | 🔴 (정성 예시만) |
관련 연구 비교 매트릭스
선정 근거: InstructGPT는 Llama 2의 RLHF 파이프라인 직접 기반 연구이며, Vicuna·Alpaca는 SFT-only 대안 패러다임이고, Falcon 40B는 동시기 오픈소스 사전학습 모델 중 직접 경쟁자다.
| 축 | Llama 2 (본 논문, 2023) | InstructGPT (2022, base) | Vicuna (2023, alternative) | Alpaca (2023, alternative) | Falcon 40B (2023, direct) |
|---|---|---|---|---|---|
| 포스트트레이닝 단계 | SFT → Dual-RM RLHF (Rejection Sampling + PPO) | SFT → 단일 RM → PPO | SFT only | SFT only (Self-Instruct) | Pretraining only (Instruct 변형은 SFT) |
| 리워드 모델 설계 | Dual RM (Helpful + Safety) | 단일 RM | 없음 | 없음 | 없음 |
| 멀티턴 처리 | Ghost Attention (GAtt) | ChatML 기반, 별도 처리 없음 | ShareGPT 데이터로 학습 | 단일턴 위주 | 없음 |
| 데이터 공개 | 가중치 O, SFT/선호 데이터 ❌ | 전부 ❌ | 가중치 O, ShareGPT(비공식) | 가중치 O, Self-Instruct 52K ✅ | 가중치 O, RefinedWeb 일부 O |
| 가중치 라이선스 | 공개 (MAU<700M 상업 허용) | ❌ (API only) | LLaMA 제약 상속 (비상업) | LLaMA 제약 + text-davinci-003 ToS | Apache 2.0 (상업 허용) |
| 안전성 파인튜닝 | Safety RM을 Helpful RM과 병렬 운용 | 단일 RM에 harmlessness 혼합 | 없음 | 없음 | 없음 |
| 평가 프로토콜 | 인간 평가 4K prompts + 안전 레드팀 | 인간 평가자 선호도 | GPT-4 as judge (80 Q) | HELM + 소규모 인간 평가 | Open LLM Leaderboard 벤치마크 |
| 코드 공개 | ✅ | ❌ | ✅ | ✅ | ✅ |
주요 독해 포인트: Llama 2의 세 가지 차별점은 (1) Dual RM(상충 목표의 분리 최적화), (2) Ghost Attention(학습 단계에서 멀티턴 시스템 프롬프트 문제 해결), (3) 데이터 비공개의 역설(가중치·코드는 공개하면서 SFT/선호 데이터는 비공개 → Alpaca보다 재현성 제약).
원자적 인사이트 (Zettelkasten)
💡 Dual RM 분리는 상충하는 정렬 목표를 독립적으로 최적화하는 일반 패턴이다
유형: 방법론적 | 출처: Touvron et al., 2023
단일 보상 모델로 유용성과 안전성을 동시에 학습시키면 두 목표가 서로 경쟁하여 어느 쪽도 충분히 최적화되지 않는다. Llama 2는 Helpfulness RM과 Safety RM을 별도로 학습시켜 각 목표에 전문화된 신호를 제공했으며, 이 구조 덕분에 70B 모델이 ChatGPT 대비 약 68% 비패배율을 달성했다. 이 패턴은 Helpful/Safe 조합을 넘어 Helpful/Honest, Creative/Accurate 등 임의의 상충 목표 쌍에 확장 적용 가능하다.
💡 Ghost Attention은 데이터 증강으로 트랜스포머의 위치 감쇠를 우회한다
유형: 방법론적 | 출처: Touvron et al., 2023
트랜스포머는 어텐션 가중치가 거리에 따라 감쇠하므로, 대화가 길어지면 초기 시스템 프롬프트를 사실상 무시하게 된다. Ghost Attention은 학습 데이터 생성 시 시스템 메시지를 모든 유저 턴에 복사해 넣고, 학습 시에는 첫 턴 이전의 어시스턴트 응답 손실을 0으로 처리하여 모델이 페르소나를 20턴 이상 유지하도록 유도한다. 아키텍처 변경 없이 데이터 구성만으로 위치 감쇠 문제를 해결한 점이 실용적 의의.
💡 Rejection Sampling과 PPO의 반복 결합이 단독 RLHF보다 우월한 정렬 품질을 낳는다
유형: 실험적 | 출처: Touvron et al., 2023
Rejection Sampling(K=100 후보 중 RM 최고 점수 선택)으로 SFT 데이터 품질을 높인 뒤 PPO로 미세 조정하는 반복 루프(V1-V5)가 단독 PPO나 단독 Rejection Sampling보다 일관되게 우수한 결과를 냈다. 특히 70B에 K=100 Rejection Sampling을 적용하고 그 출력으로 소형 모델을 증류하는 방식이 소형 모델 직접 훈련보다 효과적이었다. 대형 모델이 생성한 고품질 궤적이 소형 모델 정렬에도 전이됨을 시사한다.
💡 보상 모델의 정확도는 비교 쌍의 품질 차이에 따라 극단적으로 달라진다
유형: 실패-한계 | 출처: Touvron et al., 2023
Llama 2의 Helpfulness RM은 명확히 우수한 쌍에서 94.3% 정확도를 보이지만, 품질 차이가 미미한 쌍에서는 55.3%로 거의 무작위 수준이다. 이는 RM 평균 정확도 수치(70.6%)가 실제 경계선 사례 처리 능력을 과대평가할 수 있음을 의미한다. 정렬 연구에서 RM 성능을 단일 집계 지표로 보고할 때 데이터 분포의 난이도 구성을 함께 공개하지 않으면 재현성이 저하된다.
핵심 용어 정리
| 용어 | 정의 |
|---|---|
| SFT (Supervised Fine-Tuning) | 인간이 작성한 고품질 예시 데이터로 사전학습 모델을 지도학습 방식으로 파인튜닝. Llama 2에서는 27,540개 샘플 사용. |
| RLHF (Reinforcement Learning from Human Feedback) | 인간이 응답 쌍에 선호도를 매기고, 그 신호로 학습한 보상 모델 기반 강화학습을 수행하는 정렬 기법. |
| Reward Model (RM) | 두 응답 중 어느 것이 더 나은지를 예측하도록 학습된 모델. 강화학습에서 스칼라 점수를 제공. |
| Dual RM (이중 보상 모델) | Helpfulness와 Safety를 각각 별도 RM으로 분리 학습하는 구조. 두 목표 간 충돌 방지. |
| Ghost Attention (GAtt) | 멀티턴 대화에서 시스템 메시지를 모든 유저 턴에 복사 삽입하는 데이터 증강 기법. |
| Rejection Sampling | K개 후보 응답을 생성한 뒤 RM이 최고 점수를 부여한 응답만 선택하는 데이터 정제 방법. Llama 2는 K=100. |
| PPO (Proximal Policy Optimization) | 정책 업데이트 크기를 KL 페널티로 제한해 안정화하는 강화학습 알고리즘. |
| GQA (Grouped Query Attention) | 여러 쿼리 헤드가 하나의 키-값 헤드를 공유하는 효율적 어텐션. Llama 2 34B/70B에 적용. |
| Chat Template | 대화 역할을 구분하는 입력 형식. Llama 2: [INST]<<SYS>>...<</SYS>>[/INST]. |
| Safety Context Distillation | Safety prefix로 응답 생성 → prefix 없이 파인튜닝 → 안전 행동을 가중치에 내재화. |
관련 연구
- Training language models to follow instructions with human feedback - InstructGPT — RLHF 기반 정렬의 원형 논문. Llama 2의 Dual RM 파이프라인이 직접 계승·개선한 방법론.
- Falcon - The RefinedWeb Dataset for Falcon LLM — 동시기 오픈소스 경쟁 모델로 Llama 2 human eval 비교 대상.
- Tulu 3 - Pushing Frontiers in Open Language Model Post-Training — Rejection Sampling + PPO 반복 파이프라인을 오픈소스로 재현·확장한 후속 연구.
- Proximal Policy Optimization Algorithms — Llama 2 RLHF 단계의 PPO 알고리즘 원논문.
- Group Relative Policy Optimization(GRPO) — PPO의 경량화 대안으로 후속 포스트트레이닝에 활용.
태그
paper #2023 large-language-model rlhf alignment open-source instruction-tuning safety
BibTeX
@article{touvron2023llama2,
title={Llama 2: Open Foundation and Fine-Tuned Chat Models},
author={Touvron, Hugo and Martin, Louis and Stone, Kevin and Albert, Peter and Almahairi, Amjad and Babaei, Yasmine and Bashlykov, Nikolay and Batra, Soumya and Bhargava, Prajjwal and Bhosale, Shruti and others},
journal={arXiv preprint arXiv:2307.09288},
year={2023},
url={https://arxiv.org/abs/2307.09288},
eprint={2307.09288},
archivePrefix={arXiv}
}