[Transformer 원리] Day 4: 학습과 추론 - 사전학습, 파인튜닝, 디코딩 전략
[Transformer 원리] Day 4: 학습과 추론 - 사전학습, 파인튜닝, 디코딩 전략
이 글은 AI(Claude)의 도움을 받아 작성하고, 작성자가 검토·편집했습니다.
서론: 구조에 지능을 채워 넣기
Day 1~3에서 Transformer의 구조를 조립했다. 하지만 구조만으로는 빈 그릇이다. 수십억 개의 파라미터에 “지능”을 채우는 과정이 학습이고, 학습된 모델이 텍스트를 만드는 과정이 추론이다. 오늘은 사전학습부터 정렬(alignment), 그리고 디코딩 전략까지 — 모델이 어떻게 배우고 어떻게 말하는지를 본다.
1. 사전학습: 다음 토큰 맞히기
LLM의 기본 학습 과제는 놀랍도록 단순하다. “다음 토큰을 맞혀라.”
1
2
3
4
5
6
7
입력: "한국의 수도는"
모델 예측: 다음 토큰 확률 분포 → "서울"(0.8), "부산"(0.05), ...
정답: "서울"
손실(loss): 정답 토큰에 모델이 부여한 확률의 음의 로그
Cross-Entropy Loss = -log(P(정답 토큰))
→ 정답에 높은 확률을 줄수록 손실이 작아짐
1
2
3
4
5
import torch.nn.functional as F
# logits: [시퀀스, 어휘크기], targets: 각 위치의 다음 토큰 ID
loss = F.cross_entropy(logits.view(-1, vocab_size), targets.view(-1))
loss.backward() # 역전파로 모든 파라미터의 기울기 계산
optimizer.step() # 기울기 방향으로 파라미터 갱신
인터넷 규모의 텍스트로 이 과제를 수조 토큰 반복하면, 모델은 문법·사실·추론 패턴을 통째로 흡수한다. 이것이 “사전학습된” 기반 모델(foundation model)이다.
2. 자기지도학습의 힘
1
2
3
4
5
6
7
8
9
왜 강력한가:
- 레이블이 필요 없다 — 텍스트 자체가 정답 (다음 단어가 곧 레이블)
- 따라서 인터넷의 거의 모든 텍스트를 학습 데이터로 사용 가능
- "다음 단어 예측"을 잘하려면 문법·세계지식·논리가 다 필요
→ 단순한 과제가 폭넓은 능력을 강제로 학습시킴
규모의 법칙(Scaling Laws):
모델 크기·데이터·연산을 키우면 성능이 예측 가능하게 향상
→ "더 크게"가 지난 수년 LLM 발전의 핵심 동력
3. 파인튜닝: 기반 모델을 다듬기
사전학습 모델은 “다음 단어”는 잘 맞히지만 지시를 따르거나 대화하진 못한다. 추가 학습으로 다듬는다.
1
2
3
4
5
6
7
8
1. 지도 파인튜닝 (SFT):
"지시-응답" 쌍 데이터로 추가 학습
→ 질문에 답하고 지시를 따르는 형태를 학습
2. 인간 선호 정렬 (RLHF / DPO):
사람이 응답 쌍 중 더 나은 것을 고른 데이터로 학습
→ 유용하고 안전하고 정직한(helpful/harmless/honest) 방향으로 정렬
RLHF: 보상 모델 + 강화학습 / DPO: 더 단순한 직접 선호 최적화
1
2
3
GPT 계열의 전형적 파이프라인:
사전학습(수조 토큰) → SFT(수만 예시) → RLHF/DPO(선호 데이터)
↑ 능력 획득 ↑ 지시 따르기 ↑ 정렬·안전
4. 효율적 파인튜닝: LoRA
전체 파라미터를 다시 학습하는 것은 비싸다. LoRA는 작은 행렬만 학습한다.
1
2
3
4
5
6
전체 파인튜닝: 수십억 파라미터 전부 갱신 → GPU 메모리·비용 막대
LoRA (Low-Rank Adaptation):
원본 가중치는 고정(freeze), 작은 저랭크 행렬 A·B만 추가 학습
W' = W + B·A (A,B는 매우 작음, 원본의 0.1~1%)
✅ 메모리·비용 대폭 절감, 어댑터만 교체해 여러 태스크 전환
5. 추론: 다음 토큰을 어떻게 고를까
학습된 모델은 다음 토큰의 확률 분포(Day 3)를 준다. 거기서 실제 토큰을 고르는 것이 디코딩이다.
1
2
3
4
5
6
7
8
Greedy: 항상 최고 확률 토큰 선택
✅ 결정적, 빠름 ❌ 반복적·단조로운 텍스트
Beam Search: 여러 후보 시퀀스를 동시에 추적해 전체 확률 최대화
✅ 번역 등 정확성 중시 ❌ 다양성 부족, 느림
Sampling: 확률 분포에서 무작위 추출
✅ 다양하고 창의적 ❌ 가끔 엉뚱함 → 아래 파라미터로 조절
6. 샘플링 파라미터: Temperature, Top-k, Top-p
1
2
3
4
5
6
7
8
9
Temperature (T): 확률 분포의 "날카로움" 조절
T < 1: 분포가 뾰족 → 보수적·일관적 (사실 답변)
T > 1: 분포가 평평 → 다양·창의적 (브레인스토밍)
T = 0: greedy와 동일
Top-k: 확률 상위 k개 토큰 중에서만 샘플링 (꼬리 잘라냄)
Top-p (nucleus): 누적 확률 p가 될 때까지의 토큰 중에서 샘플링
→ 상황에 따라 후보 수가 동적으로 변함 (가장 널리 쓰임)
1
2
3
4
5
6
7
8
9
def sample(logits, temperature=0.8, top_p=0.9):
logits = logits / temperature # 1. 온도 조절
probs = softmax(logits)
# 2. 누적 확률 top_p까지만 남기고 나머지 0
sorted_probs, idx = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=-1)
sorted_probs[cumulative > top_p] = 0
# 3. 남은 분포에서 샘플링
return idx[torch.multinomial(sorted_probs, 1)]
실무 감각: 코드·사실 답변은 낮은 temperature(0~0.3), 창작은 높게(0.8~1.0). API의 temperature/top_p 파라미터가 바로 이것이다.
7. Day 4 체크리스트
- 사전학습이 “다음 토큰 예측”이라는 단순 과제임을 이해했다.
- 자기지도학습이 레이블 없이 인터넷 규모 학습을 가능케 함을 안다.
- SFT와 RLHF/DPO로 기반 모델을 지시 따르기·정렬로 다듬는 과정을 파악했다.
- LoRA로 효율적 파인튜닝하는 원리를 이해했다.
- Greedy/Beam/Sampling과 Temperature·Top-p의 효과를 구분했다.
다음 편 예고
원리는 완성됐다. 하지만 거대 모델을 실제로 서빙하려면 속도·메모리 벽에 부딪힌다. 마지막 Day 5(시리즈 마무리)에서는 추론 최적화 — KV 캐시, 양자화, FlashAttention, 그리고 효율적 서빙을 다룬다.
This post is licensed under CC BY 4.0 by the author.