본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

전이학습과 파인튜닝 Fine-tuning 종류(feat.Pretraining 사전학습): Full Fine-tuning, Feature Transfer, Instruction Tuning Instruction SFTPEFT, RLHF, DPO, ORPO, RFT

 

 

전이학습은 이미 학습된 모델의 지식을 새로운 문제에 활용하는 모든 방법을 말하며,

Pretraining 사전학습을 거쳐 Pretrained Model을 활용해 학습하는것을 의미한다. 

* Pretraining 처음부터(랜덤 초기화 상태에서) 대규모 데이터로 학습하는 과정

Pretraining Fine-tuning
처음부터 학습 이미 학습된 모델 사용
수조 개 Token 수천~수십만 데이터
비용 매우 큼 비용 적음
수천 GPU 1~8 GPU도 가능
Foundation Model 생성 업무 특화
① Pretraining (사전학습)
      │
      ▼
Pretrained Model
(GPT, Llama, BERT, ResNet ...)
      │
      ▼
② Transfer Learning (전이학습)
      ├── Feature Extraction
      └── Fine-tuning

 

 

 

 

전이학습에는 기존 모델은 그대로 사용하고 마지막 부분만 새로 학습하는 Feature Extraction과 기존 모델 일부 또는 전체를 다시 학습하는 Fine-tuning가 있다.

 

 

 

Fine-tuning은 Pretrained Model의 파라미터를 실제로 업데이트하는 방법으로 Weight가 바뀐다. LLM에서는 Feature Extraction만 사용하는 경우는 상대적으로 적고, LoRA나 QLoRA 같은 PEFT 방식으로 일부 파라미터를 학습하는 것이 일반적이다.

Transfer Learning Fine-tuning
사전학습 모델의 지식을 활용하는 모든 방법 사전학습 모델의 파라미터를 추가 학습하는 방법
더 큰 개념 전이학습의 하위 개념
Feature Extraction도 포함 Feature Extraction은 포함하지 않음
CNN, BERT, ViT, LLM 모두 사용 CNN, BERT, LLM 모두 사용

 

 

 

 

전이학습 ⊃ 파인튜닝

많은 사람들이 둘을 같은 의미처럼 쓰지만, 엄밀히는 범위가 다르다.

Transfer Learning (전이학습)
│
├── Feature Extraction (특징 추출)
│     └── 대부분의 레이어 Freeze
│
└── Fine-tuning (파인튜닝)
      └── 일부 또는 전체 레이어 추가 학습

https://standout.tistory.com/1873

 

파인튜닝(Fine-Tuning): 전이학습시 사전학습된 모델에 새로운 데이터를 추가해 목적에 맞게 다시

파인튜닝(Fine-Tuning)전이학습시 사전학습된 모델에 새로운 데이터를 추가해 목적에 맞게 다시 학습시키는 과정. 일반적인 언어 지식을 의료 법률 금융 등 특정 산업의 전문지식으로 확장할 수 있

standout.tistory.com

https://standout.tistory.com/1813

 

모델이 학습이 덜됬거나 과하게 됬거나: Underfitting (언더피팅), Overfitting (오버피팅)과 해결방법 -

Underfitting (언더피팅)모델이 충분히 학습되지않은 상태,아직 덜 배운상태.모델이 너무 단순하거나 학습이 부족하거나 특징이 부족할 수있다. 학습이 부족해서 발생한 언더피팅 → 더 학습하면

standout.tistory.com

 

 

 

 

법률용 GPT와 같은 특정 도메인 지식, 친절한 AI 상담원과 같은 말투변경, 질문에 JSON으로 답하는 등의 특정 형식 출력, 회사 FAQ를 활용해 회사전용 답변을 하는 정확도향상, 계산기 API호출 함수호출과 같은 Tool 사용학습 등을 위한 목적으로 쓰인다.

Fine-tuning

├── Full Fine-tuning
├── Feature Transfer
├── Instruction Tuning
├── PEFT
├── RLHF
├── DPO
├── ORPO
├── Reinforcement Fine-tuning(RFT)

 

 

 


Full Fine-tuning 모든 Weight를 수정한다. 모든 Parameter가 변경. model.parameters()를 그대로 넘긴다. 

from transformers import AdamW

optimizer = AdamW(model.parameters(), lr=2e-5)

for batch in train_loader:

    outputs = model(
        input_ids=batch["input_ids"],
        attention_mask=batch["attention_mask"],
        labels=batch["labels"]
    )

    loss = outputs.loss

    optimizer.zero_grad()
    loss.backward()      # 모든 Weight의 Gradient 계산
    optimizer.step()     # 모든 Weight 업데이트

 

 


