카테고리 없음

mini GPT 공부 6편 - 사전학습, loss, 생성, checkpoint

cedis 2026. 6. 1. 11:30

밑바닥부터 만드는 mini GPT 공부 시리즈 6편

GPTModel이 logits를 만들 수 있게 되면, 이제 학습 루프가 필요하다. 사전학습의 목적은 다음 토큰 예측 loss를 줄이는 것이다.

이때 loss 계산, optimizer update, 검증 loss, 텍스트 생성, checkpoint는 따로 떨어진 기능처럼 보이지만 하나의 학습 루프 안에서 연결된다.

사전학습 루프

batch
-> model(input, targets)
-> cross entropy loss
-> loss.backward()
-> optimizer.step()
-> 주기적으로 validation loss 확인
-> 주기적으로 checkpoint 저장

학습과 생성은 같은 모델을 다르게 쓰는 일이다

구분 입력 출력 사용법
사전학습 input IDs + target IDs 모든 위치의 logits로 loss 계산
생성 지금까지 만든 input IDs 마지막 위치 logits에서 다음 token 선택

1. loss는 다음 토큰 예측이 얼마나 틀렸는지다

모델 출력 logits의 shape는 `(batch_size, seq_len, vocab_size)`다. 각 위치마다 vocabulary 전체에 대한 점수를 낸다. target은 `(batch_size, seq_len)`이고, 각 위치의 정답 token ID를 가진다.

cross entropy 계산 전 shape 변환
logits:  (B, T, V) -> (B*T, V)
targets: (B, T)    -> (B*T)

2. 생성은 마지막 위치의 logits에서 다음 token을 고르는 일이다

텍스트 생성은 학습과 다르게 target이 없다. 현재까지 만든 token ID를 모델에 넣고, 마지막 위치의 logits에서 다음 token을 고른다. 그 token을 뒤에 붙이고 다시 반복한다.

현재 문맥 token IDs
모델 forward
마지막 위치 logits 선택
argmax 또는 sampling으로 다음 token 선택

temperature가 0이면 가장 높은 점수의 token을 고르는 greedy 방식이 된다. temperature가 크면 확률적으로 더 다양한 token을 고를 수 있다. top-k는 후보를 상위 k개로 제한한다.

생성 설정을 읽는 감각
  • `temperature = 0`: 가장 그럴듯한 token만 고른다. 결과는 안정적이지만 반복적일 수 있다.
  • `temperature > 0`: 확률적으로 뽑는다. 다양해지지만 이상한 token도 나올 수 있다.
  • `top_k`: 후보를 줄여 너무 낮은 확률의 token이 뽑히는 일을 막는다.

3. checkpoint는 가중치만 저장하는 것이 아니다

Colab 학습은 끊길 수 있다. 이어서 학습하려면 모델 가중치뿐 아니라 optimizer 상태, epoch, global step도 함께 저장해야 한다.

저장 항목 이유
model state 현재 학습된 가중치 복원
optimizer state Adam 같은 optimizer 내부 상태 복원
epoch / global_step 어디까지 학습했는지 이어가기

loss 로그를 읽을 때 주의할 점

loss가 줄어드는 것은 모델이 다음 토큰 예측을 더 잘하고 있다는 신호다. 하지만 작은 모델과 제한된 데이터에서는 자연스러운 한국어 생성 품질까지 바로 보장하지 않는다. loss와 생성 샘플을 함께 봐야 한다.

4. train loss와 validation loss는 서로 다른 질문이다

train loss는 모델이 학습에 사용한 데이터에 얼마나 맞춰지고 있는지를 본다. validation loss는 학습에 직접 쓰지 않은 데이터에서도 비슷하게 동작하는지를 본다.

둘 다 감소

학습이 정상적으로 진행 중일 가능성이 높다.

train만 감소

훈련 데이터에만 맞춰지는 과적합을 의심한다.

둘 다 정체

모델 크기, 학습률, 데이터, tokenizer 설정을 다시 본다.

스스로 점검

  1. cross entropy 전에 logits와 targets를 왜 펼치는가?
  2. temperature와 top-k는 생성 결과에 어떤 영향을 주는가?
  3. checkpoint에 optimizer state가 필요한 이유는 무엇인가?

다음 글 예고

다음 글에서는 GPT backbone 위에 classification head를 붙여 감성 분류 모델로 바꾸는 fine-tuning 흐름을 본다.

한 줄 정리: 사전학습은 다음 토큰 예측 loss를 줄이는 반복이고, 생성과 checkpoint는 그 학습 상태를 관찰하고 이어가기 위한 도구다.