//
베이스 모델을 특정 목적에 맞게 다듬는 두 가지 대표 방식이 있다.
| 종류 | 학습 목표 | 결과물 |
|---|---|---|
| 분류 미세 튜닝 (Classification) | 입력을 정해진 레이블 집합 중 하나로 분류 | 분류기 (스팸 판별, 감성 분석 등) |
| 지시 미세 튜닝 (Instruction) | 자연어 지시를 따라 답변 생성 | ChatGPT 류의 어시스턴트 |
이 장은 분류 미세 튜닝을 다룬다. 사전 훈련된 GPT를 가져와, SMS 메시지를 스팸/비스팸으로 분류하는 모델로 변환하는 것이 목표다.
책에서는 UCI ML Repository의 SMS Spam Collection 데이터셋을 쓴다. 한 줄에 레이블(spam/ham)과 메시지 한 건씩 들어 있는 단순한 형식이다.
ham Ok lar... Joking wif u oni...
spam Free entry in 2 a wkly comp to win FA Cup final tkts...
ham U dun say so early hor... U c already then say...
전처리는 다음 단계로 진행한다.
tiktoken으로 GPT-2 BPE 토큰화 후, 배치 내에서 가장 긴 시퀀스 길이에 맞춰 패딩.PyTorch의 Dataset / DataLoader로 감싸서 학습 루프가 배치를 받아갈 수 있게 한다.
처음부터 학습한 GPT-2는 시간이 너무 오래 걸리므로, OpenAI가 공개한 GPT-2 124M 가중치를 그대로 로드해 시작점으로 삼는다. 이미 영어 텍스트의 통사·의미 구조를 학습한 모델 위에서 분류 작업만 추가로 가르치면 되므로 학습이 훨씬 빠르고 결과도 좋다.
이 발상이 바로 **전이 학습(Transfer Learning)**의 핵심이다.
"큰 데이터로 일반 지식을 학습한 모델은, 작은 데이터로도 특정 작업에 빠르게 적응한다."
원본 GPT-2의 출력층은 (768 → 50,257) 형태로, 어휘사전의 다음 토큰 분포를 출력한다. 분류에는 이 출력이 필요 없다. 출력층을 (768 → 2) 형태의 분류 헤드로 교체한다.
여기에 더해, 모델 전체를 다시 학습할 필요는 없다. 책에서는 마지막 트랜스포머 블록과 최종 층 정규화, 그리고 새 분류 헤드만 학습 가능하도록 풀고, 그 외 가중치는 동결(requires_grad = False)한다. 학습 파라미터 수가 크게 줄어 GPU 메모리와 시간을 절약하면서도 충분한 성능을 낸다.
GPT는 (배치 크기, 시퀀스 길이, 임베딩 차원) 형태의 텐서를 출력한다. 분류는 하나의 라벨을 만들어야 하므로, 시퀀스의 어느 위치를 대표 벡터로 쓸지 골라야 한다.
| 후보 | 특징 |
|---|---|
| 첫 토큰 (BERT 방식) | BERT는 [CLS] 토큰 위치를 분류에 쓴다 |
| 마지막 토큰 (GPT 방식) | 코잘 어텐션이라 마지막 토큰만이 시퀀스 전체를 본 상태 |
| 평균 풀링 | 전 위치 임베딩 평균 |
GPT는 코잘 마스킹 때문에 위치 i가 i+1 이후를 보지 못한다. 따라서 시퀀스의 정보를 모두 담고 있는 위치는 마지막 토큰 하나뿐이다. 책도 이 방식을 사용한다.
분류이므로 손실 함수는 다시 교차 엔트로피다. 차이는 어휘사전 V개 클래스가 아니라 2개 클래스라는 점뿐이다.
loss = F.cross_entropy(logits[:, -1, :], labels)여기서 logits[:, -1, :]이 마지막 토큰 위치의 로짓을 가져오는 인덱싱이다.
정확도는 단순하다. argmax로 예측 라벨을 뽑고, 정답과 비교한 비율을 계산한다.
preds = logits[:, -1, :].argmax(dim=-1)
acc = (preds == labels).float().mean()책의 예제에서 SMS Spam Collection 데이터셋으로 몇 에폭만 돌려도, 검증 정확도가 95%를 넘는 분류기가 만들어진다. 처음부터 학습한 작은 RNN/CNN 분류기와 비교해도 우수한 결과다.
핵심 메시지는 명확하다.
"사전 훈련된 LLM은 작은 데이터로도 강력한 분류기로 변신할 수 있다."
이 장에서 한 일을 한 발 떨어져 보면, 두 가지가 동시에 일어난 것이다.
이 패턴은 LLM 시대 이전부터 컴퓨터 비전 등에서 흔히 쓰이던 전이 학습 + 헤드 교체의 변형이다. 다른 점은 베이스 모델이 어마어마한 규모의 텍스트로 학습된 GPT라는 것뿐이다.
실전에서는 분류 미세 튜닝보다 인코더 모델(BERT 류) 미세 튜닝이 더 자주 쓰인다. 인코더는 양방향 컨텍스트를 보기 때문에 분류 같은 이해 작업에 더 적합하기 때문이다. 그럼에도 책이 GPT(디코더) 분류를 다루는 이유는 동일한 모델을 6장(분류)과 7장(지시 생성) 양쪽에 그대로 쓸 수 있기 때문이다.
6장은 LLM의 두 번째 활용법을 손에 쥐어 준다. 베이스 모델을 분류기로 바꾸는 데 필요한 것은 출력층 교체와 라벨 데이터, 그리고 약간의 학습뿐이다. 다음 장에서는 같은 모델을 출력층은 그대로 둔 채 사용자의 지시에 따라 답변하도록 학습시키는, 더 흥미로운 미세 튜닝을 다룬다.
이 글이 도움이 되셨나요?