Feature Transfer (Transfer Learning, Feature Extraction) 일부 Layer만 학습한다. 보통 마지막 분류기만 학습한다.

모델을 생성하면 구조가 아래와 같다. model.classifier는 BERT의 마지막 분류기 Classification Head를 의미한다. 

왜 이름이 classifier인가, Hugging Face에서 모델을 만들 때 마지막 분류 레이어의 이름을 classifier 로 지어놓았기 때문이다. 이는 모델마다 이름이 다르며 GPT나 Llama의경우 model.lm_head라하고 ResNet은 model.fc라 하는데 이는 print(model)을 출력해보면 된다. 

논리적으로 classifier는 레이어는 하나지만, 그 안에는 여러 개의 Parameter(weight, bias)가 있기 때문(weight, bias)에 for문을 사용한다. 

model
├── bert
│   ├── embeddings
│   └── encoder
└── classifier
BertForSequenceClassification(
  (bert): BertModel(...)
  (dropout): Dropout(...)
  (classifier): Linear(in_features=768, out_features=2)
)
from transformers import AutoModelForSequenceClassification
from transformers import AdamW

model = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-uncased",
    num_labels=2
)

# ① 모든 Layer Freeze
for param in model.parameters():
    param.requires_grad = False

# ② 마지막 Classifier만 학습
for param in model.classifier.parameters():
    param.requires_grad = True

optimizer = AdamW(
    model.classifier.parameters(),
    lr=2e-4
)

 

 


Instruction Tuning Instruction SFT(Supervised Fine-Tuning 형태 데이터로 학습, 지도학습(Supervised Learning) 방식

ChatGPT도 Instruction Tuning을 거쳤다.  LLM에서 가장 중요한 Finetuning 방식. 

지시문에서 원하는 답변 형태의 데이터로 모델을 추가학습 시키는것.  Pretraning만 한 GPT는 다음 단어를 예측해서 이어쓰는것은 잘하나 요약, json출력, 번역, 코드작성등의 지시를 따르는 능력이 부족함으로 instruction데이터로 다시 학습한다 .

Instruction:
다음을 번역하라.

Input:
Hello

↓

Response:
안녕하세요.
sample = {
    "instruction": "영어를 한국어로 번역해라.",
    "input": "Hello",
    "output": "안녕하세요."
}

prompt = f"""
### Instruction:
{sample['instruction']}

### Input:
{sample['input']}

### Response:
{sample['output']}
"""

from transformers import Trainer

trainer = Trainer(
    model=model,
    train_dataset=train_dataset,
)

trainer.train()

 

 

 

 

 

 

 

PEFT (Parameter Efficient Fine-Tuning) 가장 많이 사용하며 모든 Parameter를 수정하지 않는다. GPU 적게 사용하며 빠르고 성능이 거의 동일하다 .

PEFT

├── LoRA
├── QLoRA
├── Adapter
├── Prefix Tuning
├── Prompt Tuning
├── P-Tuning v2
├── IA3
├── AdaLoRA
├── DoRA
├── OFT
├── Vera

LoRA(Low-Rank Adaptation) 현재 가장 많이 사용한다 Low Rank Matrix만 추가한것. A, B : 새로 학습하는 작은 행렬

QLoRA 4bit 양자화 70B 모델도 단일 고메모리 GPU에서 학습 가능한 수준까지 메모리 요구량을 크게 줄일 수 있다.

Adapter Layer 사이에 작은 Network 추가한다.

Prefix Tuning Prompt 앞에 Virtual Token 추가한다. 모델 전체를 학습하지 않고 일부 파라미터만 학습하는 파인튜닝 방법

Prompt Tuning Prompt Embedding만 학습해 매우 가볍다.

P-Tuning v2 Prompt Tuning 개선판 Deep Prompt 사용한다.

IA3 Attention의 일부 활성화(weight scaling)만 학습한다. '최대한 적은 파라미터만 학습'하려고 만든 연구

AdaLoRA LoRA 개선판, 중요한 Layer에 Rank를 많이 배분하는 자동조절 기능이 있다.

DoRA LoRA 개선판, Weight 방향(Direction)과 크기(Magnitude)를 분리하여 학습해 LoRA보다 성능 향상을 노린다.

OFT Orthogonal Fine-Tuning Weight의 직교(Orthogonal) 특성을 유지하며 업데이트하여 기존 지식을 덜 훼손하도록 설계

VeRA (Vera) Very Efficient Rank Adaptation LoRA보다 학습 파라미터를 더욱 줄이는 최신기법 "LoRA를 더 극단적으로 가볍게

https://standout.tistory.com/1929

 

PEFT (Parameter Efficient Fine-Tuning): LoRA, QLoRA, Adapter, Prefix Tuning, Prompt Tuning, P-Tuning v2, IA3, AdaLoRA, DoRA, OFT

PEFT (Parameter Efficient Fine-Tuning) 가장 많이 사용하며 모든 Parameter를 수정하지 않는다. GPU 적게 사용하며 빠르고 성능이 거의 동일하다 .PEFT├── LoRA├── QLoRA├── Adapter├── Prefix Tuning├─

standout.tistory.com

 

 

 

 

RLHF Reinforcement Learning from Human Feedback 사람의 선호도를 이용한다.

Pretrained LLM은 기본적으로 다음 단어를 잘 예측하는 모델이고 자칫 너무 장황하거나 위험한 답변, 사용자 의도와 다르거나 거짓정보를 생성 가능하니 잘쓰는 모델과 사람이 원하는 모델은 다르다고 인식할 수 있다 Pretraining후 SFT (Supervised Fine-Tuning) 사람이 만든 예시를 학습해 이런 답변이 좋구나~를 배우도록 한다 .이후 사람이 답변 비교를 하고 이 데이터를 이용해 Reward Model 을 만들어 '이 답변을 사람이 좋아할까?' 하고 예측한다. 현재는 RLHF 만 쓰지않고 (gpt 3.5, chatgpt초기버전) DPO를 많이 사용한다. reward Model이 필요하고 PPO가 복잡한 단점을 보완했기 때문이다.

* PPO(Proximal Policy Optimization)는 LLM이 Reward Model에서 높은 보상을 받도록 학습시키는 강화학습 알고리즘으로, 기존 모델을 너무 크게 바꾸지 않으면서 점진적으로 개선하는 방법

# 1. SFT 모델
model = AutoModelForCausalLM.from_pretrained(
    "sft-model"
)


# 2. Reward Model
reward_model = AutoModelForSequenceClassification.from_pretrained(
    "reward-model"
)


# 3. PPO Trainer
ppo_trainer = PPOTrainer(
    model=model,
    reward_model=reward_model
)


# 4. RL 학습

response = model.generate(prompt)

reward = reward_model(
    prompt + response
)

ppo_trainer.step(
    reward
)

 

 

 

 

 

DPO (Direct Preference Optimization) 최근 RLHF를 많이 대체한다.

Reward Model과 강화학습(PPO) 없이, 사람이 선호하는 답변(Chosen)과 선호하지 않는 답변(Rejected)을 직접 비교하여 LLM을 학습하는 방법.

DPO는 Fine-tuning이지만 정확히는 Preference Fine-tuning이며 Input → 정답이 아닌Input → 좋은 답변 vs 나쁜 답변을 생각한다. LoRA와 DPO는 실무에서 같이 사용되며 DPO는 학습 방법이고, LoRA는 파라미터 업데이트 방법이니 경쟁상대가 아니라고 이해해보자.

from transformers import AutoModelForCausalLM
from trl import DPOTrainer, DPOConfig


model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3-8B"
)


