본문 바로가기
LLM/Training

SFT (Supervised Fine-Tuning)

by AtoN 2023. 7. 26.

SFT (Supervised Fine-Tuning)

사전학습만 끝난 base 모델도 질문과 답변 형태를 학습 데이터에서 본 적이 있기 때문에, 질문을 주면 답변처럼 이어 쓸 수 있습니다. 하지만 사용자의 지시를 일관되게 따르고, 대화의 역할과 원하는 출력 형식을 지키도록 직접 최적화된 것은 아닙니다. 사전학습의 기본 목표는 어디까지나 주어진 문맥에서 다음 토큰을 잘 예측하는 것입니다.

SFT(Supervised Fine-Tuning)는 이 base 모델에 원하는 행동의 예시를 직접 보여주며 지시 수행과 대화 형태를 학습시키는 대표적인 post-training 단계입니다. Instruction과 좋은 response의 쌍, 여러 턴의 대화, tool call 같은 정답 궤적을 주고 모델이 그 출력을 생성하도록 학습합니다.

여기서 자주 생기는 오해가 두 가지입니다. SFT가 단순히 말투와 형식만 바꾸는 과정이라고 보는 것과, 반대로 새로운 지식을 모델 안에 저장하기 위한 전용 방법이라고 보는 것입니다. 실제로 SFT는 형식과 행동뿐 아니라 특정 지식과 능력에도 영향을 줄 수 있지만, 무엇을 얼마나 배우는지는 데이터의 범위와 양, 학습 강도에 따라 달라집니다.

어떤 데이터에 어떤 방식으로 loss를 걸어 모델의 행동을 바꾸는지부터 살펴보고, 데이터의 양보다 품질과 다양성이 왜 중요한지, 그리고 너무 좁은 데이터로 강하게 학습했을 때 기존 능력이나 일반성을 잃을 수 있는 이유까지 봅니다.


1장. base 모델의 한계

사전학습만 끝난 base 모델은 텍스트를 이어쓸 뿐입니다. 파이썬으로 리스트 뒤집는 법을 알려달라고 물으면, 답을 주는 대신 비슷한 질문을 계속 나열하는 식으로 문서를 이어쓰기도 합니다.

SFT는 여기에 질문엔 답을, 요청엔 수행을 하는 대화 형식을 입힙니다. 다양한 지시 데이터로 지시 따르기 자체를 일반화하기 때문에 인스트럭션 튜닝이라고도 부릅니다.

SFT의 주목적은 지시 수행 방식, 출력 형식, 도메인 행동을 학습시키는 것이지만 파라미터가 바뀌므로 사실·도메인 지식도 일부 학습될 수 있습니다. 다만 자주 바뀌는 사실을 안정적으로 저장·갱신하는 수단으로는 관리가 어렵고, 그런 지식은 RAG나 별도 지식 계층이 더 적합한 경우가 많습니다.

형식을 모르는 학생. 비유로 보면 이렇습니다.

아는 건 많지만 시험에서 어떻게 답해야 하는지 모르는 학생
  = base 모델

잘 쓰인 모범 답안 수천 개를 보여주며
"이런 질문엔 이렇게 답하는 거야"를 반복
  = SFT

같은 지식을 시험 형식에 맞게 꺼내 쓰는 학생
  = instruct / chat 모델

핵심은 base 모델이 가진 능력을 원하는 입력-출력 행동으로 유도하는 것입니다. 데이터 품질이 중요한 이유도 이 행동 분포를 직접 보여주는 학습 신호이기 때문입니다.


2장. 동작 원리

전체 흐름입니다.

base 모델 (사전학습 완료)
        │
        ▼
지시 데이터셋           chat template로
{프롬프트, 모범 응답} ──► 역할 토큰 감싸기
                          │
                          ▼
                   loss mask 선택
             completion/assistant 또는 전체
                          │
                          ▼
                 instruct / chat 모델

단계로 쓰면 이렇습니다.

1. 지시 데이터셋 수집   사람이 작성하거나 강한 모델로 합성
2. chat template 적용  역할 토큰 형식에 맞춰 대화를 감싼다
3. loss mask 결정      completion/assistant만 학습할지 전체 시퀀스를 학습할지 선택
4. instruct/chat 또는 도메인 적응 모델 완성

