교내 학회에서 방학동안 논문 리뷰와 함께, 간단한 toy project를 한다.
주제를 고민하던 중, 벨로그 상단에 있던 에겐/테토 개발자 유형 테스트를 만드신 내용을 보고 영감 받았다.
https://velog.io/@wkddudgk4869/출시-하루만에-트래픽-16만-사용자-3000명
나도 큐시즘이나 붙캠에서 종종 작은 서비스를 만들 때, 빠르게 유저들의 반응을 확인해 보고 싶다는 생각을 자주 했어서, 이런 유형 테스트에 관심이 많았다.
그런데 이번 toy project는 AI 학회에서 진행하는 LLM을 주제로 하는 거라, 나는 좀 다른 방향으로 LLM 모델에 에겐/테토 성향을 부여하는 실험을 하고자 했다. 페르소나 실험은 많이 되고 있지만 좀 트렌디함을 반영해보면 재밌을 것 같았다.
개인적으로 페르소나 실험을 해보고 싶었기도 했고!

여튼 그래서 간단히 그 과정을 기록해보려고 한다.
내 벨로그의 목표는 비전문가가 보더라도 이해할 수 있도록 쉽게 풀어 작성해 보는 것이다.
주제가 선정되고, "데이터 수집, 모델 선정, 학습 방법" 등에 대한 고민들을 본격적으로 시작했다.
본격적인 학습 방법론은 그림과 같다.

입력(instruction) → 출력(output) 형태의 지도학습 데이터로
모델이 원하는 스타일(에겐/테토)에 맞춰 반응하도록 QLoRA를 활용한 파인튜닝을 하고, DPO로 SFT로 만든 모델을 선호도 기반으로 재조정한다.
이중에 그래도 규모가 있는 7~9B 모델들, ko-gemma와 ko-Llama을 주로 학습해보기로 했다!
요러한 프로젝트에서 모델을 학습시킨다는 것은,
이미 잘 만들어진 Base 모델에
우리가 원하는 task—(여기서는 에겐/테토 성향에 따른 대화)—를 잘 수행하도록 추가 학습하는 것이다.
Base 모델은 사전학습(pretraining)을 거친 후, 목적에 맞게 파인튜닝(Fine-Tuning) 과정을 거친다.
우리 프로젝트에서는 QLoRA 방식으로 진행하며, 이는 SFT(Supervised Fine-Tuning)에 해당한다.
SFT와 DPO 모두 Base모델을 추가 학습하는 방법론에 해당한다.
둘 다 모델의 가중치를 조정해 성능·스타일을 바꾸지만, 학습 신호와 단계가 다르다.
정답(label)이 있는 데이터로 학습하는 방식
①-1 Instruction Fine-Tuning (IFT, 지시문 기반 SFT)
{
"instruction": "이 문장을 영어로 번역해줘: 오늘 날씨는 맑아",
"input": "",
"output": "The weather is sunny today."
}①-2 기타 SFT (Non-Instruction SFT)
반드시 명령문일 필요 없음
태스크별 입력/정답 쌍으로 학습
예시 1) 번역 task
{
"source": "오늘 날씨는 맑아",
"target": "The weather is sunny today."
}
예시 2) 감성 분류 task
{
"text": "이 영화 너무 재밌다!",
"label": "positive"
}
라벨(정답)이 없고, 문맥 기반 예측하는 방법
더 나은 응답을 만들기 위한 학습 과정
SFT로 기본 능력을 갖춘 모델을 선호도·보상 기준에 맞춰 조정하는 단계
③-1 DPO (Direct Preference Optimization)
같은 프롬프트에 대해 선호(chosen) vs 비선호(rejected) 비교 학습
데이터셋에 이미 “이게 좋다/이건 별로”가 기록돼 있음
⇒ 모델이 주어진 선호도를 기반으로 학습
{
"prompt": "여행 가방 추천해줘",
"chosen": "가볍고 튼튼한 하드케이스를 추천합니다.",
"rejected": "가방은 그냥 사세요."
}
③-2 PPO (Proximal Policy Optimization, RLHF)
RM(Reward Model) 점수를 바탕으로 학습됨
때문에 학습 중에도 RM이 매번 새로 점수를 계산하고, 이것이 학습에 반영됨
⇒ 모델이 선호도를 직접 계산하면서 학습
{
"prompt": "고양이에 대해 시를 써줘",
"response": "하늘빛 눈동자, 부드러운 발걸음..."
}
⇒ SFT와 Preference-Based Fine-Tuning은 모두 파인튜닝 범주지만, 동일 레벨이 아니라 순차 관계로 보는 게 더 적합할 듯하다.
즉, 순서: Pretraining → SFT → DPO/PPO
SFT / DPO 같은 것은 학습 유형(무엇을 어떻게 가르칠지)이고,
QLoRA / LoRA는 학습 기법(어떤 방식으로 파라미터를 조정할지)에 해당한다.
PEFT
기존의 파인튜닝은 모델의 모든 파라미터를 업데이트하지만,
대형 LLM의 경우 연산량·메모리 사용량이 매우 크고 시간도 오래 걸린다.
때문에,
일부 모듈/추가 파라미터만 업데이트하는 방식으로 효율을 높이는 방법들을
PEFT 라고 부른다
- 장점:
- GPU 메모리 절약
- 학습 속도 향상
- 저장 용량 감소 (LoRA 어댑터만 저장 가능)
LoRA, QLoRA는 이러한 PEFT의 대표 기법들에 속한다.
일반적으로 파인튜닝이 모델의 파라미터 전체를 재학습 시킨다면, 그렇게 할 경우 오래 걸리니까, 일부만 해서 효율적으로 하고자 하는 걸 PEFT 기법이라 부르고, 이에 대표적인 방법들이 QloRA/LoRA이다.
nf4 = rmal float 4-bit 사용이러한 이해를 바탕으로 프로젝트 수행 과정에 대한 자세한 설명은 다음 포스팅에 해보겠다! 많관부~