training_args = DPOConfig(
    output_dir="./dpo-model",
    learning_rate=5e-7,
    num_train_epochs=3
)


trainer = DPOTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
)


trainer.train()

 

 

 

 

 

 

 

ORPO(Odds Ratio Preference Optimization) DPO 개선판 Preference Loss와 일반 Language Modeling Loss를 동시에 최적화한다.

DPO의 단점을 줄이기 위해 나온 Preference Optimization 방법, 굳이 SFT와 DPO를 따로 하지 말고, 한 번의 학습에서 일반 언어 학습 + 선호 학습을 같이 하자라는 아이디어. SFT 단계에서 좋은 답변 패턴을 학습하고 DPO 단계에서 좋은 답변은 더 선택하고, 나쁜 답변은 덜 선택하게된다. 왜 SFT 하고 나서 DPO를 해야 하지?가 ORPO의 아이디어. 이 둘을 동시에 계산한다. 좋은 답변이 선택될 가능성/나쁜 답변이 선택될 가능성으로 Chosen > Rejected가 되도록 학습한다.

from transformers import AutoModelForCausalLM
from trl import ORPOTrainer, ORPOConfig


model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mistral-7B"
)


training_args = ORPOConfig(
    output_dir="./orpo-model",
    learning_rate=8e-7,
    beta=0.1,
    num_train_epochs=3
)


trainer = ORPOTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
)


trainer.train()

 

 

 

 

 

 

 

 

 

Reinforcement Fine-Tuning (RFT) 최신 추세 중 하나로, 추론(reasoning), 도구 사용, 장기 계획 능력을 강화하기 위해 강화학습을 직접 적용한다. 복잡한 수학, 코딩, 에이전트(agent) 모델에서 활용이 늘고 있다.