어디에 loss를 거는가. Prompt-completion 데이터에서는 completion 토큰에만 loss를 거는 구성이 흔하고, chat 데이터에서는 assistant message에만 loss를 거는 선택지도 있습니다. 하지만 이것이 SFT의 보편적 정의는 아닙니다. 전체 시퀀스에 language-modeling loss를 걸기도 합니다.

현재 TRL SFTTrainer도 데이터 형태에 따라 동작이 다릅니다. prompt-completion 데이터는 기본적으로 completion-only loss를 쓰지만, 일반 language-modeling 데이터는 전체 시퀀스 loss가 기본이고 assistant_only_loss=True는 별도 옵션입니다. Assistant-only masking은 chat template이 assistant generation 구간을 표시할 수 있어야 하며, TRL 문서는 {% generation %} / {% endgeneration %} marker를 요구한다고 명시합니다.

손실 함수. Completion만 학습하는 경우에는 사전학습과 같은 next-token negative log-likelihood를 응답 구간에 마스킹해 적용합니다.

L_SFT = - Σ  log P( y_t | x, y_<t )
        t=1..|y|

3장. chat template

역할을 구분하는 특수 토큰과 형식은 모델마다 다릅니다. 한 모델은 이렇게 감쌉니다.

<|system|>
너는 친절한 도우미다.
<|user|>
파이썬으로 리스트 뒤집는 법 알려줘.
<|assistant|>
my_list[::-1] 또는 my_list.reverse()를 쓰면 됩니다.

같은 대화라도 다른 모델은 [INST] ... [/INST] 처럼 전혀 다른 마커를 씁니다.

학습 때와 추론 때의 template이 크게 어긋나면 역할 토큰과 generation 시작 위치가 달라져 성능이 흔들릴 수 있습니다. 그래서 보통은 모델이 학습된 형식과 모델 카드가 권장하는 chat template을 따르고, tokenizer.apply_chat_template 같은 함수로 동일한 포맷을 재현합니다. 특정 서비스가 별도 wrapper를 쓰더라도 모델이 기대하는 토큰 형식과의 정합성을 확인해야 합니다.

직접 문자열을 조립하다 이 부분에서 자주 어긋납니다.


4장. 데이터 품질

LIMA는 65B 모델을 정성껏 고른 1,000개의 지시-응답 쌍만으로 SFT해서, 훨씬 큰 데이터로 튜닝한 모델에 견줄 만한 지시 수행을 보였습니다.

여기서 나온 것이 Superficial Alignment 가설입니다. 가설의 요지는 강한 사전학습 모델이 이미 많은 지식과 능력을 가지고 있고, 비교적 적은 정렬 데이터가 그 능력을 어떤 형식과 스타일로 드러낼지 크게 바꿀 수 있다는 것입니다.

LIMA가 보여준 것은 강한 pretrained model에서 매우 정제된 소량 데이터만으로도 alignment behavior를 크게 바꿀 수 있었다는 점입니다. 이를 “항상 1,000개면 충분하다”거나 “양은 중요하지 않다”는 법칙으로 일반화하면 안 됩니다. 과제 범위, 모델 크기, 데이터 다양성에 따라 필요한 양은 달라집니다.


5장. 전체 파인튜닝과 PEFT

모델 전체를 학습하는 대신 일부만 학습해 비용을 줄이는 방법입니다.

방식 학습 대상 특징
Full fine-tuning 모든 가중치 표현 자유도는 크지만 메모리·optimizer state·저장 비용이 큼
LoRA 기존 가중치는 얼리고 작은 저랭크 행렬만 메모리와 저장 급감, 어댑터만 교체 가능
QLoRA 4비트 양자화한 base 위에 LoRA 단일 GPU로도 대형 모델 파인튜닝

LoRA는 원래 가중치를 고정하고 저랭크 업데이트 행렬을 학습합니다. 학습 파라미터와 optimizer state가 크게 줄지만 정확한 절감 배수는 rank와 target module에 따라 달라집니다. 완성된 adapter를 별도로 저장·교체할 수 있다는 운영상의 장점도 있습니다.

