5장. Decoder-only LLM과 학습 단계
규모를 키우자 생긴 일: Scaling Law
같은 요리법으로 음식을 만들어도, 재료를 넉넉히 쓰고 불을 오래 쓰면 맛이 깊어지는 요리가 있습니다. GPT-1(2018, 1.17억 개), GPT-2(2019, 15억 개), GPT-3(2020, 1,750억 개)는 모두 같은 Decoder-only 요리법으로, 재료(파라미터와 데이터)와 불(계산량)만 크게 늘린 모델입니다.
그림의 세로축은 로그 눈금입니다. 한 칸 올라갈 때마다 10배입니다. 그래서 GPT-1 막대가 거의 바닥에 붙어 있어도 GPT-3 의 수천 분의 1 이 아니라 약 1,500분의 1 입니다. 화살표의 "약 13배", "약 117배"가 이웃한 세대 사이의 배율입니다.
규모를 키우며 알게 된 세 가지
| 관찰 | 뜻 | 쉽게 말하면 |
|---|---|---|
| Scaling Law(Kaplan 외, 2020) | 모델 크기, 데이터 양, 계산량을 늘리면 손실이 예측 가능한 비율로 꾸준히 줄어든다 | 재료와 불을 늘리면 맛이 꾸준히 좋아진다 |
| In-context Learning | 파인튜닝 없이 프롬프트에 예시 몇 개만 넣어도 새 작업을 한다(few-shot) | 보기 몇 개만 보여 주면 따라 하는 학생 |
| Chinchilla 법칙(Hoffmann 외, 2022) | 같은 계산 예산이면 파라미터 1개당 약 20토큰의 데이터로 학습하는 편이 효율적이다 | 냄비만 키우지 말고 재료도 그만큼 넣기 |
노트북은 최근 소형 모델이 Chinchilla 기준보다 훨씬 많은 토큰으로 학습해, 작은 크기로도 좋은 성능을 낸다고 덧붙입니다. 이 과정의 Qwen2.5-0.5B 가 그런 소형 모델입니다.
짧은 예시
# 노트북의 세 모델 파라미터 수(단위: 억 개)
gpt = {"GPT-1": 1.17, "GPT-2": 15, "GPT-3": 1750}
# 세대가 바뀔 때 몇 배가 되었는지. :.2f = 소수점 둘째 자리
print(f"GPT-1 → GPT-2: {gpt['GPT-2'] / gpt['GPT-1']:.2f}배") # 결과: 12.82배
print(f"GPT-2 → GPT-3: {gpt['GPT-3'] / gpt['GPT-2']:.2f}배") # 결과: 116.67배
print(f"GPT-1 → GPT-3: {gpt['GPT-3'] / gpt['GPT-1']:.0f}배") # 결과: 1496배
# Chinchilla 법칙: 파라미터 1개당 약 20토큰
qwen_params = 494_032_768 # 이 장의 실습에서 세는 Qwen2.5-0.5B 의 파라미터 수
tokens = qwen_params * 20
print(f"Qwen2.5-0.5B 의 Chinchilla 기준 데이터: {tokens:,} 토큰")
# 결과: Qwen2.5-0.5B 의 Chinchilla 기준 데이터: 9,880,655,360 토큰(약 99억)이 코드가 뜻하는 것
요리 재료가 세대마다 몇 배로 늘었는지 나눗셈으로 확인했습니다. 15 ÷ 1.17 ≈ 12.82, 1750 ÷ 15 ≈ 116.67 이고, 둘을 곱하면 약 1,496배입니다. 그림의 "약 13배", "약 117배", 제목의 "약 1,500배"가 이 계산입니다. Chinchilla 기준으로는 0.5B 모델에 약 99억 토큰이면 알맞다는 뜻입니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
gpt['GPT-2'] / gpt['GPT-1'] | 두 세대의 크기 비 | 냄비가 몇 배 커졌나 |
qwen_params * 20 | 파라미터 1개당 20토큰 | 냄비 크기에 맞는 재료 양 |
f"{tokens:,}" | 세 자리마다 쉼표 | 큰 수 읽기 쉽게 |
주의할 점
- Scaling Law 는 "평균 손실이 꾸준히 준다"는 관찰입니다. 특정 작업(예: 우리 회사 말투)을 잘하게 된다는 보장은 아닙니다. 그 부분은 SFT 같은 추가 학습이 맡습니다.
- 큰 모델은 메모리와 비용도 그만큼 큽니다. 이 과정이 0.5B 를 고른 까닭은 10GB 안팎의 GPU 한 장으로 2일차 실습을 모두 돌리기 위해서입니다.