RFT는 정답 데이터(답변 예시)를 직접 학습하는 대신, 문제를 잘 해결했을 때 받는 보상(Reward)을 기준으로 LLM의 추론 능력과 행동 전략을 강화학습으로 최적화하는 방법 기존 파인튜닝이 입력 → 정답 따라하기기에 어려운 문제에서 어떻게 풀어야하는지를 배우기가 매우 어렵다. 이때 답을 맞추는 과정 자체를 학습시키자라는 아이디어로 좋은 풀이 패턴 ↑ 나쁜 풀이 패턴 ↓의 효과를 얻게된다 .RLHF의 목표가 사람이 좋아하는 답변이라면 RFT는 문제를 잘 해결하는 능력이 목표로 작업성공이 목표이다. 초기 RLHF는 PPO를 많이 사용했지만 RFT에서는 PPO GRPO Reinforcement Learning with Verifiable Rewards (RLVR)등이 사용된다 .특히 최근 DeepSeek 계열 모델에서 활용된 방식으로 알려져 GRPO (Group Relative Policy Optimization)이 많이 언급된다 . 최근 LLM 경쟁 방향이 예전에는 더 많은 지식이었다면 현재는 더 좋은 추론, 더 긴 계획, Tool 사용, Agent 행동으로 이동해 수학

코드 생성, 과학 문제, Agent 분야에서 RFT가 중요해졌다.

from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import GRPOTrainer, GRPOConfig


# 1. Base LLM
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2.5-7B"
)

tokenizer = AutoTokenizer.from_pretrained(
    "Qwen/Qwen2.5-7B"
)


# 2. 학습 데이터
dataset = [
    {
        "prompt": "2+3은 얼마인가?"
    },
    {
        "prompt": "5*5는 얼마인가?"
    }
]


# 3. Reward Function
def reward_function(completions, **kwargs):

    rewards = []

    for answer in completions:

        # 정답 포함 여부 검사
        if "5" in answer:
            rewards.append(1.0)
        else:
            rewards.append(0.0)

    return rewards



# 4. GRPO 설정
training_args = GRPOConfig(
    output_dir="./rft-model",
    learning_rate=1e-6,
    num_generations=4,
    num_train_epochs=3
)


# 5. Trainer
trainer = GRPOTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset,
    reward_funcs=reward_function
)


# 6. 학습
trainer.train()

 

 

 

 

실무 LLM Fine-tuning 절차

① 목표 정의
   ↓
② 데이터 수집
   ↓
③ 데이터 정제
   ↓
④ Instruction 데이터셋 구축
   ↓
⑤ Train / Validation / Test 분리
   ↓
⑥ Base Model 선택(Llama, Qwen, Gemma 등)
   ↓
⑦ PEFT(주로 LoRA/QLoRA) 적용
   ↓
⑧ 학습(SFT)
   ↓
⑨ 평가(Benchmarks + Human Evaluation)
   ↓
⑩ Alignment(DPO/RLHF 등)
   ↓
⑪ 배포(vLLM, TGI, Ollama 등)
   ↓
⑫ 모니터링 및 지속 개선

 

 

 

 

최신 실무 동향 (2025~2026)

현재 업계에서 많이 채택하는 방향은 다음과 같습니다.

 - LoRA/QLoRA가 사실상의 기본 선택
 -  Full Fine-tuning은 매우 큰 예산이나 연구 목적이 아니면 드물다.

 -  대부분의 기업은 PEFT를 사용한다.RAG + Fine-tuning 조합
 -  Fine-tuning으로 말투·행동을 학습하고, 최신 지식은 RAG에서 공급하는 하이브리드 구조가 일반적이다.
 -  DPO가 RLHF를 상당 부분 대체
 -  Reward Model과 PPO를 별도로 학습할 필요가 없어 파이프라인이 단순하다.
 -  선호 데이터(Chosen/Rejected)만으로 학습 가능하다.
 -  Synthetic Data 활용 증가
 -  GPT-4.x, o3, Claude, Gemini 등의 강력한 모델을 활용해 고품질 학습 데이터를 생성한 뒤 이를 검수하여 사용하는 사례가 많  -  다.
 -  Instruction Tuning + Preference Tuning의 조합
 -  먼저 SFT(Instruction Tuning)로 기본 능력을 학습한 뒤 DPO나 RLHF로 응답 품질과 선호도를 맞춘다.
 -  Long Context와 Agent 능력 강화
 -  도구 사용(Function Calling), MCP, 웹 검색, 코드 실행 등을 포함한 에이전트형 학습과 평가가 중요해지고 있다.
 -  효율적인 추론 환경
 -  배포 시에는 vLLM, TensorRT-LLM, SGLang 등 고성능 추론 엔진을 사용하는 사례가 증가하고 있다.