catastrophic forgetting. 좁은 SFT 데이터에 과적합하면 모델이 원래 갖고 있던 일반 능력을 잃습니다. 특정 말투의 고객 응대 데이터만 잔뜩 학습시키면 코드 작성이나 수학 같은 다른 능력이 함께 무너질 수 있습니다.

완화책은 셋입니다.

데이터 다양성 확보      한 도메인에 치우치지 않게
낮은 학습률과 소량 에폭   과하게 밀어붙이지 않기
PEFT나 낮은 학습률 활용   업데이트 자유도를 제한할 수 있지만 forgetting이 자동으로 사라지는 것은 아님

6장. 실무

공개 모델 이름에 -Instruct, -Chat 같은 접미사가 붙는 경우가 많지만 이 이름이 어떤 post-training recipe를 거쳤는지 보장하는 표준 규격은 아닙니다. SFT만 했는지, preference optimization이나 RL까지 했는지는 모델 카드와 기술 보고서를 확인해야 합니다.

Hugging Face 생태계에서는 TRL의 SFTTrainer와 PEFT 조합이 널리 쓰이는 경로 중 하나입니다. SFTTrainer는 packing, completion-only loss, assistant-only loss 같은 옵션을 제공하므로 dataset schema와 chat template에 맞춰 설정해야 합니다.

순서는 이렇습니다. 데이터 품질과 다양성을 최우선으로 두고, 학습과 추론의 chat template을 반드시 일치시키며, 자원이 부족하면 LoRA로 단일 GPU 파인튜닝부터 시작합니다.

최근에는 강한 모델로 SFT 데이터를 대량 생성하는 합성 데이터와 증류로 소형 모델을 끌어올리는 방식이 널리 쓰입니다. 그리고 SFT는 대개 선호 정렬의 전 단계로 배치됩니다.


7장. 계보와 정리

시기 발전 핵심
2021 FLAN, T0 인스트럭션 튜닝으로 zero-shot 일반화가 가능함을 보임
2022 InstructGPT SFT와 RLHF로 지시 따르는 모델을 대중화
2021~23 LoRA, QLoRA 저비용 파인튜닝 대중화
2023 LIMA 소량의 고품질 데이터로 강한 정렬 효과를 보이며 Superficial Alignment 가설 제시

SFT는 base 모델을 원하는 지시 수행·대화·도메인 행동으로 적응시키는 대표적인 지도 post-training 단계입니다.

행동과 형식 적응이 중심이지만 파라미터 업데이트를 통해 지식도 일부 변할 수 있습니다. 학습과 추론의 chat template, loss masking, 데이터 품질과 다양성을 함께 맞추는 것이 중요합니다.

LIMA의 소량 고품질 데이터 교훈은 중요한 출발점이지만 필요 데이터량은 과제에 따라 달라집니다. 비용을 줄이는 LoRA/QLoRA와 기존 능력 저하를 감시하는 evaluation을 함께 두는 것이 실무의 핵심입니다.


용어 정리

용어 한 줄 뜻
SFT 지시와 모범 답변 쌍으로 base를 지시 수행 모델로 만드는 지도학습
인스트럭션 튜닝 다양한 지시 데이터로 지시 따르기를 일반화하는 SFT
chat template system, user, assistant 역할을 구분하는 입력 형식
LoRA 작은 저랭크 행렬만 학습하는 파라미터 효율 파인튜닝
QLoRA 4비트 양자화 base 위에 LoRA를 얹은 기법
어댑터 LoRA로 학습된, 따로 저장하고 교체 가능한 작은 가중치
catastrophic forgetting 좁은 파인튜닝으로 기존 일반 능력을 잃는 현상
Superficial Alignment 강한 pretrained model의 지식·능력은 대부분 이미 있고 적은 SFT 데이터가 응답 형식을 선택하게 할 수 있다는 LIMA의 가설
합성 데이터 강한 모델로 생성한 학습 데이터

참고자료

'LLM > Training' 카테고리의 다른 글

LoRA와 QLoRA  (0) 2024.04.17
RLHF (Reinforcement Learning from Human Feedback)  (0) 2023.03.05
LLM 스케일링 법칙 (Kaplan과 Chinchilla)  (0) 2022.10.06

댓글