Fine-Tuning
-사전 훈련된 모델을 특정 작업이나 데이터셋에 맞게 미세 조정하는 과정
파인튜닝 수행 절차
- 사전 훈련된 모델 선택
- 데이터 준비
- 모델 수정
- 추가 학습
1. 데이터 준비
특정 작업에 사용할 데이터 준비
사전 훈련된 모델과 호환되는 형태로 전처리
NLP: 텍스트 토큰화
컴퓨터 비전: 이미지를 적절한 크기로 resize
1) Dataset 만들기: train, val
train, val = train_test_split(data, test_size=0.2, random_state=42)
데이터셋 만들기
from datasets import Dataset
# df로 부터 텐서 데이터셋 만들기
train_ts = Dataset.from_pandas(train)
val_ts = Dataset.from_pandas(val)
2) 토크나이징
토크나이징 결과:
- input_ids: 토큰화 된 입력 시퀀스를 숫자 ID로 변환한 것
- attention_mask: 모델이 패딩 된 부분을 무시하고 실제 유용한 데이터만 집중
def preprocess_function(data):
return tokenizer(data['text'], truncation=True, padding=True)
2. 파인튜닝
사전 훈련된 모델을 특정 작업이나 데이터셋에 맞게 미세조정하는 과정
1) 사전학습 모델 준비
AutoModel: 사전 훈련된 모델의 이름이나 경로 제공 -> 가중치를 자동으로 로드
SquenceClassification: 시퀀스 분류 => 다중 분류
num_labels: output_layer의 노드 수(다중분류 클래스 수)
n = 6
model = AutoModelForSequenceClassification.from_pretrained(model_name,
num_labels = n).to(device)
2) 학습
- TrainingArguments 설정
Hugging face trainer의 학습 세부 설정을 컨트롤
training_args = TrainingArguments(
output_dir = './results',
eval_strategy = "epoch",
save_strategy = "epoch",
learning_rate = 2e-5, # 작은 학습률
per_device_train_batch_size = 32, # 학습 배치 사이즈
per_device_eval_batch_size = 32,
num_train_epochs = 5, # 에폭 수
weight_decay = 0.02, # weight decay
load_best_model_at_end = True, # earlystopping 사용하기 위해 필요
logging_dir ='./logs',
logging_steps = 10,
report_to="tensorboard"
)
- Trainer 설정
모델 학습과 평가를 쉽게 할 수 있도록 도와주는 클래스, API
# Trainer 설정
trainer = Trainer(
model=model, # 학습할 모델
args=training_args, # TrainingArguments
train_dataset = train_ts,
eval_dataset = val_ts,
tokenizer = tokenizer,
callbacks = [EarlyStoppingCallback(early_stopping_patience=3)], # 조기 종료
)
- 모델학습
- 모델평가
eval_results = trainer.evaluate()
print(f"Evaluation results: {eval_results}")
3. 허깅페이스에 모델등록
1) 구글 드라이브에 모델 저장하기
- 구글드라이브에 fine_tuned 폴더 생성
fine_tuned_path = path + 'fine_tuned_model'
model.save_pretrained(fine_tuned_path)
tokenizer.save_pretrained(fine_tuned_path)
2) 허깅페이스에 모델 등록
- API 파일을 Hub에 푸시
- 웹사이트를 통해 파일을 Hub로 업로드(모델 저장소 만들고 파일 업로드)
3) 허깅페이스에 모델 사용
- 모델 다운로드: pipeline 함수를 이용해서 모델을 다운로드
- 모델 사용: 입력(문장), 출력(감정분류 결과)
from transformers import pipeline
emotion_classifier = pipeline(task = 'text-classification', model = '')
emotion_classifier('I am really happy to see you again!')
4. LoRA 기반 파인튜닝
기존에 학습된 내용은 유지하면서 새로운 데이터에만 필요한 변화만 살짝 추가하는 방식
기존 가중치와 다른 차이만 반영
# 기본 설정
model_name = ""
num_labels = 6
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 사전 학습된 모델 로드 (전체 파라미터는 그대로)
base_model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)
lora_config = LoraConfig()
작업 유형: 시퀀스 분류 (SEQ_CLS)
랭크 (r): 8 → 적은 수의 파라미터로 학습
스케일 계수 (lora_alpha): 32 → 학습 효과 조절
드롭아웃 (lora_dropout): 0.1 → 과적합 방지
적용 레이어: q_lin, v_lin → attention 레이어에만 적용
Bias 학습: 하지 않음 ("none")
즉, attention 레이어의 일부만 가볍게 학습하도록 최적화한 효율적인 파인튜닝 구성